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

Статьи => Тестирование статей => Тема начата: Андрей Фазлеев от 11-12-2015, 23:17:10

Название: [Revit API]- Как получить линии из условного обозначения отверстия (продолжение)
Отправлено: Андрей Фазлеев от 11-12-2015, 23:17:10
Всё-таки нашёл решение с получением линий из семейства категории "Типовые аннотации". Как и обещал, пишу продолжение.

Google не помог, в руководстве пользователя тоже ничего не смог обнаружить.
На этот раз выручил сайт revitapisearch.com. Этот сайт - последний рубеж в моих изысканиях.
Если что-то совсем не выходит или нужно окончательно убедиться в том, что невозможно сделать через Revit API - захожу туда, нажимаю на кнопку "Members" и забиваю в поиске на страничке слова по смыслу.

Довольно-таки муторное занятие:
(https://2.bp.blogspot.com/-T-5Onz2wGq8/VmoAli-uxRI/AAAAAAAABgk/ZF4frJVl5ek/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG)
И далее F3, F3, F3 по всей простыне.

На 118-м найденном слове наткнулся на метод:
(https://4.bp.blogspot.com/-kERFYQB06Gs/VmoBWSJ5d3I/AAAAAAAABgs/axnYRZvvFPE/s1600/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG)

Ага, на этот раз охота оказалась удачной.

Строку из предыдущего сообщения
Код - C# [Выбрать]
  1. GeometryElement geometryElement = element.get_Geometry(geomOption);
заменяю на

Код - C# [Выбрать]
  1. FamilyInstance fi = (FamilyInstance)element;
  2. GeometryElement geometryElement = fi.GetOriginalGeometry(geomOption);

Код скомпилировался и даже сработал, но в итоге я получил какую-то козявку в базовой точке проекта:

(https://2.bp.blogspot.com/-bHV9iO9Ff2Y/VmoEe_AFOTI/AAAAAAAABg4/H98U1idl2Ws/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG)
Видимо OriginalGeometry - это описание геометрии внутри семейства.

В объекте типа FamilyInstance есть метод GetTransform().
Смотрю что есть интересного в линии:

(https://2.bp.blogspot.com/-5kgqZ7gCGZU/VmoGsfvZiJI/AAAAAAAABhE/rQMDrh8btP8/s640/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG)

Добавляю строчку с трансформацией линии:

Код - C# [Выбрать]
  1. if (l != null)
  2. {
  3.     l = (Line)l.CreateTransformed(fi.GetTransform());
  4.     lines.Add(l);
  5. }

В итоге получаю список линий, с изменённым положением и отмасштабированных таким же образом, как и семейства аннотаций:

(https://2.bp.blogspot.com/-6kHfi3Iac8o/VmoIMEREpUI/AAAAAAAABhM/rOaXK7NmgCw/s320/%25D0%25A1%25D0%25BD%25D0%25B8%25D0%25BC%25D0%25BE%25D0%25BA.PNG)

Удачи!