538 подписчиков

Занимательное Dynamo. Перестроение поверхностей для линейных объектов

Технологии
Больше по теме

Небольшая статья-заметка на тему использования функциональных возможностей Civil 3D по созданию поверхностей и добавлению в них данных.

Статья родилась из практической необходимости передавать представление поверхности линейного объекта из иного САПР в Civil 3D так, чтобы поверхности Civil 3D позволяли формировать 3D тела без логических ошибок.

Существуют так называемые, логические ошибки при выдавливании 3D тел между поверхностями в Civil 3D. Они связаны с противоречащей логике программы триангуляцией/самопересечениями/наличием почти вертикальных участков и пр.
Также любая поверхность, переданная в Civil 3D через LandXML потенциально также "ошибочна"

1. Ограничения задачи и методика решения

Задача может быть решена при следующих условиях:

  • иной САПР может передавать данные о поверхностях в виде файла LandXML;
  • в структуре поверхности (передаваемой LandXML) должны присутствовать структурные линии, образующие данную поверхность;
  • в определении поверхности линейного объекта не должно быть каких-либо ручных операций редактирования её представления ( в форме сдвиг узла/ребра триангуляции);
  • допустимые исходные данные для поверхностей - группы точек, структурные 3D-полилинии, границы (также 3D-полилинии);

Методология решения выглядит следующим образом:

  • структура файла LandXML программно меняется: структурные линии из определения поверхности переносятся в группы "Площадок" включая границы (они маркируются соотв. доп-суффиксом); точки переносятся в группы точек также с сохранением привязки к поверхности в виде префикса; структурные линии сохраняем как характерные линии.
  • измененный файл LandXML импортируется в Civil 3D стандартной опцией _AeccLandXMLIn;
  • далее создаются пустые поверхности по именам площадок;
  • и наконец, в сформированные пустые поверхности в порядке очередности (Группы точек -> СЛ -> Границы) вносятся определения.

Примечания: скрипт не учитывает фактор, что одна СЛ может входить в состав нескольких поверхностей. Технически, это можно потом изменить группируя СЛ (ХЛ) по имени поверхности (загоняя в имя и номера поверхностей, и тип (СЛ/граница)).

2. Процесс решения

Действия строятся на логике использования Civil 3D API в части создания поверхностей и добавления в них данных.

Это реализовано за счет пользовательской библиотеки, включенной в состав Dynamo-пакета Civil3d.CustomNodes, отдельного класса - Landxml (версия пакета - 1.0.7).

Интересуемые ноды
Интересуемые ноды

По сути, каждый нод - это отдельная функция-скрипт.

Первый шаг - преобразовать структуру LandXML-файла. Подаем ноду на вход путь к файлу и на выходе получаем измененный файл landxml (с другим именем, в этой же папке)

Шаг 1 - изменение структуры файла
Шаг 1 - изменение структуры файла

Так как разные САПР формируют LandXML немного по-своему, для корректности, необходимо подстраивать ноды под чтение этих LandXML. Я мог бы сделать такое под разные САПР (тот же топоматик Робур, Credo, IndorCAD -- но нужны примеры таких файлов).

Вот результат формирования
Вот результат формирования
Шаг 2 - импортируем файл
Шаг 2 - импортируем файл
Результат импорта - обозначенные Площадки с набором ХЛ
Результат импорта - обозначенные Площадки с набором ХЛ
Шаг 2 - создание поверхностей (пустых) по именам площадок
Шаг 2 - создание поверхностей (пустых) по именам площадок
Результат шага 2
Результат шага 2
Шаг 3
Шаг 3
Вот формируется поверхность
Вот формируется поверхность

3. Вместо заключения

Исходный код к пакету доступен здесь - https://github.com/GeorgGrebenyuk/Civil3D.CustomNodes.

Буду рад примерам LandXML-структур из других САПР.

#autodesk #civil3d #dynamo #dynamo civil 3d #landxml #solids #surface

Не пропускайте публикации, подписывайтесь на Telegram-канал с тизерами статей.