00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __GU_Prim_h__
00024 #define __GU_Prim_h__
00025
00026 #include "GU_API.h"
00027 #include <UT/UT_RefArray.h>
00028 #include <UT/UT_Vector3Array.h>
00029
00030 class GEO_Point;
00031 class UT_BitArray;
00032 class GEO_Primitive;
00033 class GB_PointGroup;
00034 class GU_DisplayCache;
00035 class GU_DisplayMesh;
00036 class GU_CacheParms;
00037 class GU_RayIntersect;
00038 class GU_ConvertParms;
00039 class GU_RayInfoHit;
00040
00041 class GU_API GU_Primitive
00042 {
00043 public:
00044
00045
00046 GU_Primitive() {}
00047 virtual ~GU_Primitive();
00048
00049
00050
00051
00052
00053
00054 virtual GEO_Primitive *convert(GU_ConvertParms &parms,
00055 GB_PointGroup *usedpts = 0) = 0;
00056
00057
00058
00059
00060 virtual GEO_Primitive *convertNew(GU_ConvertParms &parms) = 0;
00061
00062 virtual const GEO_Primitive *castToGeo(void) const = 0;
00063
00064 virtual void normal(const GB_AttributeRef &noff) const = 0;
00065 virtual void normal(UT_Vector3Array &output) const = 0;
00066 virtual void clip(UT_Vector3 &nml, float d = 0, int normalize = 1,
00067 GEO_Primitive *prim=0,
00068 GB_PrimitiveGroup *clipgrp = 0);
00069
00070 virtual int intersectRay(const UT_Vector3 &o, const UT_Vector3 &d,
00071 float tmax = 1E17F, float tol = 1E-12F,
00072 float *distance = 0, UT_Vector3 *pos = 0,
00073 UT_Vector3 *nml = 0, int accurate = 0,
00074 float *u = 0, float *v = 0,
00075 int ignoretrim = 1) const = 0;
00076
00077
00078
00079
00080 virtual int intersect(GU_Primitive &prim,
00081 UT_RefArray<GU_RayInfoHit> &hitList,
00082 float tol = 0.01F, int ignoretrim=1);
00083
00084
00085 virtual int minimum(const UT_Vector3 &p, float distmax = 1E17F,
00086 float *distance = 0, float *u = 0,
00087 float *v = 0, int accurate = 1);
00088
00089
00090 virtual int minimum(GU_Primitive &prim, float distmax = 1E17F,
00091 float *distance = 0, float *u1 = 0,
00092 float *v1 = 0, float *u2 = 0, float *v2 = 0,
00093 int accurate = 1);
00094
00095
00096 virtual GU_DisplayMesh *getDisplayMesh(
00097 const GB_AttributeRef &noff,
00098 float lod);
00099 virtual GU_DisplayCache *getDisplayCache(void) const;
00100 virtual int buildDisplayCache(GU_CacheParms &parms);
00101
00102 virtual GU_RayIntersect *getRayCache(void) const;
00103 virtual int buildRayCache(void);
00104
00105
00106 virtual GU_RayIntersect *createRayCache(int &persistent) = 0;
00107
00108 virtual void destroyCache(void);
00109 virtual void notifyCache(int type);
00110 virtual void notifyCache(int type, const GEO_Point &ppt);
00111 virtual void notifyCache(int type, const GB_PointGroup &grp);
00112 virtual void notifyCache(int type, const UT_Matrix4 &xform,
00113 int push);
00114 virtual void notifyCache(int type, const UT_Vector3 &delta);
00115
00116 protected:
00117 private:
00118 };
00119
00120 #endif