Geant4 Cross Reference |
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 // 28 /*-----------------------------Hepvis----------------------------------------*/ 29 /* */ 30 /* Node: SoTubs */ 31 /* Description: Represents the G4Tubs Geant Geometry entity */ 32 /* Author: Joe Boudreau Nov 11 1996 */ 33 /* */ 34 /*---------------------------------------------------------------------------*/ 35 #ifndef HEPVis_SoTubs_h 36 #define HEPVis_SoTubs_h 37 38 #include <Inventor/fields/SoSFFloat.h> 39 #include <Inventor/fields/SoSFNode.h> 40 #include <Inventor/fields/SoSFBool.h> 41 #include <Inventor/nodes/SoShape.h> 42 43 class SoSFNode; 44 45 //! SoTubs - Inventor version of the G4Tubs Geant Geometry entity 46 /*! 47 * Node: SoTubs 48 * 49 * Description: The Inventor version of the G4Tubs Geant Geometry entity 50 * 51 * Author: Joe Boudreau Nov 11 1996 52 * 53 * class G4Tubs 54 * 55 * A tube or tube segment with curved sides parallel to 56 * the z-axis. The tube has a specified half-length along 57 * the z axis, about which it is centred, and a given 58 * minimum and maximum radius. A minimum radius of 0 59 * signifies a filled tube /cylinder. The tube segment is 60 * specified by starting and delta 61 * angles for phi, with 0 being the +x axis, PI/2 62 * the +y axis. A delta angle of 2PI signifies a 63 * complete, unsegmented tube/cylinder 64 * 65 * Always use Inventor Fields. This allows Inventor to detect a change to 66 * the data field and take the appropriate action; e.g., redraw the scene. 67 */ 68 69 #define SoTubs Geant4_SoTubs 70 71 class SoTubs:public SoShape { 72 73 // The following is required: 74 SO_NODE_HEADER(SoTubs); 75 76 public: 77 78 // 79 //! Inside radius of the tube 80 // 81 SoSFFloat pRMin; 82 // 83 //! Outside radius of the tube 84 // 85 SoSFFloat pRMax; 86 // 87 //! Half-length in Z 88 // 89 SoSFFloat pDz; 90 // 91 //! Starting angle, in radians 92 // 93 SoSFFloat pSPhi; 94 // 95 //! Delta-angle, in radians 96 // 97 SoSFFloat pDPhi; 98 // 99 //! Alternate rep - required 100 // 101 SoSFNode alternateRep; 102 103 // 104 //! Constructor, required 105 // 106 SoTubs(); 107 108 // 109 //! Class Initializer, required 110 // 111 static void initClass(); 112 113 // 114 //! Generate AlternateRep, required. Generating an alternate representation 115 //! must be done upon users request. It allows an Inventor program to read 116 //! back the file without requiring *this* code to be dynamically linked. 117 //! If the users expects that *this* code will be dynamically linked, he 118 //! need not invoke this method. 119 // 120 virtual void generateAlternateRep(); 121 122 // 123 //! We better be able to clear it, too! 124 // 125 virtual void clearAlternateRep(); 126 127 protected: 128 129 // 130 //! compute bounding Box, required 131 // 132 virtual void computeBBox(SoAction *action, SbBox3f &box, SbVec3f ¢er ); 133 134 // 135 //! Generate Primitives, required 136 // 137 virtual void generatePrimitives(SoAction *action); 138 139 // 140 //! GetChildList, required whenever the class has hidden children 141 // 142 virtual SoChildList *getChildren() const; 143 144 145 protected: 146 // 147 //! Destructor, required 148 // 149 virtual ~SoTubs(); 150 151 private: 152 153 // 154 //! Generate Children. Used to create the hidden children. Required whenever 155 //! the node has hidden children. 156 // 157 void generateChildren(); 158 159 // 160 //! Used to modify hidden children when a data field is changed. Required 161 //! whenever the class has hidden children. 162 // 163 void updateChildren(); 164 165 // 166 //! ChildList. Required whenever the class has hidden children. 167 // 168 SoChildList *children; 169 170 // 171 //! help with trigonometry. increments sines an cosines by an angle. 172 // 173 void inc(double & sinPhi, double & cosPhi, double sinDeltaPhi, double cosDeltaPhi) const { 174 double oldSin=sinPhi,oldCos=cosPhi; 175 sinPhi = oldSin*cosDeltaPhi+oldCos*sinDeltaPhi; 176 cosPhi = oldCos*cosDeltaPhi-oldSin*sinDeltaPhi; 177 } 178 179 }; 180 181 #endif 182