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