12 #include "RConfigure.h" 118 for (i = 0; i < 3; i++) {
121 fX1[i] = fX2[i] = fY1[i] = fY2[i] = fZ1[i] = fZ2[i] = 0;
125 fLongitude = -90 -
gPad->GetPhi();
126 fLatitude = 90 -
gPad->GetTheta();
132 ResetView(fLongitude, fLatitude, fPsi, irep);
168 if (
gPad)
gPad->Range(-1, -1, 1, 1);
172 for (i = 0; i < 3; i++) {
173 if (rmin)
fRmin[i] = rmin[i];
175 if (rmax)
fRmax[i] = rmax[i];
211 for (
Int_t i=0; i<16; i++) {
217 for(
Int_t i=0; i<3; i++) {
227 for(
Int_t i=0; i<4; i++)
250 for(
Int_t i=0; i<16; i++) {
256 for(
Int_t i=0; i<3; i++) {
266 for(
Int_t i=0; i<4; i++)
316 Int_t i1, i2, i3, i4, ix, iy;
334 if (
fTN[0] < 0) i1 = 2;
335 if (
fTN[0]*cosa +
fTN[1]*sina < 0) i1 = 5 - i1;
343 av[4] = p[(i1 << 1) - 2];
344 av[5] = p[(i1 << 1) - 1];
345 av[7] = p[(i2 << 1) - 2];
346 av[8] = p[(i2 << 1) - 1];
347 av[10] = p[(i3 << 1) - 2];
348 av[11] = p[(i3 << 1) - 1];
349 av[13] = p[(i4 << 1) - 2];
350 av[14] = p[(i4 << 1) - 1];
351 for (i = 1; i <= 4; ++i) {
352 av[i*3 + 3] =
fRmin[2];
353 av[i*3 + 13] = av[i*3 + 1];
354 av[i*3 + 14] = av[i*3 + 2];
355 av[i*3 + 15] =
fRmax[2];
360 if (av[4] == av[7]) ix = 2;
361 if (av[5] == av[8]) ix = 1;
365 if (av[ix*3 + 1] > av[(ix + 1)*3 + 1]) ix1 = ix + 1;
366 ix2 = (ix << 1) - ix1 + 1;
369 if (av[iy*3 + 2] > av[(iy + 1)*3 + 2]) iy1 = iy + 1;
370 iy2 = (iy << 1) - iy1 + 1;
375 if (
fTN[10] >= 0)
return;
376 k = (ix1 - 1)*3 + ix2;
395 k = (iy1 - 1)*3 + iy2;
463 for (i=0; i<3; i++) cov[i] = 0.5*(
fRmax[i]+
fRmin[i]);
472 t12[0] = c1*c3 - s1*c2*s3;
473 t12[4] = c1*s3 + s1*c2*
c3;
477 t12[1] = -s1*c3 - c1*c2*s3;
478 t12[5] = -s1*s3 + c1*c2*
c3;
488 t12[12] = -(cov[0]*t12[0]+cov[1]*t12[4]+cov[2]*t12[8]);
489 t12[13] = -(cov[0]*t12[1]+cov[1]*t12[5]+cov[2]*t12[9]);
490 t12[14] = -(cov[0]*t12[2]+cov[1]*t12[6]+cov[2]*t12[10]);
514 fTnorm[0] = t12[0] + a2*t12[2];
515 fTnorm[1] = t12[1] + b2*t12[2];
519 fTnorm[4] = t12[4] + a2*t12[6];
520 fTnorm[5] = t12[5] + b2*t12[6];
524 fTnorm[8] = t12[8] + a2*t12[10];
525 fTnorm[9] = t12[9] + b2*t12[10];
529 fTnorm[12] = t12[12] + a2*t12[14];
530 fTnorm[13] = t12[13] + b2*t12[14];
595 tran[0] = 1 / scalex;
598 tran[3] = -c[0] / scalex;
601 tran[5] = 1 / scaley;
603 tran[7] = -c[1] / scaley;
607 tran[10] = 1 / scalez;
608 tran[11] = -c[2] / scalez;
626 rota[0] = c1*c3 - s1*c2*s3;
627 rota[1] = c1*s3 + s1*c2*
c3;
631 rota[4] = -s1*c3 - c1* c2*s3;
632 rota[5] = -s1*s3 + c1* c2*
c3;
647 for (i = 1; i <= 3; ++i) {
648 for (k = 1; k <= 4; ++k) {
649 tnorm[k + (i << 2)] = rota[(i << 2) - 4]*tran[k - 1] + rota[(i
650 << 2) - 3]*tran[k + 3] + rota[(i << 2) - 2]*tran[k +7]
651 + rota[(i << 2) - 1]*tran[k + 11];
666 for (i = 1; i <= 3; ++i) {
667 for (k = 1; k <= 4; ++k) {
668 tback[k + (i << 2)] = tran[(i << 2) - 4]*rota[(k << 2) - 4] +
669 tran[(i << 2) - 3]*rota[(k << 2) - 3] + tran[(i << 2) -2]
670 *rota[(k << 2) - 2] + tran[(i << 2) - 1]*rota[(k <<2) - 1];
702 static Int_t system, framewasdrawn;
703 static Double_t xrange, yrange,
xmin,
ymin, longitude1, latitude1, longitude2, latitude2;
704 static Double_t newlatitude, newlongitude, oldlatitude, oldlongitude;
711 if (!
gPad->IsEditable())
return;
728 xmin =
gPad->GetX1();
729 ymin =
gPad->GetY1();
732 x =
gPad->PixeltoX(px);
733 y =
gPad->PixeltoY(py);
737 longitude1 = 180*(x-
xmin)/xrange;
738 latitude1 = 90*(y-
ymin)/yrange;
740 latitude1 = 90*(x-
xmin)/xrange;
741 longitude1 = 180*(y-
ymin)/yrange;
743 newlongitude = oldlongitude = -90 -
gPad->GetPhi();
744 newlatitude = oldlatitude = 90 -
gPad->GetTheta();
759 x =
gPad->PixeltoX(px);
760 y =
gPad->PixeltoY(py);
762 longitude2 = 180*(x-
xmin)/xrange;
763 latitude2 = 90*(y-
ymin)/yrange;
765 latitude2 = 90*(x-
xmin)/xrange;
766 longitude2 = 180*(y-
ymin)/yrange;
768 dlongitude = longitude2 - longitude1;
769 dlatitude = latitude2 - latitude1;
770 newlatitude = oldlatitude + dlatitude;
771 newlongitude = oldlongitude - dlongitude;
773 ResetView(newlongitude, newlatitude, psideg, irep);
778 SetView(newlongitude, newlatitude, psideg, irep);
779 gPad->SetPhi(-90-newlongitude);
780 gPad->SetTheta(90-newlatitude);
787 if (
gROOT->IsEscaped()) {
791 SetView(oldlongitude, oldlatitude, psideg, irep);
792 gPad->SetPhi(-90-oldlongitude);
793 gPad->SetTheta(90-oldlatitude);
808 if (viewer && !strcmp(viewer->IsA()->
GetName(),
"TView3Der3DPad")) {
809 gPad->ReleaseViewer3D();
817 SetView(newlongitude, newlatitude, psideg, irep);
818 gPad->SetPhi(-90-newlongitude);
819 gPad->SetTheta(90-newlatitude);
847 fTN[0] *
fTN[6]) + z*(fTN[0] * fTN[5] - fTN[1] * fTN[4]);
873 if (aphi[kphi + 1] == aphi[1]) aphi[kphi + 1] += 360;
876 aphi[kphi + 2] = (aphi[1] + aphi[kphi + 1]) / (
float)2. + 180;
877 aphi[kphi + 3] = aphi[1] + 360;
883 for (i = 1; i <= kphi; ++i) {
885 phi2 =
kRad*aphi[i + 1];
888 if (x1 >= 0 && x2 > 0)
continue;
889 if (x1 <= 0 && x2 < 0)
continue;
895 Error(
"FindPhiSectors",
"something strange: num. of critical sector not equal 2");
902 phi1 =
kRad*(aphi[iphi[0]] + aphi[iphi[0] + 1]) / (
float)2.;
903 phi2 =
kRad*(aphi[iphi[1]] + aphi[iphi[1] + 1]) / (
float)2.;
906 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
941 ath[kth + 2] = 0.5*(ath[1] + ath[kth + 1]) + 180;
942 ath[kth + 3] = ath[1] + 360;
950 for (i = 1; i <= kth; ++i) {
952 th2 = kRad*ath[i + 1];
955 if (z1 >= 0 && z2 > 0)
continue;
956 if (z1 <= 0 && z2 < 0)
continue;
962 Error(
"FindThetaSectors",
"Something strange: num. of critical sectors not equal 2");
970 th1 = kRad*(ath[ith[0]] + ath[ith[0] + 1]) / (
float)2.;
971 th2 = kRad*(ath[ith[1]] + ath[ith[1] + 1]) / (
float)2.;
974 if ((z1 <= z2 && iopt == 1) || (z1 > z2 && iopt == 2)) {
996 for (
Int_t i = 0; i < 3; i++) {
997 if (
fRmin[i] >=
fRmax[i]) { irep = -1;
return;}
1036 if (
fSystem != 1)
return 9998;
1038 x1 =
gPad->XtoAbsPixel(
fX1[0]);
1039 y1 =
gPad->YtoAbsPixel(
fX1[1]);
1040 x2 =
gPad->XtoAbsPixel(
fX2[0]);
1041 y2 =
gPad->YtoAbsPixel(
fX2[1]);
1042 }
else if (axis == 2) {
1043 x1 =
gPad->XtoAbsPixel(
fY1[0]);
1044 y1 =
gPad->YtoAbsPixel(
fY1[1]);
1045 x2 =
gPad->XtoAbsPixel(
fY2[0]);
1046 y2 =
gPad->YtoAbsPixel(
fY2[1]);
1048 x1 =
gPad->XtoAbsPixel(
fZ1[0]);
1049 y1 =
gPad->YtoAbsPixel(
fZ1[1]);
1050 x2 =
gPad->XtoAbsPixel(
fZ2[0]);
1051 y2 =
gPad->YtoAbsPixel(
fZ2[1]);
1062 if (c <= 0)
return 9999;
1089 for (
Int_t i = 0; i < 3; max[i] =
fRmax[i], min[i] =
fRmin[i], i++) { }
1097 for (
Int_t i = 0; i < 3; max[i] =
fRmax[i], min[i] =
fRmin[i], i++) { }
1131 pw[1] = fTback[4]*pn[0] + fTback[5]*pn[1] + fTback[6]*pn[2] + fTback[7];
1132 pw[2] = fTback[8]*pn[0] + fTback[9]*pn[1] + fTback[10]*pn[2] + fTback[11];
1145 pw[1] = fTback[4]*pn[0] + fTback[5]*pn[1] + fTback[6]*pn[2] + fTback[7];
1146 pw[2] = fTback[8]*pn[0] + fTback[9]*pn[1] + fTback[10]*pn[2] + fTback[11];
1158 Double_t x,
y,
z, a1, a2, a3, b1, b2, b3,
c1,
c2,
c3;
1172 pn[0] = x*(b2*c3 - b3*
c2) + y*(b3*c1 - b1*c3) + z*(b1*c2 - b2*
c1);
1173 pn[1] = x*(c2*a3 - c3*a2) + y*(c3*a1 - c1*a3) + z*(c1*a2 - c2*a1);
1174 pn[2] = x*(a2*b3 - a3*b2) + y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1186 Double_t x,
y,
z, a1, a2, a3, b1, b2, b3,
c1,
c2,
c3;
1200 pn[0] = x*(b2*c3 - b3*
c2) + y*(b3*c1 - b1*c3) + z*(b1*c2 - b2*
c1);
1201 pn[1] = x*(c2*a3 - c3*a2) + y*(c3*a1 - c1*a3) + z*(c1*a2 - c2*a1);
1202 pn[2] = x*(a2*b3 - a3*b2) + y*(a3*b1 - a1*b3) + z*(a1*b2 - a2*b1);
1220 for (i = 1; i <= 2; ++i) {
1221 smax[i - 1] =
fTnorm[(i << 2) - 1];
1222 for (k = 1; k <= 3; ++k) {
1223 if (
fTnorm[k + (i << 2) - 5] < 0) {
1224 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmin[k-1];
1226 smax[i - 1] +=
fTnorm[k + (i << 2) - 5]*
fRmax[k-1];
1243 gPad->Range(xmin - dxr*
gPad->GetLeftMargin(),
1244 ymin - dyr*
gPad->GetBottomMargin(),
1245 xmax + dxr*
gPad->GetRightMargin(),
1246 ymax + dyr*
gPad->GetTopMargin());
1247 gPad->RangeAxis(xmin, ymin, xmax, ymax);
1254 xgraf[0] = -smax[0];
1255 xgraf[1] = -smax[0];
1256 xgraf[2] = -smax[0];
1257 xgraf[3] = -smax[0];
1260 ygraf[0] = -smax[1];
1262 ygraf[2] = -smax[1];
1265 ygraf[4] = -smax[1];
1266 for (i = 1; i <= 8; ++i) {
1271 yy = fTnorm[4]*x + fTnorm[5]*y + fTnorm[6]*z + fTnorm[7];
1273 if (ygraf[1] >= yy) ygraf[1] = yy;
1274 if (ygraf[2] <= yy) ygraf[2] = yy;
1277 if (ygraf[5] >= yy) ygraf[5] = yy;
1278 if (ygraf[4] <= yy) ygraf[4] = yy;
1280 if (
TMath::Abs(yy - ygraf[0]) <= 1
e-4) xgraf[0] = xx;
1281 if (
TMath::Abs(yy - ygraf[3]) <= 1
e-4) xgraf[3] = xx;
1283 if (i % 2 == 0) r2 = -
r2;
1286 gPad->PaintFillArea(6, xgraf, ygraf);
1295 for (
Int_t i=0;i<3;i++) {
1322 du = 0.5*screen_factor*
fDproj;
1386 for (
Int_t i = 0; i < 3;
fRmax[i] = max[i],
fRmin[i] = min[i], i++) { }
1390 Error(
"SetRange",
"problem setting view");
1413 rmin[0] = x0 < rmin[0] ? x0 : rmin[0];
1414 rmin[1] = y0 < rmin[1] ? y0 : rmin[1];
1415 rmin[2] = z0 < rmin[2] ? z0 : rmin[2];
1416 rmax[0] = x1 > rmax[0] ?
x1 : rmax[0];
1417 rmax[1] = y1 > rmax[1] ? y1 : rmax[1];
1418 rmax[2] = z1 > rmax[2] ? z1 : rmax[2];
1423 rmin[0] = x0 > rmin[0] ? x0 : rmin[0];
1424 rmin[1] = y0 > rmin[1] ? y0 : rmin[1];
1425 rmin[2] = z0 > rmin[2] ? z0 : rmin[2];
1426 rmax[0] = x1 < rmax[0] ?
x1 : rmax[0];
1427 rmax[1] = y1 < rmax[1] ? y1 : rmax[1];
1428 rmax[2] = z1 < rmax[2] ? z1 : rmax[2];
1432 rmin[0] = x0; rmax[0] =
x1;
1433 rmin[1] = y0; rmax[1] = y1;
1434 rmin[2] = z0; rmax[2] = z1;
1455 ResetView(longitude, latitude, psi, irep);
1502 Error(
"ResetView",
"Error in min-max scope");
1539 for (
Int_t i=0; i<3; i++)
1552 pn[1] = fTnorm[4]*pw[0] + fTnorm[5]*pw[1] + fTnorm[6]*pw[2] + fTnorm[7];
1553 pn[2] = fTnorm[8]*pw[0] + fTnorm[9]*pw[1] + fTnorm[10]*pw[2] + fTnorm[11];
1567 for (
Int_t i=0; i<3; i++)
1581 pn[1] = fTnorm[4]*pw[0] + fTnorm[5]*pw[1] + fTnorm[6]*pw[2] + fTnorm[7];
1582 pn[2] = fTnorm[8]*pw[0] + fTnorm[9]*pw[1] + fTnorm[10]*pw[2] + fTnorm[11];
1591 if (!thisPad) thisPad =
gPad;
1613 if (!thisPad) thisPad =
gPad;
1673 for (i=0;i<3; i++) maxSide =
TMath::Max(maxSide,max[i]-min[i]);
1675 for (i=0;i<3; i++) max[i] += maxSide - (max[i]-min[i]);
1689 for (i=0;i<3; i++) {
1690 if (max[i] > 0) min[i] = -max[i];
1691 else max[i] = -min[i];
1702 if (
TMath::Abs(unZoomFactor) < 0.001)
return;
1715 for (i=0;i<3; i++) {
1719 Double_t s = (max[i]-min[i])/(2*zoomFactor);
1736 if (nsteps<1)
return;
1743 for (i=0; i<3; i++) {
1758 dox = fc*(dx-od[0]);
1759 doy = fc*(dy-od[1]);
1760 doz = fc*(dz-od[2]);
1761 for (i=0; i<nsteps; i++) {
1768 for (j=0; j<3; j++) {
1769 fRmin[j] = oc[j]-od[j];
1770 fRmax[j] = oc[j]+od[j];
1790 if (count <= 0) count = 1;
1911 void TView3D::Streamer(
TBuffer &R__b)
1925 TObject::Streamer(R__b);
1926 TAttLine::Streamer(R__b);
1932 R__b >> single;
fPsi = single;
1949 TObject::Streamer(R__b);
1950 TAttLine::Streamer(R__b);
virtual void ResizePad()
Recompute window for perspective view.
virtual void WCtoNDC(const Float_t *pw, Float_t *pn)
Transfer point from world to normalized coordinates.
double dist(Rotation3D const &r1, Rotation3D const &r2)
virtual void MoveFocus(Double_t *center, Double_t dx, Double_t dy, Double_t dz, Int_t nsteps=10, Double_t dlong=0, Double_t dlat=0, Double_t dpsi=0)
Move focus to a different box position and extent in nsteps.
virtual void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual Int_t WriteClassBuffer(const TClass *cl, void *pointer)=0
static TAxis3D * ToggleZoom(TVirtualPad *pad=0)
Turn ON / OFF the "Ruler" and "zoom mode" of the TAxis3D object attached to the current pad (if pad =...
virtual void SetOutlineToCube()
This is a function which creates default outline.
virtual void AxisVertex(Double_t ang, Double_t *av, Int_t &ix1, Int_t &ix2, Int_t &iy1, Int_t &iy2, Int_t &iz1, Int_t &iz2)
Define axis vertices.
virtual void DrawOutlineCube(TList *outline, Double_t *rmin, Double_t *rmax)
Draw the outline of a cube while rotating a 3-d object in the pad.
static TAxis3D * ToggleRulers(TVirtualPad *pad=0)
Turn ON / OFF the "Ruler", TAxis3D object attached to the current pad.
virtual Double_t GetPsi()
TObject * GetParent() const
Return pointer to parent of this buffer.
virtual Bool_t IsClippedNDC(Double_t *p) const
Check if point is clipped in perspective view.
virtual void ZoomOut()
Zoom out.
virtual void ZoomView(TVirtualPad *pad=0, Double_t zoomFactor=1.25)
ZOOM this view.
virtual void GetWindow(Double_t &u0, Double_t &v0, Double_t &du, Double_t &dv) const
Get current window extent.
virtual void SetTheta(Double_t theta=30)=0
Buffer base class used for serializing objects.
virtual void ToggleZoom(TVirtualPad *pad=0)
Turn on /off the interactive option to Zoom / Move / Change attributes of 3D axis correspond this vie...
virtual void SetAxisNDC(const Double_t *x1, const Double_t *x2, const Double_t *y1, const Double_t *y2, const Double_t *z1, const Double_t *z2)
Store axis coordinates in the NDC system.
virtual void PadRange(Int_t rback)
Set the correct window size for lego and surface plots.
virtual void MoveViewCommand(Char_t chCode, Int_t count=1)
virtual void NormalWCtoNDC(const Float_t *pw, Float_t *pn)
Transfer vector of NORMAL from word to normalized coordinates.
virtual void FindPhiSectors(Int_t iopt, Int_t &kphi, Double_t *aphi, Int_t &iphi1, Int_t &iphi2)
Find critical PHI sectors.
virtual void SetParallel()
Set the parallel option (default).
virtual Int_t ReadStaticArray(Bool_t *b)=0
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual ~TView3D()
TView3D default destructor.
void ResetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
Set view direction (in spherical coordinates).
virtual void Delete(Option_t *option="")=0
Delete this object.
static struct mg_connection * fc(struct mg_context *ctx)
static const double x2[5]
TView3D & operator=(const TView3D &)
Assignment operator.
virtual Int_t GetVersionOwner() const =0
virtual void DefinePerspectiveView()
Define perspective view.
unsigned int r3[N_CITIES]
virtual Double_t GetExtent() const
Get maximum view extent.
virtual Int_t GetSystem()
virtual void Centered3DImages(TVirtualPad *pad=0)
Move view into the center of the scene.
virtual void ZoomIn()
Zoom in.
virtual void SetView(Double_t longitude, Double_t latitude, Double_t psi, Int_t &irep)
Set view parameters.
virtual void FindScope(Double_t *scale, Double_t *center, Int_t &irep)
Find centre of a MIN-MAX scope and scale factors.
Abstract 3D shapes viewer.
TObject & operator=(const TObject &rhs)
TObject assignment operator.
virtual void TopView(TVirtualPad *pad=0)
Set to top view.
virtual void FrontView(TVirtualPad *pad=0)
Set to front view.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void NDCtoWC(const Float_t *pn, Float_t *pw)
Transfer point from normalized to world coordinates.
static void DrawOutlineCube(TList *outline, Double_t *rmin, Double_t *rmax)
Draw cube outline with 3d polylines.
virtual void AdjustScales(TVirtualPad *pad=0)
Adjust all sides of view in respect of the biggest one.
virtual Bool_t IsPerspective() const
virtual void ToggleRulers(TVirtualPad *pad=0)
Turn on /off 3D axis.
unsigned int r1[N_CITIES]
virtual void FindThetaSectors(Int_t iopt, Double_t phi, Int_t &kth, Double_t *ath, Int_t &ith1, Int_t &ith2)
Find critical THETA sectors for given PHI sector.
virtual void Paint(Option_t *option="")
Paint all objects in this collection.
virtual void ExecuteRotateView(Int_t event, Int_t px, Int_t py)
Execute action corresponding to one event.
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
if object destructor must call RecursiveRemove()
virtual void SetPerspective()
Set perspective option.
virtual Int_t ReadClassBuffer(const TClass *cl, void *pointer, const TClass *onfile_class=0)=0
virtual void Modified(Bool_t flag=1)=0
virtual void RotateView(Double_t phi, Double_t theta, TVirtualPad *pad=0)
API to rotate view and adjust the pad provided it the current one.
static const double x1[5]
virtual void DefineViewDirection(const Double_t *s, const Double_t *c, Double_t cosphi, Double_t sinphi, Double_t costhe, Double_t sinthe, Double_t cospsi, Double_t sinpsi, Double_t *tnorm, Double_t *tback)
Define view direction (in spherical coordinates)
virtual void SetDefaultWindow()
Set default viewing window.
you should not use this method at all Int_t Int_t Double_t Double_t Double_t e
virtual void GetRange(Float_t *min, Float_t *max)
Get Range function.
virtual void SetWindow(Double_t u0, Double_t v0, Double_t du, Double_t dv)
Set viewing window.
virtual void SetPhi(Double_t phi=30)=0
virtual void SideView(TVirtualPad *pad=0)
Set to side view.
you should not use this method at all Int_t Int_t z
TView3D()
Default constructor.
TSeqCollection * fOutline
virtual void MoveWindow(Char_t option)
Move view window :
Short_t Max(Short_t a, Short_t b)
you should not use this method at all Int_t Int_t Double_t Double_t Double_t Int_t Double_t Double_t Double_t Double_t b
virtual Int_t GetDistancetoAxis(Int_t axis, Int_t px, Int_t py, Double_t &ratio)
Return distance to axis from point px,py.
virtual void SetRange(const Double_t *min, const Double_t *max)
Set Range function.
Double_t Sqrt(Double_t x)
virtual const char * GetName() const
Returns name of object.
virtual void UnzoomView(TVirtualPad *pad=0, Double_t unZoomFactor=1.25)
unZOOM this view.
virtual void AbsCoordinates(Bool_t set)=0
unsigned int r2[N_CITIES]
virtual void FindNormal(Double_t x, Double_t y, Double_t z, Double_t &zn)
Find Z component of NORMAL in normalized coordinates.
static void AdjustPad(TVirtualPad *pad=0)
Force the current pad to be updated.
virtual Version_t ReadVersion(UInt_t *start=0, UInt_t *bcnt=0, const TClass *cl=0)=0