通过 API 在 Autodesk Inventor 中获取连接的元素

Posted

技术标签:

【中文标题】通过 API 在 Autodesk Inventor 中获取连接的元素【英文标题】:Get Connected Elements in Autodesk Inventor via API 【发布时间】:2021-10-13 00:41:49 【问题描述】:

我们有 Autodesk Inventor 并创建了一个 C# 插件。

在此我们循环遍历所有对象,如下所示:

 foreach (CurrencyAPIv2.IAssetInstance s in objects)
 
    var c = s.NativeObject as ComponentOccurrence;
 

我们怎样才能得到一个对象的连接对象(捕捉到它的那个)。还有它连接到哪个连接器的信息(捕捉)

【问题讨论】:

你能说得更具体点吗? CurrencyAPIv2.IAssetInstance 不是 Inventor API 的成员 【参考方案1】:

迈克尔·纳瓦拉:

你能说得更具体点吗? CurrencyAPIv2.IAssetInstance 不是 Inventor API 的成员

使用 CurrencyAPIv2 = Autodesk.Factory.PublicAPI.Currency.v2;

【讨论】:

OK :-) 这是来自 Factory Design Utilities API。不是来自 Inventor API。这里有一些信息,但我不熟悉这个对不起help.autodesk.com/view/FDU/2019/ENU/…【参考方案2】:

我们使用 XML 文件解决了这个问题,这些文件也可以在 AttributeHelper 中查看:

        void LoadConnectors(Document document, List<ConnectionElement> connections, List<ConnectedComponent> components)
        
            var am = document.AttributeManager;

            var d = new Dictionary<string, string>();
            var entities = am.FindObjects("*", "*");
            foreach (var e in entities)
            
                try
                
                    dynamic o = e;
                    foreach (AttributeSet attrS in o.AttributeSets)
                    
                        foreach (Inventor.Attribute a in attrS)
                        
                            d.Add(o.Name, a.Value as string);
                        
                    
                
                catch(Exception)
                 
            

            foreach (var element in d)
            
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(element.Value);

                var connectionNodes = xmlDoc.SelectNodes("//ObjectData[@Type='42']");
                var componentNodes = xmlDoc.SelectNodes("//ObjectData[@Type='38']");

                // Verbindungen
                if (connectionNodes.Count > 0)
                
                    var link1Node = xmlDoc.SelectSingleNode("//ObjectData/Link1") as XmlElement;
                    var link2Node = xmlDoc.SelectSingleNode("//ObjectData/Link2") as XmlElement;
                    var connection = new ConnectionElement();
                    connection.Name = element.Key;
                    connection.Link1 = link1Node.GetAttribute("VAL");
                    connection.Link2 = link2Node.GetAttribute("VAL");
                    connections.Add(connection);
                
                // Komponenten
                else if (componentNodes.Count > 0)
                
                    var componentConnectorNodes = xmlDoc.SelectNodes("//ObjectData/Connector");
                    var componentConnectors = new List<ComponentConnector>();
                    foreach (XmlNode cc in componentConnectorNodes)
                    
                        var idNode = cc.SelectSingleNode("Id") as XmlElement;
                        var displayNameNode = cc.SelectSingleNode("DisplayName") as XmlElement;

                        var connector = new ComponentConnector();
                        connector.DisplayName = displayNameNode.GetAttribute("VAL");
                        connector.Id = idNode.GetAttribute("VAL");
                        componentConnectors.Add(connector);
                    
                    
                    if (components.FirstOrDefault(x => x.Name == element.Key) != null)
                    
                        components.FirstOrDefault(x => x.Name == element.Key).Connectors.AddRange(componentConnectors);
                    
                    else
                    
                        var component = new ConnectedComponent();
                        component.Name = element.Key;
                        component.Connectors = new List<ComponentConnector>();
                        component.Connectors.AddRange(componentConnectors);
                        components.Add(component);
                    
                
            
        

【讨论】:

以上是关于通过 API 在 Autodesk Inventor 中获取连接的元素的主要内容,如果未能解决你的问题,请参考以下文章

Autodesk Forge 数据管理 API

如何为 Autodesk Forge API 问题创建照片附件?

Autodesk Forge 模型衍生 API:在 Autodesk Forge 衍生子项中找不到“图形”角色

AutoDesk 视图和数据 API - 返回所选元素的位置

是否有用于访问 Autodesk Drive 的 API?

400 错误:错误请求 AutoDesk Forge Api