protected bool TraverseRecursively(SwDMComponent9 currentComponent, int level, int parentId) { if (currentComponent == null || level <= 0) { return(false); } try { string fullPath = currentComponent.PathName; ComponentAndTask componentAndTask = this.AllWalkingTasks.FirstOrDefault(x => (x is ComponentAndTask_Assembly) && string.Compare(fullPath, ((ComponentAndTask_Assembly)x).FullPath, true) == 0); if (componentAndTask != null) { this.CopyFromPreviousSubAssembly(componentAndTask as ComponentAndTask_Assembly, level, parentId); return(true); } int myId = this.GetCurrentComponentInfo(currentComponent, fullPath, level, parentId); Debug.WriteLine(string.Format("TraverseRecursively:will handle ID={0}:{1}", myId, fullPath)); if (currentComponent.DocumentType == SwDmDocumentType.swDmDocumentAssembly) { List <SwDMComponent9> componentsToTraverseInTasks = new List <SwDMComponent9>(); SwDmDocumentOpenError openResult; SwDMDocument17 doc = currentComponent.GetDocument2(true, this.GlobalSearchOption, out openResult) as SwDMDocument17; if (doc == null || openResult != SwDmDocumentOpenError.swDmDocumentOpenErrorNone) { Debug.WriteLine(string.Format("TraverseRecursively:failed to open{0}, return value is:{1}", fullPath, openResult.ToString())); return(false); } SwDMConfigurationMgr swDMConfigurationMgr = doc.ConfigurationManager; string currentConfigName = currentComponent.ConfigurationName; SwDMConfiguration2 config = swDMConfigurationMgr.GetConfigurationByName(currentConfigName) as SwDMConfiguration2; object[] allComponents = null; try { object componentsRaw = config.GetComponents(); if (componentsRaw != null) { allComponents = (object[])componentsRaw; } } catch (Exception ex) { Debug.WriteLine(string.Format("TraverseRecursively:exception occurred when dealing {0}, exception message:{1}", fullPath, ex.Message)); return(false); } if (allComponents != null) { foreach (object o in allComponents) { SwDMComponent9 subComponent = o as SwDMComponent9; //this.AllComObjects.Enqueue(subComponent); if (subComponent.DocumentType == SwDmDocumentType.swDmDocumentAssembly) { this.TraverseRecursively(subComponent, level + 1, myId); } else { componentsToTraverseInTasks.Add(subComponent); } } } foreach (var v in componentsToTraverseInTasks) { string subComponentPath = v.PathName; ComponentAndTask subComponentAndTask = this.AllWalkingTasks.FirstOrDefault(x => string.Compare(subComponentPath, x.FullPath, true) == 0); if (componentAndTask != null) { this.CopyFromPreviousPart(componentAndTask as ComponentAndTask_Part, level, parentId); return(true); } else { this.GetCurrentComponentInfo(v, subComponentPath, level + 1, myId); } } } } catch (Exception ex) { Trace.WriteLine(string.Format("TraverseRecursively:when getting an item under the parent ID={0} {1}, exception occurred:{2}", parentId, currentComponent.PathName, ex.Message)); } return(true); }
public List <Tuple <string, string, string, object> > GetProperties(string FileName) { SwDMDocument swDoc = default(SwDMDocument); SwDMConfigurationMgr swCfgMgr = default(SwDMConfigurationMgr); // config name // property name // property type // resolved value (boxed object) List <Tuple <string, string, string, object> > lstProps = new List <Tuple <string, string, string, object> >(); // get doc type SwDmDocumentType swDocType = GetTypeFromString(FileName); if (swDocType == SwDmDocumentType.swDmDocumentUnknown) { return(null); } // get the document SwDmDocumentOpenError nRetVal = 0; swDoc = (SwDMDocument)swDocMgr.GetDocument(FileName, swDocType, true, out nRetVal); if (SwDmDocumentOpenError.swDmDocumentOpenErrorNone != nRetVal) { DialogResult dr = MessageBox.Show("Failed to open solidworks file: " + FileName, "Loading SW File", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); } // get document custom properties (file level properties) string[] strDocPropNames = (string[])swDoc.GetCustomPropertyNames(); if (strDocPropNames != null) { foreach (string strPropName in strDocPropNames) { SwDmCustomInfoType nPropType = 0; object oPropValue = swDoc.GetCustomProperty(strPropName, out nPropType); // property type string strPropType = ""; switch (nPropType) { case SwDmCustomInfoType.swDmCustomInfoDate: strPropType = "date"; oPropValue = Convert.ToDateTime(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoNumber: strPropType = "number"; oPropValue = Convert.ToDecimal(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoText: strPropType = "text"; oPropValue = Convert.ToString(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoYesOrNo: strPropType = "yesno"; oPropValue = oPropValue.Equals("Yes"); break; case SwDmCustomInfoType.swDmCustomInfoUnknown: strPropType = ""; break; } // add to list lstProps.Add(Tuple.Create <string, string, string, object>("", strPropName, strPropType, oPropValue)); } } // drawings don't have configurations, so we can return here if (swDocType == SwDmDocumentType.swDmDocumentDrawing) { return(lstProps); } // parts and assemblies have configurations // get a list of configs List <string> lstConfigNames; swCfgMgr = swDoc.ConfigurationManager; lstConfigNames = new List <string>((string[])swCfgMgr.GetConfigurationNames()); // get properties foreach (string strConfigName in lstConfigNames) { SwDMConfiguration swCfg = (SwDMConfiguration)swCfgMgr.GetConfigurationByName(strConfigName); string[] strCfgPropNames = swCfg.GetCustomPropertyNames(); if (strCfgPropNames == null) { continue; } foreach (string strPropName in strCfgPropNames) { SwDmCustomInfoType nPropType = 0; object oPropValue = swCfg.GetCustomProperty(strPropName, out nPropType); // property type string strPropType = ""; switch (nPropType) { case SwDmCustomInfoType.swDmCustomInfoDate: strPropType = "date"; oPropValue = Convert.ToDateTime(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoNumber: strPropType = "number"; oPropValue = Convert.ToDecimal(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoText: strPropType = "text"; oPropValue = Convert.ToString(oPropValue); break; case SwDmCustomInfoType.swDmCustomInfoYesOrNo: strPropType = "yesno"; oPropValue = oPropValue.Equals("Yes"); break; case SwDmCustomInfoType.swDmCustomInfoUnknown: strPropType = ""; break; } // add to list lstProps.Add(Tuple.Create <string, string, string, object>(strConfigName, strPropName, strPropType, oPropValue)); } } swDoc.CloseDoc(); return(lstProps); }
protected bool TraverseCore(string assemblyPath, string configurationName) { if (string.IsNullOrEmpty(assemblyPath)) { return(false); } if (!File.Exists(assemblyPath)) { return(false); } string originalExt; SwDmDocumentType docType = SldFileExtentionChecker.CheckDM(assemblyPath, out originalExt); if (docType != SwDmDocumentType.swDmDocumentAssembly && docType != SwDmDocumentType.swDmDocumentPart) { return(false); } SwDMClassFactory swDMClassFactory = new SwDMClassFactory(); //this.AllComObjects.Enqueue(swDMClassFactory); SwDMApplication swDMApp = swDMClassFactory.GetApplication(GetDocumentPropertiesViaDM.LinktronLicenseKey); this.GlobalSearchOption = swDMApp.GetSearchOptionObject(); //this.AllComObjects.Enqueue(swDMApp); SwDmDocumentOpenError returnValue = 0; SwDMDocument17 swDoc = (SwDMDocument17)swDMApp.GetDocument(assemblyPath, docType, true, out returnValue); if (swDoc == null || returnValue != SwDmDocumentOpenError.swDmDocumentOpenErrorNone) { return(false); } //this.AllComObjects.Enqueue(swDoc); SwDMConfigurationMgr dmConfigMgr = swDoc.ConfigurationManager; //this.AllComObjects.Enqueue(dmConfigMgr); string[] configurationNames = (string[])dmConfigMgr.GetConfigurationNames(); if (configurationNames == null || configurationNames.Length <= 0) { return(false); } string configNameToOpen = null; if (string.IsNullOrEmpty(configurationName)) { configNameToOpen = dmConfigMgr.GetActiveConfigurationName(); } else { configNameToOpen = configurationName; } SwDMConfiguration14 activeCfg = (SwDMConfiguration14)dmConfigMgr.GetConfigurationByName(configNameToOpen); if (activeCfg == null) { return(false); } //this.AllComObjects.Enqueue(activeCfg); int topId = this.GetTopDocumentInfo(assemblyPath, swDoc, activeCfg); if (topId <= 0) { return(false); } if (docType == SwDmDocumentType.swDmDocumentAssembly) { try { object[] allComponents = activeCfg.GetComponents(); if (allComponents != null) { foreach (object o in allComponents) { SwDMComponent9 subComponent = o as SwDMComponent9; this.TraverseRecursively(subComponent, 1, topId); } } } catch (Exception ex) { Trace.WriteLine(string.Format("TraverseCore:exception:{0}", ex.Message)); } } return(true); }