source: trunk/source/geometry/solids/test/fred/src/FredHit.cc@ 1330

Last change on this file since 1330 was 1316, checked in by garnier, 15 years ago

update geant4-09-04-beta-cand-01 interfaces-V09-03-09 vis-V09-03-08

File size: 4.6 KB
Line 
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26//
27// FredHit.cc
28//
29// Implementation of FredHit: intersection of track with a test volume
30//
31// For more comments, you should really take a look at FredHit.hh
32//
33
34#include "FredHit.hh"
35#include "G4Track.hh"
36#include "G4VVisManager.hh"
37#include "G4Circle.hh"
38#include "G4Color.hh"
39#include "G4VisAttributes.hh"
40
41//
42// Implement FredHit's allocator, via template
43G4Allocator<FredHit> FredHitAllocator;
44
45
46//
47// Constructor (position and enters specified)
48//
49FredHit::FredHit( const G4ThreeVector aPos, G4bool aEnters, const G4Track *aTrack )
50{
51 pos = aPos;
52 enters = aEnters;
53 track = aTrack;
54}
55
56
57//
58// Copy (initialization)
59//
60FredHit::FredHit( const FredHit &right )
61 : G4VHit(right)
62{
63 // Assign position
64 pos = right.pos;
65 enters = right.enters;
66 track = right.track;
67}
68
69//
70// Copy (assignment operator)
71//
72const FredHit& FredHit::operator=( const FredHit &right )
73{
74 pos = right.pos;
75 enters = right.enters;
76 track = right.track;
77 return *this;
78}
79
80//
81// Draw
82// Our standard drawing
83//
84void FredHit::Draw()
85{
86 DrawPrim(0);
87}
88
89//
90// DrawShadowHit
91//
92// Special draw mode for drawing tracks that miss the test volume
93//
94void FredHit::DrawShadowHit()
95{
96 DrawPrim(1);
97}
98
99//
100// DrawShadowHit
101//
102// Special draw mode for drawing tracks that hit the test volume
103//
104void FredHit::DrawMaskHit()
105{
106 DrawPrim(3);
107}
108
109//
110// DrawErrorHit
111//
112// Special draw mode for drawing tracks with tracking errors (bugs)
113//
114void FredHit::DrawErrorHit()
115{
116 DrawPrim(2);
117}
118
119//
120// DrawPrim
121// With all this wonderful c++ technology, why is drawing still
122// such a pain??
123//
124
125void FredHit::DrawPrim(G4int imode)
126{
127 //
128 // Make sure there is something to draw first
129 //
130 G4VVisManager *visManager = G4VVisManager::GetConcreteInstance();
131
132 if (visManager) {
133 //
134 // Heh. Sometimes something bad happens, and we get
135 // a point at infinity. Don't draw such a beasty, as it
136 // messes up VRML viewing.
137 //
138 if (pos.mag() > 200.0*m) return;
139
140
141 // How about a little circle?
142 //
143 // I took this from example N04. Note the temporary
144 // nature of the "G4VisAttribute". We can do this
145 // because circle.SetVisAttributes copies it.
146
147 G4Circle circle( pos );
148 if (imode==0) {
149 //circle.SetScreenSize( 3.0 );
150 circle.SetWorldSize( 5*cm );
151 G4Color color( enters ? 0:1, enters ? 0:1, 1 );
152 G4VisAttributes attribs( color );
153 circle.SetVisAttributes( attribs );
154 }
155 else if (imode==1) {
156 circle.SetScreenSize( 2.0 );
157 G4Color color( 0.25, 0.25, 1.0 );
158 G4VisAttributes attribs( color );
159 circle.SetVisAttributes( attribs );
160 }
161 else if (imode==2) {
162 circle.SetScreenSize( 3.0 );
163 G4Color color( 1.0, 1.0, 1.0 );
164 G4VisAttributes attribs( color );
165 circle.SetVisAttributes( attribs );
166 }
167 else if (imode==3) {
168 circle.SetScreenSize( 3.0 );
169 G4Color color( 1.0, 0.25, 0.25 );
170 G4VisAttributes attribs( color );
171 circle.SetVisAttributes( attribs );
172 }
173
174 circle.SetFillStyle( G4Circle::filled );
175 visManager->Draw( circle );
176 }
177}
178
179//
180// Print
181//
182void FredHit::Print()
183{
184
185 // Print the position
186 ;
187}
Note: See TracBrowser for help on using the repository browser.