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 #ifndef _SO_ROI_MANIP_
00027 #define _SO_ROI_MANIP_
00028
00029 #include <Inventor/draggers/SoDragger.h>
00030 #include <LDM/nodes/SoROI.h>
00031
00032 class SoOneShotSensor;
00033 class SoState;
00034 class SoCallback;
00035
00036
00037
00108 class SoROIManip : public SoROI {
00109
00110 SO_NODE_HEADER(SoROIManip) ;
00111
00112 public:
00116 SoROIManip() ;
00117
00118
00123 SoSFBool boxOn;
00124
00128 SoSFBool constrained;
00129
00133 SoDragger *getDragger() ;
00134
00153 SbBool replaceNode(SoPath *p) ;
00154
00173 SbBool replaceManip(SoPath *p, SoROI *newOne) const;
00174
00175 private:
00176
00177
00178
00179
00180
00182 virtual void doAction(SoAction *action);
00184 virtual void callback(SoCallbackAction *action);
00186 virtual void GLRender(SoGLRenderAction *action);
00188 virtual void getBoundingBox(SoGetBoundingBoxAction *action);
00190 virtual void getMatrix(SoGetMatrixAction *action);
00192 virtual void handleEvent(SoHandleEventAction *action);
00194 virtual void pick(SoPickAction *action);
00196 virtual void search(SoSearchAction *action);
00198 virtual void write( SoWriteAction *action );
00199
00200 private:
00201
00202 static void initClass();
00203 static void exitClass();
00204
00205 virtual SoChildList *getChildren() const;
00206
00207 private:
00208
00209
00210 static void valueChangedCB(void *,SoDragger *);
00211
00212
00213
00214 SoFieldSensor *m_boxOnSensor;
00215 SoFieldSensor *m_boxFieldSensor;
00216 SoFieldSensor *m_subVolumeFieldSensor;
00217 SoFieldSensor *m_relativeFieldSensor;
00218 SoOneShotSensor *m_wasInitSensor;
00219
00220 static void fieldSensorCB(void *, SoSensor *);
00221 static void oneShotSensorCB(void *, SoSensor *);
00222
00223
00224 void setDragger(SoDragger *newDragger);
00225
00226
00227 SoChildList *m_children;
00228 virtual SbBool readInstance(SoInput *in, unsigned short flags);
00229 virtual SbBool readChildren(SoInput *in);
00230
00231
00232 virtual ~SoROIManip();
00233
00234 private:
00235 SbVec3i32 m_dimension;
00236 SbBox3f m_size;
00237 SbBool m_init;
00238 SbVec3i32 m_boxmin, m_boxmax;
00239
00240 SoCallback* m_dataSetMatrixCBNode;
00241 bool m_useDataSetMatrix;
00242 SbMatrix m_savedDataSetMatrix;
00243
00244 static void dataToGeometry( const SbVec3i32 &, const SbVec3i32 &, SbVec3f &, SbVec3f &, const SoROIManip * );
00245 static void geometryToData( const SbVec3f &, const SbVec3f &, SbVec3i32 &, SbVec3i32 &, const SoROIManip *, bool );
00246
00247 int getNumChildren() const { return (m_children->getLength()); }
00248 void initBox(SoAction* action);
00249
00250 bool hasVolumeDataSizeChanged(SoState *state);
00251
00252 bool pushDataSetModelMatrix(SoAction* action, SoNode* node);
00253 } ;
00254
00255
00256 #endif
00257
00258
00259