【问题标题】:Access elements from a linked revit model从链接的 Revit 模型访问图元
【发布时间】:2012-01-13 12:01:46
【问题描述】:

我有两个 revit 项目,MainProject.rvt 和 ProjectToLink.rvt。 MainProject.rvt 包含指向 ProjectToLink.rvt 的链接。在 MainProject.rvt 文档中使用下面的代码,我可以访问链接本身:

FilteredElementCollector linkedModelCollector = new FilteredElementCollector(document);
linkedModelCollector.OfCategory(BuiltInCategory.OST_RvtLinks);

foreach (Element linkedModel in linkedModelCollector)
{
   //Do something
}

如何从 MainProject.rvt 访问链接模型 ProjectToLink.rvt 中的元素?我可以像上面的代码那样使用链接元素本身还是有其他机制?

PS - 我需要这个才能为 Revit 2011 工作

【问题讨论】:

    标签: c# revit revit-api


    【解决方案1】:

    在 Revit 2012 中,我使用以下函数:

    public IEnumerable<ExternalFileReference> GetLinkedFileReferences()
            {
                //ElementFilter categoryFilter = new ElementCategoryFilter(BuiltInCategory.OST_RvtLinks);
                //ElementFilter typeFilter = new ElementClassFilter(typeof(Instance));
                //ElementFilter logicalFilter = new LogicalAndFilter(categoryFilter, typeFilter);
    
                var collector = new FilteredElementCollector(_document);
                var linkedElements = collector
                    .OfClass(typeof (RevitLinkType))
                    //.OfCategory(BuiltInCategory.OST_RvtLinks)
                    //.WherePasses(logicalFilter)
                    .Select(x => x.GetExternalFileReference())
                    .ToList();
    
                return linkedElements;                       
            }
    

    public IEnumerable<Document> GetLinkedDocuments()
            {
                var linkedfiles = GetLinkedFileReferences();
                //List<String> linkedFileName = new List<string>(linkedfiles.Count);            
    
                var linkedFileNames = linkedfiles                
                    .Select(x => ModelPathUtils.ConvertModelPathToUserVisiblePath(x.GetAbsolutePath()))                
                    .ToList();
    
                //linkedFileName.AddRange
                //    (from linkedfile in linkedfiles 
                //     select linkedfile.GetTypeId() into typeId 
                //     where typeId != null 
                //     select document.get_Element(typeId).Name);
    
                return _document.Application.Documents
                    .Cast<Document>()
                    .Where(doc => linkedFileNames
                        .Any(fileName => doc.PathName.Equals(fileName)));
            }
    

    第一个获取链接文件的链接(如在您的代码中),第二个获取代表链接文件的文档。因此,当您拥有一个 Document 时,您可以通过 FilteredElementCollector 从中获取任何元素。但请记住,您不能更改链接文件中的元素。

    尝试在 Revit 2011 API 中找到类似的功能。并阅读this article

    【讨论】:

    • 感谢一百万将我链接到文章。我能够使用它来找出从当前文档中导入了哪些文档,然后解析每个文档中的元素。他的博客有很多有用的信息,但通常很难找到我要找的东西。
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2018-07-16
    • 2012-07-10
    • 2019-01-07
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多