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
00035
00036
00105 class SoROIManip : public SoROI {
00106
00107 SO_NODE_HEADER(SoROIManip) ;
00108
00109 public:
00113 SoROIManip() ;
00114
00115
00120 SoSFBool boxOn;
00121
00125 SoSFBool constrained;
00126
00130 SoDragger *getDragger() ;
00131
00150 SbBool replaceNode(SoPath *p) ;
00151
00170 SbBool replaceManip(SoPath *p, SoROI *newOne) const;
00171
00172 private:
00173
00174
00175
00176
00177
00178 virtual void doAction(SoAction *action);
00179 virtual void callback(SoCallbackAction *action);
00180 virtual void GLRender(SoGLRenderAction *action);
00181 virtual void getBoundingBox(SoGetBoundingBoxAction *action);
00182 virtual void getMatrix(SoGetMatrixAction *action);
00183 virtual void handleEvent(SoHandleEventAction *action);
00184 virtual void pick(SoPickAction *action);
00185 virtual void search(SoSearchAction *action);
00186 virtual void write( SoWriteAction *action );
00187
00188
00189 static void initClass();
00190 static void exitClass();
00191
00192 virtual SoChildList *getChildren() const;
00193
00194 private:
00195
00196
00197 static void valueChangedCB(void *,SoDragger *);
00198
00199
00200
00201 SoFieldSensor *m_boxOnSensor;
00202 SoFieldSensor *m_boxFieldSensor;
00203 SoFieldSensor *m_subVolumeFieldSensor;
00204 SoFieldSensor *m_relativeFieldSensor;
00205 SoOneShotSensor *m_wasInitSensor;
00206
00207 static void fieldSensorCB(void *, SoSensor *);
00208 static void oneShotSensorCB(void *, SoSensor *);
00209
00210
00211 void setDragger(SoDragger *newDragger);
00212
00213
00214 SoChildList *m_children;
00215 virtual SbBool readInstance(SoInput *in, unsigned short flags);
00216 virtual SbBool readChildren(SoInput *in);
00217
00218
00219 virtual ~SoROIManip();
00220
00221 private:
00222 SbVec3i32 m_dimension;
00223 SbBox3f m_size;
00224 SbBool m_init;
00225 SbVec3i32 m_boxmin, m_boxmax;
00226
00227
00228 static void dataToGeometry( const SbVec3i32 &, const SbVec3i32 &, SbVec3f &, SbVec3f &, const SoROIManip * );
00229 static void geometryToData( const SbVec3f &, const SbVec3f &, SbVec3i32 &, SbVec3i32 &, const SoROIManip *, bool );
00230
00231 int getNumChildren() const { return (m_children->getLength()); }
00232 void initBox(SoAction* action);
00233
00234 bool hasVolumeDataSizeChanged(SoState *state);
00235 } ;
00236
00237
00238 #endif
00239
00240
00241