0

MainProject.rvt と ProjectToLink.rvt の 2 つの Revit プロジェクトがあります。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 内の要素にアクセスするにはどうすればよいですか? 上記のコードのように link 要素自体を使用できますか、それとも別のメカニズムがありますか?

PS - Revit 2011 で動作するにはこれが必要です

4

1 に答える 1

3

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)));
        }

最初のものは(コードのように)リンクされたファイルへのリンクを取得し、2番目のものはリンクされたファイルを表すドキュメントを取得します。したがって、Document がある場合、FilteredElementCollector を介してそこから任意の要素を取得できます。ただし、リンクされたファイルの要素は変更できないことに注意してください。

Revit 2011 API で同様の関数を探してみてください。そしてこの記事を読んで

于 2011-12-06T02:59:31.977 に答える