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 #ifdef SOQT
00051 # include <Inventor/Qt/viewers/SoQtExaminerViewer.h>
00052 #elif defined(SOWX)
00053 # include <Inventor/Wx/viewers/SoWxExaminerViewer.h>
00054 #elif defined _WIN32
00055 # include <Inventor/Win/viewers/SoWinExaminerViewer.h>
00056 #else // _WIN32
00057
00058 #ifndef _SO_XT_EXAMINER_VIEWER_
00059 #define _SO_XT_EXAMINER_VIEWER_
00060
00061 #include <Inventor/Xt/viewers/SoXtFullViewer.h>
00062 #include <Inventor/events/SoMouseButtonEvent.h>
00063 #include <Inventor/Gui/viewers/SoGuiExaminerViewer.h>
00064
00065
00066 class SbSphereSheetProjector;
00067 class SoFieldSensor;
00068 class SoSeparator;
00069 class SoSwitch;
00070 class SoTranslation;
00071 class SoScale;
00072 class SoXtBitmapButton;
00073
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00100
00220 class SoXtExaminerViewer : public SoXtFullViewer
00221 {
00222 public:
00223
00227 enum ViewingMode
00228 {
00232 VIEWING_MODE_SPIN,
00233
00243 VIEWING_MODE_SPIN_CONSTRAINED,
00244
00248 VIEWING_MODE_PAN,
00249
00254 VIEWING_MODE_ZOOM
00255 };
00256
00260 enum ConstrainedViewingMode
00261 {
00265 NONE,
00269 CONSTRAINED_VIEWING_MODE_X,
00270
00274 CONSTRAINED_VIEWING_MODE_Y,
00275
00279 CONSTRAINED_VIEWING_MODE_Z
00280 };
00281
00286 SoXtExaminerViewer( SoWidget parent = NULL,
00287 const char* name = NULL,
00288 SbBool buildInsideParent = TRUE,
00289 SoXtFullViewer::BuildFlag flag = SoXtFullViewer::BUILD_ALL,
00290 SoXtViewer::Type type = SoXtViewer::BROWSER );
00294 ~SoXtExaminerViewer();
00295
00302 void setViewingMode( ViewingMode viewingMode ) ;
00303
00307 ViewingMode getViewingMode() const
00308 { return (ViewingMode)m_guiExamViewer->getViewingMode(); }
00309
00321 void setConstrainedViewingMode( ConstrainedViewingMode mode );
00322
00326 ConstrainedViewingMode getConstrainedViewingMode() const
00327 { return m_constrainedMode; }
00328
00333 void setFeedbackVisibility( SbBool onOrOff );
00334
00338 SbBool isFeedbackVisible() const { return m_guiExamViewer->isFeedbackVisible(); }
00339
00343 void setFeedbackSize( int newSize );
00344
00348 int getFeedbackSize() const { return m_guiExamViewer->getFeedbackSize(); }
00349
00357 void setAnimationEnabled( SbBool onOrOff );
00358
00362 SbBool isAnimationEnabled() { return m_guiExamViewer->isAnimationEnabled(); }
00363
00367 void stopAnimating();
00368
00372 SbBool isAnimating() { return m_guiExamViewer->isAnimating(); }
00373
00374
00375
00376
00377 virtual void viewAll();
00378 virtual void resetToHomePosition();
00379 virtual void setCamera( SoCamera* cam );
00380 virtual void setViewing( SbBool onOrOff );
00381 virtual void setCursorEnabled( SbBool onOrOff );
00382 virtual void setSeekMode( SbBool onOrOff );
00383
00394 virtual void activateSpinning( const SbVec2s& newLocator );
00395
00406 virtual void activatePanning( const SbVec2s& newLocator );
00407
00418 virtual void activateDolly( const SbVec2s& newLocator );
00419
00430 virtual void activateRoll( const SbVec2s& newLocator );
00431
00438 virtual void rollCamera( const SbVec2s& newLocator );
00439
00440
00447 virtual void spinCamera( const SbVec2f& newLocator );
00448
00459 virtual void spinConstrainedCamera( const SbVec2f& newLocator, int axisIndex );
00460
00469 virtual void dollyCamera( const SbVec2s& newLocator );
00470
00477 virtual void reverseDollyCamera( const SbVec2s& newLocator );
00478
00485 virtual void panCamera( const SbVec2f& newLocator );
00486
00487 private:
00488
00493 virtual void rotateCamera( const SbRotation& rot );
00494
00504 void constrainCameraRotation( bool x = false, bool y = false, bool z = false );
00505
00506 private:
00507
00508 SoGuiExaminerViewer* getGuiExaminerViewer() const;
00509
00510
00511
00512
00513
00514 private:
00515 SoXtExaminerViewer( SoWidget parent,
00516 const char* name,
00517 SbBool buildInsideParent,
00518 SoXtFullViewer::BuildFlag flag,
00519 SoXtViewer::Type type,
00520 SbBool buildNow,
00521 SbBool sync = TRUE );
00522
00523 private:
00524
00525 virtual SbString getDefaultWidgetName() const;
00526 virtual SbString getDefaultTitle() const;
00527 virtual SbString getDefaultIconTitle() const;
00528
00529
00530 virtual void processEvent( XAnyEvent* anyevent );
00531 virtual void actualRedraw();
00532
00533
00534 SoWidget buildWidget( SoWidget parent );
00535
00536
00537 virtual void bottomWheelMotion( float newVal );
00538 virtual void leftWheelMotion( float newVal );
00539 virtual void rightWheelMotion( float newVal );
00540
00541
00542 virtual void bottomWheelStart();
00543 virtual void leftWheelStart();
00544
00545
00546 virtual void createPrefSheet();
00547
00548
00549 virtual void createViewerButtons( SoWidget parent );
00550
00551
00552 virtual void openViewerHelpCard();
00553
00554 private:
00555
00556 Cursor spinCursor, panCursor, dollyCursor, seekCursor;
00557 SbBool firstBuild;
00558
00559
00560 void createFeedbackNodes();
00561
00562
00563 unsigned long lastMotionTime;
00564 static void visibilityChangeCB( void* pt, SbBool visible );
00565
00566 void setViewerMode();
00567 void updateViewerMode( unsigned int state );
00568 void switchMode( int newMode );
00569 void updateCursor();
00570 void defineCursors();
00571
00572
00573 SoWidget createExamPrefSheetGuts( SoWidget parent );
00574 static void animPrefSheetToggleCB( SoWidget w, SoXtExaminerViewer* v, void* data );
00575
00576
00577 int feedbackSizeWheelVal;
00578 SoWidget feedbackLabel[2], feedbackField, feedbackSizeWheel;
00579 static void feedbackSizeWheelCB( SoWidget w, SoXtExaminerViewer* v, XtPointer* d );
00580 static void feedbackSizeFieldCB( SoWidget w, SoXtExaminerViewer* v, void* data );
00581 static void feedbackPrefSheetToggleCB( SoWidget w, SoXtExaminerViewer* v, void* data );
00582 void toggleFeedbackWheelSize( SoWidget toggle );
00583
00584
00585 SoXtBitmapButton* buttonList[10];
00586 static void camPushCB( SoWidget w, SoXtExaminerViewer* v, void* data);
00587
00588
00589 void constructorCommon( SbBool buildNow );
00590
00591 SoGuiExaminerViewer* m_guiExamViewer;
00592
00593
00594 SoGuiExaminerViewer::ViewingSpinType m_viewingSpinType;
00595 ConstrainedViewingMode m_constrainedMode;
00596 };
00597
00598 #endif
00599
00600 #endif // _WIN32
00601
00602
00603