Modeling — Bulks, Voids, and Shapes
Prev: Part 5: Modeling Introduction
This step starts the Modeling section. Thoughout the Modeling section you will build a component in small, readable chunks. In this step you learn about basic shapes as well as how bulks and voids work together.
The basic example is a cube void inside a cube bulk. Then we expand into a shape gallery that shows every supported shape type side‑by‑side.
With both of these examples, the intent is for you to preview them yourself, and try changing some of the shapes and variables to see what happens. If you change the shape, there might be a different set of parameters to use when you declare it. Try using the "Shapes (geometry)" section of the Cheat Sheet.
The values to control shape sizes and operations (like translations) are set explicitly in each shape/operation. Later, we will learn how to use variables to simplify and standardize this process.
Cube in a Cube
In this example, we’ll build a cube bulk with a smaller rounded cube void inside it.
Step 1 — Import PyMFCAD and the shapes you need
We import pymfcad plus the specific shapes we’ll use.
Step 2 — Create a Component
Components are the basic building block in this package. They are defined by size [x,y,z] (where x and y are measured in pixels and z is in layers), and the physical resolution (pixel and layer size in mm). They can also contain sub-components as well, which we will get into later.
Step 3 — Add labels
Labels are named color groups used for visualization and organization. We’ll use one label for the bulk and another for the void. See the Named Color Lists for available color names.
Step 4 — Create the shapes
We’ll make a smaller rounded cube for the void and a larger cube for the bulk.
Step 5 — Move the inner shape
We translate the inner shape so it sits inside the outer cube (not centered at the origin).
Step 6 — Add the bulk and void
Bulks add material; voids remove material from bulks. The order doesn’t matter for previewing, but both must be added to the same component.
Step 7 — Preview the result
Send the component to the visualizer so you can inspect it.

Full cube-in-cube example
Shape gallery (side‑by‑side)
This example lays out multiple shapes in a grid so you can compare them side‑by‑side.
Step 1 — Import PyMFCAD and the shapes you need
Step 2 — Create a Component
We use a larger component so all shapes can fit in a grid.
Step 3 — Add labels
Each label gets a different color so the shapes are easy to identify.
Step 4 — Create shapes
Notice how each shape has different parameters. This is where you can experiment with size, radius, font, or TPMS settings. For this step, we use the 3DBenchy model as an example for ImportModel. You can download it here. Look for 3DBenchy.stl
Step 5 — Resize the imported model
ImportModel usually needs to be resized to fit the component.
Step 6 — Arrange the shapes in a grid
We translate each shape to a unique position so they don’t overlap.
Step 7 — Add shapes to the component
Each shape is added as a bulk and assigned its color label.
Step 8 — Preview the gallery

Full shape gallery example
Notes
- Bulks are positive material. Voids are subtracted from bulks.
TPMSandImportModelcan be heavier; try smaller sizes first.