00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef COIN_SOCENTERBALLDRAGGER_H
00021 #define COIN_SOCENTERBALLDRAGGER_H
00022
00023 #include <Inventor/draggers/SoDragger.h>
00024 #include <Inventor/fields/SoSFRotation.h>
00025 #include <Inventor/fields/SoSFVec3f.h>
00026
00027 class SoSensor;
00028 class SoFieldSensor;
00029
00030
00031 class COIN_DLL_API SoCenterballDragger : public SoDragger {
00032 typedef SoDragger inherited;
00033
00034 SO_KIT_HEADER(SoCenterballDragger);
00035
00036 SO_KIT_CATALOG_ENTRY_HEADER(XAxis);
00037 SO_KIT_CATALOG_ENTRY_HEADER(XAxisSwitch);
00038 SO_KIT_CATALOG_ENTRY_HEADER(XCenterChanger);
00039 SO_KIT_CATALOG_ENTRY_HEADER(XRotator);
00040 SO_KIT_CATALOG_ENTRY_HEADER(YAxis);
00041 SO_KIT_CATALOG_ENTRY_HEADER(YAxisSwitch);
00042 SO_KIT_CATALOG_ENTRY_HEADER(YCenterChanger);
00043 SO_KIT_CATALOG_ENTRY_HEADER(YRotator);
00044 SO_KIT_CATALOG_ENTRY_HEADER(ZAxis);
00045 SO_KIT_CATALOG_ENTRY_HEADER(ZAxisSwitch);
00046 SO_KIT_CATALOG_ENTRY_HEADER(ZCenterChanger);
00047 SO_KIT_CATALOG_ENTRY_HEADER(ZRotator);
00048 SO_KIT_CATALOG_ENTRY_HEADER(antiSquish);
00049 SO_KIT_CATALOG_ENTRY_HEADER(lightModel);
00050 SO_KIT_CATALOG_ENTRY_HEADER(rot2X90);
00051 SO_KIT_CATALOG_ENTRY_HEADER(rotX90);
00052 SO_KIT_CATALOG_ENTRY_HEADER(rotY90);
00053 SO_KIT_CATALOG_ENTRY_HEADER(rotator);
00054 SO_KIT_CATALOG_ENTRY_HEADER(surroundScale);
00055 SO_KIT_CATALOG_ENTRY_HEADER(translateToCenter);
00056
00057 public:
00058 static void initClass(void);
00059 SoCenterballDragger(void);
00060
00061 virtual void saveStartParameters(void);
00062
00063 SoSFRotation rotation;
00064 SoSFVec3f center;
00065
00066 protected:
00067 ~SoCenterballDragger();
00068 void transferCenterDraggerMotion(SoDragger * childdragger);
00069 void setSwitches(SoDragger * activechild);
00070 virtual SbBool setUpConnections(SbBool onoff, SbBool doitalways = FALSE);
00071 virtual void setDefaultOnNonWritingFields(void);
00072
00073 static void fieldSensorCB(void * f, SoSensor * s);
00074 static void valueChangedCB(void * f, SoDragger * d);
00075 static void kidStartCB(void * f, SoDragger * d);
00076 static void kidFinishCB(void * f, SoDragger * d);
00077
00078 virtual void getBoundingBox(SoGetBoundingBoxAction * action);
00079 virtual void getMatrix(SoGetMatrixAction * action);
00080
00081 SoFieldSensor * rotFieldSensor;
00082 SoFieldSensor * centerFieldSensor;
00083
00084 private:
00085 SbVec3f savedtransl;
00086 SbVec3f savedcenter;
00087 void addChildDragger(SoDragger *child);
00088 void removeChildDragger(const char *childname);
00089 };
00090
00091 #endif // !COIN_SOCENTERBALLDRAGGER_H