Question

J'ai deux projets Revit, MainProject.rvt et ProjectToLink.rvt.MainProject.rvt contient un lien vers ProjectToLink.rvt.En utilisant le code ci-dessous dans le document MainProject.rvt, je peux accéder au lien lui-même:

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

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

Comment puis-je accéder aux éléments à l'intérieur du modèle lié ProjectToLink.rvt à partir de MainProject.rvt?Puis-je utiliser l'élément de lien lui-même comme dans le code ci-dessus ou existe-t-il un autre mécanisme?

PS - J'en ai besoin pour fonctionner avec Revit 2011

Était-ce utile?

La solution

Dans Revit 2012, j'utilise les fonctions suivantes:

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

et

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

le premier obtient des liens vers des fichiers liés (comme dans votre code), et le second - des documents qui représentent des fichiers liés.Ainsi, lorsque vous avez un document, vous pouvez en obtenir n'importe quel élément via FilteredElementCollector.Mais rappelez-vous que vous ne pouvez pas modifier les éléments des fichiers liés.

Essayez de trouver des fonctions similaires dans l'API Revit 2011.Et lisez cet article

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top