isicad.ru :: портал САПР, PLM и ERP :: версия для печати

Статьи

26 сентября 2013

Доклад «Автоматизация создания геометрии в AutoCAD/DXF с помощью Python» на Autodesk University 2013

isicad изучает программу Autodesk University Россия 2013

Александр Бауск

От главного редактора isicad.ru: Обозревая программу начинающегося на днях Autodesk University Россия 2013, я не мог пройти мимо доклада А.Бауска — одного из самых заметных авторов портала isicad.ru. Хронологически расположенный список isicad-публикаций Александра демонстрирует эволюцию от аналитической критики с позиций концептуального моделирования на территории рыночного BIM к сосредоточенности на самой интересующей автора концепции и от нее к жанру новой статьи «а покажу-ка практически, как работает концепция, не отягощенная сегодняшней конъюнктурой рынка»:
Видите, последний из приведенных заголовков отражает прагматичное методологическое соображение: сегодняшняя стадия понимания и развития BIM на реальном рынке может плохо сочетаться с достаточно строгим пониманием концепции моделирования, однако, это вовсе не говорит о некоем конфликте и уж точно не должно тормозить опережающие или параллельные эксперименты по релевантному моделированию. Впрочем, примем во внимание самые последние слова публикуемой сегодня статьи А.Бауска о том, что, в случае успешного развития описанных в статье работ, «...планируется как минимум частичная поддержка технологии BIM и стандарта IFC».

Обращаю внимание некоторых читателей на то, что для оценки любого текста (в частности, для правильной интерпретации жанра и, значит, для выбора правильного угла зрения при чтении) полезно иметь некоторое представление о личности автора, об его образовании, основной работе и т.д. В данном случае, рекомендую посмотреть интервью «Александр Бауск: Не будем ломать стулья, говоря о BIM».

Александр Бауск Некоторые читатели IsiCAD наверняка знают, что я большой поклонник пользовательской автоматизации в САПР. Не было такого обсуждения в САПР и моделировании, в которое я не пытался бы ввернуть эту тему. Вот и сейчас на Autodesk University я решил не трогать тему информационного моделирования и модель-ориентированной инженерии, а поработать над инструментом, реализующим некоторые принципы эффективного моделирования. В докладе «Автоматизация создания геометрии в AutoCAD/DXF с помощью Python» я расскажу вам историю одной технологии. Это технология обработки инженерной информации для расчетов, в рамках которой я попытался применить принципы модель-ориентированной инженерии. Надеюсь, что представленные здесь первые результаты этого проекта будут интересны читателю IsiCAD.

Доклад на Autodesk University будет интересно посетить профессионалам, работающим в области анализа конструкций, и вообще всем, кого интересует автоматизация обработки инженерных моделей с геометрическими данными. Помимо специалистов, интересное для себя найдут САПР-эксперты и технологические евангелисты — потому что из доклада будет что почерпнуть с точки зрения подхода к пользовательской автоматизации.

Введение на примере прикладной задачи

Однажды мне понадобилось взяться за построение одной расчетной модели. Постоянные читатели наверняка уже догадались, что это была за модель: железобетонная оболочка разнообразной кривизны с предварительно напрягаемыми канатами внутри.
AU-Bausk-1

Рис. 1. Проблема моделирования: получение геометрии модели

Давайте посмотрим на логику изготовления такой расчетной модели. Важно знать такие предпосылки к моделированию:

1) главным требованием к реализации модели очень часто является использование конкретного ПО из области CAE (инженерного анализа);
2) информационное наполнение модели (исходные данные) можно грубо разделить на геометрические данные и другую инженерную информацию; причем инженерная информация ассоциирована (привязана) к геометрии.

Начнем с геометрии. В сложных моделях, будь то модели конструкций или механизмов, геометрия может быть нетривиальной. Так получилось и в нашем случае. Мало того, что у модели есть области двойной кривизны, нам требуется ещё и учесть систему предварительного напряжения, которая представляет из себя стальные канаты, проложенные по сложным геликоидальным траекториям в толще бетона по пластиковым каналам, позволяющим канатам свободно двигаться:

AU-Bausk-2

Рис. 2. Модель (красным показана система канатов внутри бетона) и цилиндрическая развертка её стенки

Есть два способа получить требуемую геометрию: через CAD-инструменты выбранного нами ПО или через использование других программ. К «другим программам» относятся пакеты BIM (информационного моделирования зданий) общего назначения, различные специализированные пакеты инженерного анализа и графические программы. Естественно, необходима поддержка качественного экспорта полученных модельных данных, чтобы иметь возможность использовать их в нашем избранном пакете CAE.

Я выбрал третий вариант исходя из принципа о том, что следует использовать самый подходящий специализированный инструмент из возможных, а не самый многофункциональный. Следование этому принципу позволяет не терять в производительности при переходе на модель-ориентированные рабочие процессы, такие, например, как информационное моделирование, а также позволяет экономить рабочее время персонала, который может использовать знакомые продукты и приёмы работы.

И вот здесь начинается интересное. На рисунке 2 не зря изображена развертка модели: хорошо видно, что при смене точки зрения на модель (а точнее, при смене пространства моделирования) построения перестают быть трудоёмкими на грани невозможного. При такой точке зрения значительная часть геометрии может быть построена в виде плоских разверток:

AU-Bausk-3

Рис. 3. Плоские развертки конструкций

Развертки, изображенные на рисунке, выполнены в обычном AutoCAD при помощи стандартных примитивов. С ними очень легко работать даже неопытному оператору, но они построены в параметрическом пространстве и являются абстракцией от настоящей конструкции, своего рода «моделью внутри модели». Это означает, что обычным экспортом-импортом примитивов (это умеет делать большинство расчетных программ) тут не обойтись. Нам нужен инструмент для их обработки и превращения в настоящую модель: модельный процессор.

Построение такого модельного процессора — это несколько нетипичная задача, относящаяся к области пользовательского программирования. Существуют похожие по смыслу решения из области процедурного генерирования форм для архитектуры, в том числе разрабатываемые в Autodesk (см. рис. 4).

AU-Bausk-4

Рис. 4. Существующие процессоры геометрии

Нам эти решения не подходят уже по одной простой причине (помимо целого ряда других): вместе с геометрией нам нужно обрабатывать и массу неграфической информации (см. рис. 5).
AU-Bausk-5

Рис. 5. Не ясно, что делать с обработкой связанных с геометрией неграфических данных

Забегая вперёд, скажу, что среди этих данных есть и довольно сложные, процедурные отношения между элементами модели, которые можно обозначить термином «правила»: правила слияния близлежащих узлов, правила поворота узлов для моделирования инженерных эффектов (таких, как проскальзывание канатов) и т.д.

Планирование процессора инженерных данных

Итак, необходимо создать собственный продукт под эту задачу. В качестве рабочего языка я выбрал Python по ряду причин (рис. 6). Подробно на них останавливаться не стоит (в докладе будут приведены доводы и «за», и «против» решения использовать этот язык), а правильность этого решения можно будет оценить по итоговой производительности работы.
AU-Bausk-6

Рис. 6. Преимущества Python как языка для пользовательского программирования

На рис. 7 показана итоговая схема работы проектируемого процессора расчетной модели.
AU-Bausk-7

Рис. 7. Рабочий процесс с учетом инженерных данных

Что добавилось в нашей модели обработки данных? Добавилась ветка «Инженерные данные» на входе в процессор и возможность передавать модель в разные форматы (для этого нам понадобится строить в модельном процессоре «общую» информационную модель, не привязанную к конкретной программе инженерного анализа). В схеме осталось только одно неизвестное: метод формализации инженерных данных.

Создание предметного языка моделирования

Итак, осталось решить самую важную проблему: в какой форме следует представить инженерные данные о модели?

Существуют разные варианты формализации инженерных данных (например, можно строить объектные модели в рамках технологии BIM, можно использовать возможности CAD по обогащению примитивов метаданными). Универсальный ответ, на мой взгляд, основан на том же принципе, по которому CAD был выбран для подготовки графических данных. Если геометрические данные мы представляем в виде графики, то негеометрические данные мы должны представить в виде текста. А именно, следует использовать такое понятие, как DSL (Domain-Specific Language), предметно-ориентированный язык. DSL — это ограниченный в возможностях язык программирования или моделирования, спроектированный специально под конкретную предметную область и потенциально используемый непрограммистами. (Подробнее о предметных языках можно почитать на Википедии.)

На рис. 8 перечислены основные преимущества использования DSL. Их можно обобщить так: поскольку любая инженерная модель — лингвистическая (см. статью «Введение в модельную парадигму»), то для её формализации желателен язык. Именно таким языком формализации модели и должна стать реализация DSL для нашего процессора.

AU-Bausk-8

Рис. 8. Аргументы в пользу использования DSL

На рис. 9 показано, как модельный процессор управляется на разных стадиях работы DSL-сценарием. DSL-сценарий работает здесь, во-первых, средством фиксации инженерной информации о модели, во-вторых, средством изложения процесса построения и сборки модели из геометрических исходных данных, и в-третьих, средством связывания инженерных данных и геометрии.
AU-Bausk-9

Рис. 9. Логика модельного процессора, управляемого DSL

На рис. 10 показан пример такого предметного языка. Он имеет блочную структуру, где каждый фрагмент («фильтр») добавляет новые примитивы в структуру данных для будущей расчетной модели.
AU-Bausk-10

Рис. 10. Детали реализации DSL

Некоторые результаты разработки модельного процессора

На рис. 11 изображен результат обработки примитивов, моделирующих купол: из плоской абстракции мы получаем сложную криволинейную структуру композитного материала.
AU-Bausk-11

Рис. 11. Обработка модельных абстракций

А благодаря широчайшим возможностям внедрения сторонних библиотек в нашем процессоре можно использовать библиотеки gmsh и tetgen в качестве триангулятора и сеточного процессора. На докладе будет продемонстрировано, как пять строк DSL-сценария превращают AutoCAD в полноценный сеточный процессор для CAE.
AU-Bausk-12

Рис. 12. Реализация сеточного процессора на примере стилизованного логотипа Python

Далее, сборка модели из разных источников (рис. 13) учитывает правила совпадения узлов, для которых в DSL-сценарии можно, например, задать погрешности. На рисунке показана сборка купола показанной в начале модели и использование сеточного процессора для моделирования узлов сопряжения.
AU-Bausk-13

Рис. 13. Слияние данных из разных источников (фильтров) для получения общей модели

Наконец, продемонстрируем выполнение одной из целей проекта — это связывание инженерных данных с геометрией без необходимости заниматься программированием.
AU-Bausk-14

Рис. 14. Процессор позволяет учитывать подробную инженерную информацию

Чтобы продемонстрировать процедурную мощь полученного процессора, достаточно сказать, что он уже сейчас позволяет моделировать такие сложные феномены, как проскальзывание каната произвольной конфигурации вдоль его траектории (рис. 15). Таким образом, научить коллегу правильной реализации некоторого инженерного феномена можно, попросту передав ему фрагмент DSL-сценария. Возможности совершенствования этого пути инженерной коллаборации мне кажутся впечатляющими.
AU-Bausk-15

Рис. 15. Обработка сложных правил и отношений

Выводы и оценка принесенной пользы

Выводы из проекта (рис. 16) можно будет обсудить на самом докладе.
AU-Bausk-16

Рис. 16. Выводы

Читателя же могут заинтересовать некоторые цифры, касающиеся производительности работы и целесообразности такого нестандартного решения проблем управления инженерной информацией, как использование низкоуровневого CAD и не вполне предназначенного для работы с этим CAD языка программирования:
  • реализация показанных в докладе функций заняла около 1 человеко-месяца;
  • время освоения не умеющими программировать интернами разработанного процессора и предметного языка составило 2-3 дня;
  • когда глубоко в процессе разработки понадобилось добавить совершенно не запланированную и затрагивающую большую часть внутренней логики функцию интерактивной работы (то есть исполнение процессора прямо из графической среды AutoCAD), её проектирование заняло не больше недели, а ожидаемая реализация займет ещё неделю.
Дальнейшее развитие проекта предусматривает усовершенствование уже упомянутого интерактивного режима и реализацию автоматического создания модельных сценариев. Если это будет осуществимо, то планируется как минимум частичная поддержка технологии BIM и стандарта IFC.

Все права защищены. © 2004-2024 Группа компаний «ЛЕДАС»

Перепечатка материалов сайта допускается с согласия редакции, ссылка на isicad.ru обязательна.
Вы можете обратиться к нам по адресу info@isicad.ru.