当主机放置在链接文档中时,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。
答案 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方法来获取您的项目。