Доступ к элементам из связанной модели Revit - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть два проекта 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
}

Как получить доступ к элементам внутри связанной модели ProjectToLink.rvt из MainProject.rvt?Могу ли я использовать сам элемент ссылки, как в приведенном выше коде, или есть другой механизм?

PS - мне это нужно для работы в Revit 2011

1 Ответ

2 голосов
/ 06 декабря 2011

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

первый получает ссылки на связанные файлы (как в вашем коде), а второй - документы, представляющие связанные файлы. Таким образом, когда у вас есть документ, вы можете получить любой элемент из него через FilteredElementCollector. Но помните, что вы не можете изменять элементы в связанных файлах.

Попробуйте найти похожие функции в Revit 2011 API. И прочитайте эту статью

...