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
00031
00032
00033
00034 #ifndef CYBEXTRUSION_HC
00035 #define CYBEXTRUSION_HC
00036
00037 #include "oaw/ctk/cybnodec.h"
00038 #include "oaw/ctk/cybgeometryc.h"
00039 #include "oaw/ctk/cybwrlfields.h"
00040 #include "../oawconfig.h"
00041
00042 OAW_BEGIN_NAMESPACE
00043
00044
00045
00046
00047 typedef struct _SpinePlane
00048 {
00049 Vector3C xAxis, yAxis, zAxis;
00050 } SpinePlane;
00051
00052
00053
00054 typedef struct _ExtrusionVertex
00055 {
00056 Vector3C n;
00057 Vector3C p;
00058 double u, v;
00059
00060 Vector3C nFace;
00061 } ExtrusionVertex;
00062
00063 class CybIsectLineChannelC;
00064
00065
00066
00067 class OAW_DLLMAPPING CybExtrusionC : public CybGeometryC
00068 {
00069 public:
00070 CybExtrusionC(CybWorldC*);
00071 CybExtrusionC(const CybExtrusionC&);
00072 CybExtrusionC& operator = (const CybExtrusionC&);
00073 ~CybExtrusionC();
00074
00075 virtual void SetEvent(long, const void*, BaseI*);
00076 virtual long GetFieldEventID(const char*);
00077 virtual long GetFieldDataType(long);
00078
00079 virtual void ToChannelDefault(CybChannelC* pV, long lFlag);
00080 virtual void ToChannelTexture(CybChannelC* pV, long lFlag);
00081 virtual void ToIsectLineChannel(CybIsectLineChannelC* pIsectChan);
00082
00083 protected:
00084 virtual void CreateNewCopy(CybNodeC*);
00085 virtual void LoadVRML(char*& iter, const char* iterEnd,long& znr);
00086 virtual void FinishInit();
00087 virtual void EventCascadeEnd();
00088
00089 void CalculateSpinePlanes();
00090 Vector3C GetSpineVector(int nSpine, int nIndex);
00091 void SetupPolyNormals(ExtrusionVertex *pVertices1, int nNumVertices1, ExtrusionVertex *pVertices2, int nNumVertices2);
00092 void PrepareRender();
00093 void TriToIsectLineChannel(CybIsectLineChannelC* pIsectChan, VectorC &vStartLine, VectorC &vEndLine, ExtrusionVertex &v0, ExtrusionVertex &v1, ExtrusionVertex &v2);
00094
00095 protected:
00096 short m_bLoading;
00097
00098
00099 ArrayC<SpinePlane> m_SpinePlanes;
00100
00101 SFBool m_bClosed;
00102
00103
00104 ExtrusionVertex *m_pQuadVertices;
00105 long m_lNumQuads;
00106
00107 ExtrusionVertex *m_pBeginCapVertices;
00108 ExtrusionVertex *m_pEndCapVertices;
00109 long m_lNumCapVertices;
00110
00111 public:
00112
00113 SFBool m_bBeginCap;
00114 SFBool m_bCcw;
00115 SFBool m_bConvex;
00116 SFFloat m_fCreaseAngle;
00117 MFVec2f m_mvCrossSection;
00118
00119 SFBool m_bEndCap;
00120 MFRotation m_mrOrientation;
00121 MFVec2f m_mvScale;
00122 SFBool m_bSolid;
00123 MFVec3f m_mvSpine;
00124
00125
00126 short m_bConvexData;
00127
00128
00129 short m_bUpdateRender;
00130
00131
00132 static char VRMLKeyStrList[][30];
00133 };
00134
00135 OAW_END_NAMESPACE
00136
00137
00138 #endif
00139
00140
00141
00142