ROOT logo
// $Id: TringulaTester.cxx 2340 2010-01-20 21:53:31Z 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 "TringulaTester.h"
#include "Tringula.h"
#include "TSPupilInfo.h"
#include "TringulaTester.c7"

// TringulaTester

//______________________________________________________________________________
//
// Helper class to test functionality of Tringula and display the results.
//
// 1. Ray-terrain intersection
// 2. Detection of extendio intersection lines

ClassImp(TringulaTester);

//==============================================================================

void TringulaTester::_init()
{
  bRnrRay = false;
  mRayLen = 0;
  mRayPos.SetXYZ(0, 0, 0);
  mRayDir.SetXYZ(0, 0, 0);

  bRnrItsLines = false;
}

TringulaTester::TringulaTester(const Text_t* n, const Text_t* t) :
  ZNode(n, t)
{
  _init();
}

TringulaTester::~TringulaTester()
{}

//==============================================================================

void TringulaTester::SetRayVectors(const TVector3& pos, const TVector3& dir)
{
  mRayPos = pos;
  mRayDir = dir;
  Stamp(FID());
}

//==============================================================================

void TringulaTester::RayCollideTerrain()
{
  static const Exc_t _eh("TringulaTester::RayCollideTerrain ");

  assert_tringula(_eh);

  Opcode::Ray ray(&mRayPos[0], &mRayDir[0]);
  if (ray.mDir.NormalizeAndReport() == 0)
    throw _eh + "ray-direction vector is null.";

  Bool_t rnr_on = bRnrRay;
  {
    GLensReadHolder _lck(this);
    bRnrRay = false;
  }

  Bool_t status = mTringula->RayCollide(ray, mRayLen, false, false, mRayColFaces);

  printf("  status=%d, n faces = %d\n", status, mRayColFaces.GetNbFaces());
  for (UInt_t f=0; f<mRayColFaces.GetNbFaces(); ++f)
  {
    const Opcode::CollisionFace& cf = mRayColFaces.GetFaces()[f];
    printf("  %2d %6d  %10f  %10f %10f\n",
           f, cf.mFaceID, cf.mDistance, cf.mU, cf.mV);
  }

  {
    GLensReadHolder _lck(this);
    bRnrRay = rnr_on;
    StampReqTring(FID());
  }
}

//==============================================================================

void TringulaTester::FullBoxPrunning(Bool_t accumulate, Bool_t verbose)
{
  Bool_t rnr_on = bRnrItsLines;
  {
    GLensReadHolder _lck(this);
    bRnrItsLines = false;
  }

  mTringula->DoFullBoxPrunning(mItsLines, accumulate, verbose);

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