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 DIME_DLL_API 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