diff --git a/graf3d/gl/inc/TGLOrthoCamera.h b/graf3d/gl/inc/TGLOrthoCamera.h index 0ac99f39727bfe074e69553726ed8c79dab67dcb..64675ce048a498304bc1ac42ad885741e5aa9c32 100644 --- a/graf3d/gl/inc/TGLOrthoCamera.h +++ b/graf3d/gl/inc/TGLOrthoCamera.h @@ -39,7 +39,8 @@ class TGLPaintDevice; class TGLOrthoCamera : public TGLCamera { public: - enum EType { kZOY, kXOZ, kX0Y }; // pair of world axes aligned to h/v screen + enum EType { kZOY, kXOZ, kXOY, // Pair of world axes aligned to h/v screen. + kZnOY, kXnOZ, kXnOY }; // 'n' means preceeding axis is negated. private: // Fields EType fType; //! camera type @@ -71,9 +72,11 @@ private: static UInt_t fgZoomDeltaSens; public: TGLOrthoCamera(); - TGLOrthoCamera(const TGLVector3 & hAxis, const TGLVector3 & vAxis); + TGLOrthoCamera(EType type, const TGLVector3 & hAxis, const TGLVector3 & vAxis); virtual ~TGLOrthoCamera(); + virtual Bool_t IsOrthographic() const { return kTRUE; } + virtual void Setup(const TGLBoundingBox & box, Bool_t reset=kTRUE); virtual void Reset(); diff --git a/graf3d/gl/inc/TGLPerspectiveCamera.h b/graf3d/gl/inc/TGLPerspectiveCamera.h index 30816c1f59ff51bfcad08b3562da11e372cf69bc..a374994fc0d9c8db60e0e6c76dbcad13f64efa9c 100644 --- a/graf3d/gl/inc/TGLPerspectiveCamera.h +++ b/graf3d/gl/inc/TGLPerspectiveCamera.h @@ -42,6 +42,8 @@ public: TGLPerspectiveCamera(const TGLVector3 & hAxis, const TGLVector3 & vAxis); virtual ~TGLPerspectiveCamera(); + virtual Bool_t IsPersepective() const { return kTRUE; } + virtual void Setup(const TGLBoundingBox & box, Bool_t reset=kTRUE); virtual void Reset(); virtual Bool_t Zoom (Int_t delta, Bool_t mod1, Bool_t mod2); diff --git a/graf3d/gl/inc/TGLSAViewer.h b/graf3d/gl/inc/TGLSAViewer.h index 79f7f76cdd1a07e6be5e96d854cc32fb9eb3f996..73abc8840c06e26c8c514a679afcabc285ced336 100644 --- a/graf3d/gl/inc/TGLSAViewer.h +++ b/graf3d/gl/inc/TGLSAViewer.h @@ -49,7 +49,8 @@ public: enum EGLSACommands { kGLHelpAbout, kGLHelpViewer, kGLPerspYOZ, kGLPerspXOZ, kGLPerspXOY, - kGLXOY, kGLXOZ, kGLZOY, + kGLXOY, kGLXOZ, kGLZOY, + kGLXnOY, kGLXnOZ, kGLZnOY, kGLOrthoRotate, kGLOrthoDolly, kGLSaveEPS, kGLSavePDF, kGLSavePNG, kGLSaveGIF, kGLSaveJPG, kGLSaveAS, kGLCloseViewer, kGLQuitROOT, diff --git a/graf3d/gl/inc/TGLViewer.h b/graf3d/gl/inc/TGLViewer.h index 6483572bb1ddca8505e980fe4864f7e7908a6b6b..c2768542379e77ae084429c1c7f352b9043ff0a6 100644 --- a/graf3d/gl/inc/TGLViewer.h +++ b/graf3d/gl/inc/TGLViewer.h @@ -55,8 +55,9 @@ class TGLViewer : public TVirtualViewer3D, friend class TGLEventHandler; public: - enum ECameraType { kCameraPerspXOZ, kCameraPerspYOZ, kCameraPerspXOY, - kCameraOrthoXOY, kCameraOrthoXOZ, kCameraOrthoZOY }; + enum ECameraType { kCameraPerspXOZ, kCameraPerspYOZ, kCameraPerspXOY, + kCameraOrthoXOY, kCameraOrthoXOZ, kCameraOrthoZOY, + kCameraOrthoXnOY, kCameraOrthoXnOZ, kCameraOrthoZnOY }; private: TGLViewer(const TGLViewer &); // Not implemented @@ -79,6 +80,9 @@ protected: TGLOrthoCamera fOrthoXOYCamera; //! TGLOrthoCamera fOrthoXOZCamera; //! TGLOrthoCamera fOrthoZOYCamera; //! + TGLOrthoCamera fOrthoXnOYCamera; //! + TGLOrthoCamera fOrthoXnOZCamera; //! + TGLOrthoCamera fOrthoZnOYCamera; //! TGLCamera * fCurrentCamera; //! // Lights diff --git a/graf3d/gl/src/TGLOrthoCamera.cxx b/graf3d/gl/src/TGLOrthoCamera.cxx index 1414de16917d81455b63f00a48441ce247b54531..d3af4c22633a42cecb3db6bc61f860f2f645d8ea 100644 --- a/graf3d/gl/src/TGLOrthoCamera.cxx +++ b/graf3d/gl/src/TGLOrthoCamera.cxx @@ -37,9 +37,9 @@ ClassImp(TGLOrthoCamera) UInt_t TGLOrthoCamera::fgZoomDeltaSens = 500; //______________________________________________________________________________ -TGLOrthoCamera::TGLOrthoCamera(const TGLVector3 & hAxes, const TGLVector3 & vAxes) : - TGLCamera(hAxes, vAxes), - fType(kZOY), +TGLOrthoCamera::TGLOrthoCamera(EType type, const TGLVector3 & hAxis, const TGLVector3 & vAxis) : + TGLCamera(hAxis, vAxis), + fType(type), fEnableRotate(kFALSE), fDollyToZoom(kTRUE), fZoomMin(0.001), fZoomDefault(0.78), fZoomMax(1000.0), fVolume(TGLVertex3(-100.0, -100.0, -100.0), TGLVertex3(100.0, 100.0, 100.0)), @@ -48,15 +48,6 @@ TGLOrthoCamera::TGLOrthoCamera(const TGLVector3 & hAxes, const TGLVector3 & vAxe // Construct orthographic camera. Setup(TGLBoundingBox(TGLVertex3(-100,-100,-100), TGLVertex3(100,100,100))); - - // define camera type relative to horizontal vector - TGLVector3 v = fCamBase.GetBaseVec(1); - for (Int_t i=0; i<3; i++) { - if (TMath::Abs(v[i]) == 1) { - fType = (TGLOrthoCamera::EType)i; - break; - } - } } //______________________________________________________________________________ @@ -90,18 +81,24 @@ void TGLOrthoCamera::Reset() TGLVector3 e = fVolume.Extents(); switch (fType) { - case kX0Y: { + case kXOY: + case kXnOY: + { // X -> X, Y -> Y, Z -> Z fDefXSize = e.X(); fDefYSize = e.Y(); break; } - case kXOZ: { + case kXOZ: + case kXnOZ: + { // X -> X, Z -> Y, Y -> Z fDefXSize = e.X(); fDefYSize = e.Z(); break; } - case kZOY: { + case kZOY: + case kZnOY: + { // Z -> X, Y -> Y, X -> Z fDefXSize = e.Z(); fDefYSize = e.Y(); break; diff --git a/graf3d/gl/src/TGLSAViewer.cxx b/graf3d/gl/src/TGLSAViewer.cxx index f12da00f7bccef4bee7e85ebc935b37f73627b0b..12062712f8fa02db7a05661b6482574559fdd484 100644 --- a/graf3d/gl/src/TGLSAViewer.cxx +++ b/graf3d/gl/src/TGLSAViewer.cxx @@ -286,6 +286,9 @@ void TGLSAViewer::CreateMenus() fCameraMenu->AddEntry("Orthographic (XOY)", kGLXOY); fCameraMenu->AddEntry("Orthographic (XOZ)", kGLXOZ); fCameraMenu->AddEntry("Orthographic (ZOY)", kGLZOY); + fCameraMenu->AddEntry("Orthographic (XnOY)", kGLXnOY); + fCameraMenu->AddEntry("Orthographic (XnOZ)", kGLXnOZ); + fCameraMenu->AddEntry("Orthographic (ZnOY)", kGLZnOY); fCameraMenu->AddSeparator(); fCameraMenu->AddEntry("Ortho allow rotate", kGLOrthoRotate); fCameraMenu->AddEntry("Ortho allow dolly", kGLOrthoDolly); @@ -438,6 +441,15 @@ Bool_t TGLSAViewer::ProcessFrameMessage(Long_t msg, Long_t parm1, Long_t) case kGLZOY: SetCurrentCamera(TGLViewer::kCameraOrthoZOY); break; + case kGLXnOY: + SetCurrentCamera(TGLViewer::kCameraOrthoXnOY); + break; + case kGLXnOZ: + SetCurrentCamera(TGLViewer::kCameraOrthoXnOZ); + break; + case kGLZnOY: + SetCurrentCamera(TGLViewer::kCameraOrthoZnOY); + break; case kGLOrthoRotate: ToggleOrthoRotate(); break; diff --git a/graf3d/gl/src/TGLViewer.cxx b/graf3d/gl/src/TGLViewer.cxx index d7e47bd6a689fb9d490dbc34b2099926aef68579..2a65ff11683817022fcdeb15c9425a6c590e917f 100644 --- a/graf3d/gl/src/TGLViewer.cxx +++ b/graf3d/gl/src/TGLViewer.cxx @@ -88,9 +88,12 @@ TGLViewer::TGLViewer(TVirtualPad * pad, Int_t x, Int_t y, fPerspectiveCameraXOZ(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // XOZ floor fPerspectiveCameraYOZ(TGLVector3( 0.0,-1.0, 0.0), TGLVector3(1.0, 0.0, 0.0)), // YOZ floor fPerspectiveCameraXOY(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // XOY floor - fOrthoXOYCamera(TGLVector3( 0.0, 0.0, 1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down Z axis, X horz, Y vert - fOrthoXOZCamera(TGLVector3( 0.0,-1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking down Y axis, X horz, Z vert - fOrthoZOYCamera(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down X axis, Z horz, Y vert + fOrthoXOYCamera (TGLOrthoCamera::kXOY, TGLVector3( 0.0, 0.0, 1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down Z axis, X horz, Y vert + fOrthoXOZCamera (TGLOrthoCamera::kXOZ, TGLVector3( 0.0,-1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking along Y axis, X horz, Z vert + fOrthoZOYCamera (TGLOrthoCamera::kZOY, TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking along X axis, Z horz, Y vert + fOrthoXnOYCamera(TGLOrthoCamera::kXnOY, TGLVector3( 0.0, 0.0,-1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking along Z axis, -X horz, Y vert + fOrthoXnOZCamera(TGLOrthoCamera::kXnOZ, TGLVector3( 0.0, 1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking down Y axis, -X horz, Z vert + fOrthoZnOYCamera(TGLOrthoCamera::kZnOY, TGLVector3( 1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down X axis, -Z horz, Y vert fCurrentCamera(&fPerspectiveCameraXOZ), fLightSet (0), @@ -139,9 +142,12 @@ TGLViewer::TGLViewer(TVirtualPad * pad) : fPerspectiveCameraXOZ(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // XOZ floor fPerspectiveCameraYOZ(TGLVector3( 0.0,-1.0, 0.0), TGLVector3(1.0, 0.0, 0.0)), // YOZ floor fPerspectiveCameraXOY(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // XOY floor - fOrthoXOYCamera(TGLVector3( 0.0, 0.0, 1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down Z axis, X horz, Y vert - fOrthoXOZCamera(TGLVector3( 0.0,-1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking down Y axis, X horz, Z vert - fOrthoZOYCamera(TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down X axis, Z horz, Y vert + fOrthoXOYCamera (TGLOrthoCamera::kXOY, TGLVector3( 0.0, 0.0, 1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down Z axis, X horz, Y vert + fOrthoXOZCamera (TGLOrthoCamera::kXOZ, TGLVector3( 0.0,-1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking along Y axis, X horz, Z vert + fOrthoZOYCamera (TGLOrthoCamera::kZOY, TGLVector3(-1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking along X axis, Z horz, Y vert + fOrthoXnOYCamera(TGLOrthoCamera::kXnOY, TGLVector3( 0.0, 0.0,-1.0), TGLVector3(0.0, 1.0, 0.0)), // Looking along Z axis, -X horz, Y vert + fOrthoXnOZCamera(TGLOrthoCamera::kXnOZ, TGLVector3( 0.0, 1.0, 0.0), TGLVector3(0.0, 0.0, 1.0)), // Looking down Y axis, -X horz, Z vert + fOrthoZnOYCamera(TGLOrthoCamera::kZnOY, TGLVector3( 1.0, 0.0, 0.0), TGLVector3(0.0, 1.0, 0.0)), // Looking down X axis, -Z horz, Y vert fCurrentCamera(&fPerspectiveCameraXOZ), fLightSet (0), @@ -956,6 +962,12 @@ TGLCamera& TGLViewer::RefCamera(ECameraType cameraType) return fOrthoXOZCamera; case kCameraOrthoZOY: return fOrthoZOYCamera; + case kCameraOrthoXnOY: + return fOrthoXnOYCamera; + case kCameraOrthoXnOZ: + return fOrthoXnOZCamera; + case kCameraOrthoZnOY: + return fOrthoZnOYCamera; default: Error("TGLViewer::SetCurrentCamera", "invalid camera type"); return *fCurrentCamera; @@ -1000,6 +1012,18 @@ void TGLViewer::SetCurrentCamera(ECameraType cameraType) fCurrentCamera = &fOrthoZOYCamera; break; } + case kCameraOrthoXnOY: { + fCurrentCamera = &fOrthoXnOYCamera; + break; + } + case kCameraOrthoXnOZ: { + fCurrentCamera = &fOrthoXnOZCamera; + break; + } + case kCameraOrthoZnOY: { + fCurrentCamera = &fOrthoZnOYCamera; + break; + } default: { Error("TGLViewer::SetCurrentCamera", "invalid camera type"); break;