#ifndef CSGTERM_H_ #define CSGTERM_H_ #include #include class CSGTerm { public: enum type_e { TYPE_PRIMITIVE, TYPE_UNION, TYPE_INTERSECTION, TYPE_DIFFERENCE }; type_e type; class PolySet *polyset; QString label; CSGTerm *left; CSGTerm *right; double m[20]; int refcounter; CSGTerm(PolySet *polyset, double m[20], QString label); CSGTerm(type_e type, CSGTerm *left, CSGTerm *right); CSGTerm *normalize(); CSGTerm *normalize_tail(); CSGTerm *link(); void unlink(); QString dump(); }; class CSGChain { public: QVector polysets; QVector matrices; QVector types; QVector labels; CSGChain(); void add(PolySet *polyset, double *m, CSGTerm::type_e type, QString label); void import(CSGTerm *term, CSGTerm::type_e type = CSGTerm::TYPE_UNION); QString dump(); }; #endif