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

时间:2014-08-11 08:14:00

标签: c# revit revit-api

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

我希望稳定的代表可以给我更多的信息,但不幸的是,它没有。

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 个答案:

答案 0 :(得分:0)

你试过这个吗?

ElementId hostFaceReferenceId = instance.HostFace.LinkedElementId;

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

Document LinkedDoc = RevitLinkInstance01.GetLinkDocument();

Element linkedEl = LinkedDoc.GetElement(hostFaceReferenceId);

答案 1 :(得分:0)

根据主持人的不同,您可能需要从几个方面进行操作。例如,使用墙可以尝试以下(顺便使用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方法来获取您的项目。