Bitbybit Docs
    Preparing search index...

    Class OCCTOperations

    Операции моделирования, превращающие контуры и грани OpenCascade в поверхности и тела и измеряющие формы: лофт через сечения, выдавливание и вращение, протяжка профилей вдоль путей, смещение, утолщение оболочек в тела, срезы и разделение, плюс ограничивающие боксы, ограничивающие сферы и запросы ближайших точек. Расстояния в единицах модели, углы в градусах; каждая операция возвращает новую форму. Булевы операции живут в booleans, скругление в fillets.

    Index

    Constructors

    closest pts

    • Находит пару точек, по одной на каждой форме, которые ближе всего друг к другу.

      Расстояние между ними - зазор между формами; оно равно 0, когда они касаются или перекрываются. Выбрасывает ошибку, когда пару найти нельзя.

      Parameters

      Returns Promise<Point3[]>

      Точка на первой форме и точка на второй

      const [onBox, onSphere] = await bitbybit.occt.operations.closestPointsBetweenTwoShapes({ shape1: box, shape2: sphere });
      
    • Находит для каждой точки в списке ближайшую точку на форме.

      Точка, уже лежащая на форме, отображается в саму себя. Полезно для привязки точек к поверхности.

      Parameters

      Returns Promise<Point3[]>

      По одной точке на форме на каждую входную точку, в том же порядке

      const snapped = await bitbybit.occt.operations.closestPointsOnShapeFromPoints({ shape: sphere, points: [[0, 20, 0], [20, 0, 0]] });
      
    • Находит ближайшую точку на каждой из нескольких форм для каждой точки в списке.

      Результат - один плоский список: все точки для первой формы, в порядке точек, затем все точки для второй формы и так далее.

      Parameters

      Returns Promise<Point3[]>

      Ближайшие точки, сгруппированные по формам

      const snapped = await bitbybit.occt.operations.closestPointsOnShapesFromPoints({ shapes: [box, sphere], points: [[0, 20, 0], [20, 0, 0]] });
      

    divisions

    • Режет форму на части другими формами, как нож разрезает буханку, не удаляя материала.

      При nonDestructive равном true, по умолчанию, входные данные остаются нетронутыми, а результат содержит части каждой участвующей формы, включая резаки; при false возвращаются только части shape. localFuzzyTolerance позволяет геометрии, которая почти касается, считаться касающейся.

      Parameters

      • inputs: SplitDto<TopoDSShapePointer>

        Разделяемая форма, формы, которыми ее разделить, и параметры

      Returns Promise<TopoDSShapePointer[]>

      Части

      const pieces = await bitbybit.occt.operations.splitShapeWithShapes({ shape: box, shapes: [cuttingPlane], localFuzzyTolerance: 1e-4, nonDestructive: false });
      
    • Режет тело на параллельные срезы вдоль направления, как буханку хлеба, через каждые step единиц модели снизу формы вверх.

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

      Parameters

      Returns Promise<TopoDSCompoundPointer>

      Компаунд граней сечений

      const layers = await bitbybit.occt.operations.slice({ shape: sphere, step: 0.5, direction: [0, 1, 0] });
      
    • Режет тело на параллельные срезы, как slice, но с повторяющимся шаблоном промежутков между ними, например 0.1, 0.5, 0.1, 0.5.

      Шаблон применяется снизу формы вверх и повторяется, пока не достигнут верх.

      Parameters

      Returns Promise<TopoDSCompoundPointer>

      Компаунд граней сечений

      const layers = await bitbybit.occt.operations.sliceInStepPattern({ shape: sphere, steps: [0.1, 0.5], direction: [0, 1, 0] });
      

    extrusions

    • Выдавливает форму по прямой вдоль вектора, длина которого - расстояние: грань становится телом, контур - оболочкой, ребро - гранью.

      Сама форма остается в начале выдавливания; вектор в единицах модели, так что [0, 10, 0] выдавливает на 10 единиц вверх.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Выдавленная форма

      const disc = await bitbybit.occt.shapes.face.createCircleFace({ radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      const cylinder = await bitbybit.occt.operations.extrude({ shape: disc, direction: [0, 10, 0] });
    • Выдавливает несколько форм вдоль одного и того же вектора, как extrude для одной.

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      Выдавленные формы, в том же порядке

      const walls = await bitbybit.occt.operations.extrudeShapes({ shapes: [faceA, faceB], direction: [0, 10, 0] });
      
    • Выдавливает плоскую форму вверх вдоль Y на height, скручивая ее на angle градусов вокруг оси Y, как витую колонну.

      Форма должна лежать плоско, как и профили, которые создает этот пакет. При makeSolid равном true, по умолчанию, профиль-грань дает замкнутое тело; контур дает скрученную оболочку.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Скрученное выдавливание

      const square = await bitbybit.occt.shapes.face.createSquareFace({ size: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      const twisted = await bitbybit.occt.operations.rotatedExtrude({ shape: square, height: 20, angle: 90, makeSolid: true });

    lofts

    • Строит поверхность через ряд контуров, как кожу, натянутую на ребра каркаса: каждый контур - одно сечение, и поверхность проходит через них в порядке списка.

      Ребра принимаются как контуры из одного ребра. При makeSolid равном true и замкнутых сечениях результат закрывается в тело; иначе это оболочка. Сечения лучше всего сопоставляются при равных числах ребер.

      Parameters

      • inputs: LoftDto<TopoDSWirePointer>

        Контуры или ребра сечений, по порядку, и создавать ли тело

      Returns Promise<TopoDSShapePointer>

      Оболочка или тело, построенные лофтом

      const bottom = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      const upper = await bitbybit.occt.shapes.wire.createSquareWire({ size: 6, center: [0, 10, 0], direction: [0, 1, 0] });
      const vase = await bitbybit.occt.operations.loft({ shapes: [bottom, upper], makeSolid: true });
    • Строит поверхность через ряд контуров, как loft, с управлением тем, как подгоняется кожа.

      straight делает линейчатые участки между сечениями вместо гладкого перехода; closed замыкает поверхность от последнего сечения обратно к первому, а periodic делает эту петлю гладкой, пересэмплируя сечения. startVertex и endVertex сводят концы в точки.

      Parameters

      • inputs: LoftAdvancedDto<TopoDSWirePointer>

        Контуры или ребра сечений, создавать ли тело, параметры замыкания и сглаживания и необязательные конечные точки

      Returns Promise<TopoDSShapePointer>

      Оболочка или тело, построенные лофтом

      const cone = await bitbybit.occt.operations.loftAdvanced({
      shapes: [circleBottom, circleMiddle],
      makeSolid: true,
      closed: false,
      periodic: false,
      straight: false,
      nrPeriodicSections: 10,
      useSmoothing: false,
      maxUDegree: 3,
      tolerance: 1e-7,
      parType: Bit.Inputs.OCCT.approxParametrizationTypeEnum.approxCentripetal,
      endVertex: [0, 20, 0],
      });

    measure

    • Измеряет, как далеко каждая точка в списке от формы, как прямое расстояние до ближайшей точки на ней, в единицах модели.

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

      Parameters

      Returns Promise<number[]>

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

      const distances = await bitbybit.occt.operations.distancesToShapeFromPoints({ shape: sphere, points: [[0, 20, 0], [20, 0, 0]] });
      
    • Вычисляет выровненный по осям бокс, охватывающий форму: его минимальный и максимальный углы, центр и размер вдоль X, Y и Z.

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

      Parameters

      Returns Promise<BoundingBoxPropsDto>

      Бокс как min, max, center и size

      const box = await bitbybit.occt.operations.boundingBoxOfShape({ shape });
      console.log(box.size, box.center);
    • Читает минимальный угол выровненного по осям ограничивающего бокса формы, точку с наименьшими X, Y и Z.

      Parameters

      Returns Promise<Point3>

      Минимальный угол

      const min = await bitbybit.occt.operations.boundingBoxMinOfShape({ shape });
      
    • Читает максимальный угол выровненного по осям ограничивающего бокса формы, точку с наибольшими X, Y и Z.

      Parameters

      Returns Promise<Point3>

      Максимальный угол

      const max = await bitbybit.occt.operations.boundingBoxMaxOfShape({ shape });
      
    • Читает центр выровненного по осям ограничивающего бокса формы, посередине между его двумя углами.

      Это не центр масс; его дают shapes.solid.getSolidCenterOfMass и его собратья.

      Parameters

      Returns Promise<Point3>

      Центр бокса

      const center = await bitbybit.occt.operations.boundingBoxCenterOfShape({ shape });
      
    • Читает размер выровненного по осям ограничивающего бокса формы вдоль X, Y и Z, в единицах модели.

      Parameters

      Returns Promise<Vector3>

      Ширина, высота и длина бокса

      const size = await bitbybit.occt.operations.boundingBoxSizeOfShape({ shape });
      
    • Строит выровненный по осям ограничивающий бокс формы как тело бокса, удобно для его отрисовки или использования в булевой операции.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Тело бокса

      const boxSolid = await bitbybit.occt.operations.boundingBoxShapeOfShape({ shape });
      
    • Вычисляет сферу, охватывающую форму: она центрирована на ограничивающем боксе и достигает его углов, так что всегда содержит форму, но не является наименьшей возможной сферой.

      Parameters

      Returns Promise<BoundingSpherePropsDto>

      Сфера как center и radius

      const sphere = await bitbybit.occt.operations.boundingSphereOfShape({ shape });
      console.log(sphere.radius);
    • Читает центр ограничивающей сферы формы, который является центром ее ограничивающего бокса.

      Parameters

      Returns Promise<Point3>

      Центр сферы

      const center = await bitbybit.occt.operations.boundingSphereCenterOfShape({ shape });
      
    • Читает радиус ограничивающей сферы формы, расстояние от центра ограничивающего бокса до его угла, в единицах модели.

      Parameters

      Returns Promise<number>

      Радиус

      const radius = await bitbybit.occt.operations.boundingSphereRadiusOfShape({ shape });
      
    • Строит ограничивающую сферу формы как тело сферы.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Тело сферы

      const sphereSolid = await bitbybit.occt.operations.boundingSphereShapeOfShape({ shape });
      

    offsets

    • Сдвигает границу формы наружу, или внутрь при отрицательном расстоянии, на фиксированное расстояние: контур растет в параллельное очертание, грань или тело - в большее.

      Контур или ребро смещается в собственной плоскости или на face, если она задана; углы скругляются. Расстояние 0 возвращает форму как есть.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Смещенная форма

      const bigger = await bitbybit.occt.operations.offset({ shape: box, distance: 1, tolerance: 0.1 });
      
    • Смещает форму, как offset, с выбором способа соединения углов: arc скругляет их, intersection продлевает стороны до острого угла, tangent сохраняет их касательными.

      removeIntEdges убирает внутренние ребра, которые смещение может оставить на теле.

      Parameters

      • inputs: OffsetAdvancedDto<TopoDSShapePointer, TopoDSFacePointer>

        Форма, необязательная грань, на которой смещать контур, расстояние, допуск, тип соединения углов и удалять ли внутренние ребра

      Returns Promise<TopoDSShapePointer>

      Смещенная форма

      const sharper = await bitbybit.occt.operations.offsetAdv({
      shape: rectangleWire,
      distance: 1,
      tolerance: 0.1,
      joinType: Bit.Inputs.OCCT.joinTypeEnum.intersection,
      removeIntEdges: false,
      });
    • Придает грани или оболочке толщину, превращая ее в сплошную плиту или стенку заданного offset.

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

      Parameters

      Returns Promise<TopoDSShapePointer>

      Утолщенное тело

      const wall = await bitbybit.occt.operations.makeThickSolidSimple({ shape: loftedShell, offset: 0.5 });
      
    • Выдалбливает тело в оболочку заданной толщины стенки, удаляя перечисленные грани и смещая остальные.

      Удаление верхней грани бокса, например, дает открытую чашку. offset - толщина стенки, отрицательная растит внутрь; joinType говорит, как смещенные стенки сходятся в углах, остальные флаги передаются построителю толстых тел ядра.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Полое тело

      const box = await bitbybit.occt.shapes.solid.createBox({ width: 10, length: 10, height: 10, center: [0, 0, 0] });
      const faces = await bitbybit.occt.shapes.face.getFaces({ shape: box });
      const cup = await bitbybit.occt.operations.makeThickSolidByJoin({
      shape: box,
      shapes: [faces[0]],
      offset: -1,
      tolerance: 1e-3,
      intersection: false,
      selfIntersection: false,
      joinType: Bit.Inputs.OCCT.joinTypeEnum.arc,
      removeIntEdges: false,
      });
    • Смещает контур, не лежащий в одной плоскости, выдавливая его вдоль direction, утолщая результат и считывая смещенное ребро с него.

      Лучше всего работает на гладких контурах; сначала скруглите острые углы через fillets.fillet3DWire. Когда смещенные ребра нельзя соединить в один контур, они возвращаются списком ребер.

      Parameters

      Returns Promise<TopoDSWirePointer>

      Смещенный контур или отдельные ребра, если их не удалось соединить

      const outer = await bitbybit.occt.operations.offset3DWire({ shape: smoothWire, offset: 1, direction: [0, 1, 0] });
      

    pipeing

    • Протягивает одну или несколько форм профилей вдоль контура пути и закрывает результат в тело.

      Профили должны быть размещены на пути; при нескольких профилях протягивание плавно переходит от одного к следующему по пути.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Протянутое тело

      const tube = await bitbybit.occt.operations.pipe({ shape: pathWire, shapes: [profileAtStart] });
      
    • Протягивает правильный многоугольник вдоль контура, давая трубу с nrCorners плоскими сторонами, например шестигранный пруток вдоль пути.

      Многоугольник радиуса radius размещается в начале контура, перпендикулярно ему. makeSolid дает тело вместо оболочки, trihedronEnum выбирает, как профиль поворачивается вдоль пути, а forceApproxC1 сглаживает результат.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Протянутое тело или оболочка

      const bar = await bitbybit.occt.operations.pipePolylineWireNGon({
      shape: pathWire,
      radius: 0.5,
      nrCorners: 6,
      makeSolid: true,
      trihedronEnum: Bit.Inputs.OCCT.geomFillTrihedronEnum.isConstantNormal,
      forceApproxC1: false,
      });
    • Протягивает окружность вдоль каждого из нескольких контуров, как pipeWireCylindrical для одного, все с одними и теми же радиусом и параметрами.

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      По одной трубе на контур, в том же порядке

      const tubes = await bitbybit.occt.operations.pipeWiresCylindrical({
      shapes: [pathA, pathB],
      radius: 0.5,
      makeSolid: true,
      trihedronEnum: Bit.Inputs.OCCT.geomFillTrihedronEnum.isConstantNormal,
      forceApproxC1: false,
      });
    • Протягивает окружность вдоль контура, давая круглую трубу заданного радиуса, следующую пути.

      Окружность размещается в начале контура, перпендикулярно ему. makeSolid дает тело вместо оболочки, trihedronEnum выбирает, как профиль поворачивается, следуя пути, а forceApproxC1 сглаживает результат.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Труба как тело или оболочка

      const tube = await bitbybit.occt.operations.pipeWireCylindrical({
      shape: pathWire,
      radius: 0.5,
      makeSolid: true,
      trihedronEnum: Bit.Inputs.OCCT.geomFillTrihedronEnum.isConstantNormal,
      forceApproxC1: false,
      });

    revolutions

    • Вращает форму вокруг оси через начало координат, чтобы получить поверхность или тело: грань дает тело, контур - оболочку.

      angle в градусах; 360 и больше дает полный оборот. Ось идет вдоль direction: профиль рядом с осью Y, вращаемый вокруг нее, дает вазу. Профиль не должен ее пересекать.

      Parameters

      Returns Promise<TopoDSShapePointer>

      Форма вращения

      const profile = await bitbybit.occt.shapes.wire.createPolylineWire({ points: [[2, 0, 0], [4, 0, 0], [3, 10, 0], [2, 12, 0]] });
      const vase = await bitbybit.occt.operations.revolve({ shape: profile, angle: 360, direction: [0, 1, 0], copy: false });