TEveGridStepper.cxx

Go to the documentation of this file.
00001 // @(#)root/eve:$Id: TEveGridStepper.cxx 21310 2007-12-10 19:05:45Z matevz $
00002 // Authors: Matevz Tadel & Alja Mrak-Tadel: 2006, 2007
00003 
00004 /*************************************************************************
00005  * Copyright (C) 1995-2007, Rene Brun and Fons Rademakers.               *
00006  * All rights reserved.                                                  *
00007  *                                                                       *
00008  * For the licensing terms see $ROOTSYS/LICENSE.                         *
00009  * For the list of contributors see $ROOTSYS/README/CREDITS.             *
00010  *************************************************************************/
00011 
00012 #include "TEveGridStepper.h"
00013 #include "TEveTrans.h"
00014 
00015 //______________________________________________________________________________
00016 // TEveGridStepper
00017 //
00018 // Provide discrete position coordinates for placement of objects on
00019 // regular grids.
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    // Constructor.
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    // Reset position to origin.
00057 
00058    fCx = fCy = fCz = 0;
00059 }
00060 
00061 //______________________________________________________________________________
00062 void TEveGridStepper::Subtract(TEveGridStepper& s)
00063 {
00064    // Subtract current position of 's' from origin of this.
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    // Move to the next grid position.
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    // Get current position.
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    // Set position into the translation part of mx.
00107 
00108    mx->SetPos(fOx + fCx*fDx, fOy + fCy*fDy, fOz + fCz*fDz);
00109 }
00110 
00111 //______________________________________________________________________________
00112 void TEveGridStepper::SetTransAdvance(TEveTrans* mx)
00113 {
00114    // Set position into the translation part of mx and advance to the
00115    // next grid position.
00116 
00117    SetTrans(mx);
00118    Step();
00119 }

Generated on Tue Jul 5 14:16:12 2011 for ROOT_528-00b_version by  doxygen 1.5.1