ROOT logo
// $Id: SGridStepper.cxx 2088 2008-11-23 20:26:46Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#include "SGridStepper.h"
#include <Glasses/ZNode.h>

//==============================================================================
// SGridStepper
//==============================================================================

//______________________________________________________________________
//
// Provides iteration over node positions of a rectangular grid.

ClassImp(SGridStepper);

void SGridStepper::_init_internals(StepMode_e mode)
{
  Mode = mode;

  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;
  }
}

SGridStepper::SGridStepper(Int_t sm)
{
  _init_internals(StepMode_e(sm));

  nx = ny = nz = 0;
  Nx = Ny = Nz = 16;
  Dx = Dy = Dz = 1;
  Ox = Oy = Oz = 0;
}

SGridStepper::SGridStepper(const SGridStepper& s, Bool_t as_parent)
{
  _init_internals(s.Mode);

  Nx = s.Nx; Ny = s.Ny; Nz = s.Nz;
  Dx = s.Dx; Dy = s.Dy; Dz = s.Dz;

  if (as_parent) {
    nx = ny = nz = 0;
    Ox = -s.nx*s.Dx; Oy = -s.ny*s.Dy; Oz = -s.nz*s.Dz;
  } else {
    nx = s.nx; ny = s.ny; nz = s.nz;
    Ox = s.Ox; Oy = s.Oy; Oz = s.Oz;
  }
}

void SGridStepper::Reset()
{
  nx = ny = nz = 0;
}

void SGridStepper::Subtract(const SGridStepper& s)
{
  Ox -= s.nx*s.Dx;
  Oy -= s.ny*s.Dy;
  Oz -= s.nz*s.Dz;
}
/**************************************************************************/

bool SGridStepper::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 SGridStepper::GetPosition(Float_t* p)
{
  p[0] = Ox + nx*Dx; p[1] = Oy + ny*Dy; p[2] = Oz + nz*Dz;
}

void SGridStepper::SetNode(ZNode* node)
{
  node->SetPos(Ox + nx*Dx, Oy + ny*Dy, Oz + nz*Dz);
}

void SGridStepper::SetNodeAdvance(ZNode* node)
{
  SetNode(node);
  Step();
}
 SGridStepper.cxx:1
 SGridStepper.cxx:2
 SGridStepper.cxx:3
 SGridStepper.cxx:4
 SGridStepper.cxx:5
 SGridStepper.cxx:6
 SGridStepper.cxx:7
 SGridStepper.cxx:8
 SGridStepper.cxx:9
 SGridStepper.cxx:10
 SGridStepper.cxx:11
 SGridStepper.cxx:12
 SGridStepper.cxx:13
 SGridStepper.cxx:14
 SGridStepper.cxx:15
 SGridStepper.cxx:16
 SGridStepper.cxx:17
 SGridStepper.cxx:18
 SGridStepper.cxx:19
 SGridStepper.cxx:20
 SGridStepper.cxx:21
 SGridStepper.cxx:22
 SGridStepper.cxx:23
 SGridStepper.cxx:24
 SGridStepper.cxx:25
 SGridStepper.cxx:26
 SGridStepper.cxx:27
 SGridStepper.cxx:28
 SGridStepper.cxx:29
 SGridStepper.cxx:30
 SGridStepper.cxx:31
 SGridStepper.cxx:32
 SGridStepper.cxx:33
 SGridStepper.cxx:34
 SGridStepper.cxx:35
 SGridStepper.cxx:36
 SGridStepper.cxx:37
 SGridStepper.cxx:38
 SGridStepper.cxx:39
 SGridStepper.cxx:40
 SGridStepper.cxx:41
 SGridStepper.cxx:42
 SGridStepper.cxx:43
 SGridStepper.cxx:44
 SGridStepper.cxx:45
 SGridStepper.cxx:46
 SGridStepper.cxx:47
 SGridStepper.cxx:48
 SGridStepper.cxx:49
 SGridStepper.cxx:50
 SGridStepper.cxx:51
 SGridStepper.cxx:52
 SGridStepper.cxx:53
 SGridStepper.cxx:54
 SGridStepper.cxx:55
 SGridStepper.cxx:56
 SGridStepper.cxx:57
 SGridStepper.cxx:58
 SGridStepper.cxx:59
 SGridStepper.cxx:60
 SGridStepper.cxx:61
 SGridStepper.cxx:62
 SGridStepper.cxx:63
 SGridStepper.cxx:64
 SGridStepper.cxx:65
 SGridStepper.cxx:66
 SGridStepper.cxx:67
 SGridStepper.cxx:68
 SGridStepper.cxx:69
 SGridStepper.cxx:70
 SGridStepper.cxx:71
 SGridStepper.cxx:72
 SGridStepper.cxx:73
 SGridStepper.cxx:74
 SGridStepper.cxx:75
 SGridStepper.cxx:76
 SGridStepper.cxx:77
 SGridStepper.cxx:78
 SGridStepper.cxx:79
 SGridStepper.cxx:80
 SGridStepper.cxx:81
 SGridStepper.cxx:82
 SGridStepper.cxx:83
 SGridStepper.cxx:84
 SGridStepper.cxx:85
 SGridStepper.cxx:86
 SGridStepper.cxx:87
 SGridStepper.cxx:88
 SGridStepper.cxx:89
 SGridStepper.cxx:90
 SGridStepper.cxx:91
 SGridStepper.cxx:92
 SGridStepper.cxx:93
 SGridStepper.cxx:94
 SGridStepper.cxx:95
 SGridStepper.cxx:96
 SGridStepper.cxx:97
 SGridStepper.cxx:98
 SGridStepper.cxx:99
 SGridStepper.cxx:100
 SGridStepper.cxx:101
 SGridStepper.cxx:102
 SGridStepper.cxx:103
 SGridStepper.cxx:104
 SGridStepper.cxx:105
 SGridStepper.cxx:106
 SGridStepper.cxx:107
 SGridStepper.cxx:108
 SGridStepper.cxx:109
 SGridStepper.cxx:110
 SGridStepper.cxx:111