Each drawing primitive has its own header file, usually compiled with opc89. There are typically two kind of drawing primitives: stroked and centerline. TODO The intersection of two primitives of the same type is in the primitive's implementation; TODO:intersect.h hosts the intersection code between different primitive types. Rationale: in some cases (e.g. box) the "self type intersection" call is needed by other functions of the primitive; including intersect.h for this would result in cyclic #includes. The intersection of a primitive and a box is also implemented at the primitive, not in TODO:intersect.h. Rationale: primitives need to calculate bounding box so they already depend on box.h. (Box is not really a drawing primitive but a concept like vector.) The intersection of a stroked primitive and the centerline version of the same primtiive is implemented at the stroked primitive, not in TODO:intersect.h. Rationale: stroked primitives depend on the centerline version heavily for other calculations already.