00001
00011 #ifndef __TVU_PRIMITIVE_OBJECTS_H__
00012 #define __TVU_PRIMITIVE_OBJECTS_H__
00013
00014 #ifndef __TVU_TYPESDEF_H__
00015 #include "tvu_typesdef.h"
00016 #endif
00017
00018 #ifndef __TVU_MATHS_H__
00019 #include "tvu_maths.h"
00020 #endif
00021
00022 #ifndef __TVU_VISU3D_APPLICATION_H__
00023 #include "tvu_visu3d.application.h"
00024 #endif
00025
00026
00027 #define CLASSNAME_PRIM_OBJECT "PrimitiveObject"
00028 #define CLASSNAME_PRIM_OBJECT_ID 10700
00029 #define CLASSNAME_PRIM_SPHERE "Sphere"
00030 #define CLASSNAME_PRIM_SPHERE_ID 10701
00031 #define CLASSNAME_PRIM_TRUNCATECONE "TruncateCone"
00032 #define CLASSNAME_PRIM_TRUNCATECONE_ID 10702
00033 #define CLASSNAME_PRIM_PARALLELEPIPED "Parallelepiped"
00034 #define CLASSNAME_PRIM_PARALLELEPIPED_ID 10703
00035
00036 #define ENAME_PRIM_RGB "color"
00037 #define ENAME_PRIM_POSITION "position"
00038 #define ENAME_PRIM_ANGLES "angles"
00039 #define ENAME_PRIM_SIZE "size"
00040
00041 #define ENAME_PRIM_CONE_SIZETAIL "sizetail"
00042
00045 class CTPrimitiveObject : public CTObject
00046 {
00047 public:
00049 CTPrimitiveObject();
00050 virtual ~CTPrimitiveObject() { Delete(); };
00051 DEFINE_ID_FUNCTIONS(CTPrimitiveObject, CTObject, CLASSNAME_PRIM_OBJECT_ID, CLASSNAME_PRIM_OBJECT)
00052 public:
00054 virtual TBOOL Is3DObject() { return TTRUE; };
00055 virtual TBOOL IsMobileObject() { return TTRUE; };
00056 virtual TPOINT3D GetLocation() { return m_Position.POINT3D(); };
00057 public:
00059 virtual CTList GetSaveLoadObjects(TBOOL bOnLoad = TTRUE);
00063 virtual TBOOL Display(THFILE lpDevice = TNULL);
00065 virtual TBOOL OnDisplaying(THFILE lpDevice);
00067 virtual TBOOL Move();
00068 virtual TBOOL Rotate();
00069 virtual TBOOL Project();
00071 virtual TBOOL BuildObject();
00072 virtual TBOOL OnBuildObject() { return TTRUE; };
00074 virtual TBOOL GetBoundary(BOUNDARY& Boundary);
00075 public:
00077 virtual void Delete();
00078 public:
00080 virtual CTPrimitiveObject& operator = (CTPrimitiveObject& AnObject);
00081 public:
00084 CTRGB& GetRGB() { return m_RGB; };
00086 CTPoint3D& GetPosition() { return m_Position; };
00087 CTAngles& GetAngles() { return m_Angles; };
00088 CTSize3D& GetSize() { return m_Size; };
00089 CTSize3D& GetCurrentSize() { return m_CurrentSize; };
00091 TBOOL GetPoint(TINT nIndex, LPTPOINT3D lpPoint);
00092 protected:
00093 virtual TBOOL AllocateBuffers();
00094 virtual TINT GetPointsCount() { return 0; };
00095 virtual TINT GetFacesCount() { return 0; };
00096 public:
00097 enum { FACE_MAXPOINTS = 16 };
00098 protected:
00101 typedef struct tagFACE
00102 {
00103 TINT m_nPoints;
00104 TINT m_ListPoints[FACE_MAXPOINTS];
00105 } FACE, *LPFACE;
00107 typedef struct tagPRIVATEDATA
00108 {
00109 TINT m_nPoints;
00110 TINT m_nFaces;
00111 LPTPOINT3D m_Points;
00112 LPFACE m_Faces;
00113 } PRIVATEDATA, *LPPRIVATEDATA;
00114 protected:
00117 CTRGB m_RGB;
00119 CTPoint3D m_Position;
00120 CTAngles m_Angles;
00121 CTSize3D m_Size;
00122 CTSize3D m_CurrentSize;
00124 LPTBYTE m_Buffers;
00125 };
00127 typedef CTPrimitiveObject* LPCTPrimitiveObject;
00128
00130 class CTSphere : public CTPrimitiveObject
00131 {
00132 public:
00134 CTSphere();
00135 virtual ~CTSphere();
00136 DEFINE_ID_FUNCTIONS(CTSphere, CTPrimitiveObject, CLASSNAME_PRIM_SPHERE_ID, CLASSNAME_PRIM_SPHERE)
00137 public:
00139 virtual TBOOL OnBuildObject();
00140 public:
00141 TINT GetPointsCount();
00142 TINT GetFacesCount();
00143 public:
00144 enum { NUMBERZONE = 6, NUMBERZONE_2 = 2 };
00145 public:
00146 static CTSinCos m_SinCos;
00147 };
00148
00150 class CTTruncateCone : public CTPrimitiveObject
00151 {
00152 public:
00154 CTTruncateCone();
00155 virtual ~CTTruncateCone();
00156 DEFINE_ID_FUNCTIONS(CTTruncateCone, CTPrimitiveObject, CLASSNAME_PRIM_TRUNCATECONE_ID, CLASSNAME_PRIM_TRUNCATECONE)
00157 public:
00159 virtual CTList GetSaveLoadObjects(TBOOL bOnLoad = TTRUE);
00160 public:
00162 virtual TBOOL OnBuildObject();
00163 public:
00165 virtual CTTruncateCone& operator = (CTTruncateCone& ATruncateCone);
00166 public:
00168 CTDouble& GetSizeTail() { return m_SizeTail; };
00169 CTDouble& SetSizeTail(double s) { return m_SizeTail = s; };
00170 public:
00171 CTDouble m_SizeTail;
00172 public:
00173 TINT GetPointsCount();
00174 TINT GetFacesCount();
00175 public:
00176 enum { NUMBERZONE = 6 };
00177 public:
00178 static CTSinCos m_SinCos;
00179 };
00180
00182 class CTParallelepiped : public CTPrimitiveObject
00183 {
00184 public:
00186 CTParallelepiped();
00187 virtual ~CTParallelepiped();
00188 DEFINE_ID_FUNCTIONS(CTParallelepiped, CTPrimitiveObject, CLASSNAME_PRIM_PARALLELEPIPED_ID, CLASSNAME_PRIM_PARALLELEPIPED)
00189 public:
00191 virtual TBOOL OnBuildObject();
00192 public:
00193 TINT GetPointsCount();
00194 TINT GetFacesCount();
00195 };
00196
00197 #endif