Open Inventor Reference
MeVis/ThirdParty/Sources/Inventor/inventor/lib/interaction/include/Inventor/draggers/SoTransformerDragger.h
Go to the documentation of this file.
00001 /*
00002  *
00003  *  Copyright (C) 2000 Silicon Graphics, Inc.  All Rights Reserved. 
00004  *
00005  *  This library is free software; you can redistribute it and/or
00006  *  modify it under the terms of the GNU Lesser General Public
00007  *  License as published by the Free Software Foundation; either
00008  *  version 2.1 of the License, or (at your option) any later version.
00009  *
00010  *  This library is distributed in the hope that it will be useful,
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  *  Lesser General Public License for more details.
00014  *
00015  *  Further, this software is distributed without any warranty that it is
00016  *  free of the rightful claim of any third person regarding infringement
00017  *  or the like.  Any license provided herein, whether implied or
00018  *  otherwise, applies only to this software file.  Patent licenses, if
00019  *  any, provided herein do not apply to combinations of this program with
00020  *  other software, or any other product whatsoever.
00021  * 
00022  *  You should have received a copy of the GNU Lesser General Public
00023  *  License along with this library; if not, write to the Free Software
00024  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00025  *
00026  *  Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
00027  *  Mountain View, CA  94043, or:
00028  * 
00029  *  http://www.sgi.com 
00030  * 
00031  *  For further information regarding this notice, see: 
00032  * 
00033  *  http://oss.sgi.com/projects/GenInfo/NoticeExplan/
00034  *
00035  */
00036 
00037 
00038 /*
00039  * Copyright (C) 1990,91   Silicon Graphics, Inc.
00040  *
00041  _______________________________________________________________________
00042  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00043  |
00044  |   Description:
00045  |      This file defines the SoTransformerDragger class.
00046  |
00047  | NOTE TO DEVELOPERS:
00048  |     For info about the structure of SoTransformerDragger:
00049  |     [1] compile: /usr/share/src/Inventor/samples/ivNodeKitStructure
00050  |     [2] type:    ivNodeKitStructure SoTransformerDragger.
00051  |     [3] The program prints a diagram of the scene graph and a table with 
00052  |         information about each part.
00053  |
00054  |  The following parts in this dragger are created at construction time.
00055  |  'ResourceName' corresponds to the name of the default geometry for the
00056  |  part. The dragger's constructor gets the scene graph for 'ResourceName'
00057  |  by querying the global dictionary ( SoDB::getByName("ResourceName"); ).  
00058  |
00059  |  Resource Name:                           Part Name:
00060  |
00061  |      transformerOverallStyle              - overallStyle
00062  |
00063  |  NOTE: for the translators and rotators, 
00064  |        numbering refers to a cube-face:
00065  |        1=top,2=bot,3=lft,4=rit,5=fnt,6=bak
00066  |
00067  |      transformerTranslator1               - translator1
00068  |      transformerTranslator1Active         - translator1Active
00069  |      (ditto for translator2-translator6)
00070  |
00071  |      transformerRotator1                 - rotator1
00072  |      transformerRotator1Active           - rotator1Active
00073  |      (ditto for rotator2-rotator6)
00074  |
00075  |  
00076  |  NOTE: for the scalers, 
00077  |        numbers refer to a corner: 
00078  |        1=+x+y+z,  2=+x+y-z, 3=+x-y+z, 
00079  |        4=+x-y-z,  5=-x+y+z,  6=-x+y-z, 
00080  |        7=-x-y+z, 8=-x-y-z
00081  |      transformerScale1                  - scale1
00082  |      transformerScale1Active            - scale1Active
00083  |      (ditto for scale2-scale8)
00084  |
00085  |  Feedback for translation 
00086  |      transformerTranslateBoxFeedback             - translateBoxFeedback
00087  |
00088  |  Feedback for scaling 
00089  |      transformerScaleBoxFeedback             - scaleBoxFeedback
00090  |
00091  |  Feedback for <Control> + scaling
00092  |      transformerPosXWallFeedback                 - posXWallFeedback
00093  |      transformerPosYWallFeedback                 - posYWallFeedback
00094  |      transformerPosZWallFeedback                 - posZWallFeedback
00095  |      transformerNegXWallFeedback                 - negXWallFeedback
00096  |      transformerNegYWallFeedback                 - negYWallFeedback
00097  |      transformerNegZWallFeedback                 - negZWallFeedback
00098  |
00099  |  Feedback for <Control> + rotating
00100  |      transformerPosXRoundWallFeedback                 - posXRoundWallFeedback
00101  |      transformerPosYRoundWallFeedback                 - posYRoundWallFeedback
00102  |      transformerPosZRoundWallFeedback                 - posZRoundWallFeedback
00103  |      transformerNegXRoundWallFeedback                 - negXRoundWallFeedback
00104  |      transformerNegYRoundWallFeedback                 - negYRoundWallFeedback
00105  |      transformerNegZRoundWallFeedback                 - negZRoundWallFeedback
00106  |
00107  |  Feedback for translation and for 1D scaling
00108  |      transformerXAxisFeedbackActive              - xAxisFeedbackActive
00109  |      transformerYAxisFeedbackActive              - yAxisFeedbackActive
00110  |      transformerZAxisFeedbackActive              - zAxisFeedbackActive
00111  |      transformerXAxisFeedbackSelect              - xAxisFeedbackSelect
00112  |      transformerYAxisFeedbackSelect              - yAxisFeedbackSelect
00113  |      transformerZAxisFeedbackSelect              - zAxisFeedbackSelect
00114  |
00115  |  Feedback for <Control> + translation:
00116  |      transformerXCrosshairFeedback                    - xCrosshairFeedback
00117  |      transformerYCrosshairFeedback                    - yCrosshairFeedback
00118  |      transformerZCrosshairFeedback                    - zCrosshairFeedback
00119  |
00120  |  Feedback for uniform scaling
00121  |      transformerRadialFeedback                  - radialFeedback
00122  |
00123  |  Feedback for 1D rotation
00124  |      transformerXCircleFeedback                    - xCircleFeedback
00125  |      transformerYCircleFeedback                    - yCircleFeedback
00126  |      transformerZCircleFeedback                    - zCircleFeedback
00127  |
00128  |   Author(s): Paul Isaacs
00129  |
00130  ______________  S I L I C O N   G R A P H I C S   I N C .  ____________
00131  _______________________________________________________________________
00132  */
00133 
00134 #ifndef  _SO_TRANSFORMER_DRAGGER_
00135 #define  _SO_TRANSFORMER_DRAGGER_
00136 
00137 #include <Inventor/SoLists.h>
00138 #include <Inventor/draggers/SoDragger.h>
00139 #include <Inventor/fields/SoSFFloat.h>
00140 #include <Inventor/fields/SoSFRotation.h>
00141 #include <Inventor/fields/SoSFVec3f.h>
00142 #include <Inventor/sensors/SoSensor.h>
00143 
00144 class SbDict;
00145 class SbPlaneProjector;
00146 class SbLineProjector;
00147 class SbSphereSectionProjector;
00148 class SbCylinderPlaneProjector;
00149 class SoFieldSensor;
00150 
00151 
00154 
00282 
00283 
00284 class INVENTOR_API SoTransformerDragger : public SoDragger {
00285 
00286     SO_KIT_HEADER(SoTransformerDragger);
00287 
00288     SO_KIT_CATALOG_ENTRY_HEADER(overallStyle);
00289 
00291     SO_KIT_CATALOG_ENTRY_HEADER(surroundScale);
00292 
00293     SO_KIT_CATALOG_ENTRY_HEADER(translatorSep);
00294     SO_KIT_CATALOG_ENTRY_HEADER(translator1Switch);
00295     SO_KIT_CATALOG_ENTRY_HEADER(translator1LocateGroup);
00296     SO_KIT_CATALOG_ENTRY_HEADER(translator1);
00297     SO_KIT_CATALOG_ENTRY_HEADER(translator1Active);
00298     SO_KIT_CATALOG_ENTRY_HEADER(translator2Switch);
00299     SO_KIT_CATALOG_ENTRY_HEADER(translator2LocateGroup);
00300     SO_KIT_CATALOG_ENTRY_HEADER(translator2);
00301     SO_KIT_CATALOG_ENTRY_HEADER(translator2Active);
00302     SO_KIT_CATALOG_ENTRY_HEADER(translator3Switch);
00303     SO_KIT_CATALOG_ENTRY_HEADER(translator3LocateGroup);
00304     SO_KIT_CATALOG_ENTRY_HEADER(translator3);
00305     SO_KIT_CATALOG_ENTRY_HEADER(translator3Active);
00306     SO_KIT_CATALOG_ENTRY_HEADER(translator4Switch);
00307     SO_KIT_CATALOG_ENTRY_HEADER(translator4LocateGroup);
00308     SO_KIT_CATALOG_ENTRY_HEADER(translator4);
00309     SO_KIT_CATALOG_ENTRY_HEADER(translator4Active);
00310     SO_KIT_CATALOG_ENTRY_HEADER(translator5Switch);
00311     SO_KIT_CATALOG_ENTRY_HEADER(translator5LocateGroup);
00312     SO_KIT_CATALOG_ENTRY_HEADER(translator5);
00313     SO_KIT_CATALOG_ENTRY_HEADER(translator5Active);
00314     SO_KIT_CATALOG_ENTRY_HEADER(translator6Switch);
00315     SO_KIT_CATALOG_ENTRY_HEADER(translator6LocateGroup);
00316     SO_KIT_CATALOG_ENTRY_HEADER(translator6);
00317     SO_KIT_CATALOG_ENTRY_HEADER(translator6Active);
00318 
00319 
00320     SO_KIT_CATALOG_ENTRY_HEADER(rotatorSep);
00321     SO_KIT_CATALOG_ENTRY_HEADER(rotator1Switch);
00322     SO_KIT_CATALOG_ENTRY_HEADER(rotator1LocateGroup);
00323     SO_KIT_CATALOG_ENTRY_HEADER(rotator1);
00324     SO_KIT_CATALOG_ENTRY_HEADER(rotator1Active);
00325     SO_KIT_CATALOG_ENTRY_HEADER(rotator2Switch);
00326     SO_KIT_CATALOG_ENTRY_HEADER(rotator2LocateGroup);
00327     SO_KIT_CATALOG_ENTRY_HEADER(rotator2);
00328     SO_KIT_CATALOG_ENTRY_HEADER(rotator2Active);
00329     SO_KIT_CATALOG_ENTRY_HEADER(rotator3Switch);
00330     SO_KIT_CATALOG_ENTRY_HEADER(rotator3LocateGroup);
00331     SO_KIT_CATALOG_ENTRY_HEADER(rotator3);
00332     SO_KIT_CATALOG_ENTRY_HEADER(rotator3Active);
00333     SO_KIT_CATALOG_ENTRY_HEADER(rotator4Switch);
00334     SO_KIT_CATALOG_ENTRY_HEADER(rotator4LocateGroup);
00335     SO_KIT_CATALOG_ENTRY_HEADER(rotator4);
00336     SO_KIT_CATALOG_ENTRY_HEADER(rotator4Active);
00337     SO_KIT_CATALOG_ENTRY_HEADER(rotator5Switch);
00338     SO_KIT_CATALOG_ENTRY_HEADER(rotator5LocateGroup);
00339     SO_KIT_CATALOG_ENTRY_HEADER(rotator5);
00340     SO_KIT_CATALOG_ENTRY_HEADER(rotator5Active);
00341     SO_KIT_CATALOG_ENTRY_HEADER(rotator6Switch);
00342     SO_KIT_CATALOG_ENTRY_HEADER(rotator6LocateGroup);
00343     SO_KIT_CATALOG_ENTRY_HEADER(rotator6);
00344     SO_KIT_CATALOG_ENTRY_HEADER(rotator6Active);
00345 
00346     SO_KIT_CATALOG_ENTRY_HEADER(scaleSep);
00347     SO_KIT_CATALOG_ENTRY_HEADER(scale1Switch);
00348     SO_KIT_CATALOG_ENTRY_HEADER(scale1LocateGroup);
00349     SO_KIT_CATALOG_ENTRY_HEADER(scale1);
00350     SO_KIT_CATALOG_ENTRY_HEADER(scale1Active);
00351     SO_KIT_CATALOG_ENTRY_HEADER(scale2Switch);
00352     SO_KIT_CATALOG_ENTRY_HEADER(scale2LocateGroup);
00353     SO_KIT_CATALOG_ENTRY_HEADER(scale2);
00354     SO_KIT_CATALOG_ENTRY_HEADER(scale2Active);
00355     SO_KIT_CATALOG_ENTRY_HEADER(scale3Switch);
00356     SO_KIT_CATALOG_ENTRY_HEADER(scale3LocateGroup);
00357     SO_KIT_CATALOG_ENTRY_HEADER(scale3);
00358     SO_KIT_CATALOG_ENTRY_HEADER(scale3Active);
00359     SO_KIT_CATALOG_ENTRY_HEADER(scale4Switch);
00360     SO_KIT_CATALOG_ENTRY_HEADER(scale4LocateGroup);
00361     SO_KIT_CATALOG_ENTRY_HEADER(scale4);
00362     SO_KIT_CATALOG_ENTRY_HEADER(scale4Active);
00363     SO_KIT_CATALOG_ENTRY_HEADER(scale5Switch);
00364     SO_KIT_CATALOG_ENTRY_HEADER(scale5LocateGroup);
00365     SO_KIT_CATALOG_ENTRY_HEADER(scale5);
00366     SO_KIT_CATALOG_ENTRY_HEADER(scale5Active);
00367     SO_KIT_CATALOG_ENTRY_HEADER(scale6Switch);
00368     SO_KIT_CATALOG_ENTRY_HEADER(scale6LocateGroup);
00369     SO_KIT_CATALOG_ENTRY_HEADER(scale6);
00370     SO_KIT_CATALOG_ENTRY_HEADER(scale6Active);
00371     SO_KIT_CATALOG_ENTRY_HEADER(scale7Switch);
00372     SO_KIT_CATALOG_ENTRY_HEADER(scale7LocateGroup);
00373     SO_KIT_CATALOG_ENTRY_HEADER(scale7);
00374     SO_KIT_CATALOG_ENTRY_HEADER(scale7Active);
00375     SO_KIT_CATALOG_ENTRY_HEADER(scale8Switch);
00376     SO_KIT_CATALOG_ENTRY_HEADER(scale8LocateGroup);
00377     SO_KIT_CATALOG_ENTRY_HEADER(scale8);
00378     SO_KIT_CATALOG_ENTRY_HEADER(scale8Active);
00379 
00380     SO_KIT_CATALOG_ENTRY_HEADER(axisFeedbackSep);
00381     SO_KIT_CATALOG_ENTRY_HEADER(axisFeedbackLocation);
00382     SO_KIT_CATALOG_ENTRY_HEADER(xAxisFeedbackSwitch);
00383     SO_KIT_CATALOG_ENTRY_HEADER(xAxisFeedbackActive);
00384     SO_KIT_CATALOG_ENTRY_HEADER(xAxisFeedbackSelect);
00385     SO_KIT_CATALOG_ENTRY_HEADER(xCrosshairFeedback);
00386     SO_KIT_CATALOG_ENTRY_HEADER(yAxisFeedbackSwitch);
00387     SO_KIT_CATALOG_ENTRY_HEADER(yAxisFeedbackActive);
00388     SO_KIT_CATALOG_ENTRY_HEADER(yAxisFeedbackSelect);
00389     SO_KIT_CATALOG_ENTRY_HEADER(yCrosshairFeedback);
00390     SO_KIT_CATALOG_ENTRY_HEADER(zAxisFeedbackSwitch);
00391     SO_KIT_CATALOG_ENTRY_HEADER(zAxisFeedbackActive);
00392     SO_KIT_CATALOG_ENTRY_HEADER(zAxisFeedbackSelect);
00393     SO_KIT_CATALOG_ENTRY_HEADER(zCrosshairFeedback);
00394 
00395     SO_KIT_CATALOG_ENTRY_HEADER(translateBoxFeedbackSep);
00396     SO_KIT_CATALOG_ENTRY_HEADER(translateBoxFeedbackSwitch);
00397     SO_KIT_CATALOG_ENTRY_HEADER(translateBoxFeedbackRotation);
00398     SO_KIT_CATALOG_ENTRY_HEADER(translateBoxFeedback);
00399 
00400     SO_KIT_CATALOG_ENTRY_HEADER(scaleBoxFeedbackSwitch);
00401     SO_KIT_CATALOG_ENTRY_HEADER(scaleBoxFeedback);
00402 
00403     SO_KIT_CATALOG_ENTRY_HEADER(posXWallFeedbackSwitch);
00404     SO_KIT_CATALOG_ENTRY_HEADER(posXWallFeedback);
00405     SO_KIT_CATALOG_ENTRY_HEADER(posXRoundWallFeedback);
00406     SO_KIT_CATALOG_ENTRY_HEADER(posYWallFeedbackSwitch);
00407     SO_KIT_CATALOG_ENTRY_HEADER(posYWallFeedback);
00408     SO_KIT_CATALOG_ENTRY_HEADER(posYRoundWallFeedback);
00409     SO_KIT_CATALOG_ENTRY_HEADER(posZWallFeedbackSwitch);
00410     SO_KIT_CATALOG_ENTRY_HEADER(posZWallFeedback);
00411     SO_KIT_CATALOG_ENTRY_HEADER(posZRoundWallFeedback);
00412     SO_KIT_CATALOG_ENTRY_HEADER(negXWallFeedbackSwitch);
00413     SO_KIT_CATALOG_ENTRY_HEADER(negXWallFeedback);
00414     SO_KIT_CATALOG_ENTRY_HEADER(negXRoundWallFeedback);
00415     SO_KIT_CATALOG_ENTRY_HEADER(negYWallFeedbackSwitch);
00416     SO_KIT_CATALOG_ENTRY_HEADER(negYWallFeedback);
00417     SO_KIT_CATALOG_ENTRY_HEADER(negYRoundWallFeedback);
00418     SO_KIT_CATALOG_ENTRY_HEADER(negZWallFeedbackSwitch);
00419     SO_KIT_CATALOG_ENTRY_HEADER(negZWallFeedback);
00420     SO_KIT_CATALOG_ENTRY_HEADER(negZRoundWallFeedback);
00421 
00422     SO_KIT_CATALOG_ENTRY_HEADER(radialFeedbackSwitch);
00423     SO_KIT_CATALOG_ENTRY_HEADER(radialFeedback);
00424 
00425     SO_KIT_CATALOG_ENTRY_HEADER(circleFeedbackSep);
00426     SO_KIT_CATALOG_ENTRY_HEADER(circleFeedbackTransformSwitch);
00427     SO_KIT_CATALOG_ENTRY_HEADER(circleFeedbackAntiSquish);
00428     SO_KIT_CATALOG_ENTRY_HEADER(circleFeedbackTransform);
00429     SO_KIT_CATALOG_ENTRY_HEADER(xCircleFeedbackSwitch);
00430     SO_KIT_CATALOG_ENTRY_HEADER(xCircleFeedback);
00431     SO_KIT_CATALOG_ENTRY_HEADER(yCircleFeedbackSwitch);
00432     SO_KIT_CATALOG_ENTRY_HEADER(yCircleFeedback);
00433     SO_KIT_CATALOG_ENTRY_HEADER(zCircleFeedbackSwitch);
00434     SO_KIT_CATALOG_ENTRY_HEADER(zCircleFeedback);
00435 
00436 
00437   public:
00438 
00440     SoTransformerDragger();
00441 
00442     SoSFRotation    rotation;
00443     SoSFVec3f       translation;
00444     SoSFVec3f       scaleFactor;
00445     SoSFFloat       minDiscRotDot; 
00446 
00452     void unsquishKnobs();
00453 
00456     SbBool isLocateHighlighting() { return locateHighlightOn; }
00459     void setLocateHighlighting( SbBool onOff );
00460 
00462     static void setColinearThreshold(int newVal) { colinearThreshold = newVal; }
00467     static int getColinearThreshold() { return colinearThreshold; }
00468 
00469   SoEXTENDER public:
00470 
00473     SbVec3f getBoxPointInWorldSpace( const SbVec3f &pointOnUnitBox );
00474     SbVec3f getBoxDirInWorldSpace( const SbVec3f &dirOnUnitBox );
00475     SbVec3f getWorldPointInBoxSpace( const SbVec3f &pointInWorldSpace );
00476     SbVec2f getWorldPointInPixelSpace( const SbVec3f &thePoint );
00477 
00483     SbVec3f getInteractiveCenterInBoxSpace() 
00484                 { return interactiveCenterInBoxSpace; }
00485 
00486   SoINTERNAL public:
00487     static void         initClass();    
00488 
00489     enum State
00490         { INACTIVE, 
00491            RIT_X_ROTATE,  TOP_Y_ROTATE,  FNT_Z_ROTATE, 
00492            LFT_X_ROTATE,  BOT_Y_ROTATE,  BAK_Z_ROTATE, 
00493 
00494           PX_PY_PZ_3D_SCALE, PX_PY_NZ_3D_SCALE, PX_NY_PZ_3D_SCALE, 
00495           PX_NY_NZ_3D_SCALE, NX_PY_PZ_3D_SCALE, NX_PY_NZ_3D_SCALE, 
00496           NX_NY_PZ_3D_SCALE, NX_NY_NZ_3D_SCALE, 
00497 
00498           RIT_TRANSLATE,  TOP_TRANSLATE,  FNT_TRANSLATE,
00499           LFT_TRANSLATE,  BOT_TRANSLATE,  BAK_TRANSLATE };
00500 
00501     State getCurrentState() { return currentState; }
00502 
00503   protected:
00504 
00506     static void startCB( void *, SoDragger * );
00507     static void motionCB( void *, SoDragger * );
00508     static void finishCB( void *, SoDragger * );
00509     
00510     SoFieldSensor *translFieldSensor;
00511     SoFieldSensor *scaleFieldSensor;
00512     SoFieldSensor *rotateFieldSensor;
00513     static void   fieldSensorCB( void *, SoSensor * );
00514     static void valueChangedCB( void *, SoDragger * );
00515 
00517     static void metaKeyChangeCB( void *, SoDragger *);
00518 
00520     void        dragStart();
00521     void        drag();
00522     void        dragFinish();
00523 
00526     void setAllPartSwitches( int     scaleAssemblyWhich,
00527                              int    rotateAssemblyWhich,
00528                              int translateAssemblyWhich );
00529 
00536     virtual SbBool setUpConnections( SbBool onOff, SbBool doItAlways = FALSE );
00537 
00538     virtual void setDefaultOnNonWritingFields();
00539 
00540     virtual ~SoTransformerDragger();
00541 
00543     void updateAntiSquishList();
00545     SoNodeList antiSquishList;
00546 
00547     int    getMouseGestureDirection(SbBool xAllowed, SbBool yAllowed, 
00548                                     SbBool zAllowed);
00549 
00550     static int getIgnoreAxis(SbVec2f axis[3][2], SbBool xAllowed, 
00551                              SbBool yAllowed, SbBool zAllowed );
00552 
00553     static void makeMinorAxisPerpendicularIfColinear( SbVec2f origin, 
00554                     SbVec2f axisEnds[3][2], int indexA, int indexB );
00555 
00556     static SbBool isColinear(SbVec2f a1[2], SbVec2f a2[2], int pixels);
00557 
00558   private:
00559 
00560     State               currentState;     
00561     int                 currentDir;   
00562 
00563 
00564 
00565 
00566     SbBool              rotatingAsDisc;
00567 
00568     SbPlaneProjector           *planeProj;
00569     SbLineProjector            *lineProj;
00570     SbSphereSectionProjector   *sphereProj;
00571     SbCylinderPlaneProjector   *cylProj;
00572 
00573     State           restartState;   
00574     SbVec3f         worldRestartPt; 
00575 
00576     SbMatrix prevMotionMatrix; 
00577     SbVec3f  prevWorldHitPt;   
00578     SbVec3f  interactiveCenterInBoxSpace; 
00579 
00583     SbVec2f  startNormalizedLocaterPosition; 
00584 
00585     SbBool          altDown, ctlDown, shftDown;  
00586 
00587     SbBool constraining; 
00588 
00590     void        setHighlights();
00591     void        setFeedback();
00592     void        setFeedbackForTranslate();
00593     void        setFeedbackForScale();
00594     void        setFeedbackForRotate();
00595 
00596     State               getStateFromPick();
00597     SbBool              translateInit();
00598     SbBool              rotateInit();
00599     SbBool              scaleInit();
00600 
00601     SbBool              translateDrag();
00602     SbBool              scaleDrag();
00603 
00604     SbBool              rotateDrag();
00605     SbBool              rotateConstrainedDrag();
00606     SbBool              rotateConstrainedDiscDrag();
00607     SbBool              rotateConstrainedCylindricalDrag();
00608 
00609     void initSphereProjector();
00610     void initDiscProjector();
00611     void initCylinderProjector();
00612 
00613     SbBool getShouldRotateAsDisc();
00614     int getConstrainedRotationAxis();
00615 
00617     static const char geomBuffer[];             
00618 
00619     void setAllDefaultParts();
00620 
00621     SbBool locateHighlightOn;
00622 
00623     static int colinearThreshold;
00624 
00628     void makeCatalog();
00629     void makeTranslaterCatalogParts();
00630     void makeRotaterCatalogParts();
00631     void makeScalerCatalogParts();
00632     void makeAxisFeedbackCatalogParts();
00633     void makeBoxFeedbackCatalogParts();
00634     void makeWallFeedbackCatalogParts();
00635     void makeRadialFeedbackCatalogParts();
00636     void makeCircleFeedbackCatalogParts();
00637 };
00638 
00639 #endif /* _SO_TRANSFORMER_DRAGGER_ */