Constructive Solid Geometry CSGΒΆ

The constructive solid geometry format allows to define geometric primitives such as spheres and cylinders and perform to boolean operations on them. Such objects are of type Solid.

A cube an be defined and meshed as follows:

from netgen.csg import *

left  = Plane (Pnt(0,0,0), Vec(-1,0,0) )
right = Plane (Pnt(1,1,1), Vec( 1,0,0) )
front = Plane (Pnt(0,0,0), Vec(0,-1,0) )
back  = Plane (Pnt(1,1,1), Vec(0, 1,0) )
bot   = Plane (Pnt(0,0,0), Vec(0,0,-1) )
top   = Plane (Pnt(1,1,1), Vec(0,0, 1) )

cube = left * right * front * back * bot * top
geo = CSGeometry()
geo.Add (cube)

mesh = geo.GenerateMesh(maxh=0.1)
mesh.Save("cube.vol")

The Plane primitive defines the half-space behind the plane given by an arbitrary point in the plane, and the outgoing normal vector.

Boolean operations are defined as follows:

operator

set operation

*

intersection

+

union

-

intersection with complement

Available primitives are

primitive

csg syntax

meaning

half-space

Plane(Pnt p, Vec n)

point p in plane, normal vector

sphere

Sphere(Pnt c,float r)

sphere with center c and radius r

cylinder

Cylinder(Pnt a, Pnt b, float r)

points a and b define the axes of a infinite cylinder of radius r

brick

OrthoBrick ( Pnt a, Pnt b )

axes parallel brick with minimal coordinates a and maximal coordinates b

Using the orthobrick primitive, the cube above can be defined by one statement. Drilling a hole through the cube is defined as follows:

from netgen.csg import *

cube = OrthoBrick( Pnt(0,0,0), Pnt(1,1,1) )
hole = Cylinder ( Pnt(0.5, 0.5, 0), Pnt(0.5, 0.5, 1), 0.2)

geo = CSGeometry()
geo.Add (cube-hole)
mesh = geo.GenerateMesh(maxh=0.1)
mesh.Save("cube_hole.vol")

If the whole domain consists of several regions, we give several solid to the geometry object. Now, the first domain is the cube with the hole cut out, the second region is the hole. Don't forget that the cylinder is an infinite cylinder, and must be cut to finite length:

geo = CSGeometry()
geo.Add (cube-hole)
geo.Add (cube*hole)