Constructive solid geometry systems allow the definition of complex three dimensional objects using a combination of simpler objects. A CSG system normally includes a set of solid shape primitives such as cubes, cylinders, cones, etc. which can be defined in a range of sizes and shapes. These primitives are combined using ``set operations'', or ``boolean operations'', which allow the shape of an object to be described as the intersection of other objects, or as the union of objects. Inverse sets (or subtractions) are used to make holes in the overall shape. The resulting shapes can in turn be joined, or intersected with other shapes, to describe three dimensional shape of any complexity. CSG systems often include facilities for defining new primitives by ``sweeping'' operations, such as those that are used in the generalised cylinder method described in the previous section. Two well known CAD research systems that use CSG methods are GMSolid [BG82], and PADL-2 [Bro82b].

Constructive solid geometry systems are more powerful than boundary representations in the same ways that boundary representations are more powerful than wireframes. A boundary representation can be automatically derived from a CSG description (in fact this is often done for graphical display purposes). Objects constructed using CSG are guaranteed to be valid three dimensional objects, and such a representation cannot be ambiguous. CSG representations have been extended in various ways; examples are the inclusion of tolerance or uncertainty data [RC86], or object-oriented style ``methods'' knowledge for operating on defined objects [Big86] [Ela86].

Recently developed systems have included combinations of the above methods. Gossard, Zuffante, and Sakurai describe shape using a combination of CSG and boundary representations [GZS88]. Their ``Object Graph'' can include both solid primitives and boundary surfaces in the description of an object.