Geant4 10.7.0
Toolkit for the simulation of the passage of particles through matter
Loading...
Searching...
No Matches
G4ArrowModel Class Reference

#include <G4ArrowModel.hh>

+ Inheritance diagram for G4ArrowModel:

Public Member Functions

 G4ArrowModel (G4double x1, G4double y1, G4double z1, G4double x2, G4double y2, G4double z2, G4double width, const G4Colour &colour, const G4String &description="", G4int lineSegmentsPerCircle=6)
 
virtual ~G4ArrowModel ()
 
virtual void DescribeYourselfTo (G4VGraphicsScene &)
 
- Public Member Functions inherited from G4VModel
 G4VModel (const G4Transform3D &modelTransformation=G4Transform3D(), const G4ModelingParameters *=0)
 
virtual ~G4VModel ()
 
virtual void DescribeYourselfTo (G4VGraphicsScene &)=0
 
const G4ModelingParametersGetModelingParameters () const
 
const G4StringGetType () const
 
virtual G4String GetCurrentDescription () const
 
virtual G4String GetCurrentTag () const
 
const G4VisExtentGetExtent () const
 
const G4VisExtentGetTransformedExtent () const
 
const G4StringGetGlobalDescription () const
 
const G4StringGetGlobalTag () const
 
const G4Transform3DGetTransformation () const
 
void SetModelingParameters (const G4ModelingParameters *)
 
void SetExtent (const G4VisExtent &)
 
void SetType (const G4String &)
 
void SetGlobalDescription (const G4String &)
 
void SetGlobalTag (const G4String &)
 
void SetTransformation (const G4Transform3D &)
 
virtual G4bool Validate (G4bool warn=true)
 

Additional Inherited Members

- Protected Attributes inherited from G4VModel
G4String fType
 
G4String fGlobalTag
 
G4String fGlobalDescription
 
G4VisExtent fExtent
 
G4Transform3D fTransform
 
const G4ModelingParametersfpMP
 

Detailed Description

Definition at line 47 of file G4ArrowModel.hh.

Constructor & Destructor Documentation

◆ G4ArrowModel()

G4ArrowModel::G4ArrowModel ( G4double  x1,
G4double  y1,
G4double  z1,
G4double  x2,
G4double  y2,
G4double  z2,
G4double  width,
const G4Colour colour,
const G4String description = "",
G4int  lineSegmentsPerCircle = 6 
)

Definition at line 51 of file G4ArrowModel.cc.

57: fpShaftPolyhedron(nullptr)
58, fpHeadPolyhedron(nullptr)
59{
60 fType = "G4ArrowModel";
62 fGlobalDescription = fType + ": " + description;
64 (std::min(x1,x2),
65 std::max(x1,x2),
66 std::min(y1,y2),
67 std::max(y1,y2),
68 std::min(z1,z2),
69 std::max(z1,z2));
70
71 // Force number of line segments per circle (aka number of rotation steps)
73 G4Polyhedron::SetNumberOfRotationSteps(lineSegmentsPerCircle);
74
75 // Make a cylinder slightly shorter than the arrow length so that it
76 // doesn't stick out of the head.
78 G4double shaftLength = std::sqrt
79 (std::pow(x2-x1,2)+std::pow(y2-y1,2)+std::pow(z2-z1,2));
80 if (shaftLength < tolerance) shaftLength = tolerance;
81 G4double shaftRadius = width/2.;
82 if (shaftRadius > shaftLength/100.) shaftRadius = shaftLength/100.;
83 if (shaftRadius < tolerance) shaftRadius = tolerance;
84 const G4double halfShaftLength = shaftLength/2.;
85 const G4double halfReduction = 4.*shaftRadius;
86 G4double halfLength = halfShaftLength - halfReduction;
87 if (halfLength < tolerance) halfLength = tolerance;
88 const G4Tubs shaft("shaft",0.,shaftRadius,halfLength,0.,twopi);
89 fpShaftPolyhedron = shaft.CreatePolyhedron();
90 // Move it a little so that the tail is at z = -halfShaftLength.
91 if (fpShaftPolyhedron)
92 fpShaftPolyhedron->Transform(G4Translate3D(0,0,-halfReduction));
93
94 // Locate the head at +halfShaftLength.
95 const G4double zHi = halfShaftLength;
96 const G4double zLow = halfShaftLength - 12.*shaftRadius;
97 const G4double rExt = 8. * shaftRadius;
98 const G4double xExt = std::sqrt(3.)*rExt/2.;
99 const G4Tet head("head",
100 G4ThreeVector(0.,0.,zHi),
101 G4ThreeVector(0.,rExt,zLow),
102 G4ThreeVector(xExt,-rExt/2.,zLow),
103 G4ThreeVector(-xExt,-rExt/2.,zLow));
104 fpHeadPolyhedron = head.CreatePolyhedron();
105
106 // Transform to position
107 const G4Vector3D arrowDirection = G4Vector3D(x2-x1,y2-y1,z2-z1).unit();
108 const G4double theta = arrowDirection.theta();
109 const G4double phi = arrowDirection.phi();
110 const G4Point3D arrowCentre(0.5*(x1+x2),0.5*(y1+y2),0.5*(z1+z2));
111 const G4Transform3D tr =
112 G4Translate3D(arrowCentre) * G4RotateZ3D(phi) * G4RotateY3D(theta);
113 if (fpShaftPolyhedron) fpShaftPolyhedron->Transform(tr);
114 if (fpHeadPolyhedron) fpHeadPolyhedron->Transform(tr);
115
117 va.SetColour(colour);
118 va.SetForceSolid(true);
119 if (fpShaftPolyhedron) fpShaftPolyhedron->SetVisAttributes(va);
120 if (fpHeadPolyhedron) fpHeadPolyhedron->SetVisAttributes(va);
121
122 // Restore number of line segments per circle
124}
CLHEP::Hep3Vector G4ThreeVector
HepGeom::RotateZ3D G4RotateZ3D
HepGeom::Translate3D G4Translate3D
HepGeom::RotateY3D G4RotateY3D
double G4double
Definition: G4Types.hh:83
int G4int
Definition: G4Types.hh:85
HepGeom::Vector3D< G4double > G4Vector3D
Definition: G4Vector3D.hh:34
G4double GetRadialTolerance() const
static G4GeometryTolerance * GetInstance()
Definition: G4Tet.hh:56
Definition: G4Tubs.hh:75
G4VisExtent fExtent
Definition: G4VModel.hh:113
G4String fGlobalDescription
Definition: G4VModel.hh:112
G4String fType
Definition: G4VModel.hh:110
G4String fGlobalTag
Definition: G4VModel.hh:111
void SetColour(const G4Colour &)
void SetForceSolid(G4bool=true)
void SetVisAttributes(const G4VisAttributes *)
Definition: G4Visible.cc:79
BasicVector3D< T > unit() const
static void SetNumberOfRotationSteps(G4int n)
static G4int GetNumberOfRotationSteps()
HepPolyhedron & Transform(const G4Transform3D &t)

◆ ~G4ArrowModel()

G4ArrowModel::~G4ArrowModel ( )
virtual

Definition at line 45 of file G4ArrowModel.cc.

46{
47 delete fpHeadPolyhedron;
48 delete fpShaftPolyhedron;
49}

Member Function Documentation

◆ DescribeYourselfTo()

void G4ArrowModel::DescribeYourselfTo ( G4VGraphicsScene sceneHandler)
virtual

Implements G4VModel.

Definition at line 126 of file G4ArrowModel.cc.

127{
128 sceneHandler.BeginPrimitives();
129 if (fpShaftPolyhedron) sceneHandler.AddPrimitive(*fpShaftPolyhedron);
130 if (fpHeadPolyhedron) sceneHandler.AddPrimitive(*fpHeadPolyhedron);
131 sceneHandler.EndPrimitives();
132}
virtual void BeginPrimitives(const G4Transform3D &objectTransformation=G4Transform3D())=0
virtual void AddPrimitive(const G4Polyline &)=0
virtual void EndPrimitives()=0

Referenced by G4VFieldModel::DescribeYourselfTo().


The documentation for this class was generated from the following files: