00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "G4NavigationLevelRep.hh"
00034
00035 G4Allocator<G4NavigationLevelRep> aNavigLevelRepAllocator;
00036
00037
00038
00039
00040 G4NavigationLevelRep::G4NavigationLevelRep( G4VPhysicalVolume* pPhysVol,
00041 const G4AffineTransform& afTransform,
00042 EVolume volTp,
00043 G4int repNo )
00044 : sTransform(afTransform),
00045 sPhysicalVolumePtr(pPhysVol),
00046 sReplicaNo(repNo),
00047 sVolumeType(volTp),
00048 fCountRef(1)
00049 {
00050 }
00051
00052 G4NavigationLevelRep::G4NavigationLevelRep()
00053 : sTransform(),
00054 sPhysicalVolumePtr(0),
00055 sReplicaNo(-1),
00056 sVolumeType(kReplica),
00057 fCountRef(1)
00058 {
00059 }
00060
00061 G4NavigationLevelRep::G4NavigationLevelRep( G4VPhysicalVolume* pPhysVol,
00062 const G4AffineTransform& levelAbove,
00063 const G4AffineTransform& relativeCurrent,
00064 EVolume volTp,
00065 G4int repNo )
00066 : sPhysicalVolumePtr(pPhysVol),
00067 sReplicaNo(repNo),
00068 sVolumeType(volTp),
00069 fCountRef(1)
00070 {
00071 sTransform.InverseProduct( levelAbove, relativeCurrent );
00072 }
00073
00074 G4NavigationLevelRep::G4NavigationLevelRep( G4NavigationLevelRep& right )
00075 : sTransform(right.sTransform),
00076 sPhysicalVolumePtr(right.sPhysicalVolumePtr),
00077 sReplicaNo(right.sReplicaNo),
00078 sVolumeType(right.sVolumeType),
00079 fCountRef(1)
00080 {
00081 }
00082
00083
00084
00085
00086 G4NavigationLevelRep::~G4NavigationLevelRep()
00087 {
00088 #ifdef DEBUG_NAVIG_LEVEL
00089 if(fCountRef>0)
00090 {
00091 G4Exception("G4NavigationLevelRep::~G4NavigationLevelRep()",
00092 "GeomVol0003", FatalException,
00093 "Deletion of data-level object with positive reference count.");
00094 }
00095 #endif
00096 }
00097
00098
00099
00100
00101 G4NavigationLevelRep&
00102 G4NavigationLevelRep::operator=( const G4NavigationLevelRep &right )
00103 {
00104 if ( &right != this )
00105 {
00106 sTransform = right.sTransform;
00107 sPhysicalVolumePtr = right.sPhysicalVolumePtr;
00108 sVolumeType = right.sVolumeType;
00109 sReplicaNo = right.sReplicaNo;
00110 fCountRef = right.fCountRef;
00111 }
00112 return *this;
00113 }