37 #if ( defined(G4GEOM_USE_USOLIDS) || defined(G4GEOM_USE_PARTIAL_USOLIDS) )
56 G4VSolid(name), fShape(s), fRebuildPolyhedron(false), fPolyhedron(0)
60 G4USolid::G4USolid(__void__&
a)
61 :
G4VSolid(a), fShape(0), fRebuildPolyhedron(false), fPolyhedron(0)
67 delete fPolyhedron; fPolyhedron = 0;
72 return (
this == &s) ?
true :
false;
78 VUSolid::EnumInside in_temp;
84 in_temp = fShape->Inside(pt);
86 if (in_temp == VUSolid::EnumInside::eSurface)
return kSurface;
87 if (in_temp == VUSolid::EnumInside::eInside)
return kInside;
114 G4double dist = fShape->DistanceToIn(p, v);
126 G4double dist = fShape->SafetyFromOutside(p);
148 G4double dist = fShape->DistanceToOut(p, v, n, valid);
151 if(valid){ *validNorm =
true; }
152 else { *validNorm =
false; }
171 G4double dist = fShape->SafetyFromInside(p);
178 return fShape->Capacity();
183 return fShape->SurfaceArea();
189 p = fShape->GetPointOnSurface();
193 G4bool G4USolid::CalculateExtent(
const EAxis pAxis,
199 fShape->Extent(vmin,vmax);
205 if (bmin.x() >= bmax.x() || bmin.y() >= bmax.y() || bmin.z() >= bmax.z())
207 std::ostringstream message;
208 message <<
"Bad bounding box (min >= max) for solid: "
209 << GetName() <<
" - " << GetEntityType() <<
" !"
210 <<
"\nmin = " << bmin
211 <<
"\nmax = " << bmax;
212 G4Exception(
"G4USolid::CalculateExtent()",
"GeomMgt0001",
218 return bbox.CalculateExtent(pAxis,pVoxelLimit,pTransform,pMin,pMax);
225 std::ostringstream message;
226 message <<
"Illegal call to G4USolid::ComputeDimensions()" <<
G4endl
227 <<
"Method not overloaded by derived class !";
228 G4Exception(
"G4USolid::ComputeDimensions()",
"GeomSolids0003",
240 G4String string = fShape->GetEntityType();
241 return "G4" + string;
244 std::ostream& G4USolid::StreamInfo(std::ostream& os)
const
246 return fShape->StreamInfo(os);
249 G4USolid::G4USolid(
const G4USolid& rhs)
250 :
G4VSolid(rhs), fRebuildPolyhedron(false), fPolyhedron(0)
252 fShape = rhs.fShape->
Clone();
255 G4USolid& G4USolid::operator=(
const G4USolid& rhs)
270 fShape = rhs.fShape->Clone();
271 fRebuildPolyhedron =
false;
272 delete fPolyhedron; fPolyhedron = 0;
279 std::ostringstream message;
280 message <<
"Clone() method not implemented for type: "
281 << GetEntityType() <<
"!" <<
G4endl
282 <<
"Returning NULL pointer!";
291 std::ostringstream message;
292 message <<
"Visualization not supported for USolid shape "
293 << GetEntityType() <<
"... Sorry!" <<
G4endl;
294 G4Exception(
"G4USolid::CreatePolyhedron()",
"GeomSolids0003",
302 fRebuildPolyhedron ||
303 fPolyhedron->GetNumberOfRotationStepsAtTimeOfCreation() !=
304 fPolyhedron->GetNumberOfRotationSteps())
308 fPolyhedron = CreatePolyhedron();
309 fRebuildPolyhedron =
false;
318 fShape->Extent(vmin,vmax);
324 #endif // G4GEOM_USE_USOLIDS
static const G4double kInfinity
static constexpr double s
CLHEP::Hep3Vector G4ThreeVector
std::vector< ExP01TrackerHit * > a
const char * name(G4int ptype)
virtual void AddSolid(const G4Box &)=0
#define G4MUTEX_INITIALIZER
G4GLOB_DLL std::ostream G4cout
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
G4bool operator==(const G4GeometryCell &k1, const G4GeometryCell &k2)
G4VSolid & operator=(const G4VSolid &rhs)
virtual G4VSolid * Clone() const