00001 #if !defined(_SO_BASE_EXTRUSION_)
00002 #define _SO_BASE_EXTRUSION_
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 #include <Inventor/fields/SoSFBool.h>
00028 #include <Inventor/fields/SoMFVec3f.h>
00029 #include <Inventor/fields/SoSFVec3f.h>
00030 #include <Inventor/nodes/SoShape.h>
00031 #include <Inventor/fields/SoSFEnum.h>
00032
00034
00035
00036
00037
00038
00040
00072 class SoBaseExtrusion : public SoShape {
00073
00074 SO_NODE_ABSTRACT_HEADER(SoBaseExtrusion);
00075
00076 friend class SoExtrusionImpl;
00077
00078 public:
00079
00080 enum ScaleMode
00081 {
00083 DEFAULT,
00087 SPINE_ONLY,
00089 SECTION_ONLY,
00091 NONE
00092 };
00093
00094 enum ExtrusionMode
00095 {
00108 SMOOTH = 0,
00109
00113 BASIC = 1,
00114
00122 SMOOTH_WITHOUT_SELF_INTERSECTIONS = 2,
00123 };
00124
00125
00129 SoSFBool beginCap;
00130
00134 SoSFBool endCap;
00135
00139 SoMFVec3f spine;
00140
00145 SoSFEnum scaleMode;
00146
00151 SoSFEnum extrusionMode;
00152
00153 private:
00155 SoBaseExtrusion();
00156
00158 virtual ~SoBaseExtrusion();
00159
00160
00161 private:
00162
00164 static SbVec3f *generateExtrusionVertices( SoAction *action, const SbVec3f * spine,
00165 int numSpinePts, const SbVec2f *crossSection,
00166 int numCrossSectionPts, const SbRotation *orientPts,
00167 int numOrientPts, const SbVec2f *scalePts,
00168 int numScalePts );
00169
00170 static SbVec3f findZaxis( const SbVec3f * spine, const int numspine,
00171 const int i, const SbBool closed );
00172 static SbVec3f findYaxis( const SbVec3f * spine, const int numspine,
00173 const int i, const SbBool closed );
00174
00175 private:
00176
00177 static void initClass();
00178 static void exitClass();
00179
00180 static void updateTols();
00181
00182 private:
00183
00184 static float s_dot_epsilon;
00185 static float s_epsilon;
00186
00187 };
00188
00189 #endif
00190
00191