00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "TGLManip.h"
00013 #include "TGLUtil.h"
00014 #include "TGLCamera.h"
00015 #include "TGLPhysicalShape.h"
00016 #include "TGLIncludes.h"
00017 #include "TROOT.h"
00018
00019 #include "TVirtualX.h"
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 ClassImp(TGLManip);
00033
00034
00035 TGLManip::TGLManip() :
00036 fShape(0),
00037 fSelectedWidget(0), fActive(kFALSE),
00038 fFirstMouse(0, 0),
00039 fLastMouse(0, 0)
00040 {
00041
00042
00043 }
00044
00045
00046 TGLManip::TGLManip(TGLPhysicalShape* shape) :
00047 fShape(shape),
00048 fSelectedWidget(0), fActive(kFALSE),
00049 fFirstMouse(0, 0),
00050 fLastMouse(0, 0)
00051 {
00052
00053 }
00054
00055
00056 TGLManip::TGLManip(const TGLManip& gm) :
00057 TVirtualGLManip(gm),
00058 fShape(gm.fShape),
00059 fSelectedWidget(gm.fSelectedWidget),
00060 fActive(gm.fActive),
00061 fFirstMouse(gm.fFirstMouse),
00062 fLastMouse(gm.fLastMouse)
00063 {
00064
00065 }
00066
00067
00068 TGLManip& TGLManip::operator=(const TGLManip& gm)
00069 {
00070
00071
00072 if(this!=&gm) {
00073 TVirtualGLManip::operator=(gm);
00074 fShape=gm.fShape;
00075 fSelectedWidget=gm.fSelectedWidget;
00076 fActive=gm.fActive;
00077 fFirstMouse=gm.fFirstMouse;
00078 fLastMouse=gm.fLastMouse;
00079 }
00080 return *this;
00081 }
00082
00083
00084 TGLManip::~TGLManip()
00085 {
00086
00087 }
00088
00089
00090 const UChar_t* TGLManip::ColorFor(UInt_t widget) const
00091 {
00092
00093
00094 if (widget == fSelectedWidget)
00095 {
00096 return TGLUtil::fgYellow;
00097 }
00098 else
00099 {
00100 switch (widget)
00101 {
00102 case 1: return TGLUtil::fgRed;
00103 case 2: return TGLUtil::fgGreen;
00104 case 3: return TGLUtil::fgBlue;
00105 default: return TGLUtil::fgGrey;
00106 }
00107 }
00108 }
00109
00110
00111 Bool_t TGLManip::HandleButton(const Event_t& event, const TGLCamera& )
00112 {
00113
00114
00115
00116 if (event.fCode != kButton1) {
00117 return kFALSE;
00118 }
00119
00120
00121 if (event.fType == kButtonPress && fSelectedWidget != 0) {
00122 fFirstMouse.SetX(event.fX);
00123 fFirstMouse.SetY(event.fY);
00124 fLastMouse.SetX(event.fX);
00125 fLastMouse.SetY(event.fY);
00126 fActive = kTRUE;
00127 return kTRUE;
00128 } else if (event.fType == kButtonRelease && fActive) {
00129 fActive = kFALSE;
00130 return kTRUE;
00131 } else {
00132 return kFALSE;
00133 }
00134 }
00135
00136
00137 Bool_t TGLManip::HandleMotion(const Event_t& ,
00138 const TGLCamera& )
00139 {
00140
00141
00142
00143 return kFALSE;
00144 }
00145
00146
00147 void TGLManip::CalcDrawScale(const TGLBoundingBox& box,
00148 const TGLCamera& camera,
00149 Double_t& base,
00150 TGLVector3 axis[3]) const
00151 {
00152
00153
00154
00155
00156
00157 base = box.Extents().Mag() / 100.0;
00158
00159
00160
00161 TGLVector3 pixelInWorld = camera.ViewportDeltaToWorld(box.Center(), 1, 1);
00162 Double_t pixelScale = pixelInWorld.Mag();
00163 if (base < pixelScale * 3.0) {
00164 base = pixelScale * 3.0;
00165 } else if (base > pixelScale * 6.0) {
00166 base = pixelScale * 6.0;
00167 }
00168
00169
00170 for (UInt_t i = 0; i<3; i++) {
00171 if (box.IsEmpty()) {
00172 axis[i] = box.Axis(i, kTRUE)*base*-10.0;
00173 } else {
00174 axis[i] = box.Axis(i, kFALSE)*-0.51;
00175 if (axis[i].Mag() < base*10.0) {
00176 axis[i] = box.Axis(i, kTRUE)*base*-10.0;
00177 }
00178 }
00179 }
00180 }