Suddenly, ModelDoc2::GetPathName() has decided to alter the path ever so slightly in some code I have written. Everything was working fine when suddenly, my EPDM add-in started exhibiting unexpected behavior. I finally tracked it down to a simple method I wrote to get the ModelDoc2 for an EPDM file that is open in SolidWorks:
///
/// Retrieves the SOLIDWORKS ModelDoc2 object for an EPDM file open in SOLIDWORKS.
/// Open files do not have to be visible in their own window. Any referenced file
/// that is not suppressed or lightweight is an open file
///
/// the EPDM file
///
null, if SOLIDWORKS is not running or the specified document is not open. /// Otherwise, it returns the ModelDoc2 object associated with the file.
public static ModelDoc2 getOpenSolidWorksDocument(IEdmFile11 file)
{
if (!solidworksIsRunning())
{
return null;
}
object openDocs = getSolidWorks().GetDocuments();
if (openDocs == null)
{
return null;
}
foreach (object nextDocObj in (object[])openDocs)
{
ModelDoc2 nextDoc = (ModelDoc2)nextDocObj;
if (nextDoc.GetPathName().Equals(file.GetLocalPath(Utilities.getFileFolder(file).ID)))
{
return nextDoc;
}
}
return null;
}
The method was returning 'null' even though I was certain that the file was open in SOLIDWORKS. I set a breakpoint in the code and then used the Immediate window to see what was going on:
The value returned by nextDoc.GetPathName() was
"C:\\_2016SP0\\Engineering\\Projects\\123456-TES PROJECT\\4. Mechanical WIP\\ASSY RELEASE TESt\\C.SLDASM"
and the value returned by file.GetLocalPath(Utilities.getFileFolder(file).ID) was
"C:\\_2016SP0\\Engineering\\Projects\\123456-TES PROJECT\\4. Mechanical WIP\\ASSY RELEASE TEST\\C.SLDASM"
It took me a couple of minutes to spot the problem. For some reason, GetPathName() decided to change the upper case T to lower case for the ASSY RELEASE TEST folder. This folder is not now, nor has it even been ASSY RELEASE TESt.
The fix is simple. I just change the comparison to this:
(nextDoc.GetPathName().Equals(file.GetLocalPath(Utilities.getFileFolder(file).ID),StringComparison.OrdinalIgnoreCase)
but the mind boggles as to why it would happen in the first place.
SolidworksApi macros