Skip to content

RU codex docs document model v7

rkfsociety edited this page Oct 21, 2026 · 1 revision

Модель документа CADYX v7

Версионный контракт v7, не текущая схема. Здесь зафиксировано поведение, введённое с Document v7. Сейчас сохраняются документы v12, оболочка проекта остаётся v1. Перед тем как трактовать исторические ограничения как действующие, см. актуальную карту документации и контракты более поздних версий. Исторические примеры схемы и команд сохранены для поддержки миграции и совместимости.

Оболочка проекта остаётся cadyx-project версии 1. Новые документы имеют версию 7. При чтении документы v1–v6 обновляются в памяти без изменения ID, объектов, ревизии, истории и файлов. Следующая успешная команда атомарно сохраняет обновлённый документ вместе с новой записью истории; ошибочная команда оставляет файл без изменений. Неизвестная версия отклоняется. Документ v1 поддерживал только тела и элементы. Старые версии CADYX не могут читать Document v7: это изменение схемы вперёд, не гарантия обратной совместимости хостов. Последовательные миграции определены в cadyx/migrations.py; см. контракт миграции проекта.

Поддерживаемые объекты эскиза

Все объекты находятся в document.objects. ID каждого объекта — канонический типизированный UUID в нижнем регистре, уникальный в документе. Типы объектов: body, feature, sketch, point, line, circle, ellipse, spline и constraint. Существующие отношения тел и элементов сохраняются.

Тип Сохраняемые поля кроме id/type Значение
sketch name, plane Имя длиной 1–120 символов; плоскость XY или XZ.
point sketch_id, x, y, необязательный construction Конечные координаты; конструкционные точки — опорная геометрия.
line sketch_id, start_id, end_id, необязательные construction/extent Ссылается на две точки; длина больше 1e-7; extent — segment (по умолчанию), infinite или centerline.
circle sketch_id, center_id, radius, необязательные start_id/end_id/sweep_radians Точная окружность или дуга с направленным обходом; концы дуги лежат на окружности и соответствуют её угловому диапазону.
ellipse sketch_id, center_x, center_y, major_radius, minor_radius, rotation_radians, необязательные start_id/end_id/start_angle_radians/sweep_radians Точный аналитический эллипс или направленная дуга; концы дуги лежат на кривой и соответствуют заданному параметрическому обходу.
spline sketch_id, point_ids, необязательные mode/construction Открытая интерполирующая центростремительная Catmull–Rom (по умолчанию interpolating), открытый равномерный B-spline с зажатыми концами (control или bspline), полиномиальная Bezier (bezier) или рациональный B-spline (nurbs) по не менее чем трём упорядоченным точкам одного эскиза. Для NURBS также хранятся степень, узлы и веса.
constraint sketch_id, kind, references, value Явный инвариант, который проверяется при каждой загрузке и команде.

Принадлежность объекта эскизу задаётся только через sketch_id, без дублирующих списков объектов в эскизе. Ссылки точки/линии/окружности должны разрешаться в объект соответствующего типа в том же эскизе. Изменение координат сохраняет ID и ссылки. Ссылок на временную топологию геометрического ядра нет. Для эскиза XZ сохранённые x,y соответствуют глобальным X,Z; эскиз XY сохраняет прежнее отображение.

Конструкционные точки и линии видны в сцене эскиза, но не включаются в замкнутые профили или траектории sweep. Бесконечная линия отображается через две заданные точки на весь viewport; осевые и конструкционные линии показываются пунктиром. Необязательные поля обеспечивают совместимость с документами, созданными до появления конструкционной геометрии.

Семантика ограничений

Ограничения решают координаты редактируемых точек и радиусы окружностей ограниченным детерминированным решателем наименьших квадратов. Неудачное или противоречивое решение отклоняет подготовленную команду до сохранения. Решатель поддерживает до 128 скалярных переменных, 256 ограничений и 40 итераций на решение. Каждый результат содержит статус, число степеней свободы, число итераций и максимальный остаток. Абсолютный допуск остатка равен 1e-7 в единицах сохранённых координат; относительного допуска нет. CADYX пока не присваивает этим координатам физические единицы. В диагностике конфликта перечисляются ограничения с неудовлетворёнными остатками.

kind Упорядоченные ссылки Инвариант
horizontal одна линия Координаты Y концов равны.
vertical одна линия Координаты X концов равны.
coincident ID двух разных точек Евклидово расстояние равно нулю в пределах допуска.
distance ID двух разных точек Евклидово расстояние равно конечному неотрицательному значению.
radius одна окружность Радиус равен конечному положительному значению.
fixed одна точка Сохраняет координаты точки, записанные при добавлении ограничения.
parallel две линии Векторы направлений параллельны.
perpendicular две линии Векторы направлений перпендикулярны.
equal две линии либо две окружности Длины линий либо радиусы окружностей равны.
angular две линии Направленный угол от первой линии ко второй равен заданному значению в градусах.
tangent линия и окружность либо две окружности Касание опорной прямой и окружности либо внешнее касание двух окружностей.
symmetry две точки и осевая линия Точки симметричны относительно оси.

add_sketch_constraint возвращает диагностику решателя. update_sketch_elements повторно решает каждый затронутый эскиз до перестроения зависимых элементов. Статус решателя under_constrained, если остаются степени свободы; fully_constrained, если свобод не осталось и нет избыточных уравнений; over_constrained, если согласованная система содержит избыточные уравнения. Независимые флаги могут одновременно отметить недостаточность и избыточность. Противоречивая система возвращает ошибку с ID ограничений и остатками-свидетелями.

Ограничение fixed закрепляет датум эскиза; без достаточного числа опор геометрически корректное решение может сохранять степени свободы жёсткого тела. Координаты эскиза и радиусы окружностей, заданные привязкой именованного параметра, считаются неизменяемыми входными данными решателя. Если ограничение противоречит привязанному значению, команда атомарно отклоняется и не меняет целевое значение параметра.

API команд

Обе существующие конечные точки команд Web и Agent API принимают эти команды под соответствующими блокировками пользователя или агента. Результат возвращается в history_entry.result; как обычно, команда возвращает зафиксированный документ.

  • create_sketch: необязательные name (по умолчанию Sketch) и plane (по умолчанию XY). Возвращает sketch_id.

  • add_sketch_point / add_sketch_construction_point: sketch_id, конечные x, y. Конструкционные точки не включаются в профили и траектории sweep.

  • add_sketch_segment, add_sketch_line, add_sketch_infinite_line, add_sketch_centerline, add_sketch_construction_line: sketch_id, различные конечные start и end в формате {x, y}. Бесконечные линии и осевые линии не включаются в профили/траектории; осевые и конструкционные линии отображаются пунктиром.

  • add_sketch_element: sketch_id, element_type (point, line или circle) и соответствующие поля элемента из таблицы. Возвращает object_id.

  • add_sketch_polyline: sketch_id, список координат points ({x, y}), необязательный closed (по умолчанию false). Создаёт открытую цепь минимум из 2 точек либо замкнутый многоугольник минимум из 3 точек за одну команду. Расстояние между соседними точками, в том числе между последней и первой в многоугольнике, должно превышать 1e-7. Возвращает point_ids, line_ids и состояние closed. Это обычные объекты документа.

  • add_sketch_line_chain: sketch_id, points ({x, y}). Создаёт одну открытую цепь из не менее чем двух точек; для замкнутого профиля используйте add_sketch_polyline.

  • add_sketch_rectangle: sketch_id, x, y левого нижнего угла и положительные width, height. За одну команду создаёт закрытый четырёхсторонний профиль из обычных точек и линий и возвращает ID.

  • add_sketch_rectangle_two_corners: sketch_id, противоположные углы x1, y1, x2, y2; обе стороны должны превышать 1e-7. add_sketch_rectangle_center задаётся параметрами center_x, center_y, положительными width, height.

  • add_sketch_rectangle_three_points: три последовательных угла {x, y} в поле points; соседние стороны проверяются на перпендикулярность.

  • add_sketch_rotated_rectangle: center_x, center_y, положительные width, height, angle_degrees.

  • add_sketch_parallelogram: три последовательных неколлинеарных угла {x, y}.

  • add_sketch_regular_polygon: center_x, center_y, целое side_count (не меньше 3), положительный radius, необязательный rotation_degrees (по умолчанию 0), radius_mode (inscribed по умолчанию или circumscribed). Создаёт замкнутый профиль из точек/линий, возвращает ID точек и линий.

  • add_sketch_inscribed_polygon фиксирует описанный радиус; add_sketch_circumscribed_polygon фиксирует вписанный. У обеих одинаковые параметры центра, числа сторон и необязательного поворота.

  • add_sketch_polygon_from_center принимает центр и координаты первой вершины; вершина задаёт описанный радиус и исходный поворот.

  • add_sketch_circle: sketch_id, координаты центра x, y и положительный radius. Добавляет центральную точку и окружность, возвращает point_id, circle_id.

  • add_sketch_circle_diameter: sketch_id, координаты центра x, y и положительный diameter.

  • add_sketch_circle_two_points: first, second ({x, y}) задают противоположные концы диаметра.

  • add_sketch_circle_three_points: принимает три различные неколлинеарные координаты. Все три команды создают точную окружность и центральную точку и возвращают point_id, circle_id.

  • add_sketch_ellipse: концы большой оси major_axis_start, major_axis_end и положительный minor_radius. Половина длины большой оси должна быть не меньше малого радиуса. Сохраняет точный аналитический эллипс; возвращает ellipse_id, центр и радиусы.

  • add_sketch_ellipse_center: точка center, положительные major_radius, minor_radius, необязательный rotation_degrees (по умолчанию 0). Больший радиус должен быть не меньше малого.

  • add_sketch_ellipse_three_points: center, major_axis_endpoint, minor_axis_endpoint. Векторы от центра должны быть перпендикулярны с относительным допуском 1e-7; их длины задают радиусы, большой должен быть не меньше малого.

  • add_sketch_elliptical_arc: центр, положительные major_radius, minor_radius, обязательные start_angle_degrees, знаковый sweep_degrees и необязательный rotation_degrees (по умолчанию 0). Больший радиус не меньше малого; модуль размаха больше нуля и меньше 360°. Сохраняет точную аналитическую дугу с двумя конечными точками; возвращает ellipse_id, arc_id, ellipse_ids, point_ids и координаты концов.

  • add_sketch_spline: sketch_id, минимум три упорядоченные точки {x, y}, необязательный логический параметр construction (по умолчанию false). Соседние точки должны быть различными. Открытая центростремительная кривая Catmull–Rom проходит через каждую заданную точку; первая и последняя точки являются концами кривой. Эскиз хранит устойчивые ссылки на точки; сцена разбивает кривую на 24 отрезка на пролёт. Возвращает spline_id, point_ids, point_count, closed: false. Сплайн можно включить в замкнутый профиль либо использовать как открытую траекторию sweep. Это интерполяционные точки, не контрольный многоугольник B-spline.

  • add_sketch_closed_spline: периодический B-spline OCCT, проходящий как минимум через 3 уникальные упорядоченные вершины. Первая точка является стыком периода; не дублируйте её в конце. Сплайн можно использовать как отдельный профиль выдавливания или как профиль вращения XZ. Превью эскиза и итоговая B-rep дискретизируют одну кривую OCCT. Дескриптор геометрии хранит исходные вершины и признак closed_periodic_bspline, чтобы перестроение элементов и булевы объединения сохраняли кривую. Существующие дескрипторы closed_catmull_rom остаются читаемыми и перестраиваются прежней реализацией цепочки кубических рёбер. Профиль XZ для вращения может лежать по обе стороны оси Z, но не должен пересекать её. Смещённый от оси профиль образует тороидальное тело и не обязан касаться оси.

  • add_sketch_spline_control_points: sketch_id, минимум 3 упорядоченные контрольные точки {x, y}, необязательный логический construction (по умолчанию false). Создаёт открытый равномерный B-spline с зажатыми концами и степенью min(3, point_count - 1), с равномерно расположенными внутренними узлами. Кривая проходит через первую и последнюю контрольные точки, но обычно не проходит через внутренние. Возвращает те же ID, что add_sketch_spline, и mode: control.

  • add_sketch_bspline: те же упорядоченные контрольные точки и признак construction, что у команды для управляющих точек; сохраняет mode: bspline и использует открытый равномерный B-spline с зажатыми концами и степенью min(3, point_count - 1).

  • add_sketch_bezier_curve: те же упорядоченные контрольные точки и признак construction; сохраняет mode: bezier и строит одну полиномиальную кривую Bezier через первую и последнюю контрольные точки. Промежуточные точки являются управляющими и обычно не интерполируются.

  • add_sketch_nurbs: sketch_id, минимум 3 упорядоченные контрольные точки {x, y}, степень, вектор узлов, положительный вес для каждой контрольной точки и необязательный признак construction. Сохраняет определение рационального B-spline и дискретизирует его на каждом непустом зажатом пролёте узлов.

  • add_sketch_spiral: центр, неотрицательный начальный радиус, шаг на оборот, начальный и конечный углы в градусах и минимум 3 выборочные точки (по умолчанию 48). Строит спираль Архимеда по формуле r = initial_radius + pitch_per_turn * |angle| / 360°; выборочные координаты сохраняются как обычный интерполирующий сплайн.

  • add_sketch_parametric_curve: сериализуемые x_expression и y_expression, начало и конец параметра и минимум 3 выборки (по умолчанию 48). Выражения принимают t, pi, e, арифметику (включая ^ для степени) и одноаргументные sin, cos, tan, asin, acos, atan, sqrt, exp, log, abs. Вычисление Python не выполняется. Результирующие выборки сохраняются обычным интерполирующим сплайном; сами выражения в документе не сохраняются.

  • add_sketch_coordinate_curve: минимум 3 упорядоченные координаты {x, y} и необязательный признак construction. Создаёт интерполирующий сплайн, проходящий через каждую координату.

  • add_sketch_circle_tangent_to_line: sketch_id, line_id того же эскиза, точка касания tangent_point ({x, y}), положительный radius, необязательный side (по умолчанию 1, либо -1 относительно направления линии). Точка касания должна лежать на конечном отрезке либо на опорной прямой бесконечной линии. Создаётся точная окружность; её центр смещён на заданный радиус по выбранной нормали линии.

  • add_sketch_circle_tangent_to_two_lines: sketch_id, различные first_line_id и second_line_id одного эскиза, положительный radius, необязательные first_side/second_side (каждый по умолчанию 1, либо -1 относительно направления соответствующей линии). Пара сторон выбирает одно из четырёх решений по биссектрисам. Параллельные линии отклоняются; точки касания должны находиться в конечных отрезках. Для бесконечных линий используется вся опорная прямая. Возвращает окружность и точные координаты обеих точек касания.

  • add_sketch_circle_tangent_to_three_lines: sketch_id и ID трёх различных линий того же эскиза; необязательные first_side, second_side, third_side (каждый по умолчанию 1 либо -1 относительно направления соответствующей линии). Совместное смещение трёх линий определяет центр и положительный радиус окружности. Вырожденные сочетания сторон отклоняются; точки касания должны лежать на конечных отрезках. Возвращает найденный радиус и все координаты точек касания.

  • add_sketch_arc_center: sketch_id, координаты center, start, end и необязательный логический clockwise (по умолчанию false). Начало и конец должны лежать на одной окружности и отличаться друг от друга и от центра. Строится точная дуга с заданным направлением; по умолчанию обход против часовой стрелки.

  • add_sketch_arc_three_points: координаты start, through, end. Точки должны быть различными и неколлинеарными. Команда находит их единственную описанную окружность и выбирает знаковый размах, проходящий через through; возвращает точную дугу, центр и радиус.

  • add_sketch_arc_start_center_end: строит ту же точную геометрию, что add_sketch_arc_center, но порядок и обозначения входных координат — start, center, end; необязательный clockwise выбирает направление дуги.

  • add_sketch_arc_radius: sketch_id, start, end и положительный radius; расстояние между концами не может превышать диаметр. large_arc (по умолчанию false) выбирает малую или большую дугу, а clockwise (по умолчанию false) — знак направления.

  • add_sketch_arc_tangent: sketch_id, line_id того же эскиза, tangent_point, положительный radius, знаковый sweep_degrees строго между -360° и 360° и не равный нулю. side (по умолчанию 1 либо -1) выбирает сторону направленной линии для центра окружности. Точка касания должна находиться на конечном отрезке либо на опорной прямой бесконечной линии. Дуга начинается в точке касания; начальная касательная параллельна выбранной линии.

  • add_sketch_rounded_rectangle: sketch_id, x,y левого нижнего угла, положительные width,height, положительный corner_radius, меньший половины обеих сторон. Создаёт в геометрии эскиза точные четверти окружностей и касательные отрезки; при извлечении профиля дуги дискретизируются с шагом не более 2.8125°.

  • mirror_sketch_elements: sketch_id, непустой список object_ids, координаты axis_start и axis_end ({x, y}). Копирует указанные точки, линии, окружности, эллипсы и сплайны отражёнными относительно произвольной оси эскиза. Концы оси должны отстоять друг от друга более чем на 1e-7. При выборе линии или окружности копируются зависимости-точки (концы либо центр), каждая копия получает новые ссылки на точки. При выборе сплайна копируются его упорядоченные точки. Эллипсы отражаются аналитически. Ограничения не копируются. Возвращаются ID замыкания источников и созданных точек, линий, окружностей, эллипсов и объектов.

  • pattern_sketch_elements: sketch_id, непустые object_ids, mode (linear или circular) и count не меньше 2, включая исходный экземпляр. Для линейного режима задаются offset_x/offset_y на экземпляр. Для кругового — center_x, center_y и angle_step_degrees на экземпляр. Копируется то же замыкание зависимостей точек/линий/окружностей/сплайнов, что при зеркальном отражении; эллипсы преобразуются аналитически. Ограничения не копируются. Линейное смещение должно превышать 1e-7; повторяющиеся положения по окружности отклоняются. Фиксированного ограничения числа копий нет: объём результата ограничивают доступная память и хранилище документа. Ответ группирует созданные ID по типу объектов и сообщает замыкание исходных ссылок и общее количество экземпляров.

  • add_sketch_constraint: sketch_id, kind, упорядоченные references и value для ограничений расстояния/радиуса. Возвращает constraint_id.

  • update_sketch_elements: непустой список updates в формате {object_id, changes}. Для точек допускаются x/y, для окружностей — radius. Для каждого ID может быть только одна запись; владение и ссылки изменять нельзя. Весь пакет проверяется совместно, поэтому ограниченные точки можно переместить одной атомарной командой. Возвращает object_ids.

  • remove_sketch_object: object_id. Каскадного удаления нет: объект, на который ссылаются, удалить нельзя. При необходимости удаляйте ограничения, линии/окружности, точки, затем сам эскиз. Возвращает object_id.

  • remove_body: body_id, необязательный remove_source_file (логический, по умолчанию false). Удаляет принадлежащие телу записи элементов из текущего документа, только если на тело не ссылаются другие объекты. Эскизы и предыдущая история команд остаются. Возвращает ID удалённых тела и элементов. Если геометрию требуется сохранить отдельно от истории команд, экспортируйте тело заранее. Указывайте remove_source_file: true только для временного STEP-референса: после сохранения документа CADYX удалит его временный прямой файл проекта, оставив локальный исходник нетронутым. Импортированное тело должно иметь ровно один элемент import_step.

  • remove_objects: object_ids — непустой список уникальных ID тел, элементов, эскизов или элементов эскиза. Группа удаляется одной атомарной командой, только если на её элементы не ссылаются оставшиеся объекты. При удалении старой цепочки включите в ту же группу зависимые элементы и объекты эскизов. Файлы проекта и история команд сохраняются.

  • clear_model: одной атомарной командой удаляет все объекты модели, сохраняя идентификатор документа, каталог проекта, историю команд и временные файлы проекта. Используйте только при явном запросе пользователя очистить модель; команда не удаляет исходные файлы или сам проект.

Инженерные профили

add_sketch_involute_gear принимает пустой эскиз XY в sketch_id, положительный module, целое tooth_count не менее 3, pressure_angle_degrees от 5 до 45° (по умолчанию 20°), необязательные center_x/center_y, rotation_degrees и неотрицательный backlash, меньший половины кругового шага. Минимальное число зубьев проверяется по пределу подрезания исходного контура рейкой для выбранного угла давления. Команда строит один редактируемый замкнутый периодический сплайн через выборочные точки профиля и возвращает рассчитанные делительный, основной, вершинный и корневой радиусы в gear_parameters.

Модель — прямозубое внешнее колесо без смещения исходного контура: d=mz, db=d cos(alpha), da=m(z+2), df=m(z-2.5). Для внешней пары колёс межосевое расстояние равно m(z1+z2)/2, фазовый сдвиг — половина углового шага зубьев. Эскиз хранит замкнутый периодический сплайн и исходные точки интерполяции; выдавленная B-rep использует периодический B-spline OCCT через те же точки. Старые сохранённые профили шестерён из отрезков остаются читаемыми и при следующем перестроении параметра преобразуются в замкнутые сплайны. Для полости внутреннего колеса используется то же сплайновое ребро в кольцевом выдавливании с несколькими контурами.

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

create_metric_thread принимает положительные major_diameter, pitch, length (не меньше одного шага), необязательный handedness (right по умолчанию или left) и необязательный name. Создаёт одну редактируемую твёрдую B-rep с однозаходной наружной ISO-метрической резьбой 60°, обрезает её от Z=0 на заданную длину и сохраняет дескриптор геометрии metric_thread со связанным элементом. Для основного наружного профиля малый диаметр равен d3 = d - 1.226869P; скруглённый корень приближён значением R = sqrt(3)P/12 с восемью сегментами на угол сечения.

set_parameter может менять major_diameter, pitch, length, handedness; длину ограничивает только число секций, представимое Open CASCADE. Каждое редактирование атомарно перестраивает B-rep. Внутренние резьбы, несколько заходов, классы допусков и сбеги резьбы не моделируются. Документ CADYX не задаёт физические единицы: модуль, диаметр и шаг используют единицы координат документа.

Эти функции используют существующие контракты объектов и элементов документа v3 и не требуют миграции схемы. Геометрия колеса остаётся редактируемой геометрией эскиза; параметры резьбы хранятся в её элементе. Формулы-источники: ISO 724:2023, геометрия прямозубого колеса.

Эскизные элементы твёрдого тела

extrude_sketch принимает sketch_id, положительную depth, необязательный name и логический centered. Центрированное выдавливание распространяется поровну по обе стороны плоскости эскиза. Иначе оно начинается на плоскости и идёт по её положительной нормали. На XY выдавливается один замкнутый линейный контур вдоль глобальной Z, на XZ — вдоль глобальной Y.

revolve_sketch принимает sketch_id, необязательный angle_degrees (по умолчанию 360, диапазон больше 0 и до 360 включительно) и необязательный name. Вращает один замкнутый профиль XZ вокруг глобальной Z. Для создания твёрдого тела OCCT профиль должен находиться по одну сторону оси и касаться её.

В качестве профиля выдавливания можно использовать эскиз с одной окружностью или полным эллипсом; каждый дискретизируется в многоугольник из 128 рёбер. Эллиптические дуги можно объединять с отрезками и круговыми дугами для замыкания контура. Профиль из отрезков и круговых/эллиптических дуг передаётся в OCCT точными коническими рёбрами; выборочные точки профиля сохраняются для проверки эскиза и совместимого дескриптора. Это применяется отдельно к каждому контуру многоконтурного выдавливания или объединяемой площадки: дескриптор segment_profiles хранит точные линейные и конические рёбра внешнего контура и внутренних вырезов. При перестроении зависимости восстанавливают аналитические рёбра, а не заменяют их многоугольником.

Полные эллипсы остаются точными в эскизе; для viewport и самостоятельных операций с полным профилем они дискретизируются. Интерполяционные сплайны определяются упорядоченными точками и для отображения/профиля используют 24 сегмента на пролёт. B-spline через управляющие точки дискретизируется так же; кривая Bezier — 24 сегментами по всей длине. При преобразовании сплайна эскиза в точки траектории OCCT для sweep берутся четыре выборки на пролёт.

Замкнутый контур профиля должен содержать не менее 3 рёбер. extrude_sketch принимает один внешний контур и один или несколько полностью заключённых внутренних контуров; внутренние контуры вычитаются из выдавливания в том же элементе эскизного тела, результат должен остаться одним телом. pad_sketch_to_body принимает такое же правило контуров до объединения выдавленного профиля с исходным телом. Параллельные плоскости XY/XZ можно создать через create_sketch с соответствующей осью нормали и конечным section_offset; эскизные площадки учитывают смещение плоскости. Для вращения и прочих профильных операций сохраняются прежние требования к одному контуру.

Команда сохраняет дескриптор B-rep OCCT и элемент со ссылкой на исходный эскиз и параметр операции. Редактирование исходных точек перестраивает связанное тело в той же атомарной команде. set_parameter меняет глубину выдавливания или объединённой площадки, угол вращения, радиус sweep, расстояние фаски или радиус скругления. Изменение вышестоящего профиля или площадки перестраивает фаски/скругления ниже по порядку документа. Для элементов вращения дополнительно сохраняются общий outer_diameter и height профиля; set_parameter масштабирует замкнутый эскиз XZ радиально либо вдоль оси, сохраняя ось вращения и нижний датум, после чего перестраивает B-rep. Радиальное масштабирование преобразует круговые дуги эскиза в точные эллиптические дуги, аналитически сохраняемые и в построенном теле, в том числе при возврате исходного диаметра. Вид Geometry показывает эти размеры как изменяемые входы.

Удаление эскиза, используемого элементом твёрдого тела, отклоняется. Перед перестроением зависимых профильных элементов решаются ограничения профиля. Адаптер OCCT перестраивает и проверяет каждое сохранённое тело, а треугольники viewport получает из B-rep. Это твёрдые тела, не импортированные треугольные сетки.

replace_sketch_profile заменяет цикл точек/линий выбранного эскиза и атомарно перестраивает его зависимые профильные элементы. Принимает sketch_id и минимум 3 конечные точки {x, y}; эскизы с окружностями или ограничениями отклоняются. Изменение эскиза также перестраивает следующие зависимые твёрдые тела.

replace_sketch_path заменяет эскиз из точек/линий одной открытой связной цепью. Принимает sketch_id и минимум 3 конечные точки {x, y}, создаёт линию между каждой соседней парой и анимирует прорисовку траектории. Эскиз траектории не может иметь ветвей, циклов, окружностей или ограничений.

sweep_sketch принимает sketch_id, положительный радиус кругового сечения radius и необязательный name. Окружность протягивается вдоль открытой цепи линий эскиза; аппроксимация OCCT укладывается в допуск C2 B-spline направляющей. Поддерживаются траектории XY/XZ; траектория XZ расположена вертикально вдоль глобальной Z. Результат swept_pipe — замкнутое твёрдое тело OCCT, связанное с исходным эскизом; изменение точек пути или радиуса перестраивает тело. Во время перехода команда постепенно показывает трубу вдоль пути.

Сечения и loft

create_sketch_from_section принимает body_id импортированной STEP B-rep, normal_axis (X, Y или Z), смещение offset, необязательный max_points (не менее 16, по умолчанию всего 2048 выборок для всех контуров) и необязательное name. OCCT пересекает точную B-rep с плоскостью и возвращает каждый замкнутый контур ненулевой площади отдельным редактируемым эскизом-полилинией. Открытые или ветвящиеся границы отклоняются. Исходная B-rep сохраняется. Эти полилинии — выборочные приближения аналитических/NURBS-кривых сечений; общий бюджет точек разделяется между контурами.

loft_sketches принимает упорядоченные sketch_ids (по одному контуру на станции) либо section_groups (для нескольких контуров на станцию) и необязательный name. Группа содержит один или несколько эскизов сечений XZ с одним конечным section_offset; смещения станций должны строго возрастать. Фиксированного ограничения на число станций или контуров нет. update_loft_sections атомарно заменяет группы существующего элемента loft.

У одноконтурного loft выборки по периметру уравниваются, обход нормализуется, затем циклическое начало совмещается по минимальному смещению выборочных вершин. Текущий режим minimum-displacement-v2 совмещает каждое последующее сечение с первым; режим minimum-displacement-v1 совмещает каждое с предыдущим. Новые простые loft записывают режим совмещения. Старые элементы v7 без этого поля сохраняют прежнюю трактовку с независимым началом.

При изменении количества контуров между станциями CADYX строит соседние ветви loft по двум сечениям. Контуры сопоставляются по минимальному расстоянию центроидов, площадь заключённой области служит вторичным признаком. При разделении/слиянии дублируется ближайшая пространственная ветвь, а все ветви объединяются в одно тело OCCT. Это приближённая обработка разделения/слияния сечений, а не точное отслеживание топологии. Сверяйте результат с источником: выборочные контуры не сохраняют постоянную идентичность поверхностей.

Сопоставление сгруппированного loft использует исходные вершины профилей без фиксированного ограничения числа выборок; затем каждая сопоставленная пара ветвей пересэмплируется к общему числу точек периметра для OCCT. Все сечения остаются редактируемыми, изменение исходного эскиза атомарно перестраивает элемент. Если в группе больше одного контура, элемент хранит упорядоченные source_sketch_ids и section_sketch_groups. Все сечения являются выборочными многоугольниками, поэтому оба способа loft приближают исходные аналитические/NURBS-поверхности STEP.

Линейчатая оболочка и булевы операции

create_ruled_shell строит твёрдое тело минимум из четырёх линейчатых заплат. Каждая заплата задаётся двумя 3D-направляющими с минимум двумя выборками [x,y,z]; число точек каждой направляющей должно помещаться в диапазон индексов OCCT. Общего фиксированного лимита на число точек направляющих нет. OCCT интерполирует направляющие как B-spline, строит линейчатую грань через BRepFill::Face, сшивает грани, проверяет свободные или кратные рёбра, исправляет ориентацию оболочки и проверяет полученное одно тело.

sewing_tolerance по умолчанию равен 0.001 мм, допустимый диапазон — 1e-7–1 мм. Заплаты должны образовать одну замкнутую многообразную поверхность; открытые сети операция не закрывает. Выборочные точки направляющих приближённо интерполируют заданные кривые. Элемент хранит входные данные заплат и перестраивается из них при проверке документа.

fuse_bodies принимает base_body_id, tool_body_id и необязательный name для двух пересекающихся твёрдых OCCT B-rep. Нативная булева операция должна дать одно связное корректное тело. Поддерживаются профильные тела, трубы sweep и предыдущие результаты fuse/fillet; импортированные треугольные сетки не являются допустимыми B-rep-входами. Дескриптор fused_solids сохраняет дескрипторы обеих исходных геометрий и перестраивается при изменении любого источника. Старые дескрипторы fused_profiles также поддерживаются.

cut_bodies принимает base_body_id, tool_body_id и необязательный name. Булева операция OCCT вычитает инструмент из основы; должен остаться один корректный твёрдый объект положительного объёма. Оба исходных дескриптора B-rep сохраняются в графе cut_solids; изменение любого источника перестраивает результат. Если инструмент ничего не вырезает либо делит основу на несколько тел, команда атомарно отклоняется. Треугольные сетки не являются B-rep-входами.

Инспекция топологии и проверки размеров

GET /api/v1/agent/projects/{project_id}/topology?body_id=... проверяет актуальные уникальные рёбра B-rep тела для последующего выбора. У каждого ребра есть индекс обхода index, длина, центр масс и тип кривой. Индексы действуют только для соответствующей текущей топологии и не являются постоянными именами. После любого изменения вышестоящего элемента повторно проверьте топологию перед выбором рёбер.

POST /api/v1/agent/projects/{project_id}/validations/dimensions выполняет read-only-проверку размеров тела по протяжённости ограничивающего параллелепипеда в осях и привязана к ревизии. Запрос должен содержать body_id, expected_revision, expected_dimensions ровно с полями x, y, z и неотрицательный абсолютный tolerance; размеры и допуск задаются в единицах модели.

Ответ включает измеренные габариты, абсолютные ошибки по каждой оси, общий и поосевой статус pass/fail, ревизию документа, систему координат global_xyz и SHA-256 канонического дескриптора геометрии. Устаревшая ревизия возвращает REVISION_CONFLICT. Проверяются только размеры ограничивающего параллелепипеда, не размеры ориентированных элементов, толщина стенки, зазор или посадка. Команда не требует блокировки изменения и не меняет документ.

Проверка зазора и помех

Маршрут POST /api/v1/agent/projects/{project_id}/validations/clearance проверяет два разных корректных твёрдых тела OCCT на соблюдение заданного минимального расстояния между поверхностями. Передайте first_body_id, second_body_id, expected_revision, minimum_clearance и допустимый недобор tolerance; все длины указаны в единицах модели.

Ответ включает минимальное расстояние OCCT и точки-свидетели, интервал расстояния с учётом отклонения вычисления, объём и метод пересечения, классификацию помех, общий хеш геометрии и статус зазора pass, fail или untested. interference_status равен interfering, если общий объём превышает оценку разрешения объёма, обусловленную отклонением; separate, если положительное расстояние больше отклонения; иначе touching_or_indeterminate.

Статус pass требует раздельности тел и того, чтобы нижняя граница интервала удовлетворяла заданному зазору с учётом допуска. Наличие пересечения или верхняя граница ниже порога означает fail; иначе результат untested. Треугольные сетки не поддерживаются. Проверка не получает блокировку записи и не меняет документ.

Во время синхронного запроса события agent.activity публикуют прогресс OCCT в progress_percent и текущие этапы measure_distance и classify_interference. Алгоритмы OCCT для расстояния и объёма пересечения составляют соответственно 55% и 45% публикуемого прогресса операции.

Все POST-маршруты валидации принимают необязательный persist (по умолчанию false). При true CADYX сохраняет результат неизменяемой записью в боковом файле проекта .cadyx-validations.sqlite3; ревизия документа не увеличивается. GET /api/v1/agent/projects/{project_id}/validations?limit=50 возвращает последние записи; limit — от 1 до 200. Записи сохраняют точный результат, ревизию и хеш геометрии проверки и удаляются вместе с проектом.

Проверка сохранения объёма

POST /api/v1/agent/projects/{project_id}/validations/preservation сравнивает два разных корректных твёрдых тела OCCT на заданной ревизии expected_revision. Запрос требует reference_body_id, candidate_body_id, maximum_lost_volume и tolerance; объёмы задаются в кубических единицах модели.

Ответ содержит объём общего материала (preserved_volume), материала только в эталоне (lost_volume) и только в кандидате (added_volume), а также оценочный интервал потери объёма и ошибки баланса объёмов. Включены отклонение длины OCCT и оценка разрешения объёма. Интервал оценивает чувствительность булевой операции по отклонению и площади поверхности, но не является гарантированной границей ошибки.

pass означает, что измеренная потеря с учётом разрешения не превышает допустимое значение; fail — превышает; untested — оценочный интервал пересекает порог либо баланс объёмов противоречив. Необязательный persist: true сохраняет результат в описанной выше боковой базе валидаций. Проверяется перекрытие объёмов, но не локальное отклонение поверхности и не полная геометрическая эквивалентность.

Скругления и массивы тел

fillet_edges принимает body_id, один или несколько разных edge_indices, положительный radius и необязательный name. Индексы должны помещаться в целочисленное представление нативного ядра; фиксированного потолка числа рёбер нет. Создаётся новое тело со скруглением OCCT методом перекатывания; так можно скруглить обод/основание кружки или соединение влитой ручки. Радиус можно редактировать через set_parameter.

Дескриптор filleted_solid сохраняет исходную B-rep, выбранные индексы текущих рёбер и радиус. Если вышестоящее изменение меняет топологию или делает заданный радиус невозможным, перестроение зависимости атомарно завершается ошибкой, сохраняя документ без изменений.

linear_pattern_body, circular_pattern_body, hole и boss сохраняют исходное тело и параметры операции. Количество копий массива должно быть не меньше двух и помещаться в целочисленное представление нативного ядра; фиксированного лимита числа копий нет. OCCT объединяет все экземпляры массива одной многотельной булевой операцией.

Изменение исходного эскиза или более раннего элемента перестраивает эти операции-зависимости по порядку документа. set_parameter меняет count/offset линейного массива; count, angle_step_degrees или full_circle кругового массива; diameter или depth отверстия либо бобышки. Для кругового массива с full_circle: true требуется angle_step_degrees = 360/count; при изменении count шаг пересчитывается, чтобы равномерно распределять элементы по полному кругу. Исходные тела массива — промежуточная история; они скрыты в viewport и дереве объектов.

Эскизы траекторий sweep, использованных элементом, и все неактивные эскизы скрыты в пользовательском дереве и viewport. Исходные тела операций fillet/fuse сохраняются в истории для редактирования, но скрыты в viewport и дереве; показываются только ещё не потреблённые результаты. Изменение исходного эскиза твёрдого тела перестраивает последующие sweep, массивы, hole/boss, fillet и булевы элементы в порядке документа.

Импорт STEP и редактируемые B-rep

import_step читает прямой исходный .step/.stp из каталога текущего проекта посредством STEPControl_Reader OCCT. Принимается одно твёрдое тело; сериализация OCCT B-rep сохраняется в дескрипторе тела imported_brep. Треугольники viewport — только триангуляция для отображения. Элемент проекта записывает имя исходного файла, SHA-256, размер в байтах и метрики исходной геометрии. Сохранённая B-rep самодостаточна и остаётся пригодной, даже если позднее исходный файл будет перемещён. Размер исходника и сериализованной B-rep ограничен 64 МиБ каждый.

Необязательный show_in_preview по умолчанию равен true; задайте false, если импортируете референс, который требуется оставить для анализа сечений, не отображая его в viewport и миниатюре проекта. В старых документах тела без явного флага видимости остаются видимыми.

Agent API может загрузить локальный источник STEP или скан PLY в проект запросом POST /api/v1/agent/projects/{id}/files/{name} с Content-Type: application/octet-stream. Загрузка ограничена 64 МиБ, имя должно быть непосредственным файлом .step, .stp либо .ply, проект должен быть свободен, применяются настроенные правила аутентификации хоста, существующий файл проекта не перезаписывается.

Локальные MCP-инструменты cadyx_upload_project_step и cadyx_upload_project_scan читают указанный локальный обычный файл и передают его байты. HTTP-хост не принимает произвольные пути файловой системы и не разрешает их. Проект можно создать без смены текущего выбора в окне, указав select: false в маршруте создания проекта Agent API.

DELETE /api/v1/agent/projects/{id}/files/{name} удаляет только прямой STEP-файл-референс из свободного проекта. Core запрещает удаление, пока текущий документ содержит элемент import_step с таким именем. Локальный инструмент cadyx_remove_staged_step вызывает этот маршрут; применяйте его только после удаления тела-референса и проверки перестроенной модели.

Метрики источника включают объём, площадь поверхности, координаты границ, число уникальных тел/граней/рёбер/вершин, корректность B-rep и признак того, что OCCT починил форму в пределах точности 1e-7 и максимального допуска 1e-5 единиц модели. CADYX проверяет сериализацию B-rep обратным преобразованием и сравнивает эти показатели.

Если OCCT не может исправить импортированное тело, CADYX сохраняет переданную форму как есть и устанавливает brep_valid: false, не меняя её молча. Если OCCT может её триангулировать, она по-прежнему отображается, однако булевы операции и fillet требуют корректную B-rep и могут завершиться отказом.

resize_imported_thread принимает импортированный body_id, границы резьбового участка x_start, x_end, major_diameter, положительный diameter_delta и необязательные координаты axis_origin_y/axis_origin_z, если ось резьбы параллельна глобальной X. Выбранный участок должен содержать только резьбу.

При необходимости OCCT исправляет самопересекающиеся проволочные контуры некорректных плоских граней, вырезает выбранный участок и радиально масштабирует его вокруг заданной оси, затем возвращает в исходное тело булевым объединением. Результат должен быть одним корректным замкнутым телом; исходное тело остаётся в истории элементов и скрывается в viewport.

transform_imported_brep принимает body_id импортированной B-rep, трёхкомпонентную rotation_axis, угол angle_degrees и трёхкомпонентный translation. Тело поворачивается вокруг глобального начала координат, затем переносится и сохраняется как новый редактируемый элемент импортированной B-rep. Жёсткие преобразования сохраняют объём и топологию источника; потреблённое исходное тело остаётся в истории.

Проверяемая передача CAD

export_brep выполняется через существующую конечную точку команд с блокировкой. Принимается существующее корректное замкнутое однотельное OCCT B-rep. Треугольные сетки и некорректные импортированные B-rep отклоняются. В конверте запроса требуется expected_revision, чтобы каждый артефакт был привязан к точному сохранённому состоянию модели:

{
  "lease_id": "...",
  "expected_revision": 12,
  "command": {
    "type": "export_brep",
    "body_id": "body:...",
    "include_stl": true,
    "linear_deflection": 0.1,
    "angular_deflection": 0.5
  }
}

STEP всегда записывается как аналитическая модель STEP OCCT и повторно импортируется до публикации. При обратном импорте должно получиться одно корректное тело; исходный объём должен сохраниться с относительным/абсолютным допуском 1e-8/1e-7 единиц модели, все шесть границ — с допуском 1e-6. STEP-файл больше 64 МиБ отклоняется, поскольку он превысил бы существующее ограничение импорта STEP.

Если include_stl: true, CADYX записывает бинарный STL с линейным и угловым отклонениями OCCT. Значения по умолчанию: 0.1 единицы модели и 0.5 радиана. Допустимые диапазоны: линейное не меньше 0.001 единицы модели, угловое — от 0.01 до 1.0 радиан. Размер STL ограничен 64 МиБ.

До публикации CADYX проверяет, что сериализованный STL является водонепроницаемым и имеет согласованную ориентацию, вычисляет знаковый объём сетки и относительную ошибку по отношению к точной B-rep, затем сравнивает до 64 равномерно распределённых центроидов треугольников с точными гранями B-rep. Манифест помечает это одностороннее отклонение поверхности как выборочное; это не исчерпывающее геометрическое доказательство. STEP остаётся точным авторитетным результатом. Ни STEP, ни STL не удостоверяют физическую посадку, прочность или пригодность к печати.

STEP, необязательный STL и манифест *.cad-delivery.json непосредственно создаются в каталоге текущего проекта. Имена содержат очищенное от небезопасных символов имя тела, исходную ревизию, идентификатор геометрии и хеш содержимого файла. Каждый файл создаётся атомарно без перезаписи существующих. Идентичный уже существующий артефакт используется повторно; совпадение имени при другом содержимом приводит к отказу команды. Все экспорты и проверки завершаются до публикации; манифест публикуется последним.

Манифест сохраняет ID исходного тела/ревизию и канонический SHA-256 геометрии, версию OCCT, имена/хеши/размеры файлов, метрики исходного и повторно импортированного STEP, допуски и необязательные проверки/измерения STL.

Команда экспорта записывается в историю проекта и увеличивает ревизию команды, но source.document_revision манифеста остаётся ревизией геометрии экспортированного тела. Результаты можно перечислять и загружать через существующие API файлов проекта.

Импорт сканов и редактируемые треугольные сетки

import_scan читает один прямой PLY-файл из каталога workspace, сохраняет исходник и создаёт тело с треугольной сеткой cadyx-mesh-v1 и элементом reconstruct_scan. Команда отправляется существующей конечной точке команд Web или Agent API под блокировкой на изменение соответствующего проекта:

{
  "type": "import_scan",
  "folder": "kobras1backcover",
  "file": "Merge_02_pc.ply",
  "name": "Сканированная крышка",
  "parameters": {
    "reconstruction_method": "poisson",
    "voxel_size": 0.75,
    "target_triangles": 30000,
    "outlier_neighbors": 20,
    "outlier_std_ratio": 2.0,
    "poisson_depth": 8,
    "poisson_density_quantile": 0.01
  }
}

import_project_scan читает прямой файл .ply, заранее помещённый в этот же проект инструментом cadyx_upload_project_scan. Принимает те же name и parameters, создаёт такой же редактируемый элемент сетки. Источник в проекте фиксируется по имени файла и SHA-256; при повторном расчёте параметров или выравнивания скан перечитывается и хешируется повторно. Обе команды импорта сохраняют исходный PLY и записывают обработанный PLY рядом с ним в его каталоге.

import_project_point_cloud сохраняет загруженный PLY только с точками непосредственно как одно тело-облако точек документа. Исходные координаты и масштаб сохраняются; имя файла проекта и SHA-256 записываются в метаданные происхождения элемента. Точки отображаются в обычной сцене CAD и серверном PNG. Поддерживается ASCII либо бинарный PLY с little/big-endian, скалярными свойствами вершин XYZ, 3–300000 точками и без граней/прочих элементов. Исходный файл не меняется. Такое представление — данные скана только с точками, не треугольная сетка и не OCCT B-rep. Физические единицы и масштаб не выводятся, статистика помечает их как неподтверждённые.

Поля folder и file должны разрешаться в прямой обычный .ply-файл каталога проекта; обход путей и символьные ссылки отклоняются. Команда записывает относительный путь и SHA-256 источника в элемент. При изменении параметра обработки источник читается снова; если файл изменился, команда завершается ошибкой.

PLY открыт только для чтения. Восстановленная сетка самодостаточно хранится в project.json и остаётся доступна, даже если исходный файл станет недоступен. CADYX также записывает обработанную сетку бинарным little-endian PLY рядом с источником. Имя адресуется по содержимому: {source-stem}.cadyx-{mesh-sha256-prefix}.ply. Элемент хранит относительный путь, хеш и размер результата. Публикация атомарна и не заменяет файл: байт-в-байт идентичный результат переиспользуется, конфликт отклоняет команду. Временные файлы скрыты в списке workspace.

Поддерживаются исходные треугольные сетки PLY и облака точек PLY. Сетки очищаются и упрощаются; облака точек прореживаются вокселями, очищаются от статистических выбросов, получают согласованно ориентированные нормали и реконструируются выбранным методом. Метод poisson (по умолчанию) создаёт глобально замкнутую поверхность screened Poisson и может обрезать слабо поддержанные вершины. ball_pivoting прокатывает локальные сферы радиусом 1.5, 2.0 и 3.0 эффективного размера вокселя по измеренным точкам. Он сохраняет открытые границы и промежутки, не заполняя невидимое пространство; поэтому возможны несколько компонент или граничные рёбра, а водонепроницаемость не гарантируется. Оба метода возвращают редактируемую треугольную сетку, не OCCT B-rep.

Упакованные вершины float32 и индексы треугольников uint32 сжимаются, ограничиваются по объёму и проверяются контрольной суммой в GeometryKernel. История команд хранит только ID, параметры и количество элементов, без второй копии сетки.

Параметры по умолчанию: reconstruction_method=poisson, voxel_size=0.75 в координатных единицах источника, target_triangles=30000, outlier_neighbors=20, outlier_std_ratio=2.0, poisson_depth=8, poisson_density_quantile=0.01. voxel_size и target_triangles относятся к обоим типам входа; параметры выбросов и метода реконструкции — только к облакам точек; poisson_depth и poisson_density_quantile действуют только для метода poisson.

После реконструкции Poisson вершины ниже выбранного квантиля плотности удаляются вместе с примыкающими треугольниками, обрезая слабо поддержанные экстраполированные поверхности. Установите квантиль 0, чтобы оставить весь результат Poisson. Команда set_scan_parameter принимает feature_id, name, value и перестраивает модель из неизменённого источника.

Параметры ограничены: размер вокселя 0.00001–10000, число треугольников 100–100000, число соседей выбросов 4–128, отношение стандартных отклонений 0.1–5, глубина Poisson 5–9 и квантиль плотности 0–0.5. CPU-обработчик использует не более четырёх потоков и уменьшает облако максимум до 100000 точек; входные PLY ограничены 512 МиБ, 2 млн вершин и 5 млн граней. Обработчик — закреплённый хешем CPU SDK Open3D 0.20.0 за мостом C ABI, поэтому от ABI Python CADYX он не зависит. См. настройку среды.

По мере проверки источника, очистки сетки/облака, реконструкции, валидации, публикации бокового файла и сохранения проекта Core отправляет снимки SSE agent.activity. Инспекция модели и запросы viewport через Agent Runtime/API записываются туда же. Read-only-браузер анимирует изменения модели и показывает один компактный статус действия/результата; подробные этапы операции и сырой журнал команд в нём не выводятся.

GET /api/v1/projects/{id}/activity и соответствующий маршрут Agent API возвращают последние 128 снимков операций в памяти процесса, чтобы открытая или перезагруженная страница могла продолжить их отображение. Состояние активности, как и SSE-поток, существует только в процессе.

Инспекция в браузере и редактирование через Agent API

Браузер — это доступный только для чтения подробный просмотрщик. По умолчанию общее окно viewport занимает весь экран; дерево модели и свойства находятся в свёрнутых панелях. Дерево показывает тела с их элементами и только редактируемый сейчас эскиз, включая его точки, линии, окружности, эллипсы и ограничения. Неактивные эскизы и эскизы, уже потреблённые элементами твёрдого тела, в дереве и viewport скрыты.

Viewport отображает поддерживаемые тела и плавно анимирует изменения активного эскиза, профильного элемента, sweep, fuse и fillet. Управление видом не изменяет состояние документа.

Агенты создают проекты и редактируют модели через Agent API с блокировкой изменения агента. Если браузер опубликовал актуальный кадр, агент может получить точный PNG главного viewport по GET /api/v1/agent/projects/{id}/viewport.png; иначе API использует автономный серверный рендеринг. Обычный viewport API также возвращает сцену в формате JSON.

Описанные выше команды создают коробки и эскизы XY/XZ, добавляют эскизную геометрию и решаемые ограничения, выдавливают и вращают замкнутые профили, протягивают круглое сечение вдоль открытого эскиза, объединяют твёрдые B-rep, скругляют выбранные рёбра B-rep, меняют параметры элементов и геометрию эскизов, удаляют неиспользуемые эскизные объекты.

Все команды проходят через общую Command System; перед атомарным сохранением проверяется весь документ. Изменение ограничений решает и перемещает геометрию в рамках той же атомарной команды документа. В браузере нет элементов управления для создания, редактирования или удаления проектов и моделей.

Clone this wiki locally