00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef DIME_VERTEX_H
00031 #define DIME_VERTEX_H
00032
00033 #include <dime/Basic.h>
00034 #include <dime/entities/Entity.h>
00035 #include <dime/util/Linear.h>
00036
00037 class DIME_DLL_API dimeVertex : public dimeEntity
00038 {
00039 friend class dimePolyline;
00040 friend class dimeEntity;
00041
00042 public:
00043 dimeVertex();
00044
00045 enum Flags {
00046 CURVE_FITTING_VERTEX = 0x01,
00047 HAS_CURVE_FIT_TANGENT = 0x02,
00048 SPLINE_VERTEX = 0x08,
00049 FRAME_CONTROL_POINT = 0x10,
00050 POLYLINE_3D_VERTEX = 0x20,
00051 POLYGON_MESH_VERTEX = 0x40,
00052 POLYFACE_MESH_VERTEX = 0x80
00053 };
00054
00055 virtual dimeEntity *copy(dimeModel * const model) const;
00056 virtual bool getRecord(const int groupcode,
00057 dimeParam ¶m,
00058 const int index = 0) const;
00059 virtual const char *getEntityName() const;
00060
00061 int16 getFlags() const;
00062 void setFlags(const int16 flags);
00063
00064 void setCoords(const dimeVec3f &v);
00065 const dimeVec3f &getCoords() const;
00066
00067 int numIndices() const;
00068 int getIndex(const int idx) const;
00069 void setIndex(const int idx, const int val);
00070
00071 virtual bool write(dimeOutput * const out);
00072 virtual int typeId() const;
00073 virtual int countRecords() const;
00074
00075 protected:
00076 virtual bool handleRecord(const int groupcode,
00077 const dimeParam ¶m,
00078 dimeMemHandler * const memhandler);
00079
00080 private:
00081 int16 flags;
00082 #ifdef DIME_FIXBIG
00083 int32 indices[4];
00084 #else
00085 int16 indices[4];
00086 #endif
00087 dimeVec3f coords;
00088 dimePolyline *polyline;
00089
00090 };
00091
00092 inline void
00093 dimeVertex::setCoords(const dimeVec3f &v)
00094 {
00095 this->coords = v;
00096 }
00097
00098 inline const dimeVec3f &
00099 dimeVertex::getCoords() const
00100 {
00101 return this->coords;
00102 }
00103
00104 inline void
00105 dimeVertex::setIndex(const int idx, const int val)
00106 {
00107 assert(idx >= 0 && idx < 4);
00108 this->indices[idx] = val;
00109 }
00110
00111 inline int16
00112 dimeVertex::getFlags() const
00113 {
00114 return this->flags;
00115 }
00116
00117 inline void
00118 dimeVertex::setFlags(const int16 flags)
00119 {
00120 this->flags = flags;
00121 }
00122
00123 #endif // ! DIME_VERTEX_H
00124