Files
geant4/source/geometry/solids/BREPS/include/G4ControlPoints.hh
T
2016-06-08 15:28:20 +02:00

106 lines
2.3 KiB
C++

// This code implementation is the intellectual property of
// the GEANT4 collaboration.
//
// By copying, distributing or modifying the Program (or any work
// based on the Program) you indicate your acceptance of this statement,
// and all its terms.
//
// $Id: G4ControlPoints.hh,v 1.1.10.1 1999/12/07 20:48:17 gunter Exp $
// GEANT4 tag $Name: geant4-01-00 $
//
//
// Modif 8 oct 98 : A.Floquet
// G4PointRat datas are made of
// . a point 3D
// . a additional value : the scale factor which is set to 1 by default
//
// G4ControlPoints includes only G4PointRat which in turn are made
// of G4Point3D
#ifndef __G4ControlPoints_h
#define __G4ControlPoints_h 1
#include "G4PointRat.hh"
class G4ControlPoints
{
public:
// Constructors
G4ControlPoints();
G4ControlPoints(const STEPaggregate& Aggr, const int Rational);
G4ControlPoints( int, int);
G4ControlPoints( int , int , int );
G4ControlPoints(const G4ControlPoints&);
// Destructor
~G4ControlPoints();
void SetWeights(G4double*);
void CalcValues(G4double k1, G4double param, G4Point3D& pts1,
G4double k2, G4Point3D& pts2);
void CalcValues(G4double k1, G4double param, G4PointRat& pts1,
G4double k2, G4PointRat& pts2);
inline int GetRows() const {return nr;}
inline int GetCols() const {return nc;}
// Puts control point into matrix location (i,j)
inline void put(const int i, const int j, const G4Point3D &tmp)
{
*data[i*nc+j]=tmp; // tmp is converted to a PointRat
// by the member affectation function
// of the G4PointRat class
}
inline void put(const int i, const int j, const G4PointRat& tmp)
{
*data[i*nc+j]=tmp;
}
// Retrieves control point from matrix location (i,j)
inline G4Point3D Get3D(const int i, const int j) const
{
return (data[i*nc+j])->pt();
}
inline G4PointRat& GetRat(const int i, const int j) const
{
return *data[i*nc+j];
}
G4double ClosestDistanceToPoint(const G4Point3D&);
private:
inline G4double Calc(const G4double k1, const G4double par,
const G4double old_val, const G4double k2,
const G4double new_val )
{
return (((k1 - par) * old_val +(par - k2) * new_val) / (k1-k2));
}
G4PointRat** data;
int nr, nc;
};
#endif