81 #if !defined(G4GEOM_USE_USOLIDS)
88 "Installation with USolids primitives required!");
96 G4int numSolids=munionSolid->GetNumberOfSolids();
104 multiUnionElement->setAttributeNode(
NewAttribute(
"name",name));
106 for (
G4int i=0; i<numSolids; ++i)
108 solid = munionSolid->GetSolid(i);
109 transform = munionSolid->GetTransformation(i);
111 HepGeom::Rotate3D rot3d;
112 HepGeom::Translate3D transl ;
113 HepGeom::Scale3D scale;
114 transform->getDecomposition(scale,rot3d,transl);
118 rotm(CLHEP::HepRep3x3(rot3d.xx(), rot3d.xy(), rot3d.xz(),
119 rot3d.yx(), rot3d.yy(), rot3d.yz(),
120 rot3d.zx(), rot3d.zy(), rot3d.zz()));
125 std::ostringstream os; os << i+1;
127 xercesc::DOMElement* solidElement =
NewElement(
"solid");
128 solidElement->setAttributeNode(
NewAttribute(
"ref",solidref));
129 xercesc::DOMElement* multiUnionNodeElement =
NewElement(
"multiUnionNode");
130 multiUnionNodeElement->setAttributeNode(
NewAttribute(
"name", nodeName));
131 multiUnionNodeElement->appendChild(solidElement);
144 multiUnionElement->appendChild(multiUnionNodeElement);
147 solElement->appendChild(multiUnionElement);
159 if (dynamic_cast<const G4IntersectionSolid*>(
boolean))
160 { tag =
"intersection"; }
else
161 if (dynamic_cast<const G4SubtractionSolid*>(
boolean))
162 { tag =
"subtraction"; }
else
163 if (dynamic_cast<const G4UnionSolid*>(
boolean))
166 G4VSolid* firstPtr =
const_cast<G4VSolid*
>(
boolean->GetConstituentSolid(0));
167 G4VSolid* secondPtr =
const_cast<G4VSolid*
>(
boolean->GetConstituentSolid(1));
177 G4String ErrorMessage =
"The referenced solid '"
179 +
"in the Boolean shape '" +
180 +
boolean->GetName() +
181 +
"' was displaced too many times!";
188 firstpos += disp->GetObjectTranslation();
189 firstrot +=
GetAngles(disp->GetObjectRotation());
190 firstPtr = disp->GetConstituentMovedSolid();
201 G4String ErrorMessage =
"The referenced solid '"
203 +
"in the Boolean shape '" +
204 +
boolean->GetName() +
205 +
"' was displaced too many times!";
212 pos += disp->GetObjectTranslation();
213 rot +=
GetAngles(disp->GetObjectRotation());
214 secondPtr = disp->GetConstituentMovedSolid();
228 xercesc::DOMElement* booleanElement =
NewElement(tag);
229 booleanElement->setAttributeNode(
NewAttribute(
"name",name));
230 xercesc::DOMElement* firstElement =
NewElement(
"first");
231 firstElement->setAttributeNode(
NewAttribute(
"ref",firstref));
232 booleanElement->appendChild(firstElement);
233 xercesc::DOMElement* secondElement =
NewElement(
"second");
234 secondElement->setAttributeNode(
NewAttribute(
"ref",secondref));
235 booleanElement->appendChild(secondElement);
236 solElement->appendChild(booleanElement);
273 xercesc::DOMElement* boxElement =
NewElement(
"box");
274 boxElement->setAttributeNode(
NewAttribute(
"name",name));
278 boxElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
279 solElement->appendChild(boxElement);
287 xercesc::DOMElement* coneElement =
NewElement(
"cone");
288 coneElement->setAttributeNode(
NewAttribute(
"name",name));
303 coneElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
304 coneElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
305 solElement->appendChild(coneElement);
314 xercesc::DOMElement* elconeElement =
NewElement(
"elcone");
315 elconeElement->setAttributeNode(
NewAttribute(
"name",name));
320 elconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
321 solElement->appendChild(elconeElement);
330 xercesc::DOMElement* ellipsoidElement =
NewElement(
"ellipsoid");
331 ellipsoidElement->setAttributeNode(
NewAttribute(
"name",name));
344 solElement->appendChild(ellipsoidElement);
353 xercesc::DOMElement* eltubeElement =
NewElement(
"eltube");
354 eltubeElement->setAttributeNode(
NewAttribute(
"name",name));
358 eltubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
359 solElement->appendChild(eltubeElement);
368 xercesc::DOMElement* xtruElement =
NewElement(
"xtru");
369 xtruElement->setAttributeNode(
NewAttribute(
"name",name));
370 xtruElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
371 solElement->appendChild(xtruElement);
375 for (
G4int i=0;i<NumVertex;i++)
377 xercesc::DOMElement* twoDimVertexElement =
NewElement(
"twoDimVertex");
378 xtruElement->appendChild(twoDimVertexElement);
382 twoDimVertexElement->setAttributeNode(
NewAttribute(
"x",vertex.x()/
mm));
383 twoDimVertexElement->setAttributeNode(
NewAttribute(
"y",vertex.y()/
mm));
388 for (
G4int i=0;i<NumSection;i++)
390 xercesc::DOMElement* sectionElement =
NewElement(
"section");
391 xtruElement->appendChild(sectionElement);
395 sectionElement->setAttributeNode(
NewAttribute(
"zOrder",i));
411 xercesc::DOMElement* hypeElement =
NewElement(
"hype");
412 hypeElement->setAttributeNode(
NewAttribute(
"name",name));
423 hypeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
424 hypeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
425 solElement->appendChild(hypeElement);
433 xercesc::DOMElement* orbElement =
NewElement(
"orb");
434 orbElement->setAttributeNode(
NewAttribute(
"name",name));
436 orbElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
437 solElement->appendChild(orbElement);
448 const G4double theta = simaxis.theta();
450 xercesc::DOMElement* paraElement =
NewElement(
"para");
451 paraElement->setAttributeNode(
NewAttribute(
"name",name));
461 paraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
462 paraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
463 solElement->appendChild(paraElement);
472 xercesc::DOMElement* paraboloidElement =
NewElement(
"paraboloid");
473 paraboloidElement->setAttributeNode(
NewAttribute(
"name",name));
480 paraboloidElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
481 solElement->appendChild(paraboloidElement);
489 xercesc::DOMElement* polyconeElement =
NewElement(
"polycone");
490 polyconeElement->setAttributeNode(
NewAttribute(
"name",name));
491 polyconeElement->setAttributeNode(
NewAttribute(
"startphi",
493 polyconeElement->setAttributeNode(
NewAttribute(
"deltaphi",
495 polyconeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
496 polyconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
497 solElement->appendChild(polyconeElement);
504 for (
size_t i=0; i<num_zplanes; i++)
506 ZplaneWrite(polyconeElement,z_array[i],rmin_array[i],rmax_array[i]);
517 xercesc::DOMElement* polyconeElement =
NewElement(
"genericPolycone");
519 polyconeElement->setAttributeNode(
NewAttribute(
"name",name));
520 polyconeElement->setAttributeNode(
NewAttribute(
"startphi",
522 polyconeElement->setAttributeNode(
NewAttribute(
"deltaphi",
524 polyconeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
525 polyconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
526 solElement->appendChild(polyconeElement);
529 for (
size_t i=0; i<num_rzpoints; i++)
544 xercesc::DOMElement* polyhedraElement =
NewElement(
"polyhedra");
545 polyhedraElement->setAttributeNode(
NewAttribute(
"name",name));
546 polyhedraElement->setAttributeNode(
NewAttribute(
"startphi",
548 polyhedraElement->setAttributeNode(
NewAttribute(
"deltaphi",
550 polyhedraElement->setAttributeNode(
NewAttribute(
"numsides",
552 polyhedraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
553 polyhedraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
554 solElement->appendChild(polyhedraElement);
565 for (
size_t i=0;i<num_zplanes;i++)
568 rmin_array[i]*convertRad, rmax_array[i]*convertRad);
572 xercesc::DOMElement* polyhedraElement =
NewElement(
"genericPolyhedra");
573 polyhedraElement->setAttributeNode(
NewAttribute(
"name",name));
574 polyhedraElement->setAttributeNode(
NewAttribute(
"startphi",
576 polyhedraElement->setAttributeNode(
NewAttribute(
"deltaphi",
578 polyhedraElement->setAttributeNode(
NewAttribute(
"numsides",
580 polyhedraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
581 polyhedraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
582 solElement->appendChild(polyhedraElement);
586 for (
size_t i=0;i<num_rzpoints;i++)
600 xercesc::DOMElement* sphereElement =
NewElement(
"sphere");
601 sphereElement->setAttributeNode(
NewAttribute(
"name",name));
606 sphereElement->setAttributeNode(
NewAttribute(
"startphi",
608 sphereElement->setAttributeNode(
NewAttribute(
"deltaphi",
610 sphereElement->setAttributeNode(
NewAttribute(
"starttheta",
612 sphereElement->setAttributeNode(
NewAttribute(
"deltatheta",
614 sphereElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
615 sphereElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
616 solElement->appendChild(sphereElement);
626 xercesc::DOMElement* tessellatedElement =
NewElement(
"tessellated");
627 tessellatedElement->setAttributeNode(
NewAttribute(
"name",name));
628 tessellatedElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
629 tessellatedElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
630 solElement->appendChild(tessellatedElement);
632 std::map<G4ThreeVector, G4String, G4ThreeVectorCompare> vertexMap;
635 size_t NumVertex = 0;
637 for (
size_t i=0;i<NumFacets;i++)
644 if (NumVertexPerFacet==3) { FacetTag=
"triangular"; }
else
645 if (NumVertexPerFacet==4) { FacetTag=
"quadrangular"; }
648 G4Exception(
"G4GDMLWriteSolids::TessellatedWrite()",
"InvalidSetup",
652 xercesc::DOMElement* facetElement =
NewElement(FacetTag);
653 tessellatedElement->appendChild(facetElement);
655 for (
size_t j=0; j<NumVertexPerFacet; j++)
657 std::stringstream name_stream;
658 std::stringstream ref_stream;
660 name_stream <<
"vertex" << (j+1);
661 ref_stream << solid_name <<
"_v" << NumVertex;
663 const G4String& fname = name_stream.str();
674 if(vertexMap.find(vertex) != vertexMap.end())
676 ref = vertexMap[vertex];
680 vertexMap.insert(std::make_pair(vertex,ref));
687 facetElement->setAttributeNode(
NewAttribute(fname,ref));
698 std::vector<G4ThreeVector> vertexList = tet->
GetVertices();
700 xercesc::DOMElement* tetElement =
NewElement(
"tet");
701 tetElement->setAttributeNode(
NewAttribute(
"name",name));
702 tetElement->setAttributeNode(
NewAttribute(
"vertex1",solid_name+
"_v1"));
703 tetElement->setAttributeNode(
NewAttribute(
"vertex2",solid_name+
"_v2"));
704 tetElement->setAttributeNode(
NewAttribute(
"vertex3",solid_name+
"_v3"));
705 tetElement->setAttributeNode(
NewAttribute(
"vertex4",solid_name+
"_v4"));
706 tetElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
707 solElement->appendChild(tetElement);
720 xercesc::DOMElement* torusElement =
NewElement(
"torus");
721 torusElement->setAttributeNode(
NewAttribute(
"name",name));
729 torusElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
730 torusElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
731 solElement->appendChild(torusElement);
740 std::vector<G4TwoVector> vertices = gtrap->
GetVertices();
742 xercesc::DOMElement* gtrapElement =
NewElement(
"arb8");
743 gtrapElement->setAttributeNode(
NewAttribute(
"name",name));
746 gtrapElement->setAttributeNode(
NewAttribute(
"v1x", vertices[0].
x()));
747 gtrapElement->setAttributeNode(
NewAttribute(
"v1y", vertices[0].y()));
748 gtrapElement->setAttributeNode(
NewAttribute(
"v2x", vertices[1].
x()));
749 gtrapElement->setAttributeNode(
NewAttribute(
"v2y", vertices[1].y()));
750 gtrapElement->setAttributeNode(
NewAttribute(
"v3x", vertices[2].
x()));
751 gtrapElement->setAttributeNode(
NewAttribute(
"v3y", vertices[2].y()));
752 gtrapElement->setAttributeNode(
NewAttribute(
"v4x", vertices[3].
x()));
753 gtrapElement->setAttributeNode(
NewAttribute(
"v4y", vertices[3].y()));
754 gtrapElement->setAttributeNode(
NewAttribute(
"v5x", vertices[4].
x()));
755 gtrapElement->setAttributeNode(
NewAttribute(
"v5y", vertices[4].y()));
756 gtrapElement->setAttributeNode(
NewAttribute(
"v6x", vertices[5].
x()));
757 gtrapElement->setAttributeNode(
NewAttribute(
"v6y", vertices[5].y()));
758 gtrapElement->setAttributeNode(
NewAttribute(
"v7x", vertices[6].
x()));
759 gtrapElement->setAttributeNode(
NewAttribute(
"v7y", vertices[6].y()));
760 gtrapElement->setAttributeNode(
NewAttribute(
"v8x", vertices[7].
x()));
761 gtrapElement->setAttributeNode(
NewAttribute(
"v8y", vertices[7].y()));
762 gtrapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
763 solElement->appendChild(gtrapElement);
773 const G4double theta = simaxis.theta();
777 xercesc::DOMElement* trapElement =
NewElement(
"trap");
778 trapElement->setAttributeNode(
NewAttribute(
"name",name));
797 trapElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
798 trapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
799 solElement->appendChild(trapElement);
807 xercesc::DOMElement* trdElement =
NewElement(
"trd");
808 trdElement->setAttributeNode(
NewAttribute(
"name",name));
819 trdElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
820 solElement->appendChild(trdElement);
828 xercesc::DOMElement* tubeElement =
NewElement(
"tube");
829 tubeElement->setAttributeNode(
NewAttribute(
"name",name));
840 tubeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
841 tubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
842 solElement->appendChild(tubeElement);
850 xercesc::DOMElement* cuttubeElement =
NewElement(
"cutTube");
851 cuttubeElement->setAttributeNode(
NewAttribute(
"name",name));
858 cuttubeElement->setAttributeNode(
NewAttribute(
"startphi",
860 cuttubeElement->setAttributeNode(
NewAttribute(
"deltaphi",
874 cuttubeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
875 cuttubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
876 solElement->appendChild(cuttubeElement);
885 xercesc::DOMElement* twistedboxElement =
NewElement(
"twistedbox");
886 twistedboxElement->setAttributeNode(
NewAttribute(
"name",name));
893 twistedboxElement->setAttributeNode(
NewAttribute(
"PhiTwist",
895 twistedboxElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
896 twistedboxElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
897 solElement->appendChild(twistedboxElement);
906 xercesc::DOMElement* twistedtrapElement =
NewElement(
"twistedtrap");
907 twistedtrapElement->setAttributeNode(
NewAttribute(
"name",name));
922 twistedtrapElement->setAttributeNode(
NewAttribute(
"Alph",
924 twistedtrapElement->setAttributeNode(
NewAttribute(
"Theta",
926 twistedtrapElement->setAttributeNode(
NewAttribute(
"Phi",
928 twistedtrapElement->setAttributeNode(
NewAttribute(
"PhiTwist",
930 twistedtrapElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
931 twistedtrapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
933 solElement->appendChild(twistedtrapElement);
942 xercesc::DOMElement* twistedtrdElement =
NewElement(
"twistedtrd");
943 twistedtrdElement->setAttributeNode(
NewAttribute(
"name",name));
954 twistedtrdElement->setAttributeNode(
NewAttribute(
"PhiTwist",
956 twistedtrdElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
957 twistedtrdElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
958 solElement->appendChild(twistedtrdElement);
967 xercesc::DOMElement* twistedtubsElement =
NewElement(
"twistedtubs");
968 twistedtubsElement->setAttributeNode(
NewAttribute(
"name",name));
969 twistedtubsElement->setAttributeNode(
NewAttribute(
"twistedangle",
971 twistedtubsElement->setAttributeNode(
NewAttribute(
"endinnerrad",
973 twistedtubsElement->setAttributeNode(
NewAttribute(
"endouterrad",
975 twistedtubsElement->setAttributeNode(
NewAttribute(
"zlen",
977 twistedtubsElement->setAttributeNode(
NewAttribute(
"phi",
979 twistedtubsElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
980 twistedtubsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
981 solElement->appendChild(twistedtubsElement);
988 xercesc::DOMElement* zplaneElement =
NewElement(
"zplane");
992 element->appendChild(zplaneElement);
999 xercesc::DOMElement* rzpointElement =
NewElement(
"rzpoint");
1002 element->appendChild(rzpointElement);
1009 xercesc::DOMElement* optElement =
NewElement(
"opticalsurface");
1014 optElement->setAttributeNode(
NewAttribute(
"model", smodel));
1017 optElement->setAttributeNode(
NewAttribute(
"value", sval));
1019 solElement->appendChild(optElement);
1034 for (
size_t i=0; i<
solidList.size(); i++)
1036 if (
solidList[i] == solidPtr) {
return; }
1042 = dynamic_cast<const G4BooleanSolid*>(solidPtr))
1049 {
const G4Box*
const boxPtr
1050 =
static_cast<const G4Box*
>(solidPtr);
1053 {
const G4Cons*
const conePtr
1054 =
static_cast<const G4Cons*
>(solidPtr);
1073 {
const G4Hype*
const hypePtr
1074 =
static_cast<const G4Hype*
>(solidPtr);
1077 {
const G4Orb*
const orbPtr
1078 =
static_cast<const G4Orb*
>(solidPtr);
1081 {
const G4Para*
const paraPtr
1082 =
static_cast<const G4Para*
>(solidPtr);
1102 =
static_cast<const G4Sphere*
>(solidPtr);
1109 {
const G4Tet*
const tetPtr
1110 =
static_cast<const G4Tet*
>(solidPtr);
1113 {
const G4Torus*
const torusPtr
1114 =
static_cast<const G4Torus*
>(solidPtr);
1121 {
const G4Trap*
const trapPtr
1122 =
static_cast<const G4Trap*
>(solidPtr);
1125 {
const G4Trd*
const trdPtr
1126 =
static_cast<const G4Trd*
>(solidPtr);
1129 {
const G4Tubs*
const tubePtr
1130 =
static_cast<const G4Tubs*
>(solidPtr);
1134 =
static_cast<const G4CutTubs*
>(solidPtr);
1156 G4Exception(
"G4GDMLWriteSolids::AddSolid()",
"WriteError",
G4ThreeVector GetSymAxis() const
static const G4double kAngularPrecision
G4PolyconeSideRZ GetCorner(G4int index) const
G4double GetXHalfLength4() const
G4double GetXHalfLength() const
G4double GetOuterStereo() const
G4double GetX1HalfLength() const
G4OpticalSurfaceModel GetModel() const
G4double GetY1HalfLength() const
G4double GetPolarAngleTheta() const
G4double GetYHalfLength2() const
G4double GetYHalfLength1() const
G4double GetInnerStereo() const
G4double GetSemiAxisX() const
CLHEP::Hep3Vector G4ThreeVector
void BoxWrite(xercesc::DOMElement *, const G4Box *const)
G4double GetInnerRadius() const
CLHEP::HepRotation G4RotationMatrix
void PolyhedraWrite(xercesc::DOMElement *, const G4Polyhedra *const)
void TessellatedWrite(xercesc::DOMElement *, const G4TessellatedSolid *const)
G4double GetZTopCut() const
G4double GetZHalfLength() const
G4ThreeVector GetLowNorm() const
G4double GetZHalfLength() const
virtual G4int GetNumberOfVertices() const =0
virtual ~G4GDMLWriteSolids()
void TrdWrite(xercesc::DOMElement *, const G4Trd *const)
G4double GetZBottomCut() const
const G4String & GetName() const
void FirstpositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
void XtruWrite(xercesc::DOMElement *, const G4ExtrudedSolid *const)
const G4SurfaceType & GetType() const
G4double GetZHalfLength() const
G4double GetOuterRadiusMinusZ() const
G4double GetRadiusMinusZ() const
G4double GetX2HalfLength() const
G4double GetInnerRadius() const
virtual G4GeometryType GetEntityType() const =0
G4double GetZHalfLength() const
void TwistedtrdWrite(xercesc::DOMElement *, const G4TwistedTrd *const)
xercesc::DOMElement * NewElement(const G4String &)
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetZHalfLength() const
G4double GetSemiAxisMax(G4int i) const
G4double GetXHalfLength2() const
G4TwoVector GetVertex(G4int index) const
G4double GetZHalfLength() const
G4double GetZHalfLength() const
void TwistedboxWrite(xercesc::DOMElement *, const G4TwistedBox *const)
G4double GetEndPhi() const
G4double GetTanAlpha2() const
G4int GetNumRZCorner() const
G4double GetPhiTwist() const
G4VFacet * GetFacet(G4int i) const
G4double GetY1HalfLength() const
void MultiUnionWrite(xercesc::DOMElement *solElement, const G4MultiUnion *const)
std::vector< G4ThreeVector > GetVertices() const
G4double GetXHalfLength2() const
G4double GetRadius() const
static const G4int maxTransforms
void RZPointWrite(xercesc::DOMElement *, const G4double &, const G4double &)
void OrbWrite(xercesc::DOMElement *, const G4Orb *const)
void TwistedtubsWrite(xercesc::DOMElement *, const G4TwistedTubs *const)
G4double GetXHalfLength1() const
G4GLOB_DLL std::ostream G4cout
G4double GetDeltaPhiAngle() const
G4double GetPolish() const
G4double GetStartThetaAngle() const
G4double GetXHalfLength3() const
void TrapWrite(xercesc::DOMElement *, const G4Trap *const)
void ConeWrite(xercesc::DOMElement *, const G4Cons *const)
void ElconeWrite(xercesc::DOMElement *, const G4EllipticalCone *const)
G4double GetZHalfLength() const
void ParaboloidWrite(xercesc::DOMElement *, const G4Paraboloid *const)
void FirstrotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
void PolyconeWrite(xercesc::DOMElement *, const G4Polycone *const)
G4double GetY2HalfLength() const
G4int GetNofVertices() const
void OpticalSurfaceWrite(xercesc::DOMElement *, const G4OpticalSurface *const)
G4double GetX3HalfLength() const
G4double GetPhiTwist() const
G4double GetYHalfLength() const
G4double GetStartPhiAngle() const
void AddPosition(const G4String &name, const G4ThreeVector &pos)
void GenericPolyconeWrite(xercesc::DOMElement *, const G4GenericPolycone *const)
G4double GetYHalfLength2() const
G4double GetOuterRadius() const
G4double GetStartPhiAngle() const
G4double GetStartPhi() const
G4String GenerateName(const G4String &, const void *const)
G4double GetInnerRadiusPlusZ() const
void RotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
void CutTubeWrite(xercesc::DOMElement *, const G4CutTubs *const)
G4double GetInnerRadius() const
G4PolyconeHistorical * GetOriginalParameters() const
G4OpticalSurfaceFinish GetFinish() const
G4int GetNofZSections() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const
G4double GetInnerRadius() const
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
void ZplaneWrite(xercesc::DOMElement *, const G4double &, const G4double &, const G4double &)
G4double GetSemiAxisY() const
G4double GetX4HalfLength() const
G4double GetYHalfLength() const
void HypeWrite(xercesc::DOMElement *, const G4Hype *const)
G4int GetNumberOfFacets() const
G4double GetOuterRadius() const
G4double GetRadiusPlusZ() const
G4double GetZHalfLength() const
xercesc::DOMAttr * NewAttribute(const G4String &, const G4String &)
static const G4double kLinearPrecision
G4double GetTanAlpha() const
void EltubeWrite(xercesc::DOMElement *, const G4EllipticalTube *const)
void ParaWrite(xercesc::DOMElement *, const G4Para *const)
G4ThreeVector GetHighNorm() const
void EllipsoidWrite(xercesc::DOMElement *, const G4Ellipsoid *const)
G4ThreeVector GetAngles(const G4RotationMatrix &)
const G4double x[NPOINTSGL]
ZSection GetZSection(G4int index) const
virtual void SolidsWrite(xercesc::DOMElement *)
void TetWrite(xercesc::DOMElement *, const G4Tet *const)
G4PolyhedraHistorical * GetOriginalParameters() const
G4double GetZHalfLength() const
static const double degree
G4double GetZHalfLength() const
void TubeWrite(xercesc::DOMElement *, const G4Tubs *const)
G4ThreeVector GetSymAxis() const
G4double GetInnerRadius() const
CLHEP::Hep2Vector G4TwoVector
G4double GetZTopCut() const
void BooleanWrite(xercesc::DOMElement *, const G4BooleanSolid *const)
G4double GetZHalfLength() const
G4double GetAzimuthalAnglePhi() const
void TorusWrite(xercesc::DOMElement *, const G4Torus *const)
G4double GetXHalfLength1() const
G4double GetOuterRadius() const
G4double GetStartPhiAngle() const
G4PolyhedraSideRZ GetCorner(const G4int index) const
G4double GetYHalfLength1() const
G4double GetDeltaPhiAngle() const
void PositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
void TwistedtrapWrite(xercesc::DOMElement *, const G4TwistedTrap *const)
G4double GetPhiTwist() const
G4double GetInnerRadiusMinusZ() const
G4double GetSigmaAlpha() const
G4double GetTanAlpha1() const
static const G4double alpha
G4int GetNumRZCorner() const
virtual G4ThreeVector GetVertex(G4int i) const =0
G4double GetDeltaThetaAngle() const
G4double GetX1HalfLength() const
void GenTrapWrite(xercesc::DOMElement *, const G4GenericTrap *const)
G4double GetTiltAngleAlpha() const
G4double GetX2HalfLength() const
G4double GetOuterRadiusPlusZ() const
const std::vector< G4TwoVector > & GetVertices() const
G4double GetZHalfLength() const
G4double GetOuterRadius() const
G4double GetXHalfLength() const
xercesc::DOMElement * solidsElement
static const G4double pos
void SphereWrite(xercesc::DOMElement *, const G4Sphere *const)
G4double GetPhiTwist() const
G4double GetOuterRadius() const
virtual void AddSolid(const G4VSolid *const)
G4double GetY2HalfLength() const
std::vector< const G4VSolid * > solidList
G4double GetDeltaPhiAngle() const
G4double GetYHalfLength() const