public bool ConfigPropertyExists(string AttributeName, SwDMConfiguration14 swCfg, bool CheckDocument = false)
 {
     bool Res = GetAllConfigPropertiesNames(swCfg).Contains(AttributeName.ToUpper());
     if (!Res && CheckDocument)
     {
         Res = this.DocumentPropertyExists(AttributeName);
     }
     return Res;
 }
        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);
        }
 public string ConfigPropertyRawValue(string AttributeName, SwDMConfiguration14 swCfg)
 {
     if (ConfigPropertyExists(AttributeName, swCfg))
     {
         SwDmCustomInfoType Type = default(SwDmCustomInfoType);
         return swCfg.GetCustomProperty2(AttributeName, out Type);
         //  Return swCfg.GetCustomPropertyValues(AttributeName, Type, "")
     }
     else if (this.DocumentPropertyExists(AttributeName))
     {
         return this.DocumentPropertyEvalValue(AttributeName);
     }
     return "";
 }
 public bool ConfigDeleteProperty(string AttributeName, SwDMConfiguration14 swCfg)
 {
     try
     {
         if (ConfigPropertyExists(AttributeName, swCfg))
         {
             return swCfg.DeleteCustomProperty(AttributeName);
         }
         return false;
     }
     catch
     {
         return false;
     }
 }
        private int GetTopDocumentInfo(
            string fullPath,
            SwDMDocument17 currentDocument,
            SwDMConfiguration14 currentConfig)
        {
            if (string.IsNullOrEmpty(fullPath) || currentDocument == null || currentConfig == null)
            {
                return(-1);
            }
            SldDMComponentItem root = SldDMComponentItem.GenerateTheRoot();
            Task task = Task.Factory.StartNew(() =>
            {
                root.FullPath           = fullPath;
                root.FeatureName        = currentDocument.Title;
                root.ConfigurationCount = currentDocument.GetComponentCount();
                object[] subComponents  = currentConfig.GetComponents();
                root.ChildrenCount      = subComponents == null ? 0 : subComponents.Length;
                if (File.Exists(fullPath))
                {
                    root.AllCustomProperties = GetDocumentPropertiesViaDM.RetrievePropertiesUnderConfig(
                        fullPath,
                        currentConfig,
                        GetDocumentPropertiesViaDM.PropertyNamesOftenUsed,
                        true);
                }
                this.ResultsAtPopulating.Enqueue(root);
                this.CallbackGettingExtraInfo?.Invoke(ref root);
                Debug.WriteLine(string.Format("GetTopDocumentInfo:got [{0}]", fullPath));
            });

            this.AllWalkingTasks.Enqueue(new ComponentAndTask_Assembly()
            {
                ParentId = -1,
                TheTask  = task,
                FullPath = fullPath,
                Id       = root.Id
            });
            return(root.Id);
        }
 private static double massInKg(SwDMConfiguration14 swCfg)
 {
     SwDmMassPropError nError;
     if (swCfg != null)
     {
         try
         {
             double[] massArray = swCfg.GetMassProperties(out nError);
             if (nError == SwDmMassPropError.swDmMassPropErrorNone)
             {
                 return massArray[5]; //this results in the mass in kg
             }
             else if (nError == SwDmMassPropError.swDmMassPropErrorNoData)
             {
                 return -2;
             }
         }
         catch { }
     }
     return -1;
 }
 private Double handleMassProperty(SwDMConfiguration14 swCfg)
 {
     double massKg = massInKg(swCfg);
     if (massKg > 0)
     {
         return massKg * 2.20462262; // convert mass from kg to lb
     }
     return massKg;
 }
 private Boolean clearProperty(Array names, SwDMConfiguration14 cfg)
 {
     Boolean result = false;
     if (names != null && names.Length > 0)
     {
         foreach (String name in names)
         {
             if (cfg == null)
             {
                 if (doc.DeleteCustomProperty(name))
                     result = true;
             }
             else if (cfg.DeleteCustomProperty(name))
             {
                 result = true;
             }
         }
     }
     return result;
 }
        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 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);
        }
 public SwDmCustomInfoType ConfigPropertyType(string attributeName, SwDMConfiguration14 swCfg)
 {
     SwDmCustomInfoType Type = default(SwDmCustomInfoType);
     //SwDmCustomInfoType = SwDmCustomInfoType.swDmCustomInfoUnknown
     if (ConfigPropertyExists(attributeName, swCfg))
     {
         swCfg.GetCustomProperty2(attributeName,out Type);
     }
     else if (this.DocumentPropertyExists(attributeName))
     {
         return this.DocumentPropertyType(attributeName);
     }
     return Type;
 }
 public bool ConfigAddProperty(string AttributeName, SwDmCustomInfoType Type, string Value, SwDMConfiguration14 swCfg)
 {
     ConfigDeleteProperty(AttributeName, swCfg);
     return swCfg.AddCustomProperty(AttributeName, Type, Value);
 }
 public List<string> GetAllPropertiesNames(SwDMConfiguration14 swCfg)
 {
     List<string> Names = new List<string>();
     foreach (string name in swCfg.GetCustomPropertyNames())
     {
         Names.Add(name.ToUpper());
     }
     foreach (string name in Doc.GetCustomPropertyNames())
     {
         if (!Names.Contains(name))
         {
             _Names.Add(name.ToUpper());
         }
     }
     return Names;
 }
 public List<string> GetAllConfigPropertiesNames(SwDMConfiguration14 swCfg)
 {
     List<string> Names = new List<string>();
     if (swCfg.GetCustomPropertyCount() != 0)
     {
         foreach (string name in swCfg.GetCustomPropertyNames())
         {
             Names.Add(name.ToUpper());
         }
     }
     return Names;
 }
 public void ConfigSetProperty(string AttributeName, string Value, SwDMConfiguration14 swCfg)
 {
     swCfg.SetCustomProperty(AttributeName, Value);
 }