Документация
САПР-геометрия
Рисование объектов, эскизов с ограничениями, параметрических историй, сеток и точных тел в общем геометрическом ядре.
Автоматически переведено с английского. Смотреть оригинал на английском
Рисование объектов
@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. Для него требуется только базовый пакет рабочей области и запись приложений не выполняется.
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. Линии, окружности и дуги относятся к точкам по идентификатору, поэтому две линии, имеющие общую конечную точку, имеют один и тот же идентификатор точки. Решатель перемещает только координаты точек и радиусы окружностей; он никогда не добавляет и не удаляет сущности.
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.
| Вариант | По умолчанию | Значение |
|---|---|---|
maxIterations | 200 | Верхняя граница итераций Левенберга – Марквардта перед решением выражается как failed. |
tolerance | 1e-9 | Наибольший абсолютный остаток считается решенным. |
| Поле результата | Содержание |
|---|---|
sketch | Входной эскиз с решенными координатами и радиусами. |
status | fully-constrained, under-constrained, over-constrained, conflicting, или failed. |
dof | Остальные степени свободы. |
free | Идентификаторы точек, которые все еще могут перемещаться, и идентификаторы кругов, радиус которых все еще может меняться. |
conflicts | Идентификаторы ограничений, которые не могут быть удовлетворены, в первую очередь худшее. |
redundant | Количество избыточных уравнений (дефицит ранга). |
iterations, residual, message | Решающая диагностика. |
Неверные входные броски
Эскиз, который относится к неизвестной точке или объекту, является скорее искаженным, чем неразрешимым, и solveSketch бросает SketchError. Проверьте импортированные эскизы, прежде чем решать их в цикле.
Ссылка на ограничение
Каждое ограничение представляет собой объект с type и необязательный id. Длины указаны в миллиметрах, углы — в радианах. В параметрической истории любая value также может быть строкой выражения параметра.
| Тип | Поля | Effect |
|---|---|---|
fixed | point, необязательный x, y | Прикрепляет точку (необязательно к явным координатам). |
coincident | a, b | Две точки занимают одно и то же положение. |
horizontal / vertical | line | Прямая параллельна X/Y. |
horizontalPoints / verticalPoints | a, b | Две точки имеют общую координату Y/X. |
distance | a, b, value | Евклидово расстояние между двумя точками. |
distanceX / distanceY | a, b, value | Знаковое горизонтальное/вертикальное смещение. |
length | line, value | Длина линии. |
parallel / perpendicular | a, b | Связь между двумя линиями. |
equalLength / equalRadius | a, b | Одинаковая длина линий/радиусы окружности или дуги. |
radius / diameter | circle, value | Размер круга или дуги. |
angle | a, b, value | Угол против часовой стрелки от линии a выровнять b, в радианах. |
pointOnLine / pointOnCircle | point и line / circle | Инцидентность. |
midpoint | point, line | Точка находится в середине линии. |
symmetric | a, b, line | Две точки зеркально отражают друг друга относительно линии. |
tangentLineCircle | line, circle | Линия касается окружности или дуги. |
tangentCircles | a, b, необязательный internal | Circles touch externally (distance = r1 + r2) or internally (distance = |r1 − r2|). |
concentric | a, b | Общий центр кругов или дуг. |
Дуги направлены против часовой стрелки от start до end о center. Радиус круга является переменной решателя, поэтому круг без radius, diameter, equalRadius, или ограничение касания появляется в free.
Создание параметрической детали
A History представляет собой таблицу параметров плюс упорядоченный список функций. Параметры — это числа или выражения других параметров. Они разрешаются в порядке зависимости, а цикл — это ошибка, которая называет цикл. Функции относятся к параметрам по имени в любом поле измерения.
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 по нормали.
| Особенность | Ключевые поля и значения по умолчанию |
|---|---|
sketch | plane, необязательный offset, sketch (сущности, ограничения, необязательные параметрические shapes: прямоугольник, круг, многоугольник, эллипс, прорезь, ломаная линия). |
extrude | sketch, depth, direction up/down/symmetric, operation new/union/subtract/intersect, необязательный targets (по умолчанию: все тела на данный момент), edge фаска/скругление торцевых граней (ends по умолчанию both), corner лечение и taper осадка в градусах. Петли внутри петель — это дырочки (чет-нечет). |
revolve | sketch, axis (x, yили линию эскиза), angle в градусах (по умолчанию 360), operation. |
hole | plane, 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. |
Размеры должны быть положительными и конечными; в противном случае конструкторы выдают ошибку диапазона. Бегать 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 |
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 История обычная: можно открыть в редакторе, изменить параметр и пересобрать. В рецепте выбраны только разумные числа.
Эвольвентные передачи
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 |
|---|---|---|
| Радиус наклона | m·z / 2 | 18 |
| Радиус кончика | шаг + м | 20 |
| Радиус корня | шаг − 1.25·м | 15.5 |
| Базовый радиус | шаг · cos α | 16.914 |
MIN_GEAR_TEETH равно 6: ниже этого боковые стороны подрезают базовый круг и соседние зубы перекрываются.
Данные о крепеже и посадке
| Размер | Подача | Метчик дрель | Зазор мелкий/средний/грубый | Головка Ø × высота | Диаметр цековки × глубина | Зенковка Ø |
|---|---|---|---|---|---|---|
| M3 | 0.5 | 2.5 | 3.2 / 3.4 / 3.6 | 5.5 × 3 | 6.5 × 3.4 | 6 |
| M5 | 0.8 | 4.2 | 5.3 / 5.5 / 5.8 | 8.5 × 5 | 10 × 5.7 | 10 |
| M6 | — | 5 | 6.4 / 6.6 / 7 | — | — | — |
| M8 | 1.25 | 6.8 | 8.4 / 9 / 10 | 13 × 8 | 15 × 9 | 16 |
| M12 | 1.75 | 10.2 | 13 / 13.5 / 14.5 | 18 × 12 | 20 × 13 | 24 |
Ценности исходят из 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 | вмешательство (нажать) | постоянная запрессовка втулок в корпусах |