Prepare the stock, output model, spindle marker, optional clamps, and export settings before generating CNC G-code.
The CNC generator needs three main things in the scene: the material to carve from, the final model you want to leave behind, and a spindle marker that tells the app where the cutter is allowed to move.
Initial material / stock
This is the carve-out material. It represents the real block, board, foam, wax, or other material mounted on the CNC bed.
Output model
This is the shape that should remain after cutting. Place it inside the initial material volume.
Spindle marker
Insert a worldspawn using texture spindle_center. This marker defines the cutter tip and machine Y hard limit.
Place the final output model inside the initial material. The app computes the CNC removal path from the difference between the stock and the protected/output model.
You can use one stock object for the initial material. Multiple initial material objects can work if they are part of the same initial material set, but a single clean rectangular stock/worldspawn is easier to verify and is recommended for first tests.
The spindle marker is not stock and not the output model. It is a measuring object: its bottom center is the active tool point, and its top Y is the hard upper machine limit.
Insert a worldspawn object for the spindle marker.
Apply the texture spindle_center to that marker.
Set the pattern to material so the app treats the marker consistently during export/setup.
Position the marker so its bottom-center is exactly where the physical cutter tip should be referenced.
Make the marker tall enough to describe your allowed machine travel. Its maximum Y is the hard Y cap.
The top of the spindle marker is not safe travel height. It is the hard limit. If the app needs a safe traverse height above this limit, the CNC path should be considered impossible until the setup is changed.
Concept
Where it comes from
What it means
Bed level
initial_shape_min.y
The lowest Y of the initial material after the project is placed on the bed.
Bit tip reference
drill_bit_min.y at bottom-center of the spindle marker
The physical cutter tip / zero point used by CNC movement.
Hard upper Y limit
drill_bit_max.y
The maximum Y height any generated CNC move is allowed to request.
Safe traverse Y
Computed from stock, clamps, protected model, and remaining material clearance
Travel height used for non-cutting moves. It must stay below the hard upper Y limit.
Create or import the model you want to cut.
Create the initial material object. Use a simple box for the first tests. This is your real stock size.
Place the output model completely inside the initial material volume.
Insert the spindle marker as worldspawn with texture spindle_center.
Place the bottom-center of the spindle marker at the physical cutter tip reference.
Check that the top of the spindle marker is above the safe travel height you need, but still represents the real machine limit.
Add clamps only if needed. Keep clamps out of the cutter path and make sure they are included as clamp/protected geometry for CNC export.
Open File -> Export -> GCode.
Enable or select CNC mode in the G-code export settings.
Export, inspect the generated G-code, then dry-run above the material before cutting.
Clamps are optional, but when used they must be represented in the scene so the CNC path can avoid them. Treat clamps as protected obstacles, not as material to cut.
For first machine tests, use simple rectangular stock, a simple output model, no clamps, and a shallow cut. Verify axis direction and zeroing before running a full job.
Confirm the stock dimensions in the app match the real material.
Confirm the output model is fully inside the stock.
Confirm the spindle marker uses texture spindle_center.
Confirm the marker bottom-center matches the cutter tip reference.
Confirm the marker top Y is the real hard upper Y limit.
Confirm no generated move exceeds the machine limit.
Run the G-code with the spindle off and the tool above the stock first.
CNC setup is physical setup. When in doubt, test with foam, wax, or air-cutting first.