0

0

分享

不打开文件的情况下获取文件的参考引用的API

43 1
2025-1-7 13:32:36 天工开发者中心| 显示全部楼层 阅读模式
是否存在一个API,在不打开文件的情况可以获取到他引用到的其它文件。比如,装配体某些文件获取到所有装配的子零部件。


在SolidWorks中,类似的功能为ISldWorks::IGetDocumentDependencies2以及SwDMConfiguration8::GetReferencesInformation2.

评论(1)

您需要登录后才可以回复 登录

本帖最后由 天工开发团队 于 2025-1-7 14:17 编辑

可以用过ProgID启动天工CAD,置Interactive 和Visible属性为Flase。另一种做法是使用DesignManager,你这个情景比较推荐使用DesignManager来达到,下述为C#例程。
  1. TGDesignManager.Application designApp = null;
  2. TGDesignManager.Document doc = null;
  3. TGDesignManager.LinkedDocuments linkedDocs = null;
  4. TGDesignManager.Document linkedDoc = null;
  5. TGDesignManager.PropertySets propertySets = null;
  6. TGDesignManager.Property property = null;

  7. public void GetBomInfoFromDesignMgr()
  8. {
  9.     try
  10.     {
  11.         try
  12.         {
  13.             // 连接到已有的TGDesignManager,此时没有存在的实例会抛出异常
  14.             designApp = (TGDesignManager.Application)Marshal.GetActiveObject("DesignManager.Application");
  15.         }
  16.         catch
  17.         {
  18.             // 打开新的TGDesignManager
  19.             designApp = new TGDesignManager.Application();
  20.             designApp.Visible = 1;
  21.         }
  22.         // 打开想要获取BOM信息的装配文档
  23.         doc = (TGDesignManager.Document)designApp.OpenFileInDesignManager(selectedFilePath);
  24.         if (doc == null)
  25.         {
  26.           System.Windows.MessageBox.Show("文档正在被占用,请关闭文档后重试!");
  27.         }
  28.         linkedDocs = (TGDesignManager.LinkedDocuments)doc.LinkedDocuments[TGDesignManager.LinkTypeConstants.seLinkTypeAll];
  29.         propertySets = designApp.PropertySets as TGDesignManager.PropertySets;
  30.         //遍历装配文档下的子文件
  31.         for (long i = 1; i <= linkedDocs.Count; i++)
  32.         {
  33.           linkedDoc = (TGDesignManager.Document)linkedDocs[i];
  34.           // 获取子部件引用的数量
  35.           int docNumber = linkedDoc.Occurrences;
  36.           string fileName = linkedDoc.FullName;
  37.           propertySets.Open(fileName, true);
  38.           // 获取子部件BOM信息
  39.           TGDesignManager.Properties summaryProperties = (TGDesignManager.Properties)propertySets.Item["SummaryInformation"];
  40.           Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
  41.           // 遍历需要使用int,并且从0开始遍历
  42.           for (int j = 0; j < summaryProperties.Count; j++)
  43.           {
  44.             property = summaryProperties.Item[j] as TGDesignManager.Property;
  45.             string name = property.Name;
  46.             var value = property.Value.ToString();
  47.             keyValuePairs.Add(name, value);
  48.           }

  49.           string bomInfo = DictionaryToString(keyValuePairs);
  50.           // 使用 MessageBox 显示字典内容
  51.           System.Windows.Forms.MessageBox.Show(bomInfo, "Dictionary Content", MessageBoxButtons.OK, MessageBoxIcon.Information);

  52.           // 获取文档自定义属性集 (这里需要改成对应的属性名称)
  53.           TGDesignManager.Properties customProperties = (TGDesignManager.Properties)propertySets.Item["Custom"];
  54.           // 也可以直接使用对应的属性名称索引获取值
  55.           //property = (TGDesignManager.Property)customProperties.Item["精度"];
  56.           //string name_1 = property.Name;
  57.           //string value_1 = property.Value.ToString();

  58.         }
  59.         designApp.Quit();
  60.     }
  61.     catch (Exception ex)
  62.     {
  63.         designApp.Quit();
  64.     }
  65. }
复制代码



客服 意见反馈
返回顶部
快速回复 返回顶部 返回列表