private SldDMComponentItem GetComponentInfo( SwDMComponent9 currentComponent, int level, int parentId) { if (currentComponent == null || level < 0 || parentId <= 0) { return(null); } string fullPath = currentComponent.PathName;; SldDMComponentItem item = SldDMComponentItem.GenerateTheNext(); item.ParentId = parentId; item.Level = level; try { item.FullPath = fullPath; item.FeatureName = currentComponent.Name2; item.FeatureId = currentComponent.GetID(); item.IsSuppressed = currentComponent.IsSuppressed(); item.FileName2D = EngineeringDrawingFile.Get2DFileNameIfExisting(fullPath); item.Visible = !currentComponent.IsHidden(); SwDmDocumentOpenError openResult; SwDMDocument17 doc = currentComponent.GetDocument2(true, this.GlobalSearchOption, out openResult) as SwDMDocument17; if (doc == null || openResult != SwDmDocumentOpenError.swDmDocumentOpenErrorNone) { Debug.WriteLine(string.Format("GetComponentInfo:couldn't open {0},the return value is:{1}", fullPath, openResult.ToString())); return(null); } SwDMConfiguration14 config = doc.ConfigurationManager.GetConfigurationByName(currentComponent.ConfigurationName) as SwDMConfiguration14; if (File.Exists(fullPath)) { item.AllCustomProperties = GetDocumentPropertiesViaDM.RetrievePropertiesUnderConfig( fullPath, config, GetDocumentPropertiesViaDM.PropertyNamesOftenUsed, true); } item.ConfigurationCount = doc.ConfigurationManager.GetConfigurationCount(); item.ChildrenCount = doc.GetComponentCount(); doc.CloseDoc(); Marshal.ReleaseComObject(doc); this.CallbackGettingExtraInfo?.Invoke(ref item); } catch (Exception ex) { Debug.WriteLine(string.Format("GetComponentInfo:when dealing {0}, exception occurred:{1}", fullPath, ex.Message)); } return(item); }
private int GetCurrentComponentInfo( SwDMComponent9 currentComponent, string fullPath, int level, int parentId) { if (currentComponent == null || string.IsNullOrEmpty(fullPath) || level < 0 || parentId <= 0) { return(-1); } SldDMComponentItem item = SldDMComponentItem.GenerateTheNext(); Task task = Task.Factory.StartNew(() => { item.ParentId = parentId; item.Level = level; item.FullPath = fullPath; item.FeatureName = currentComponent.Name2; item.FeatureId = currentComponent.GetID(); item.IsSuppressed = currentComponent.IsSuppressed(); item.FileName2D = EngineeringDrawingFile.Get2DFileNameIfExisting(fullPath); item.Visible = !currentComponent.IsHidden(); try { SwDmDocumentOpenError openResult; SwDMDocument17 doc = currentComponent.GetDocument2(true, this.GlobalSearchOption, out openResult) as SwDMDocument17; if (doc == null || openResult != SwDmDocumentOpenError.swDmDocumentOpenErrorNone) { Debug.WriteLine(string.Format("GetCurrentComponentInfo:couldn't open {0},the return value is :{1}", fullPath, openResult.ToString())); return; } SwDMConfiguration14 config = doc.ConfigurationManager.GetConfigurationByName(currentComponent.ConfigurationName) as SwDMConfiguration14; if (File.Exists(fullPath)) { item.AllCustomProperties = GetDocumentPropertiesViaDM.RetrievePropertiesUnderConfig( fullPath, config, GetDocumentPropertiesViaDM.PropertyNamesOftenUsed, true); } item.ConfigurationCount = doc.ConfigurationManager.GetConfigurationCount(); item.ChildrenCount = doc.GetComponentCount(); this.ResultsAtPopulating.Enqueue(item); doc.CloseDoc(); Marshal.ReleaseComObject(doc); } catch (Exception ex) { Debug.WriteLine(string.Format("GetCurrentComponentInfo:when dealing {0}, exception occurred:{1}", fullPath, ex.Message)); return; } this.CallbackGettingExtraInfo?.Invoke(ref item); Debug.WriteLine(string.Format("GetCurrentComponentInfo:got [{0}] (ID={1})", fullPath, item.Id)); }); string originalExt; SwDmDocumentType docType = SldFileExtentionChecker.CheckDM(fullPath, out originalExt); if (docType == SwDmDocumentType.swDmDocumentAssembly) { this.AllWalkingTasks.Enqueue(new ComponentAndTask_Assembly() { ParentId = parentId, TheTask = task, FullPath = fullPath, Id = item.Id }); } else { this.AllWalkingTasks.Enqueue(new ComponentAndTask_Part() { ParentId = parentId, TheTask = task, FullPath = fullPath, Id = item.Id }); } return(item.Id); }
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); }