00001 /* 00002 * PROPRIETARY INFORMATION. This software is proprietary to 00003 * Side Effects Software Inc., and is not to be reproduced, 00004 * transmitted, or disclosed in any way without written permission. 00005 * 00006 * Produced by: 00007 * David Wong 00008 * Side Effects 00009 * 477 Richmond Street West 00010 * Toronto, Ontario 00011 * Canada M5V 3E7 00012 * 416-504-9876 00013 * 00014 * NAME: TS_Primitive (C++) 00015 * 00016 * COMMENTS: 00017 * 00018 */ 00019 00020 #ifndef _TS_Primitive_h_ 00021 #define _TS_Primitive_h_ 00022 00023 #include "TS_API.h" 00024 #include "TS_Expression.h" 00025 #include "TS_Ray.h" 00026 00027 class TS_MetaKernel; 00028 00029 class TS_API TS_MetaPrimitive: public TS_MetaExpression { 00030 protected: 00031 TS_MetaPrimitive(); 00032 TS_MetaPrimitive(const TS_MetaPrimitive *); 00033 virtual ~TS_MetaPrimitive(); 00034 00035 public: 00036 TS_MetaPrimitive *isPrimitive(); 00037 virtual void setWeight(float); 00038 virtual float getWeight() const; 00039 const UT_BoundingBox &getBBox() const { return myBBox; } 00040 UT_Interval getBBox(UT_BoundingBox &) const; 00041 virtual void setKernel(const TS_MetaKernel &); 00042 virtual void transform(const UT_Matrix4 &) = 0; 00043 virtual void raySweepInit(const TS_Ray &ray, 00044 float clip, float &t0, float &t1); 00045 TS_MetaExpression *copy(); 00046 virtual void init() = 0; 00047 virtual void reset(); 00048 virtual TS_MetaExpression *prune(const UT_BoundingBox &, UT_Interval &); 00049 00050 void setGeoPrimPtr(void *g) { myGeoPrimPtr = g; } 00051 void *getGeoPrimPtr() { return myGeoPrimPtr; } 00052 const void *getGeoPrimPtr() const { return myGeoPrimPtr; } 00053 00054 virtual float listDensity(const UT_Vector3 &p, 00055 UT_PtrArray<TS_MetaPrimitive *> &); 00056 00057 int rayIndex; 00058 int myOctreeRayIndex; 00059 00060 // A serial for metaball rendering 00061 int myRenderSerial; 00062 00063 virtual void getAllPrimitives(UT_PtrArray<TS_MetaPrimitive *> &prims); 00064 00065 protected: 00066 float weight; 00067 TS_MetaKernel kernel; 00068 00069 private: 00070 void *myGeoPrimPtr; // pointer to the (unique) GEO_Primitive 00071 // which contains this TS_MetaPrimitive 00072 }; 00073 00074 #endif
1.5.9