Script: Slicing 3D Shape

Slicing 3D Shape picture
Type
Typescript logo indicatortypescript
Author
matas
Date Created
Nov 15, 2023, 1:07:39 PM
Last Edit Date
Oct 2, 2025, 6:55:55 PM

Project Information

Slicing various solids is very useful feature that you can now use in our platform. This can be beneficial to robotic 3D printing and other tasks.

View Full Project

Script Code

const start = async () => {
    const sphere1 = await createGeometry(0.5, 3.7, 2, 0.6);

    const slices = await bitbybit.occt.operations.slice({
        shape: sphere1,
        direction: [0, 0, 1],
        step: 0.1,
    });

    const faces = await bitbybit.occt.shapes.face.getFaces({
        shape: slices
    });

    const faceExtrusions = await bitbybit.occt.operations.extrudeShapes({
        shapes: faces,
        direction: [0, 0, 0.1]
    });

    const compound = await bitbybit.occt.shapes.compound.makeCompound({
        shapes: faceExtrusions,
    });

    const drawOptions = new Bit.Inputs.Draw.DrawOcctShapeOptions();
    drawOptions.faceColour = "#ffffff";
    drawOptions.edgeColour = "#000000";
    drawOptions.edgeWidth = 1;
    drawOptions.precision = 0.005;

    await bitbybit.draw.drawAnyAsync({
        entity: compound,
        options: drawOptions
    });

    const ptLightOpt = new Bit.Inputs.BabylonScene.PointLightDto();
    ptLightOpt.position = [-3, 3, 0];
    ptLightOpt.shadowGeneratorMapSize = 2056;
    ptLightOpt.diffuse = "#ff00ff";
    bitbybit.babylon.scene.drawPointLight(ptLightOpt)
}

start();


async function createGeometry(starInnerRadius: number, starOuterRadius: number, sphereRadius: number, thickness: number) {
    const star1 = await bitbybit.occt.shapes.wire.createStarWire({
        direction: [1, 0, 0],
        center: [5, 0, 0],
        innerRadius: starInnerRadius,
        outerRadius: starOuterRadius,
        numRays: 8,
        half: false
    });

    const sphere1 = await bitbybit.occt.shapes.solid.createSphere({
        radius: sphereRadius,
        center: [0, 0, 0]
    });

    const fillet1 = await bitbybit.occt.fillets.fillet2d({
        shape: star1,
        radius: 0.1
    });

    const projection1 = await bitbybit.occt.shapes.wire.project({
        wire: fillet1,
        shape: sphere1,
        direction: [1, 0, 0]
    });

    const projectionWires = await bitbybit.occt.shapes.wire.getWires({ shape: projection1 });

    const split1 = await bitbybit.occt.operations.splitShapeWithShapes({
        shape: sphere1,
        shapes: projectionWires,
        nonDestructive: true,
        localFuzzyTolerance: 0.00001,
    });

    const faces = await bitbybit.occt.shapes.face.getFaces({ shape: split1[8] });
    const face = faces.shift();

    const thicken = await bitbybit.occt.operations.makeThickSolidSimple({
        shape: face,
        offset: -thickness,
    })

    return thicken;
}
Plans & Pricing

Choose Your Plan

Editor plans for 3D development, API keys for server-side CAD algorithms

B2B

ENTERPRISE

Custom pricing

Custom software development, dedicated servers & CAD automation at scale.

CAD Automation & Software
  • Custom software development
  • Cloud CAD automation pipelines
  • 3D configurators (STEP & GLTF)
  • Batch export jobs
  • Custom algorithms & deployment
Infrastructure & Support
  • Custom compute allocation
  • Dedicated / VPS server tenants
  • Long-running computation jobs
  • Custom upload limits & overage
  • SLA & premium support