Небольшая статья-заметка на тему использования функциональных возможностей 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 (с другим именем, в этой же папке)
Так как разные САПР формируют LandXML немного по-своему, для корректности, необходимо подстраивать ноды под чтение этих LandXML. Я мог бы сделать такое под разные САПР (тот же топоматик Робур, Credo, IndorCAD -- но нужны примеры таких файлов).
3. Вместо заключения
Исходный код к пакету доступен здесь - https://github.com/GeorgGrebenyuk/Civil3D.CustomNodes.
Буду рад примерам LandXML-структур из других САПР.
#autodesk #civil3d #dynamo #dynamo civil 3d #landxml #solids #surface