00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __GD_Primitive_H__
00019 #define __GD_Primitive_H__
00020
00021 #include "GD_API.h"
00022 #include <iostream.h>
00023 #include <UT/UT_Matrix4.h>
00024 #include <GB/GB_Primitive.h>
00025 #include "GD_Point.h"
00026
00027 class UT_Matrix3;
00028 class UT_BoundingRect;
00029 class GD_Detail;
00030 class GD_Vertex;
00031
00032 class GD_API GD_Primitive : public GB_Primitive
00033 {
00034 public:
00035 GD_Primitive(GD_Detail *d);
00036 virtual ~GD_Primitive();
00037
00038 virtual GD_Primitive *copy(int preserve_shared_pts = 0) const;
00039 virtual int copy(const GD_Primitive &src, int ptoffset) = 0;
00040
00041
00042
00043 virtual int evaluatePoint(UT_Vector3 &pos, float u,
00044 unsigned du = 0) const;
00045
00046 GD_Detail *getParent() const { return (GD_Detail*)parent; }
00047 static unsigned getPrimitiveType(const char *name);
00048 static const char *getPrimitiveName(unsigned type);
00049
00050 virtual int isPrimary(void) const;
00051
00052
00053
00054 virtual int isVisible(void) const;
00055
00056
00057
00058 virtual int visibleBaryCenter(float &uctr, float &vctr) const;
00059
00060
00061 virtual void transform(const UT_Matrix3 &);
00062
00063
00064 virtual int isDegenerate() const;
00065 virtual int getBBox(UT_BoundingBox *bbox) const;
00066 virtual void addToBSphere(UT_BoundingSphere *bsphere) const;
00067 virtual void getBRect(UT_BoundingRect *brect) const;
00068 virtual UT_Vector3 baryCenter() const;
00069 virtual UT_Vector3 computeNormal() const;
00070 virtual void reverse();
00071 virtual void addPointRefToGroup(GB_PointGroup &grp) const;
00072 virtual void changePointRef(GB_Element *from, GB_Element *to);
00073 virtual int detachPoints(GB_PointGroup &grp);
00074 virtual int isPointUsed(GB_Element *pt) const;
00075 virtual int isPointGroupUsed(const GB_PointGroup &grp) const;
00076 virtual unsigned getVertexCount() const;
00077 virtual int vertexApply(int (*apply)(GB_Vertex &vtx, void *),
00078 void *data = 0);
00079 virtual int vertexApply(int (*apply)(const GB_Vertex &vtx, void *),
00080 void *data = 0) const;
00081 virtual void pointDeleted (GB_Element *);
00082 virtual int pointCanDelete(GB_Element *) const;
00083
00084
00085 protected:
00086
00087 private:
00088 friend ostream &operator<<(ostream &os, const GD_Primitive &d)
00089 {
00090 d.save(os, 0);
00091 return os;
00092 }
00093 };
00094 #endif