代码之家  ›  专栏  ›  技术社区  ›  KenGey

Autodesk Revit Architecture 2014.NET API C#在链接中查找FamilyInstance的主机

  •  1
  • KenGey  · 技术社区  · 10 年前

    当主机放置在链接文档中时,familyInstance的host属性返回RevitLinkInstance。我有办法获取真实元素(或其ID)而不是RevitLinkInstance吗?

    我希望稳定的REpresentation能给我更多的信息,但不幸的是,它没有。

    Reference hostFaceReference = instance.HostFace;
    string stableRepresentation = hostFaceReference.ConvertToStableRepresentation(instance.Document);
    

    这会给 "ac669fa6-4686-4f47-b1d0-5d7de6a40550-000a6a4a:0:RVTLINK:234297:0:218" 其中234297是被引用元素的ID,在本例中仍然是RevitLinkInstance。

    2 回复  |  直到 10 年前
        1
  •  0
  •   mtumminello    10 年前

    你试过这个吗?

    ElementId hostFaceReferenceId=实例.HostFace.LinkedElementId;

    然后可以尝试通过linkedDocument获取元素。

    文档LinkedDoc=RevitLinkInstance01.GetLinkDocument();

    元素linkedEl=LinkedDoc.GetElement(hostFaceReferenceId);

        2
  •  0
  •   prestonsmith    9 年前

    根据主人的不同,你可能需要采取一些措施。例如,对于墙,可以尝试以下操作(顺便说一下,这是使用LINQ):

    // filter the Host's document's items
    FilteredElementCollector linkdocfec = new FilteredElementCollector(elem_inst.Host.Document);
    
    // establish the host's type
    linkdocfec.OfClass(elem_inst.Host.GetType());
    
    // find the host in the list by comparing the UNIQUEIDS
    Element hostwallinlinkedfile = (from posshost in linkdocfec
                                    where posshost.UniqueId.ToString().Equals(elem_inst.Host.UniqueId.ToString())
                                    select posshost).First();
    
    // check the different faces of the host (wall in this case) and select the exterior one
    Reference linkrefface = HostObjectUtils.GetSideFaces((hostwallinlinkedfile as HostObject), ShellLayerType.Exterior).First<Reference>();
    // create a reference to the linked face in the the CURRENT document (not the linked document)
    Reference linkref = linkrefface.CreateLinkReference(rvtlink_other);
    

    最终,根据文档,您应该使用CreateReferenceInLink方法来获取项目。