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_FACEENTITY_H
00031 #define DIME_FACEENTITY_H
00032
00033 #include <dime/Basic.h>
00034 #include <dime/entities/Entity.h>
00035 #include <dime/util/Linear.h>
00036
00037 class dimeFaceEntity : public dimeEntity
00038 {
00039 public:
00040 bool isQuad() const;
00041
00042 virtual bool getRecord(const int groupcode,
00043 dimeParam ¶m,
00044 const int index = 0) const;
00045
00046 void setVertex(const int idx, const dimeVec3f &v);
00047 void setTriangle(const dimeVec3f &v0, const dimeVec3f &v1,
00048 const dimeVec3f &v2);
00049 void setQuad(const dimeVec3f &v0, const dimeVec3f &v1,
00050 const dimeVec3f &v2, const dimeVec3f &v3);
00051 const dimeVec3f &getVertex(const int idx) const;
00052 void getVertices(dimeVec3f &v0, dimeVec3f &v1,
00053 dimeVec3f &v2, dimeVec3f &v3) const;
00054
00055 virtual dxfdouble getThickness() const;
00056 virtual void getExtrusionDir(dimeVec3f &ed) const;
00057
00058 GeometryType extractGeometry(dimeArray <dimeVec3f> &verts,
00059 dimeArray <int> &indices,
00060 dimeVec3f &extrusionDir,
00061 dxfdouble &thickness);
00062
00063 virtual int typeId() const;
00064 virtual bool isOfType(const int thetypeid) const;
00065 virtual int countRecords() const;
00066
00067 protected:
00068
00069 virtual bool swapQuadCoords() const;
00070
00071 virtual bool handleRecord(const int groupcode,
00072 const dimeParam ¶m,
00073 dimeMemHandler * const memhandler);
00074 void copyCoords(const dimeFaceEntity * const entity);
00075 bool writeCoords(dimeOutput * const file);
00076
00077 dimeFaceEntity();
00078 dimeVec3f coords[4];
00079
00080 };
00081
00082 inline const dimeVec3f &
00083 dimeFaceEntity::getVertex(const int idx) const
00084 {
00085 assert(idx >= 0 && idx < 4);
00086 return this->coords[idx];
00087 }
00088
00089 inline bool
00090 dimeFaceEntity::isQuad() const
00091 {
00092 return (coords[2] != coords[3]);
00093 }
00094
00095 inline void
00096 dimeFaceEntity::setVertex(const int idx, const dimeVec3f &v)
00097 {
00098 assert(idx >= 0 && idx < 4);
00099 this->coords[idx] = v;
00100 }
00101
00102 #endif // ! DIME_FACEENTITY_H
00103