00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GB_Primitive_H__
00023 #define __GB_Primitive_H__
00024
00025 #include "GB_API.h"
00026 #include <iostream.h>
00027 #include <UT/UT_BoundingBox.h>
00028 #include <UT/UT_BoundingSphere.h>
00029 #include "GB_Element.h"
00030 #include "GB_Group.h"
00031
00032 class UT_Vector3;
00033 class GB_Detail;
00034 class GB_Vertex;
00035
00036 class GB_API GB_Primitive : public GB_Element {
00037 public:
00038 GB_Primitive(GB_Detail *d);
00039 virtual ~GB_Primitive();
00040
00041 virtual unsigned getPrimitiveId() const = 0;
00042 virtual int isDegenerate() const = 0;
00043
00044 virtual int save(ostream &os, int binary) const = 0;
00045 virtual bool load(UT_IStream &is) = 0;
00046 virtual int getBBox(UT_BoundingBox *bbox) const = 0;
00047 virtual void addToBSphere(UT_BoundingSphere *bsphere) const = 0;
00048 virtual UT_Vector3 baryCenter() const = 0;
00049 virtual UT_Vector3 computeNormal() const = 0;
00050 virtual void reverse() = 0;
00051
00052 virtual void addPointRefToGroup(GB_PointGroup &grp) const = 0;
00053 virtual void changePointRef(GB_Element *from, GB_Element *to)=0;
00054
00055 virtual void untransform(void);
00056
00057 virtual void isolate(void);
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 virtual int ifDetachPoint(GB_Element *ppt) const;
00070 virtual int detachPoint (GB_Element *ppt, int allVertices = 1);
00071
00072
00073
00074
00075
00076
00077 virtual int detachPoints(GB_PointGroup &grp) = 0;
00078
00079 GB_Detail *getBaseParent() const { return parent; }
00080
00081 virtual int isPointUsed(GB_Element *pt) const = 0;
00082
00083 virtual int isPointGroupUsed(const GB_PointGroup &grp) const = 0;
00084
00085 virtual unsigned getVertexCount() const = 0;
00086
00087
00088
00089
00090 virtual int vertexApply(int (*apply)(GB_Vertex &vtx, void *),
00091 void *data = 0) = 0;
00092 virtual int vertexApply(int (*apply)(const GB_Vertex &vtx, void *),
00093 void *data = 0) const = 0;
00094
00095 int memberOfAnyGroup(void);
00096
00097 protected:
00098 GB_Detail *parent;
00099
00100
00101 virtual void pointDeleted (GB_Element *) = 0;
00102 virtual int pointCanDelete(GB_Element *) const = 0;
00103
00104
00105 private:
00106 friend class GB_Detail;
00107
00108 friend ostream &operator<<(ostream &os, const GB_Primitive &d)
00109 {
00110 d.save(os, 0);
00111 return os;
00112 }
00113 };
00114 #endif