Constructive Solid Geometry¶
CSG nodes create 3D meshes by combining primitive shapes with boolean operations.
Primitives¶
from simvx.core import CSGBox3D, CSGSphere3D, CSGCylinder3D, Vec3
box = CSGBox3D(size=Vec3(2, 1, 1))
sphere = CSGSphere3D(radius=1.0, rings=16, sectors=16)
cylinder = CSGCylinder3D(radius=0.5, height=2.0, segments=16)
Node |
Properties |
|---|---|
|
|
|
|
|
|
Boolean Operations¶
CSGCombiner3D combines child CSG shapes using their operation property:
from simvx.core import CSGCombiner3D, CSGBox3D, CSGSphere3D, CSGOperation
combiner = CSGCombiner3D()
box = CSGBox3D(size=(2, 2, 2))
combiner.add_child(box)
hole = CSGSphere3D(radius=1.2)
hole.operation = CSGOperation.SUBTRACT
combiner.add_child(hole)
# Get the resulting mesh
mesh = combiner.get_mesh()
Operation |
Result |
|---|---|
|
Merge shapes together (default) |
|
Cut the child shape from the first |
|
Keep only the overlapping region |
Rendering CSG¶
Attach the resulting mesh to a MeshInstance3D for rendering:
from simvx.core import MeshInstance3D, Material
mesh_node = MeshInstance3D()
mesh_node.mesh = combiner.get_mesh()
mesh_node.material = Material(colour=(0.8, 0.3, 0.1))
self.add_child(mesh_node)
API Reference¶
See simvx.core.csg for the complete CSG API.