--- /dev/null
+// $Header$
+
+#include "GridStepper.h"
+#include "ZTrans.h"
+
+using namespace Reve;
+
+//______________________________________________________________________
+// GridStepper
+//
+
+ClassImp(GridStepper)
+
+GridStepper::GridStepper(Int_t sm) : Mode(StepMode_e(sm))
+{
+ switch(Mode) {
+ default:
+ case SM_XYZ:
+ ls[0] = &Nx; ls[1] = &Ny; ls[2] = &Nz;
+ ns[0] = &nx; ns[1] = &ny; ns[2] = &nz;
+ break;
+ case SM_YXZ:
+ ls[0] = &Ny; ls[1] = &Nx; ls[2] = &Nz;
+ ns[0] = &ny; ns[1] = &nx; ns[2] = &nz;
+ break;
+ case SM_XZY:
+ ls[0] = &Nx; ls[1] = &Nz; ls[2] = &Ny;
+ ns[0] = &nx; ns[1] = &nz; ns[2] = &ny;
+ break;
+ }
+
+ nx = ny = nz = 0;
+ Nx = Ny = Nz = 16;
+ Dx = Dy = Dz = 1;
+ Ox = Oy = Oz = 0;
+}
+
+void GridStepper::Reset()
+{
+ nx = ny = nz = 0;
+}
+
+void GridStepper::Subtract(GridStepper& s)
+{
+ Ox = -(s.Ox + s.nx*s.Dx);
+ Oy = -(s.Oy + s.ny*s.Dy);
+ Oz = -(s.Oz + s.nz*s.Dz);
+}
+/**************************************************************************/
+
+bool GridStepper::Step()
+{
+ (*ns[0])++;
+ if(*ns[0] >= *ls[0]) {
+ *ns[0] = 0; (*ns[1])++;
+ if(*ns[1] >= *ls[1]) {
+ *ns[1] = 0; (*ns[2])++;
+ if(*ns[2] >= *ls[2]) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+/**************************************************************************/
+
+void GridStepper::GetPosition(Float_t* p)
+{
+ p[0] = Ox + nx*Dx; p[1] = Oy + ny*Dy; p[2] = Oz + nz*Dz;
+}
+
+void GridStepper::SetTrans(ZTrans* mx)
+{
+ mx->SetPos(Ox + nx*Dx, Oy + ny*Dy, Oz + nz*Dz);
+}
+
+void GridStepper::SetTransAdvance(ZTrans* mx)
+{
+ SetTrans(mx);
+ Step();
+}
--- /dev/null
+// $Header$
+
+#ifndef REVE_GridStepper_H
+#define REVE_GridStepper_H
+
+#include <Reve/Reve.h>
+
+#include <TObject.h>
+
+namespace Reve {
+
+class ZTrans;
+
+class GridStepper : public TObject
+{
+ Int_t *ls[3], *ns[3];
+private:
+ GridStepper(const GridStepper&); // Not implemented
+ GridStepper& operator=(const GridStepper&); // Not implemented
+
+public:
+ enum StepMode_e { SM_XYZ, SM_YXZ, SM_XZY };
+ StepMode_e Mode;
+
+ Int_t nx, ny, nz;
+ Int_t Nx, Ny, Nz;
+ Float_t Dx, Dy, Dz;
+ Float_t Ox, Oy, Oz;
+
+ GridStepper(Int_t sm=SM_XYZ);
+ virtual ~GridStepper() {}
+
+ void Reset();
+ void Subtract(GridStepper& s);
+ void SetNs(Int_t nx, Int_t ny, Int_t nz=1)
+ { Nx = nx; Ny = ny; Nz = nz; }
+ void SetDs(Float_t dx, Float_t dy, Float_t dz=0)
+ { Dx = dx; Dy = dy; Dz = dz; }
+
+ bool Step();
+
+ void GetPosition(Float_t* p);
+
+ void SetTrans(ZTrans* mx);
+ void SetTransAdvance(ZTrans* mx);
+
+ ClassDef(GridStepper, 1);
+}; // end class GridStepper
+
+} // namespace Reve
+
+#endif
#pragma link C++ class Reve::ZTransSubEditor+;
#pragma link C++ class Reve::ZTransEditor+;
+// Stepper
+#pragma link C++ class Reve::GridStepper+;
+
// RGBAPalette
#pragma link C++ class Reve::RGBAPalette+;
#pragma link C++ class Reve::RGBAPaletteEditor+;