00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #include "TEveGridStepper.h"
00013 #include "TEveTrans.h"
00014
00015
00016
00017
00018
00019
00020
00021 ClassImp(TEveGridStepper)
00022
00023
00024 TEveGridStepper::TEveGridStepper(Int_t sm) :
00025 fMode(EStepMode_e(sm)),
00026 fCx(0), fCy(0), fCz(0), fNx(0), fNy(0), fNz(0),
00027 fDx(0), fDy(0), fDz(0), fOx(0), fOy(0), fOz(0)
00028 {
00029
00030
00031 switch(fMode) {
00032 default:
00033 case kSM_XYZ:
00034 fLimitArr[0] = &fNx; fLimitArr[1] = &fNy; fLimitArr[2] = &fNz;
00035 fValueArr[0] = &fCx; fValueArr[1] = &fCy; fValueArr[2] = &fCz;
00036 break;
00037 case kSM_YXZ:
00038 fLimitArr[0] = &fNy; fLimitArr[1] = &fNx; fLimitArr[2] = &fNz;
00039 fValueArr[0] = &fCy; fValueArr[1] = &fCx; fValueArr[2] = &fCz;
00040 break;
00041 case kSM_XZY:
00042 fLimitArr[0] = &fNx; fLimitArr[1] = &fNz; fLimitArr[2] = &fNy;
00043 fValueArr[0] = &fCx; fValueArr[1] = &fCz; fValueArr[2] = &fCy;
00044 break;
00045 }
00046
00047 fCx = fCy = fCz = 0;
00048 fNx = fNy = fNz = 16;
00049 fDx = fDy = fDz = 1;
00050 fOx = fOy = fOz = 0;
00051 }
00052
00053
00054 void TEveGridStepper::Reset()
00055 {
00056
00057
00058 fCx = fCy = fCz = 0;
00059 }
00060
00061
00062 void TEveGridStepper::Subtract(TEveGridStepper& s)
00063 {
00064
00065
00066 fOx = -(s.fOx + s.fCx*s.fDx);
00067 fOy = -(s.fOy + s.fCy*s.fDy);
00068 fOz = -(s.fOz + s.fCz*s.fDz);
00069 }
00070
00071
00072
00073
00074 Bool_t TEveGridStepper::Step()
00075 {
00076
00077
00078 (*fValueArr[0])++;
00079 if (*fValueArr[0] >= *fLimitArr[0]) {
00080 *fValueArr[0] = 0; (*fValueArr[1])++;
00081 if (*fValueArr[1] >= *fLimitArr[1]) {
00082 *fValueArr[1] = 0; (*fValueArr[2])++;
00083 if (*fValueArr[2] >= *fLimitArr[2]) {
00084 return kFALSE;
00085 }
00086 }
00087 }
00088 return kTRUE;
00089 }
00090
00091
00092
00093
00094 void TEveGridStepper::GetPosition(Float_t* p)
00095 {
00096
00097
00098 p[0] = fOx + fCx*fDx;
00099 p[1] = fOy + fCy*fDy;
00100 p[2] = fOz + fCz*fDz;
00101 }
00102
00103
00104 void TEveGridStepper::SetTrans(TEveTrans* mx)
00105 {
00106
00107
00108 mx->SetPos(fOx + fCx*fDx, fOy + fCy*fDy, fOz + fCz*fDz);
00109 }
00110
00111
00112 void TEveGridStepper::SetTransAdvance(TEveTrans* mx)
00113 {
00114
00115
00116
00117 SetTrans(mx);
00118 Step();
00119 }