#include <G4BREPSolidCone.hh>
Inheritance diagram for G4BREPSolidCone:
Public Member Functions | |
G4BREPSolidCone (const G4String &name, const G4ThreeVector &origin, const G4ThreeVector &axis, const G4ThreeVector &direction, G4double length, G4double radius, G4double large_radius) | |
~G4BREPSolidCone () | |
void | Initialize () |
EInside | Inside (register const G4ThreeVector &Pt) const |
G4ThreeVector | SurfaceNormal (const G4ThreeVector &p) const |
G4double | DistanceToIn (const G4ThreeVector &p) const |
G4double | DistanceToIn (register const G4ThreeVector &p, register const G4ThreeVector &v) const |
G4double | DistanceToOut (register const G4ThreeVector &p, register const G4ThreeVector &v, const G4bool calcNorm=false, G4bool *validNorm=0, G4ThreeVector *n=0) const |
G4double | DistanceToOut (const G4ThreeVector &p) const |
G4VSolid * | Clone () const |
std::ostream & | StreamInfo (std::ostream &os) const |
G4BREPSolidCone (__void__ &) | |
G4BREPSolidCone (const G4BREPSolidCone &rhs) | |
G4BREPSolidCone & | operator= (const G4BREPSolidCone &rhs) |
Data Structures | |
struct | G4BREPConeParams |
Definition at line 52 of file G4BREPSolidCone.hh.
G4BREPSolidCone::G4BREPSolidCone | ( | const G4String & | name, | |
const G4ThreeVector & | origin, | |||
const G4ThreeVector & | axis, | |||
const G4ThreeVector & | direction, | |||
G4double | length, | |||
G4double | radius, | |||
G4double | large_radius | |||
) |
Definition at line 41 of file G4BREPSolidCone.cc.
References G4BREPSolid::active, and G4BREPSolid::nb_of_surfaces.
Referenced by Clone().
00048 : G4BREPSolid(name) 00049 { 00050 nb_of_surfaces = 3; 00051 active=1; 00052 00053 // Save constructor parameters 00054 constructorParams.origin = origin; 00055 constructorParams.axis = axis; 00056 constructorParams.direction = direction; 00057 constructorParams.length = length; 00058 constructorParams.radius = radius; 00059 constructorParams.large_radius = large_radius; 00060 00061 InitializeCone(); 00062 }
G4BREPSolidCone::~G4BREPSolidCone | ( | ) |
G4BREPSolidCone::G4BREPSolidCone | ( | __void__ & | ) |
G4BREPSolidCone::G4BREPSolidCone | ( | const G4BREPSolidCone & | rhs | ) |
Definition at line 73 of file G4BREPSolidCone.cc.
References constructorParams.
00074 : G4BREPSolid(rhs) 00075 { 00076 constructorParams.origin = rhs.constructorParams.origin; 00077 constructorParams.axis = rhs.constructorParams.axis; 00078 constructorParams.direction = rhs.constructorParams.direction; 00079 constructorParams.length = rhs.constructorParams.length; 00080 constructorParams.radius = rhs.constructorParams.radius; 00081 constructorParams.large_radius = rhs.constructorParams.large_radius; 00082 00083 InitializeCone(); 00084 }
G4VSolid * G4BREPSolidCone::Clone | ( | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 268 of file G4BREPSolidCone.cc.
References G4BREPSolidCone().
00269 { 00270 return new G4BREPSolidCone(*this); 00271 }
G4double G4BREPSolidCone::DistanceToIn | ( | register const G4ThreeVector & | p, | |
register const G4ThreeVector & | v | |||
) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 218 of file G4BREPSolidCone.cc.
References G4Surface::GetDistance(), G4BREPSolid::Intersect(), G4BREPSolid::Reset(), G4BREPSolid::ShortestDistance, and G4BREPSolid::SurfaceVec.
00220 { 00221 Reset(); 00222 G4Vector3D Pttmp(Pt); 00223 G4Vector3D Vtmp(V); 00224 // G4double kInfinity = 10e20; 00225 G4Ray r(Pttmp, Vtmp); 00226 00227 if(SurfaceVec[0]->Intersect( r )) 00228 { 00229 ShortestDistance = SurfaceVec[0]->GetDistance(); 00230 return ShortestDistance; 00231 } 00232 return kInfinity; 00233 }
G4double G4BREPSolidCone::DistanceToIn | ( | const G4ThreeVector & | p | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 207 of file G4BREPSolidCone.cc.
References G4BREPSolid::SurfaceVec.
00208 { 00209 G4double dist1 = std::fabs(SurfaceVec[0]->HowNear(Pt)); 00210 G4double dist2 = std::fabs(SurfaceVec[1]->ClosestDistanceToPoint(Pt)); 00211 G4double dist3 = std::fabs(SurfaceVec[2]->ClosestDistanceToPoint(Pt)); 00212 if(dist1 > dist2) dist1 = dist2; 00213 if(dist1 > dist3) dist1 = dist3; 00214 return dist1; 00215 00216 }
G4double G4BREPSolidCone::DistanceToOut | ( | const G4ThreeVector & | p | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 258 of file G4BREPSolidCone.cc.
References G4BREPSolid::SurfaceVec.
00259 { 00260 G4double dist1 = std::fabs(SurfaceVec[0]->HowNear(Pt)); 00261 G4double dist2 = std::fabs(SurfaceVec[1]->ClosestDistanceToPoint(Pt)); 00262 G4double dist3 = std::fabs(SurfaceVec[2]->ClosestDistanceToPoint(Pt)); 00263 if(dist1 > dist2) dist1 = dist2; 00264 if(dist1 > dist3) dist1 = dist3; 00265 return dist1; 00266 }
G4double G4BREPSolidCone::DistanceToOut | ( | register const G4ThreeVector & | p, | |
register const G4ThreeVector & | v, | |||
const G4bool | calcNorm = false , |
|||
G4bool * | validNorm = 0 , |
|||
G4ThreeVector * | n = 0 | |||
) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 235 of file G4BREPSolidCone.cc.
References G4Surface::GetDistance(), G4BREPSolid::Intersect(), G4BREPSolid::Reset(), G4BREPSolid::ShortestDistance, and G4BREPSolid::SurfaceVec.
00240 { 00241 if(validNorm) 00242 *validNorm = false; 00243 Reset(); 00244 00245 G4Vector3D Pttmp(Pt); 00246 G4Vector3D Vtmp(V); 00247 // G4double kInfinity = 10e20; 00248 00249 G4Ray r(Pttmp, Vtmp); 00250 if(SurfaceVec[0]->Intersect( r )) 00251 { 00252 ShortestDistance = SurfaceVec[0]->GetDistance(); 00253 return ShortestDistance; 00254 } 00255 return kInfinity; 00256 }
void G4BREPSolidCone::Initialize | ( | ) | [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 177 of file G4BREPSolidCone.cc.
References G4BREPSolid::AxisBox, G4BREPSolid::Box, G4BREPSolid::CalcBBoxes(), G4BREPSolid::CheckSurfaceNormals(), G4BREPSolid::IsConvex(), and G4BREPSolid::ShortestDistance.
00178 { 00179 // Calc bounding box for solids and surfaces 00180 // Convert concave planes to convex 00181 // 00182 ShortestDistance=1000000; 00183 CheckSurfaceNormals(); 00184 if(!Box || !AxisBox) { IsConvex(); } 00185 CalcBBoxes(); 00186 }
EInside G4BREPSolidCone::Inside | ( | register const G4ThreeVector & | Pt | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 188 of file G4BREPSolidCone.cc.
References G4Surface::ClosestDistanceToPoint(), G4Surface::HowNear(), kInside, kOutside, kSurface, and G4BREPSolid::SurfaceVec.
00189 { 00190 G4double dist1 = SurfaceVec[0]->HowNear(Pt); 00191 G4double dist2 = SurfaceVec[1]->ClosestDistanceToPoint(Pt); 00192 G4double dist3 = SurfaceVec[2]->ClosestDistanceToPoint(Pt); 00193 if(dist1 > dist2) dist1 = dist2; 00194 if(dist1 > dist3) dist1 = dist3; 00195 if(dist1 > 0) return kInside; 00196 if(dist1 < 0) return kOutside; 00197 return kSurface; 00198 }
G4BREPSolidCone & G4BREPSolidCone::operator= | ( | const G4BREPSolidCone & | rhs | ) |
Definition at line 86 of file G4BREPSolidCone.cc.
References constructorParams, and G4BREPSolid::operator=().
00087 { 00088 // Check assignment to self 00089 // 00090 if (this == &rhs) { return *this; } 00091 00092 // Copy base class data 00093 // 00094 G4BREPSolid::operator=(rhs); 00095 00096 // Copy data 00097 // 00098 constructorParams.origin = rhs.constructorParams.origin; 00099 constructorParams.axis = rhs.constructorParams.axis; 00100 constructorParams.direction = rhs.constructorParams.direction; 00101 constructorParams.length = rhs.constructorParams.length; 00102 constructorParams.radius = rhs.constructorParams.radius; 00103 constructorParams.large_radius = rhs.constructorParams.large_radius; 00104 00105 InitializeCone(); 00106 00107 return *this; 00108 }
std::ostream & G4BREPSolidCone::StreamInfo | ( | std::ostream & | os | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 273 of file G4BREPSolidCone.cc.
References G4BREPSolid::StreamInfo().
00274 { 00275 // Streams solid contents to output stream. 00276 00277 G4BREPSolid::StreamInfo( os ) 00278 << "\n origin: " << constructorParams.origin 00279 << "\n axis: " << constructorParams.axis 00280 << "\n direction: " << constructorParams.direction 00281 << "\n length: " << constructorParams.length 00282 << "\n radius: " << constructorParams.radius 00283 << "\n large_radius: " << constructorParams.large_radius 00284 << "\n-----------------------------------------------------------\n"; 00285 00286 return os; 00287 }
G4ThreeVector G4BREPSolidCone::SurfaceNormal | ( | const G4ThreeVector & | p | ) | const [virtual] |
Reimplemented from G4BREPSolid.
Definition at line 200 of file G4BREPSolidCone.cc.
References CLHEP::detail::n, G4Surface::Normal(), and G4BREPSolid::SurfaceVec.
00201 { 00202 G4Vector3D n = SurfaceVec[0]->Normal(Pt); 00203 G4ThreeVector norm(n.x(), n.y(), n.z()); 00204 return norm; 00205 }