Перейти к содержанию
CADCAMFUN
Документы

Документация

САПР-геометрия

Рисование объектов, эскизов с ограничениями, параметрических историй, сеток и точных тел в общем геометрическом ядре.

Автоматически переведено с английского. Смотреть оригинал на английском

Рисование объектов

@cadcamfun/core экспортирует функции САПР как напрямую, так и под cad пространство имен. Объекты 2D, ориентированные на схему, используют _tag дискриминатор: линия, окружность, дуга, полилиния, прямоугольник, эллипс, сплайн, текст, размер, штриховка и блок. Каждая сущность имеет стабильный идентификатор, уровень, видимость и состояние блокировки; выбор принадлежит состоянию редактора.

Геометрия объекта использует миллиметры и радианы. Углы дуги нормированы на полный поворот, а равные начальный/конечный углы представляют полный круг. Преобразование локального объекта применяет масштаб, поворот, а затем сдвиг; Affine2D поддерживает составные преобразования, которые могут включать сдвиг. Адаптеры элементов сцены и параметрической истории имеют свои собственные документированные угловые поля, включая размещение со значением степени и элементы управления функциями.

entitySchemaOf(tag) возвращает схему для одного типа сущности. Декодируйте импортированные данные перед вызовом функций геометрии. Границы, мозаика, пересечения, смещения и привязка — это отдельные операции; визуализация мозаичной кривой не заменяет ее аналитический объект.

Ограниченные эскизы

Эскизная модель содержит именованные точки, линии между точками, окружности с центром и радиусом, а также дуги против часовой стрелки. Идентификаторы общих точек выражают общие конечные точки. Ограничения включают совпадение, горизонтальное и вертикальное выравнивание, расстояния, длины, параллельные и перпендикулярные линии, равные длины и радиусы, касание, симметрию и геометрическое падение.

Численный решатель минимизирует остатки ограничений с помощью итерации Левенберга – Марквардта и якобиана центральной разности. Он сообщает о степенях свободы, свободных точках, избыточных уравнениях и противоречивых ограничениях. Результат может быть полностью ограниченным, недостаточно ограниченным, чрезмерно ограниченным, противоречивым или неудачным. Решение с недостаточными ограничениями может удовлетворять всем измерениям, сохраняя при этом возможность движения; вызывающие абоненты должны сохранять это различие.

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

Параметрические истории

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

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

Прочитать результат повтора

Вывод сетки может существовать, когда точное воспроизведение не может представить объект. Прежде чем делать заявления о точной геометрии, объеме или точности экспорта, проверьте тело и записи выпуска.

Геометрия и размещение сетки

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

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

Точное представление границ

cad.brep предоставляет аналитическую и NURBS-геометрию с топологией граней, петель, использования ребер, ребер и вершин. Его модули охватывают примитивы, развертки, лофты, логические значения, редактирование лиц, смешивание, сшивание, тесселяцию, классификацию, проверку, массовые свойства, а также чтение и запись STEP. history-brep.ts и scene-step.ts соедините это ядро с параметрическими деталями и размещенными элементами сцены.

POST /api/cad/exact/analyze возвращает проблемы достоверности для каждой детали, объем, площадь, центроид, границы, количество топологий, количество поверхностей, распознанные отверстия и классификацию обработки. Он также возвращает пропущенные элементы с указанием причин и совокупных итогов. Результат призматической обработки сообщает о контурах, отверстиях, карманах и верхнем/нижнем уровнях; неподдерживаемые части имеют причину.

POST /api/cad/exact/assembly сообщает о пересечениях, ожидаемых перекрытиях, соприкасающихся и неопределенных парах, позициях спецификации, соединениях и планах крепежа. Неопределенная геометрия — это результат, о котором сообщается, а не доказательство наличия зазора. Эти маршруты анализа вычисляют результаты, не изменяя чертеж.

Импорт и экспорт

Ядро имеет DXF и помощники по импорту чертежей, призматический путь интерпретации STEP и точный считыватель B-rep STEP. Призматический путь считывает площадь основания и высоту выдавливания подходящих пластин, кронштейнов и фланцев; он сообщает о функциях, которые призма не может описать. Выбирайте именно тот считыватель, когда необходима точная поддерживаемая топология STEP, и проверяйте диагностику по любому пути.

sceneToStep записывает сцену как STEP AP214. Точные поддерживаемые тела сохраняют точную геометрию; Твердые тела, состоящие только из сетки, могут быть созданы как граненые тела. Нетвердые элементы пропускаются с указанием причин. faceted опция управляет этим резервным вариантом. Ответ без step не содержит экспортируемых твердых веществ.

Точные маршруты HTTP принимают либо elements или drawingId; явные элементы имеют приоритет. Массивы моментальных снимков допускают элементы 1–2,000 и дополнительный выбор до 200 идентификаторов. При наличии сохраненного рисунка сайдкар считывает сцену в соответствии с правилами доступа к рисунку. Отсутствующий источник, пустой чертеж, неизвестный чертеж или запрещенный чертеж вызывают соответствующую ошибку запроса или доступа.

Технические чертежи

The drawing пространство имен предоставляет проекции, сечения, размеры, состав листов и выходные данные SVG из моделей 3D. Это отдельное представление редактируемого чертежа объекта 2D и программы обработки. Геометрия проекции и сечения должна быть восстановлена после изменений модели; экспорт листа фиксирует состояние модели, использованное для ее построения.

Где расширить геометрию

Начните с packages/core/src/cad/index.ts для общедоступной поверхности САПР. Операции сущностей живут рядом entities.ts; решение ограничений находится в sketch.ts; история сетки находится в history.ts; точный повтор находится в history-brep.ts; точная топология и обмен находятся под brep/. packages/core/src/drawing/ владеет листовым выводом. Поддерживающие модули в той же папке включают expr.ts (выражения параметров, такие как width / 2 + 3, разрешается в порядке зависимости, при этом циклы сообщаются как ошибки), tolerance.ts (для кривых учитывается сегмент хорда-сагитта), gear.ts (ISO 53 контуры эвольвентной цилиндрической шестерни), thread.ts, sheet-metal.ts, fasteners.ts, recipes.ts (генераторы, которые выдают полные, полностью ограниченные истории объектов), dfm.ts (результаты проектирования для производства с измеренными и требуемыми значениями) и dxf.ts.

Функции геометрии работают со значениями, не открывая хранилище приложения. Службы Sidecar управляют доступом и сохранением данных, а адаптеры рабочего стола — взаимодействием и рендерингом. Сохраняйте явные преобразования на границах, чтобы отображаемая сетка, точное тело и сохраненная история сохраняли свое четкое значение.

Создайте, проверьте и экспортируйте твердое тело

В этом полном базовом примере создается блок размером 40 × 25 × 8 мм с одним углом в начале координат, проверяется его топология, измеряется и экспортируется текст STEP. Для него требуется только базовый пакет рабочей области и запись приложений не выполняется.

Точная коробка и ее текст STEP.
import { cad } from "@cadcamfun/core"

const solid = cad.brep.makeBox(40, 25, 8)
const report = cad.brep.validateBrep(solid)
if (!report.valid) throw new Error(JSON.stringify(report.issues))

const mass = cad.brep.massProperties(solid)
console.log(mass.volume.toFixed(3)) // "8000.000" cubic millimetres
console.log(mass.centroid) // approximately { x: 20, y: 12.5, z: 4 }
const step = cad.brep.writeStepBreps([{ name: "Bracket blank", brep: solid }], {
  author: "Workshop",
  timestamp: "2026-01-01T00:00:00.000Z"
})
console.log(step.startsWith("ISO-10303-21;")) // true

Явная временная метка делает повторяющиеся выходные данные обмена воспроизводимыми. Без него при записи STEP используется текущее время. massProperties также возвращает площадь, площади на каждую грань и тензор инерции относительно центроида при единичной плотности; объем – мм³, площадь – мм². Явно преобразуйте плотность при вычислении физической массы.

Источник: packages/core/src/cad/brep/primitives.ts, mass.ts, validate.ts, и step.ts.

Параметры проверки и преобразования

validateBrep возвращает valid, выдавать записи, manifoldSolidи необязательный род/том. manifoldSolid означает закрытые оболочки, каждое ребро которых используется дважды в противоположных смыслах. Допуск на геометрическое расстояние по умолчанию масштабируется как 10⁻⁵ размера модели с полом 10⁻⁶ мм. Звонящий может предоставить tol, пропустите проверку объема/ориентации с помощью skipVolumeили используйте грубую мозаику для ориентации coarseVolume.

API точного анализа machining флаг по умолчанию имеет значение true. Экспорт сцены STEP faceted по умолчанию установлено значение true, а планирование крепежа сборки washers по умолчанию опция имеет значение true. Идентификаторы выбора относятся к элементам сцены, включая дочерние компоненты, разрешенные при обходе сцены. Эти параметры HTTP влияют на анализ/экспорт, а не на сохраненный чертеж.

Экспорт сцен возвращает для каждой части exact, faces, validи необязательное примечание. Проверьте эти поля рядом skipped: допустимое граненое тело можно экспортировать без сохранения аналитических поверхностей.

Источник: packages/core/src/cad/brep/validate.ts, scene-analysis.ts, scene-step.ts, assembly-analysis.ts, и packages/api/src/cad-exact.ts.

Исправление неудачной перестройки или экспорта

НахождениеСледующая проверка
Эскиз остается недостаточно ограниченнымПрочитайте степени свободы и идентификаторы свободных точек. Добавьте недостающие ограничения положения/ориентации; линия с размерами только с одной фиксированной конечной точкой все еще может вращаться.
Конфликт ограничений эскизаИспользуйте именованные идентификаторы конфликтов и остаток для обнаружения несовместимых измерений. Повторение совместимого уравнения является избыточностью; две разные требуемые длины являются конфликтом.
Функция истории ссылается на неизвестное тело или самолет.Проверьте порядок объектов и идентификаторы. Зависимости должны существовать ранее в воспроизведении, а подавление/удаление может сделать недействительными последующие ссылки.
Точная модель недоступна после масштабирования.Проверьте неравномерность масштаба и указанную причину элемента. Используйте поддерживаемое однородное размещение или примите и пометьте фасетный экспорт.
В результате STEP пропущены элементы или нет текстаПроверьте, содержит ли выделение сплошные тела и включен ли резервный вариант фасета. Пустой выбор или выбор 2только D не может создать сплошной файл STEP.

Примитивные размеры должны быть положительными и конечными. Функции прямой геометрии могут выдавать ошибки диапазона для недопустимых размеров; Транспортный и сервисный уровни должны преобразовать эти сбои в свои собственные типизированные результаты. Проблемы восстановления привязаны к идентификаторам объектов, поэтому сбой можно устранить в его источнике, а не скрывать, сохраняя более раннюю сетку.

Источник: packages/core/src/cad/sketch.test.ts, history.ts, scene-step.ts, и apps/sidecar/test/cad-exact.test.ts.

Решите эскиз шаг за шагом

Эскиз — это простые данные: массив entities (точки, линии, окружности, дуги) и массив constraints. Линии, окружности и дуги относятся к точкам по идентификатору, поэтому две линии, имеющие общую конечную точку, имеют один и тот же идентификатор точки. Решатель перемещает только координаты точек и радиусы окружностей; он никогда не добавляет и не удаляет сущности.

p1 (фиксировано)p2p3p4 l1 · горизонтальныйl2 · вертикальный l3 · горизонтальныйl4 · вертикальный ширина = 40 глубина = 25
Эскиз, используемый в примерах: четыре точки, четыре линии, одна фиксированная точка, четыре ограничения ориентации и два размера длины. Все степени свободы удаляются, поэтому решатель сообщает fully-constrained с dof = 0.
Решение полностью ограниченного прямоугольника
import { cad } from "@cadcamfun/core"

const sketch = {
  entities: [
    { id: "p1", kind: "point", x: 0, y: 0 },
    { id: "p2", kind: "point", x: 38, y: 1 },   // rough positions are fine:
    { id: "p3", kind: "point", x: 39, y: 26 },  // the solver moves them
    { id: "p4", kind: "point", x: 1, y: 24 },
    { id: "l1", kind: "line", p1: "p1", p2: "p2" },
    { id: "l2", kind: "line", p1: "p2", p2: "p3" },
    { id: "l3", kind: "line", p1: "p3", p2: "p4" },
    { id: "l4", kind: "line", p1: "p4", p2: "p1" },
  ],
  constraints: [
    { type: "fixed", point: "p1", x: 0, y: 0 },
    { type: "horizontal", line: "l1" },
    { type: "horizontal", line: "l3" },
    { type: "vertical", line: "l2" },
    { type: "vertical", line: "l4" },
    { id: "width", type: "length", line: "l1", value: 40 },
    { id: "depth", type: "length", line: "l2", value: 25 },
  ],
}

const result = cad.solveSketch(sketch)
result.status     // "fully-constrained"
result.dof        // 0
result.iterations // 3
result.residual   // < 1e-9
// points now at (0,0) (40,0) (40,25) (0,25)

Запустите тот же скетч без fixed ограничение, и результат изменится на under-constrained с dof = 2 и free = ["p1", "p2", "p3", "p4"]. Прямоугольник по-прежнему имеет правильный размер, но может скользить по осям X и Y. Добавьте третью длину, { id: "w2", type: "length", line: "l3", value: 50 }, и статус становится conflicting. conflicts затем перечисляет именованные ограничения, которые не могут быть удовлетворены вместе, начиная с худшего (например, w2 и width). Назовите ограничения, которые вас волнуют. id; о безымянных ограничениях сообщается с помощью сгенерированной метки, например vertical#4.

ВариантПо умолчаниюЗначение
maxIterations200Верхняя граница итераций Левенберга – Марквардта перед решением выражается как failed.
tolerance1e-9Наибольший абсолютный остаток считается решенным.
Поле результатаСодержание
sketchВходной эскиз с решенными координатами и радиусами.
statusfully-constrained, under-constrained, over-constrained, conflicting, или failed.
dofОстальные степени свободы.
freeИдентификаторы точек, которые все еще могут перемещаться, и идентификаторы кругов, радиус которых все еще может меняться.
conflictsИдентификаторы ограничений, которые не могут быть удовлетворены, в первую очередь худшее.
redundantКоличество избыточных уравнений (дефицит ранга).
iterations, residual, messageРешающая диагностика.

Неверные входные броски

Эскиз, который относится к неизвестной точке или объекту, является скорее искаженным, чем неразрешимым, и solveSketch бросает SketchError. Проверьте импортированные эскизы, прежде чем решать их в цикле.

Ссылка на ограничение

Каждое ограничение представляет собой объект с type и необязательный id. Длины указаны в миллиметрах, углы — в радианах. В параметрической истории любая value также может быть строкой выражения параметра.

ТипПоляEffect
fixedpoint, необязательный x, yПрикрепляет точку (необязательно к явным координатам).
coincidenta, bДве точки занимают одно и то же положение.
horizontal / verticallineПрямая параллельна X/Y.
horizontalPoints / verticalPointsa, bДве точки имеют общую координату Y/X.
distancea, b, valueЕвклидово расстояние между двумя точками.
distanceX / distanceYa, b, valueЗнаковое горизонтальное/вертикальное смещение.
lengthline, valueДлина линии.
parallel / perpendiculara, bСвязь между двумя линиями.
equalLength / equalRadiusa, bОдинаковая длина линий/радиусы окружности или дуги.
radius / diametercircle, valueРазмер круга или дуги.
anglea, b, valueУгол против часовой стрелки от линии a выровнять b, в радианах.
pointOnLine / pointOnCirclepoint и line / circleИнцидентность.
midpointpoint, lineТочка находится в середине линии.
symmetrica, b, lineДве точки зеркально отражают друг друга относительно линии.
tangentLineCircleline, circleЛиния касается окружности или дуги.
tangentCirclesa, b, необязательный internalCircles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|).
concentrica, bОбщий центр кругов или дуг.

Дуги направлены против часовой стрелки от start до end о center. Радиус круга является переменной решателя, поэтому круг без radius, diameter, equalRadius, или ограничение касания появляется в free.

Создание параметрической детали

A History представляет собой таблицу параметров плюс упорядоченный список функций. Параметры — это числа или выражения других параметров. Они разрешаются в порядке зависимости, а цикл — это ошибка, которая называет цикл. Функции относятся к параметрам по имени в любом поле измерения.

Параметрическая пластина: 40 × 25 × 8 мм со сквозным отверстием Ø5 Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Result of the history example below: the sketch is solved, extruded by thick = 8 mm, and the hole (diameter = width / 8 = 5 mm) is subtracted. Exact replay of this history has a volume of 7,842.92 mm³ (8,000 − π·2.5²·8).
Пластина с параметрическим отверстием
import { cad } from "@cadcamfun/core"

const history = {
  parameters: { width: 40, depth: 25, thick: 8, hole: "width / 8" },
  features: [
    // the rectangle sketch from the previous section, with dimension
    // values replaced by parameter names: value: "width", value: "depth"
    { id: "s1", type: "sketch", plane: "XY", sketch: rectangleSketch },
    { id: "e1", type: "extrude", sketch: "s1", depth: "thick", operation: "new" },
    { id: "h1", type: "hole", plane: "XY", offset: "thick",
      at: [20, 12.5], diameter: "hole", depth: "thick" },
  ],
}

const mesh = cad.rebuild(history)
mesh.parameters // { width: 40, depth: 25, thick: 8, hole: 5 }
mesh.bodies     // one mesh body, id "e1"
mesh.issues     // []

const exact = cad.rebuildExact(history, mesh)
exact.bodies[0].brep        // present: the history has an exact representation
exact.warnings              // []
cad.brep.massProperties(exact.bodies[0].brep).volume // 7842.92… mm³
cad.brep.validateBrep(exact.bodies[0].brep).valid    // true
rebuild возвращает bodies (треугольные сетки с указанием объекта, который их создал), разрешенные parameters, плоскость, рамка и результат решения каждого эскиза, развертки элементов листового металла и issues. О функции, которую невозможно построить, сообщается в issues с его идентификатором функции и серьезностью, и она пропускается. Функции, которые от него не зависят, все равно строятся. rebuildExact(history, given?, options?) может повторно использовать уже имеющуюся у вас перестройку сетки и принимает budgetMs бюджет времени.

Базовые плоскости правосторонние: XY имеет u = X, v = Y, нормальный +Z; YZ имеет u = Y, v = Z, нормальный +X; ZX имеет u = Z, v = X, нормальный +Y. Эскиз, отверстие или текст также можно разместить на идентификаторе более ранней версии. plane особенность, с offset по нормали.

ОсобенностьКлючевые поля и значения по умолчанию
sketchplane, необязательный offset, sketch (сущности, ограничения, необязательные параметрические shapes: прямоугольник, круг, многоугольник, эллипс, прорезь, ломаная линия).
extrudesketch, depth, direction up/down/symmetric, operation new/union/subtract/intersect, необязательный targets (по умолчанию: все тела на данный момент), edge фаска/скругление торцевых граней (ends по умолчанию both), corner лечение и taper осадка в градусах. Петли внутри петель — это дырочки (чет-нечет).
revolvesketch, axis (x, yили линию эскиза), angle в градусах (по умолчанию 360), operation.
holeplane, offset, at [u, v], diameter, depth; kind simple (по умолчанию), counterbore, или countersink с headDiameter, headDepth, и angle (по умолчанию 90°). Дополнительная косметика thread примечание (например M4), toleranceи ISO 286 fit такой как H7. Косметическая резьба не меняет геометрию.
pattern, mirrorКопии инструмента более ранней функции, примененные таким же образом.
sweep, loft, coilПрофили вдоль пути, между секциями или по спирали.
shell, fillet, draft, pushpullРедактирование граней и краев.
move, scale, split, combineОперации на теле.
rib, sheet, thread, textРебра, тела из листового металла с плоскими узорами, смоделированной резьбой и текстом, нанесенным штриховым шрифтом.
plane, primitive, mateСтроительные плоскости, примитивные тела и сопряжение сборок.

Редактируйте историю, а не тело

Измените параметр и перестройте: каждый эскиз, в котором он используется, пересчитывается, а каждое твердое тело и логическое значение после этого переделывается. Непосредственное редактирование сгенерированной сетки теряется при следующей перестройке.

Точные примитивы и размещение

Ядро B-rep напрямую создает аналитические твердые тела. Каждый конструктор занимает необязательное место размещения. Frame; без него твердое тело помещается в мировую систему координат.

КонструкторАргументыМировое размещение
makeBox(dx, dy, dz, placement?)Длина кромки в ммМинимальный угол в начале координат.
makeCylinder(radius, height, placement?)Радиус и высотаКонус равных радиусов; оси по Z.
makeCone(r1, r2, height, placement?)Базовый и верхний радиусыОсь по Z.
makeSphere(radius, placement?)РадиусСосредоточено на происхождении.
makeTorus(major, minor, placement?)Радиусы колец и трубокОсь по Z.
Точные примитивы Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
makeBox(40, 25, 8) with its corner at the origin, next to a cylinder of radius 6 and height 20 placed beside it. The axes show +X (red), +Y (green), and +Z (blue).

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

Практики моделирования, обеспечивающие надежное восстановление

  • Прежде чем добавлять размеры, зафиксируйте одну точку и ограничите ориентацию. Эскиз с недостаточными ограничениями может соответствовать всем размерам и при этом перемещаться при следующей перестройке.
  • Дайте каждому измерению, обращенному к пользователю, id поэтому в отчете о конфликте упоминается что-то, что человек узнает.
  • Предпочитайте параметры и выражения ("width / 2 + 3", "max(a, b) * 2") над повторяющимися литералами; одно редактирование затем управляет всей частью.
  • Ссылайтесь на более ранние объекты по идентификатору только после того, как они появятся в списке. Изменение порядка истории может превратить действительную ссылку в проблему.
  • Использовать targets на логических значениях, когда деталь имеет несколько тел. По умолчанию операция применяется к каждому построенному на данный момент телу.
  • Проверять issues после каждого rebuild и на тело brep присутствие после rebuildExact прежде чем полагаться на точные массовые характеристики или экспорт STEP.
  • Внутри эскизов сохраняйте единицы измерения в миллиметрах и радианах. Поля со градусными значениями документируются как таковые (угол вращения, конус, угол зенковки).

Рецепты дизайна

cad.buildRecipe(name, input) превращает несколько инженерных данных в полную параметрическую историю, а также однострочное резюме, полученные числа и правила проектирования, по которым они были получены. Существует семь рецептов; параметры без значения по умолчанию являются производными от других, если они опущены.
ИмяЗаголовокПараметры (по умолчанию)
mounting_plateМонтажная пластинаwidth=100, depth=60, thickness=10, fastener=M8, fit=medium, counterbore=false, cornerRadius=0, edgeChamfer=0, edgeDistance
flangeБолтовой фланецouterDiameter=120, boreDiameter=40, thickness=14, boltCount=6, fastener=M10, fit=medium, boltCircleDiameter, hubDiameter=0, hubHeight=0, edgeChamfer=0
l_bracketГ-образный кронштейнbaseLength=60, legHeight=50, thickness=5, width=40, fastener=M6, fit=medium, holesPerLeg=1, cornerRadius=0
stepped_shaftСтупенчатый валразделы, фаска=1, keywaySection=-1, keyLength
pipe_bendКолено трубыouterDiameter=30, wall=3, legA=100, legB=100, bendAngle=90, bendRadius
duct_transitionПереходник воздуховодаshape=rect, width1=80, height1=50, width2=40, height2=40, length=120, wall=2
enclosureКорпусlength=120, width=80, height=40, wall=3, floor, cornerRadius=6, fastener=M3, bosses=true
Монтажная пластина для винтов M8
import { cad } from "@cadcamfun/core"

const recipe = cad.buildRecipe("mounting_plate", { width: 100, depth: 60, thickness: 10, fastener: "M8" })
recipe.summary  // "100 x 60 x 10 mm plate with four holes for M8 screws (Ø9 mm, medium fit)"
recipe.derived  // { holeDiameter: 9, edgeDistance: 18, holeSpacingX: 64, holeSpacingY: 24 }
recipe.rules    // ["hole diameter from ISO 273",
                //  "centre to edge >= 1.5 x hole diameter",
                //  "centre to centre >= 2.5 x hole diameter"]

recipe.history.parameters  // { width: 100, depth: 60, thick: 10, hole: 9, inset: 18 }
// features: sketch "outline", extrude "plate", holes hole_sw, hole_se, hole_ne, hole_nw
//           placed at ["inset","inset"], ["width - inset","inset"], …

const mesh = cad.rebuild(recipe.history)          // issues: []
const exact = cad.rebuildExact(recipe.history, mesh)
cad.brep.massProperties(exact.bodies[0].brep).volume  // 57455.31 mm³ = 60000 − 4·π·4.5²·10
рецепт монтажной_пластины, M8 Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
Восстановленный рецепт: 100 × 60 × 10 мм с четырьмя отверстиями Ø9 18 мм с каждого края. Поскольку позиции отверстий являются выражениями ширины и вставки, изменение ширины в истории перемещает вместе с ней и правые отверстия.

История обычная: можно открыть в редакторе, изменить параметр и пересобрать. В рецепте выбраны только разумные числа.

Эвольвентные передачи

Прямозубая шестерня с модулем 2, 18-зубом
const spec = { moduleValue: 2, teeth: 18 }          // pressureAngle defaults to 20°
cad.gearDimensions(spec)
// { pitchRadius: 18, baseRadius: 16.914, tipRadius: 20, rootRadius: 15.5 }

const outline = cad.gearOutline(spec, 6)   // 324 points, 6 per flank
cad.gearOutline({ moduleValue: 2, teeth: 5 })
// throws: 'A gear needs a module > 0 and at least 6 whole teeth'
Прямозубая шестерня m = 2, z = 18 Перетащите на орбиту · прокрутите, чтобы увеличить · перетащите вправо, чтобы панорамировать
gearOutline extruded 8 mm with an Ø8 bore. Pitch radius = m·z/2 = 18 mm, tip radius = pitch + m = 20 mm, root radius = pitch − 1.25·m = 15.5 mm, base radius = pitch·cos 20° ≈ 16.91 mm.
ИзмерениеФормулаm = 2, z = 18
Радиус наклонаm·z / 218
Радиус кончикашаг + м20
Радиус корняшаг − 1.25·м15.5
Базовый радиусшаг · cos α16.914
MIN_GEAR_TEETH равно 6: ниже этого боковые стороны подрезают базовый круг и соседние зубы перекрываются.

Данные о крепеже и посадке

РазмерПодачаМетчик дрельЗазор мелкий/средний/грубыйГоловка Ø × высотаДиаметр цековки × глубинаЗенковка Ø
M30.52.53.2 / 3.4 / 3.65.5 × 36.5 × 3.46
M50.84.25.3 / 5.5 / 5.88.5 × 510 × 5.710
M6—56.4 / 6.6 / 7———
M81.256.88.4 / 9 / 1013 × 815 × 916
M121.7510.213 / 13.5 / 14.518 × 1220 × 1324

Ценности исходят из cad.metricThread(size), clearanceHole(size, fit) и tapDrill(size); строка M6 была запрошена только через двух помощников. Связанные правила с реальными результатами для винта M6 и его отверстия с зазором Ø6.6:

ПомощникРезультат
threadEngagement("M6", material)сталь 6, алюминий 9, литой 12, пластик 12 мм
tappedHoleDepth("M6", 12)15.8 мм
minEdgeDistance(6.6) / (6.6, "plastic")9.9 / 13.2 мм
minHoleSpacing(6.6)16.5 мм (2.5 × диаметр)
keywayFor(25)над 22 до 30: b 8, h 7, t1 4, t2 3.3
toleranceGrade(7, 25) / (6, 25)21 / 13 µm
СоответствоватьДобрыйВариант использования
H7/h6расположение (скользящее)детали собраны вручную и точно расположены, скользящие втулки, направляющие втулки
H7/g6близкий бегточное ведение движущихся частей, шпинделей, золотников
H7/f7бегподшипники скольжения, валы в общем машиностроении
H7/k6переходшестерни, шкивы и внутренние кольца подшипников прибиваются легким нажатием
H7/n6интерференция (легкое нажатие)втулки и ступицы запрессованы; ключ не нужен для небольшого крутящего момента
H7/p6вмешательство (нажать)постоянная запрессовка втулок в корпусах