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 #include <Inventor/SbPImpl.h>
00033
00034 SO_PIMPL_PUBLIC_DECLARATION(SoExtrusion)
00035
00036 SO_PIMPL_PUBLIC_DECLARATION(SoBaseExtrusion)
00037
00039
00040
00041
00042
00043
00045
00076 class SoBaseExtrusion : public SoShape
00077 {
00078 SO_NODE_ABSTRACT_HEADER(SoBaseExtrusion);
00079 SO_PIMPL_PUBLIC_HEADER(SoBaseExtrusion)
00080
00081 public:
00082
00083 enum ScaleMode
00084 {
00086 DEFAULT,
00090 SPINE_ONLY,
00092 SECTION_ONLY,
00094 NONE
00095 };
00096
00097 enum ExtrusionMode
00098 {
00111 SMOOTH = 0,
00112
00116 BASIC = 1,
00117
00125 SMOOTH_WITHOUT_SELF_INTERSECTIONS = 2,
00126 };
00127
00128
00132 SoSFBool beginCap;
00133
00137 SoSFBool endCap;
00138
00142 SoMFVec3f spine;
00143
00148 SoSFEnum scaleMode;
00149
00154 SoSFEnum extrusionMode;
00155
00156 private:
00158 SoBaseExtrusion();
00159
00161 virtual ~SoBaseExtrusion();
00162
00163 private:
00164
00165 void commonConstructor();
00166
00167 private:
00168
00170 static SbVec3f *generateExtrusionVertices( SoAction *action, const SbVec3f * spine,
00171 int numSpinePts, const SbVec2f *crossSection,
00172 int numCrossSectionPts, const SbRotation *orientPts,
00173 int numOrientPts, const SbVec2f *scalePts,
00174 int numScalePts );
00175
00176 static SbVec3f findZaxis( const SbVec3f * spine, const int numspine,
00177 const int i, const SbBool closed );
00178 static SbVec3f findYaxis( const SbVec3f * spine, const int numspine,
00179 const int i, const SbBool closed );
00180
00181 private:
00182
00183 static void initClass();
00184 static void exitClass();
00185
00186 static void updateTols();
00187
00188 private:
00189
00190 static float s_dot_epsilon;
00191 static float s_epsilon;
00192
00193 friend class inventor::impl::SoExtrusionImpl;
00194 };
00195
00196
00197 #endif
00198
00199