Files
geant4/source/geometry/solids/usolids/include/UVCSGface.hh
T
2016-06-10 11:51:14 +02:00

69 lines
2.1 KiB
C++

//
// ********************************************************************
// * This Software is part of the AIDA Unified Solids Library package *
// * See: https://aidasoft.web.cern.ch/USolids *
// ********************************************************************
//
// $Id:$
//
// --------------------------------------------------------------------
//
// UVCSGface
//
// Class description:
//
// Definition of the virtual base class UVCSGface, one side (or face)
// of a CSG-like solid. It should be possible to build a CSG entirely out of
// connecting CSG faces.
// Each face has an inside and outside surface, the former represents
// the inside of the volume, the latter, the outside.
//
// 19.09.13 Marek Gayer
// Created from original implementation in Geant4
// --------------------------------------------------------------------
#ifndef UVCSGface_hh
#define UVCSGface_hh
#include "UTypes.hh"
#include "VUSolid.hh"
class UVoxelLimits;
class UAffineTransform;
class USolidExtentList;
class UVCSGface
{
public: // with description
UVCSGface() {}
virtual ~UVCSGface() {}
virtual bool Distance(const UVector3& p, const UVector3& v,
bool outgoing, double surfTolerance,
double& distance, double& distFromSurface,
UVector3& normal, bool& allBehind) = 0;
virtual double Safety(const UVector3& p, bool outgoing) = 0;
virtual VUSolid::EnumInside Inside(const UVector3& p, double tolerance,
double* bestDistance) = 0;
virtual UVector3 Normal(const UVector3& p,
double* bestDistance) = 0;
virtual double Extent(const UVector3 axis) = 0;
/* virtual void CalculateExtent( const EAxisType axis,
const UVoxelLimits &voxelLimit,
const UAffineTransform &tranform,
USolidExtentList &extentList ) = 0;*/
virtual UVCSGface* Clone() = 0;
virtual double SurfaceArea() = 0;
virtual UVector3 GetPointOnFace() = 0;
};
#endif