четверг, 3 декабря 2015 г.

[Revit API] - Как получить линии из условного обозначения отверстия

На прошлой неделе Хасан Мамаев задал вопрос:
Я пытаюсь получить геометрию нескольких экземпляров одного плоского семейства таким кодом:
i.GetInstanceGeometry()
но выдаёт ошибку: AttributeError: 'FamilyInstance' object has no attribute 'GetInstanceGeometry'
Объекты, из которых нужно вытянуть линии - условное отображение отверстий:

Сегодня появилось время, пытаюсь разобраться.

Первым делом обращаюсь к документации.
Есть пример с извлечением геометрии из стены, но применить один в один не удалось.

После изысканий разработал такой код:

private List<Line> GetLines(Element element)
{

    List<Line> lines = new List<Line>();

    Autodesk.Revit.DB.Options geomOption = element.Document.Application.Create.NewGeometryOptions();

            if (null != geomOption)
            {
                geomOption.View = element.Document.ActiveView;               
            }

    GeometryElement geometryElement = element.get_Geometry(geomOption);

    foreach (GeometryInstance gi in geometryElement)
    {
        foreach (GeometryObject go in gi.GetInstanceGeometry())
        {
            Line l = go as Line;

            if (l != null)
            {
                lines.Add(l);
            }
        }
    }

    return lines;

}

Этот код заработал для элементов типа Элементы узлов
Для Типовых аннотаций не работает. Если найду решение, то сделаю продолжение.

Удачи!

1 комментарий:

  1. Андрей спасибо за решение моей задачи. Добавлю, что этот код нужен для того чтобы по УГО проемов можно было прорезать в перекрытиях сами проемы

    ОтветитьУдалить