69 lines
2.1 KiB
C++
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
|