Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: asia от 04-11-2020, 10:54:34

Название: Получение FamilyInstance
Отправлено: asia от 04-11-2020, 10:54:34
Добрый день!
Столкнулся с такой проблемой: мне нужно разбить FamilyInstance на компоненты. В классе IExternalCommand делаю так:
Код - C# [Выбрать]
  1. Reference pickedObj = uidoc.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element);
  2. if (pickedObj != null)
  3. {
  4.      ElementId elementId = pickedObj.ElementId;
  5.      Element element = doc.GetElement(elementId);
  6.      familyInstance = element as FamilyInstance;
  7.      ICollection<ElementId> subElementsSet = familyInstance.GetSubComponentIds();
  8. }
Все работает,
но, когда я передаю имя FamilyInstance в другой класс
Код - C# [Выбрать]
  1. public static string FamName;
  2. FamName = familyInstance.Name;
и уже в этом классе пытаюсь получить FamilyInstance, используя имя,
Код - C# [Выбрать]
  1. string getName;
  2. getName = FamilyWeight.FamName;
  3. Element element = new FilteredElementCollector(doc).WhereElementIsNotElementType().ToElements().Where(o => o.Name.Equals(getName)).First();
  4. FamilyInstance fi = element as FamilyInstance;
получаю ошибку System.NullReferenceException, получить FamilyInstance не удается.

Подскажите, пожалуйста, в чем может быть проблема?
Название: Re: Получение FamilyInstance
Отправлено: Александр Игнатович от 05-11-2020, 10:54:36
Совет №1. погуглить немного о поиске в модели Revit, т.е. об использовании FilteredElementCollector.

Ты шерстишь всю модель и пытаешься найти элементы по имени, судя по тому, что ты не получил InvalidOperationException с сообщением "The source sequence is empty.", то найденный элемент у тебя не инстанс семейства, а что-то другое. Отсюда

Совет №2. используй отладчик, ты бы сам увидел проблему.
Название: Re: Получение FamilyInstance
Отправлено: asia от 05-11-2020, 11:16:54
Невнимательно писал :-\ . Спасибо!