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: SoCons */ 31 /* Description: Represents the G4Cons Geant Geometry entity */ 32 /* Author: Joe Boudreau Nov 11 1996 */ 33 /* */ 34 /*---------------------------------------------------------------------------*/ 35 #ifndef HEPVis_SoCons_h 36 #define HEPVis_SoCons_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 //! SoCons - Inventor version of the G4Cons Geant Geometry entity 45 /*! 46 * Node: SoCons 47 * 48 * Description: The Inventor version of the G4Cons Geant Geometry entity 49 * 50 * Author: Joe Boudreau Nov 11 1996 51 * 52 * A G4Cons is, in the general case, a Phi segment of a cone, with half-length 53 * fDz, inner and outer radii specified at -fDz and +fDz. The Phi segment is 54 * described by a starting fSPhi angle, and the +fDPhi delta angle for the shape. 55 * If the delta angle is >=2*M_PI, the shape is treated as continuous in Phi 56 * 57 * Member Data: 58 * 59 * fRmin1 inside radius at -fDz 60 * fRmin2 inside radius at +fDz 61 * fRmax1 outside radius at -fDz 62 * fRmax2 outside radius at +fDz 63 * fDz half length in z 64 * 65 * fSPhi starting angle of the segment in radians 66 * fDPhi delta angle of the segment in radians 67 */ 68 69 #define SoCons Geant4_SoCons 70 71 class SoCons:public SoShape { 72 73 // The following is required: 74 SO_NODE_HEADER(SoCons); 75 76 public: 77 78 // 79 //! Inside radius at -fDz 80 // 81 SoSFFloat fRmin1; 82 // 83 //! Inside radius at +fDz 84 // 85 SoSFFloat fRmin2; 86 // 87 //! Outside radius at -fDz 88 // 89 SoSFFloat fRmax1; 90 // 91 //! Outside radius at +fDz 92 // 93 SoSFFloat fRmax2; 94 // 95 //! Half-length along Z 96 // 97 SoSFFloat fDz; 98 // 99 //! Starting angle, in radians 100 // 101 SoSFFloat fSPhi; 102 // 103 //! Delta-angle, in radians 104 // 105 SoSFFloat fDPhi; 106 // 107 //! An Inventor option - slightly better render, worse performance 108 // 109 SoSFBool smoothDraw; 110 // 111 //! Alternate rep required - for use by users without HEPVis shared objects 112 // 113 SoSFNode alternateRep; 114 115 // 116 //! Constructor, required 117 // 118 SoCons(); 119 120 // 121 //! Class Initializer, required 122 // 123 static void initClass(); 124 125 // 126 //! Generate AlternateRep, required. Generating an alternate representation 127 //! must be done upon users request. It allows an Inventor program to read 128 //! back the file without requiring *this* code to be dynamically linked. 129 //! If the users expects that *this* code will be dynamically linked, he 130 //! need not invoke this method. 131 // 132 virtual void generateAlternateRep(); 133 134 // 135 //! We better be able to clear it, too! 136 // 137 virtual void clearAlternateRep(); 138 139 protected: 140 141 // 142 //! compute bounding Box, required 143 // 144 virtual void computeBBox(SoAction *action, SbBox3f &box, SbVec3f ¢er ); 145 146 // 147 //! Generate Primitives, required 148 // 149 virtual void generatePrimitives(SoAction *action); 150 151 // 152 //! GetChildList, required whenever the class has hidden children 153 // 154 virtual SoChildList *getChildren() const; 155 156 157 protected: 158 // 159 //! Destructor, required 160 // 161 virtual ~SoCons(); 162 163 private: 164 165 // 166 //! Generate Children. Used to create the hidden children. Required whenever 167 //! the node has hidden children. 168 // 169 void generateChildren(); 170 171 // 172 //! Used to modify hidden children when a data field is changed. Required 173 //! whenever the class has hidden children. 174 // 175 void updateChildren(); 176 177 // 178 //! ChildList. Required whenever the class has hidden children. 179 // 180 SoChildList *children; 181 182 // 183 //! help with trigonometry. increments sines an cosines by an angle. 184 // 185 void inc(double & sinPhi, double & cosPhi, double sinDeltaPhi, double cosDeltaPhi) const { 186 double oldSin=sinPhi,oldCos=cosPhi; 187 sinPhi = oldSin*cosDeltaPhi+oldCos*sinDeltaPhi; 188 cosPhi = oldCos*cosDeltaPhi-oldSin*sinDeltaPhi; 189 } 190 }; 191 192 #endif 193