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
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050 #ifndef _SO_TAB_PLANE_DRAGGER_
00051 #define _SO_TAB_PLANE_DRAGGER_
00052
00053 #include <Inventor/SbLinear.h>
00054 #include <Inventor/sensors/SoSensor.h>
00055 #include <Inventor/projectors/SbLineProjector.h>
00056 #include <Inventor/projectors/SbPlaneProjector.h>
00057 #include <Inventor/actions/SoCallbackAction.h>
00058 #include <Inventor/draggers/SoDragger.h>
00059
00060 class SoNode;
00061 class SoCoordinate3;
00062 class SoGLRenderAction;
00063 class SoRayPickAction;
00064 class SoFieldSensor;
00065 class SoSwitch;
00066
00218 class SoTabPlaneDragger : public SoDragger
00219 {
00220
00221 SO_KIT_HEADER(SoTabPlaneDragger);
00222
00223 SO_KIT_CATALOG_ENTRY_HEADER(planeSwitch);
00224 SO_KIT_CATALOG_ENTRY_HEADER(translator);
00225 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabs);
00226 SO_KIT_CATALOG_ENTRY_HEADER(tabsShader);
00227 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabMaterial);
00228 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabHints);
00229 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabMaterialBinding);
00230 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabNormalBinding);
00231 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabNormal);
00232 SO_KIT_CATALOG_ENTRY_HEADER(scaleTabPixelSize);
00233 SO_KIT_CATALOG_ENTRY_HEADER(edgeType0);
00234 SO_KIT_CATALOG_ENTRY_HEADER(edgeType1);
00235 SO_KIT_CATALOG_ENTRY_HEADER(edgeType2);
00236 SO_KIT_CATALOG_ENTRY_HEADER(edgeType3);
00237 SO_KIT_CATALOG_ENTRY_HEADER(showEdges);
00238 SO_KIT_CATALOG_ENTRY_HEADER(edgeTypeCorner0);
00239 SO_KIT_CATALOG_ENTRY_HEADER(edgeTypeCorner1);
00240 SO_KIT_CATALOG_ENTRY_HEADER(edgeTypeCorner2);
00241 SO_KIT_CATALOG_ENTRY_HEADER(edgeTypeCorner3);
00242 SO_KIT_CATALOG_ENTRY_HEADER(scaleCoords);
00243 SO_KIT_CATALOG_ENTRY_HEADER(edgeScale0);
00244 SO_KIT_CATALOG_ENTRY_HEADER(edgeScale1);
00245 SO_KIT_CATALOG_ENTRY_HEADER(edgeScale2);
00246 SO_KIT_CATALOG_ENTRY_HEADER(edgeScale3);
00247 SO_KIT_CATALOG_ENTRY_HEADER(edgeSeparator0);
00248 SO_KIT_CATALOG_ENTRY_HEADER(edgeSeparator1);
00249 SO_KIT_CATALOG_ENTRY_HEADER(edgeSeparator2);
00250 SO_KIT_CATALOG_ENTRY_HEADER(edgeSeparator3);
00251 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTranslation0);
00252 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTranslation1);
00253 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTranslation2);
00254 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTranslation3);
00255 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTab0);
00256 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTab1);
00257 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTab2);
00258 SO_KIT_CATALOG_ENTRY_HEADER(edgeScaleTab3);
00259 SO_KIT_CATALOG_ENTRY_HEADER(cornerScale0);
00260 SO_KIT_CATALOG_ENTRY_HEADER(cornerScale1);
00261 SO_KIT_CATALOG_ENTRY_HEADER(cornerScale2);
00262 SO_KIT_CATALOG_ENTRY_HEADER(cornerScale3);
00263 SO_KIT_CATALOG_ENTRY_HEADER(cornerSeparator0);
00264 SO_KIT_CATALOG_ENTRY_HEADER(cornerSeparator1);
00265 SO_KIT_CATALOG_ENTRY_HEADER(cornerSeparator2);
00266 SO_KIT_CATALOG_ENTRY_HEADER(cornerSeparator3);
00267 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTranslation0);
00268 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTranslation1);
00269 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTranslation2);
00270 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTranslation3);
00271 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTab0);
00272 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTab1);
00273 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTab2);
00274 SO_KIT_CATALOG_ENTRY_HEADER(cornerScaleTab3);
00275 SO_KIT_CATALOG_ENTRY_HEADER(translatorMaterial);
00276 SO_KIT_CATALOG_ENTRY_HEADER(translatorDrawStyle);
00277 SO_KIT_CATALOG_ENTRY_HEADER(translatorCoordinates);
00278
00279 public:
00283 SoTabPlaneDragger();
00284
00288 SoSFVec3f translation;
00289
00293 SoSFVec3f scaleFactor;
00294
00301 SoSFBool resizeHandles;
00302
00308 SoSFBool scaleUniform;
00309
00315 SoSFBool twoSidedLighting;
00316
00322 SoSFFloat lineWidth;
00323
00329 SoSFInt32 tabPixelSize;
00330
00339 void adjustScaleTabSize();
00340
00342 void showEdgeScales( const SbBool show );
00343
00345 void showCornerScales( const SbBool show );
00346
00347 private:
00349 static void initClass();
00351 static void exitClass();
00352
00353 int getCurrentState();
00354
00355 void notify( SoNotList* list );
00356
00357 private:
00358
00360 SoSwitch* m_edgeSwitch;
00361
00363 SoSwitch* m_cornerSwitch;
00364
00365
00366 SoFieldSensor *lightingSensor;
00367
00368
00369 SoFieldSensor *lineWidthSensor;
00370
00371 static void lightingSensorCB( void *, SoSensor * );
00372 static void lineWidthSensorCB( void *, SoSensor * );
00373
00374 static void startCB( void *, SoDragger *);
00375 static void motionCB( void *, SoDragger *);
00376 static void finishCB( void *, SoDragger *);
00377 static void metaKeyChangeCB( void *, SoDragger *);
00378
00379 SbLineProjector *lineProj;
00380 SbPlaneProjector *planeProj;
00381
00382 SoFieldSensor *translFieldSensor;
00383 SoFieldSensor *scaleFieldSensor;
00384 static void fieldSensorCB( void *, SoSensor * );
00385 static void valueChangedCB( void *, SoDragger * );
00386
00387 virtual void GLRender( SoGLRenderAction *action );
00388 virtual void rayPick(SoRayPickAction *action);
00389
00390 void dragStart();
00391 void drag();
00392 void dragFinish();
00393
00394 void translateStart();
00395 void translateDrag();
00396
00397 void edgeScaleStart();
00398 void edgeScaleDrag();
00399
00400 void cornerScaleStart();
00401 void cornerScaleDrag();
00402
00403 void scaleUniformStart();
00404 void scaleUniformDrag();
00405
00406 SbVec3f worldRestartPt;
00407 int currentScalePatch;
00408
00409 enum State {
00410 INACTIVE, TRANSLATING, EDGE_SCALING, CORNER_SCALING, UNIFORM_SCALING
00411 };
00412 SbBool shftDown;
00413
00414 State currentState;
00415 State restartState;
00416 int translateDir;
00417
00418 SbVec3f scaleCenter;
00419
00420
00421
00422
00423
00424
00425
00426 virtual SbBool setUpConnections( SbBool onOff, SbBool doItAlways = FALSE );
00427
00428 virtual void setDefaultOnNonWritingFields();
00429
00430 virtual ~SoTabPlaneDragger();
00431
00432 private:
00433 static const char geomBuffer[];
00434 static bool s_resizeOnInactiveOnly;
00435
00436 };
00437
00438 #endif
00439
00440