93 multiUnionElement->setAttributeNode(
NewAttribute(
"name", name));
95 for(
G4int i = 0; i < numSolids; ++i)
107 rot3d.
yx(), rot3d.
yy(), rot3d.
yz(),
108 rot3d.
zx(), rot3d.
zy(), rot3d.
zz()));
113 std::ostringstream os;
116 xercesc::DOMElement* solidElement =
NewElement(
"solid");
117 solidElement->setAttributeNode(
NewAttribute(
"ref", solidref));
118 xercesc::DOMElement* multiUnionNodeElement =
NewElement(
"multiUnionNode");
119 multiUnionNodeElement->setAttributeNode(
NewAttribute(
"name", name+
"_"+nodeName));
120 multiUnionNodeElement->appendChild(solidElement);
125 PositionWrite(multiUnionNodeElement,name+
"_"+nodeName+
"_pos",pos);
131 RotationWrite(multiUnionNodeElement,name+
"_"+nodeName+
"_rot",rot);
133 multiUnionElement->appendChild(multiUnionNodeElement);
136 solElement->appendChild(multiUnionElement);
149 tag =
"intersection";
160 G4VSolid* firstPtr =
const_cast<G4VSolid*
>(
boolean->GetConstituentSolid(0));
161 G4VSolid* secondPtr =
const_cast<G4VSolid*
>(
boolean->GetConstituentSolid(1));
171 G4String ErrorMessage =
"The referenced solid '" + firstPtr->
GetName() +
172 +
"in the Boolean shape '" + +
boolean->GetName() +
173 +
"' was displaced too many times!";
174 G4Exception(
"G4GDMLWriteSolids::BooleanWrite()",
"InvalidSetup",
180 firstpos += disp->GetObjectTranslation();
181 firstrot +=
GetAngles(disp->GetObjectRotation());
182 firstPtr = disp->GetConstituentMovedSolid();
193 G4String ErrorMessage =
"The referenced solid '" + secondPtr->
GetName() +
194 +
"in the Boolean shape '" + +
boolean->GetName() +
195 +
"' was displaced too many times!";
196 G4Exception(
"G4GDMLWriteSolids::BooleanWrite()",
"InvalidSetup",
202 pos += disp->GetObjectTranslation();
203 rot +=
GetAngles(disp->GetObjectRotation());
204 secondPtr = disp->GetConstituentMovedSolid();
219 booleanElement->setAttributeNode(
NewAttribute(
"name", name));
220 xercesc::DOMElement* firstElement =
NewElement(
"first");
221 firstElement->setAttributeNode(
NewAttribute(
"ref", firstref));
222 booleanElement->appendChild(firstElement);
223 xercesc::DOMElement* secondElement =
NewElement(
"second");
224 secondElement->setAttributeNode(
NewAttribute(
"ref", secondref));
225 booleanElement->appendChild(secondElement);
226 solElement->appendChild(booleanElement);
274 scaledElement->setAttributeNode(
NewAttribute(
"name", name));
276 xercesc::DOMElement* solidElement =
NewElement(
"solidref");
277 solidElement->setAttributeNode(
NewAttribute(
"ref", solidref));
278 scaledElement->appendChild(solidElement);
284 ScaleWrite(scaledElement, name +
"_scl", sclVector);
287 solElement->appendChild(scaledElement);
293 const G4Box*
const box)
297 xercesc::DOMElement* boxElement =
NewElement(
"box");
298 boxElement->setAttributeNode(
NewAttribute(
"name", name));
299 boxElement->setAttributeNode(
301 boxElement->setAttributeNode(
303 boxElement->setAttributeNode(
305 boxElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
306 solElement->appendChild(boxElement);
315 xercesc::DOMElement* coneElement =
NewElement(
"cone");
316 coneElement->setAttributeNode(
NewAttribute(
"name", name));
317 coneElement->setAttributeNode(
319 coneElement->setAttributeNode(
321 coneElement->setAttributeNode(
323 coneElement->setAttributeNode(
325 coneElement->setAttributeNode(
327 coneElement->setAttributeNode(
329 coneElement->setAttributeNode(
331 coneElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
332 coneElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
333 solElement->appendChild(coneElement);
342 xercesc::DOMElement* elconeElement =
NewElement(
"elcone");
343 elconeElement->setAttributeNode(
NewAttribute(
"name", name));
344 elconeElement->setAttributeNode(
346 elconeElement->setAttributeNode(
349 elconeElement->setAttributeNode(
351 elconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
352 solElement->appendChild(elconeElement);
361 xercesc::DOMElement* ellipsoidElement =
NewElement(
"ellipsoid");
362 ellipsoidElement->setAttributeNode(
NewAttribute(
"name", name));
363 ellipsoidElement->setAttributeNode(
365 ellipsoidElement->setAttributeNode(
367 ellipsoidElement->setAttributeNode(
369 ellipsoidElement->setAttributeNode(
371 ellipsoidElement->setAttributeNode(
373 ellipsoidElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
374 solElement->appendChild(ellipsoidElement);
383 xercesc::DOMElement* eltubeElement =
NewElement(
"eltube");
384 eltubeElement->setAttributeNode(
NewAttribute(
"name", name));
388 eltubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
389 solElement->appendChild(eltubeElement);
398 xercesc::DOMElement* xtruElement =
NewElement(
"xtru");
399 xtruElement->setAttributeNode(
NewAttribute(
"name", name));
400 xtruElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
401 solElement->appendChild(xtruElement);
405 for(
G4int i = 0; i < NumVertex; ++i)
407 xercesc::DOMElement* twoDimVertexElement =
NewElement(
"twoDimVertex");
408 xtruElement->appendChild(twoDimVertexElement);
412 twoDimVertexElement->setAttributeNode(
NewAttribute(
"x", vertex.
x() / mm));
413 twoDimVertexElement->setAttributeNode(
NewAttribute(
"y", vertex.
y() / mm));
418 for(
G4int i = 0; i < NumSection; ++i)
420 xercesc::DOMElement* sectionElement =
NewElement(
"section");
421 xtruElement->appendChild(sectionElement);
425 sectionElement->setAttributeNode(
NewAttribute(
"zOrder", i));
426 sectionElement->setAttributeNode(
428 sectionElement->setAttributeNode(
430 sectionElement->setAttributeNode(
432 sectionElement->setAttributeNode(
443 xercesc::DOMElement* hypeElement =
NewElement(
"hype");
444 hypeElement->setAttributeNode(
NewAttribute(
"name", name));
445 hypeElement->setAttributeNode(
447 hypeElement->setAttributeNode(
449 hypeElement->setAttributeNode(
451 hypeElement->setAttributeNode(
453 hypeElement->setAttributeNode(
455 hypeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
456 hypeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
457 solElement->appendChild(hypeElement);
462 const G4Orb*
const orb)
466 xercesc::DOMElement* orbElement =
NewElement(
"orb");
467 orbElement->setAttributeNode(
NewAttribute(
"name", name));
469 orbElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
470 solElement->appendChild(orbElement);
484 xercesc::DOMElement* paraElement =
NewElement(
"para");
485 paraElement->setAttributeNode(
NewAttribute(
"name", name));
486 paraElement->setAttributeNode(
488 paraElement->setAttributeNode(
490 paraElement->setAttributeNode(
492 paraElement->setAttributeNode(
NewAttribute(
"alpha", alpha / degree));
493 paraElement->setAttributeNode(
NewAttribute(
"theta", theta / degree));
494 paraElement->setAttributeNode(
NewAttribute(
"phi", phi / degree));
495 paraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
496 paraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
497 solElement->appendChild(paraElement);
506 xercesc::DOMElement* paraboloidElement =
NewElement(
"paraboloid");
507 paraboloidElement->setAttributeNode(
NewAttribute(
"name", name));
508 paraboloidElement->setAttributeNode(
510 paraboloidElement->setAttributeNode(
512 paraboloidElement->setAttributeNode(
514 paraboloidElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
515 solElement->appendChild(paraboloidElement);
524 xercesc::DOMElement* polyconeElement =
NewElement(
"polycone");
525 polyconeElement->setAttributeNode(
NewAttribute(
"name", name));
530 polyconeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
531 polyconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
532 solElement->appendChild(polyconeElement);
534 const std::size_t num_zplanes
540 for(std::size_t i = 0; i < num_zplanes; ++i)
542 ZplaneWrite(polyconeElement, z_array[i], rmin_array[i], rmax_array[i]);
551 xercesc::DOMElement* polyconeElement =
NewElement(
"genericPolycone");
553 polyconeElement->setAttributeNode(
NewAttribute(
"name", name));
554 polyconeElement->setAttributeNode(
556 polyconeElement->setAttributeNode(
558 polyconeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
559 polyconeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
560 solElement->appendChild(polyconeElement);
563 for(
G4int i = 0; i < num_rzpoints; ++i)
578 xercesc::DOMElement* polyhedraElement =
NewElement(
"polyhedra");
579 polyhedraElement->setAttributeNode(
NewAttribute(
"name", name));
584 polyhedraElement->setAttributeNode(
586 polyhedraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
587 polyhedraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
588 solElement->appendChild(polyhedraElement);
590 const std::size_t num_zplanes
600 for(std::size_t i = 0; i < num_zplanes; ++i)
602 ZplaneWrite(polyhedraElement, z_array[i], rmin_array[i] * convertRad,
603 rmax_array[i] * convertRad);
608 xercesc::DOMElement* polyhedraElement =
NewElement(
"genericPolyhedra");
609 polyhedraElement->setAttributeNode(
NewAttribute(
"name", name));
614 polyhedraElement->setAttributeNode(
616 polyhedraElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
617 polyhedraElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
618 solElement->appendChild(polyhedraElement);
622 for(
G4int i = 0; i < num_rzpoints; ++i)
637 xercesc::DOMElement* sphereElement =
NewElement(
"sphere");
638 sphereElement->setAttributeNode(
NewAttribute(
"name", name));
639 sphereElement->setAttributeNode(
641 sphereElement->setAttributeNode(
643 sphereElement->setAttributeNode(
645 sphereElement->setAttributeNode(
647 sphereElement->setAttributeNode(
649 sphereElement->setAttributeNode(
651 sphereElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
652 sphereElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
653 solElement->appendChild(sphereElement);
663 xercesc::DOMElement* tessellatedElement =
NewElement(
"tessellated");
664 tessellatedElement->setAttributeNode(
NewAttribute(
"name", name));
665 tessellatedElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
666 tessellatedElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
667 solElement->appendChild(tessellatedElement);
669 std::map<G4ThreeVector, G4String, G4ThreeVectorCompare> vertexMap;
672 std::size_t NumVertex = 0;
674 for(std::size_t i = 0; i < NumFacets; ++i)
681 if(NumVertexPerFacet == 3)
683 FacetTag =
"triangular";
685 else if(NumVertexPerFacet == 4)
687 FacetTag =
"quadrangular";
691 G4Exception(
"G4GDMLWriteSolids::TessellatedWrite()",
"InvalidSetup",
695 xercesc::DOMElement* facetElement =
NewElement(FacetTag);
696 tessellatedElement->appendChild(facetElement);
698 for(std::size_t j = 0; j < NumVertexPerFacet; ++j)
700 std::stringstream name_stream;
701 std::stringstream ref_stream;
703 name_stream <<
"vertex" << (j + 1);
704 ref_stream << solid_name <<
"_v" << NumVertex;
706 const G4String& fname = name_stream.str();
717 if(vertexMap.find(vertex) != vertexMap.cend())
719 ref = vertexMap[vertex];
723 if ( ! vertexMap.insert(std::make_pair(vertex, ref)).second )
726 description <<
"Failed to insert [vertex, ref] " << vertex <<
", "
727 << ref <<
" in map.";
728 G4Exception(
"G4GDMLWriteSolids::TessellatedWrite",
"WriteError",
737 facetElement->setAttributeNode(
NewAttribute(fname, ref));
744 const G4Tet*
const tet)
749 std::vector<G4ThreeVector> vertexList = tet->
GetVertices();
751 xercesc::DOMElement* tetElement =
NewElement(
"tet");
752 tetElement->setAttributeNode(
NewAttribute(
"name", name));
753 tetElement->setAttributeNode(
NewAttribute(
"vertex1", solid_name +
"_v1"));
754 tetElement->setAttributeNode(
NewAttribute(
"vertex2", solid_name +
"_v2"));
755 tetElement->setAttributeNode(
NewAttribute(
"vertex3", solid_name +
"_v3"));
756 tetElement->setAttributeNode(
NewAttribute(
"vertex4", solid_name +
"_v4"));
757 tetElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
758 solElement->appendChild(tetElement);
772 xercesc::DOMElement* torusElement =
NewElement(
"torus");
773 torusElement->setAttributeNode(
NewAttribute(
"name", name));
777 torusElement->setAttributeNode(
779 torusElement->setAttributeNode(
781 torusElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
782 torusElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
783 solElement->appendChild(torusElement);
792 std::vector<G4TwoVector> vertices = gtrap->
GetVertices();
794 xercesc::DOMElement* gtrapElement =
NewElement(
"arb8");
795 gtrapElement->setAttributeNode(
NewAttribute(
"name", name));
796 gtrapElement->setAttributeNode(
798 gtrapElement->setAttributeNode(
NewAttribute(
"v1x", vertices[0].x()));
799 gtrapElement->setAttributeNode(
NewAttribute(
"v1y", vertices[0].y()));
800 gtrapElement->setAttributeNode(
NewAttribute(
"v2x", vertices[1].x()));
801 gtrapElement->setAttributeNode(
NewAttribute(
"v2y", vertices[1].y()));
802 gtrapElement->setAttributeNode(
NewAttribute(
"v3x", vertices[2].x()));
803 gtrapElement->setAttributeNode(
NewAttribute(
"v3y", vertices[2].y()));
804 gtrapElement->setAttributeNode(
NewAttribute(
"v4x", vertices[3].x()));
805 gtrapElement->setAttributeNode(
NewAttribute(
"v4y", vertices[3].y()));
806 gtrapElement->setAttributeNode(
NewAttribute(
"v5x", vertices[4].x()));
807 gtrapElement->setAttributeNode(
NewAttribute(
"v5y", vertices[4].y()));
808 gtrapElement->setAttributeNode(
NewAttribute(
"v6x", vertices[5].x()));
809 gtrapElement->setAttributeNode(
NewAttribute(
"v6y", vertices[5].y()));
810 gtrapElement->setAttributeNode(
NewAttribute(
"v7x", vertices[6].x()));
811 gtrapElement->setAttributeNode(
NewAttribute(
"v7y", vertices[6].y()));
812 gtrapElement->setAttributeNode(
NewAttribute(
"v8x", vertices[7].x()));
813 gtrapElement->setAttributeNode(
NewAttribute(
"v8y", vertices[7].y()));
814 gtrapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
815 solElement->appendChild(gtrapElement);
830 xercesc::DOMElement* trapElement =
NewElement(
"trap");
831 trapElement->setAttributeNode(
NewAttribute(
"name", name));
832 trapElement->setAttributeNode(
834 trapElement->setAttributeNode(
NewAttribute(
"theta", theta / degree));
835 trapElement->setAttributeNode(
NewAttribute(
"phi", phi / degree));
836 trapElement->setAttributeNode(
838 trapElement->setAttributeNode(
840 trapElement->setAttributeNode(
842 trapElement->setAttributeNode(
NewAttribute(
"alpha1", alpha1 / degree));
843 trapElement->setAttributeNode(
845 trapElement->setAttributeNode(
847 trapElement->setAttributeNode(
850 trapElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
851 trapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
852 solElement->appendChild(trapElement);
857 const G4Trd*
const trd)
861 xercesc::DOMElement* trdElement =
NewElement(
"trd");
862 trdElement->setAttributeNode(
NewAttribute(
"name", name));
863 trdElement->setAttributeNode(
865 trdElement->setAttributeNode(
867 trdElement->setAttributeNode(
869 trdElement->setAttributeNode(
871 trdElement->setAttributeNode(
873 trdElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
874 solElement->appendChild(trdElement);
883 xercesc::DOMElement* tubeElement =
NewElement(
"tube");
884 tubeElement->setAttributeNode(
NewAttribute(
"name", name));
885 tubeElement->setAttributeNode(
887 tubeElement->setAttributeNode(
889 tubeElement->setAttributeNode(
891 tubeElement->setAttributeNode(
893 tubeElement->setAttributeNode(
895 tubeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
896 tubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
897 solElement->appendChild(tubeElement);
906 xercesc::DOMElement* cuttubeElement =
NewElement(
"cutTube");
907 cuttubeElement->setAttributeNode(
NewAttribute(
"name", name));
908 cuttubeElement->setAttributeNode(
910 cuttubeElement->setAttributeNode(
912 cuttubeElement->setAttributeNode(
914 cuttubeElement->setAttributeNode(
916 cuttubeElement->setAttributeNode(
918 cuttubeElement->setAttributeNode(
920 cuttubeElement->setAttributeNode(
922 cuttubeElement->setAttributeNode(
924 cuttubeElement->setAttributeNode(
926 cuttubeElement->setAttributeNode(
928 cuttubeElement->setAttributeNode(
930 cuttubeElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
931 cuttubeElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
932 solElement->appendChild(cuttubeElement);
941 xercesc::DOMElement* twistedboxElement =
NewElement(
"twistedbox");
942 twistedboxElement->setAttributeNode(
NewAttribute(
"name", name));
943 twistedboxElement->setAttributeNode(
945 twistedboxElement->setAttributeNode(
947 twistedboxElement->setAttributeNode(
949 twistedboxElement->setAttributeNode(
951 twistedboxElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
952 twistedboxElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
953 solElement->appendChild(twistedboxElement);
962 xercesc::DOMElement* twistedtrapElement =
NewElement(
"twistedtrap");
963 twistedtrapElement->setAttributeNode(
NewAttribute(
"name", name));
964 twistedtrapElement->setAttributeNode(
966 twistedtrapElement->setAttributeNode(
968 twistedtrapElement->setAttributeNode(
970 twistedtrapElement->setAttributeNode(
972 twistedtrapElement->setAttributeNode(
974 twistedtrapElement->setAttributeNode(
976 twistedtrapElement->setAttributeNode(
978 twistedtrapElement->setAttributeNode(
980 twistedtrapElement->setAttributeNode(
982 twistedtrapElement->setAttributeNode(
984 twistedtrapElement->setAttributeNode(
986 twistedtrapElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
987 twistedtrapElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
989 solElement->appendChild(twistedtrapElement);
998 xercesc::DOMElement* twistedtrdElement =
NewElement(
"twistedtrd");
999 twistedtrdElement->setAttributeNode(
NewAttribute(
"name", name));
1000 twistedtrdElement->setAttributeNode(
1002 twistedtrdElement->setAttributeNode(
1004 twistedtrdElement->setAttributeNode(
1006 twistedtrdElement->setAttributeNode(
1008 twistedtrdElement->setAttributeNode(
1010 twistedtrdElement->setAttributeNode(
1012 twistedtrdElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
1013 twistedtrdElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
1014 solElement->appendChild(twistedtrdElement);
1023 xercesc::DOMElement* twistedtubsElement =
NewElement(
"twistedtubs");
1024 twistedtubsElement->setAttributeNode(
NewAttribute(
"name", name));
1025 twistedtubsElement->setAttributeNode(
1027 twistedtubsElement->setAttributeNode(
1029 twistedtubsElement->setAttributeNode(
1031 twistedtubsElement->setAttributeNode(
1033 twistedtubsElement->setAttributeNode(
1035 twistedtubsElement->setAttributeNode(
1037 twistedtubsElement->setAttributeNode(
NewAttribute(
"aunit",
"deg"));
1038 twistedtubsElement->setAttributeNode(
NewAttribute(
"lunit",
"mm"));
1039 solElement->appendChild(twistedtubsElement);
1047 xercesc::DOMElement* zplaneElement =
NewElement(
"zplane");
1048 zplaneElement->setAttributeNode(
NewAttribute(
"z", z / mm));
1049 zplaneElement->setAttributeNode(
NewAttribute(
"rmin", rmin / mm));
1050 zplaneElement->setAttributeNode(
NewAttribute(
"rmax", rmax / mm));
1051 element->appendChild(zplaneElement);
1058 xercesc::DOMElement* rzpointElement =
NewElement(
"rzpoint");
1059 rzpointElement->setAttributeNode(
NewAttribute(
"r", r / mm));
1060 rzpointElement->setAttributeNode(
NewAttribute(
"z", z / mm));
1061 element->appendChild(rzpointElement);
1068 xercesc::DOMElement* optElement =
NewElement(
"opticalsurface");
1074 optElement->setAttributeNode(
NewAttribute(
"name", name));
1075 optElement->setAttributeNode(
NewAttribute(
"model", smodel));
1078 optElement->setAttributeNode(
NewAttribute(
"value", sval));
1087 solElement->appendChild(optElement);
1094 xercesc::DOMElement* propElement;
1099 for(
size_t i = 0; i < pvec.size(); ++i)
1101 if(pvec[i] !=
nullptr) {
1103 propElement->setAttributeNode(
1110 optElement->appendChild(propElement);
1113 for(
size_t i = 0; i < cvec.size(); ++i)
1115 if (cvec[i].second ==
true) {
1121 xercesc::DOMElement* constElement =
NewElement(
"constant");
1124 constElement->setAttributeNode(
NewAttribute(
"value", cvec[i].first));
1126 optElement->appendChild(propElement);
1146 for(std::size_t i = 0; i <
solidList.size(); ++i)
1174 const G4Box*
const boxPtr =
static_cast<const G4Box*
>(solidPtr);
1179 const G4Cons*
const conePtr =
static_cast<const G4Cons*
>(solidPtr);
1208 const G4Hype*
const hypePtr =
static_cast<const G4Hype*
>(solidPtr);
1213 const G4Orb*
const orbPtr =
static_cast<const G4Orb*
>(solidPtr);
1218 const G4Para*
const paraPtr =
static_cast<const G4Para*
>(solidPtr);
1258 const G4Tet*
const tetPtr =
static_cast<const G4Tet*
>(solidPtr);
1263 const G4Torus*
const torusPtr =
static_cast<const G4Torus*
>(solidPtr);
1274 const G4Trap*
const trapPtr =
static_cast<const G4Trap*
>(solidPtr);
1279 const G4Trd*
const trdPtr =
static_cast<const G4Trd*
>(solidPtr);
1284 const G4Tubs*
const tubePtr =
static_cast<const G4Tubs*
>(solidPtr);
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *description)
std::ostringstream G4ExceptionDescription
CLHEP::Hep3Vector G4ThreeVector
G4GLOB_DLL std::ostream G4cout
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const
G4double GetOuterRadiusPlusZ() const
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetInnerRadiusMinusZ() const
G4double GetInnerRadiusPlusZ() const
G4double GetOuterRadiusMinusZ() const
G4double GetZHalfLength() const
G4ThreeVector GetHighNorm() const
G4double GetStartPhiAngle() const
G4double GetZHalfLength() const
G4double GetInnerRadius() const
G4ThreeVector GetLowNorm() const
G4double GetDeltaPhiAngle() const
G4double GetOuterRadius() const
G4double GetSemiAxisMax(G4int i) const
G4double GetZTopCut() const
G4double GetZBottomCut() const
G4double GetSemiAxisX() const
G4double GetSemiAxisY() const
G4double GetZTopCut() const
ZSection GetZSection(G4int index) const
G4int GetNofZSections() const
G4int GetNofVertices() const
G4TwoVector GetVertex(G4int index) const
xercesc::DOMElement * defineElement
void FirstrotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
static const G4double kLinearPrecision
void RotationWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &rot)
static const G4double kAngularPrecision
void AddPosition(const G4String &name, const G4ThreeVector &pos)
void FirstpositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
void PositionWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &pos)
G4ThreeVector GetAngles(const G4RotationMatrix &)
void ScaleWrite(xercesc::DOMElement *element, const G4String &name, const G4ThreeVector &scl)
void PropertyVectorWrite(const G4String &, const G4PhysicsFreeVector *const)
void TwistedtrdWrite(xercesc::DOMElement *, const G4TwistedTrd *const)
void TorusWrite(xercesc::DOMElement *, const G4Torus *const)
void RZPointWrite(xercesc::DOMElement *, const G4double &, const G4double &)
void TetWrite(xercesc::DOMElement *, const G4Tet *const)
void TrapWrite(xercesc::DOMElement *, const G4Trap *const)
void HypeWrite(xercesc::DOMElement *, const G4Hype *const)
void TwistedtrapWrite(xercesc::DOMElement *, const G4TwistedTrap *const)
void ScaledWrite(xercesc::DOMElement *, const G4ScaledSolid *const)
void MultiUnionWrite(xercesc::DOMElement *solElement, const G4MultiUnion *const)
virtual void AddSolid(const G4VSolid *const)
void PolyhedraWrite(xercesc::DOMElement *, const G4Polyhedra *const)
void TessellatedWrite(xercesc::DOMElement *, const G4TessellatedSolid *const)
void GenTrapWrite(xercesc::DOMElement *, const G4GenericTrap *const)
void TwistedboxWrite(xercesc::DOMElement *, const G4TwistedBox *const)
void TubeWrite(xercesc::DOMElement *, const G4Tubs *const)
void ParaboloidWrite(xercesc::DOMElement *, const G4Paraboloid *const)
std::vector< const G4VSolid * > solidList
void SphereWrite(xercesc::DOMElement *, const G4Sphere *const)
void BoxWrite(xercesc::DOMElement *, const G4Box *const)
void OrbWrite(xercesc::DOMElement *, const G4Orb *const)
void TwistedtubsWrite(xercesc::DOMElement *, const G4TwistedTubs *const)
void EltubeWrite(xercesc::DOMElement *, const G4EllipticalTube *const)
void BooleanWrite(xercesc::DOMElement *, const G4BooleanSolid *const)
void ElconeWrite(xercesc::DOMElement *, const G4EllipticalCone *const)
void ConeWrite(xercesc::DOMElement *, const G4Cons *const)
void GenericPolyconeWrite(xercesc::DOMElement *, const G4GenericPolycone *const)
virtual void SolidsWrite(xercesc::DOMElement *)
xercesc::DOMElement * solidsElement
virtual ~G4GDMLWriteSolids()
static const G4int maxTransforms
void CutTubeWrite(xercesc::DOMElement *, const G4CutTubs *const)
void EllipsoidWrite(xercesc::DOMElement *, const G4Ellipsoid *const)
void PolyconeWrite(xercesc::DOMElement *, const G4Polycone *const)
void ParaWrite(xercesc::DOMElement *, const G4Para *const)
void PropertyWrite(xercesc::DOMElement *, const G4OpticalSurface *const)
void TrdWrite(xercesc::DOMElement *, const G4Trd *const)
void XtruWrite(xercesc::DOMElement *, const G4ExtrudedSolid *const)
void OpticalSurfaceWrite(xercesc::DOMElement *, const G4OpticalSurface *const)
void ZplaneWrite(xercesc::DOMElement *, const G4double &, const G4double &, const G4double &)
xercesc::DOMElement * NewElement(const G4String &)
G4String GenerateName(const G4String &, const void *const)
xercesc::DOMAttr * NewAttribute(const G4String &, const G4String &)
G4double GetStartPhi() const
G4double GetEndPhi() const
G4int GetNumRZCorner() const
G4PolyconeSideRZ GetCorner(G4int index) const
G4double GetZHalfLength() const
const std::vector< G4TwoVector > & GetVertices() const
G4double GetInnerStereo() const
G4double GetZHalfLength() const
G4double GetOuterStereo() const
G4double GetOuterRadius() const
G4double GetInnerRadius() const
const std::vector< G4String > & GetMaterialConstPropertyNames() const
const std::vector< std::pair< G4double, G4bool > > & GetConstProperties() const
const std::vector< G4MaterialPropertyVector * > & GetProperties() const
const std::vector< G4String > & GetMaterialPropertyNames() const
const G4Transform3D & GetTransformation(G4int index) const
G4int GetNumberOfSolids() const
G4VSolid * GetSolid(G4int index) const
G4OpticalSurfaceModel GetModel() const
G4double GetSigmaAlpha() const
G4OpticalSurfaceFinish GetFinish() const
G4double GetPolish() const
G4MaterialPropertiesTable * GetMaterialPropertiesTable() const
G4double GetRadius() const
G4double GetTanAlpha() const
G4ThreeVector GetSymAxis() const
G4double GetYHalfLength() const
G4double GetZHalfLength() const
G4double GetXHalfLength() const
G4double GetRadiusPlusZ() const
G4double GetRadiusMinusZ() const
G4double GetZHalfLength() const
G4PolyconeHistorical * GetOriginalParameters() const
G4int GetNumRZCorner() const
G4PolyhedraHistorical * GetOriginalParameters() const
G4PolyhedraSideRZ GetCorner(const G4int index) const
G4VSolid * GetUnscaledSolid() const
G4Scale3D GetScaleTransform() const
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetDeltaThetaAngle() const
G4double GetStartThetaAngle() const
const G4String & GetName() const
const G4SurfaceType & GetType() const
G4int GetNumberOfFacets() const
G4VFacet * GetFacet(G4int i) const
void GetVertices(G4ThreeVector &anchor, G4ThreeVector &p1, G4ThreeVector &p2, G4ThreeVector &p3) const
G4double GetYHalfLength1() const
G4double GetTanAlpha2() const
G4double GetXHalfLength2() const
G4ThreeVector GetSymAxis() const
G4double GetXHalfLength4() const
G4double GetZHalfLength() const
G4double GetYHalfLength2() const
G4double GetTanAlpha1() const
G4double GetXHalfLength3() const
G4double GetXHalfLength1() const
G4double GetXHalfLength2() const
G4double GetYHalfLength2() const
G4double GetXHalfLength1() const
G4double GetYHalfLength1() const
G4double GetZHalfLength() const
G4double GetZHalfLength() const
G4double GetInnerRadius() const
G4double GetOuterRadius() const
G4double GetStartPhiAngle() const
G4double GetDeltaPhiAngle() const
G4double GetPhiTwist() const
G4double GetXHalfLength() const
G4double GetZHalfLength() const
G4double GetYHalfLength() const
G4double GetPolarAngleTheta() const
G4double GetAzimuthalAnglePhi() const
G4double GetTiltAngleAlpha() const
G4double GetZHalfLength() const
G4double GetX1HalfLength() const
G4double GetX2HalfLength() const
G4double GetX3HalfLength() const
G4double GetX4HalfLength() const
G4double GetY2HalfLength() const
G4double GetPhiTwist() const
G4double GetY1HalfLength() const
G4double GetX2HalfLength() const
G4double GetY2HalfLength() const
G4double GetY1HalfLength() const
G4double GetZHalfLength() const
G4double GetPhiTwist() const
G4double GetX1HalfLength() const
G4double GetOuterRadius() const
G4double GetPhiTwist() const
G4double GetEndZ(G4int i) const
G4double GetInnerRadius() const
virtual G4ThreeVector GetVertex(G4int i) const =0
virtual G4int GetNumberOfVertices() const =0
virtual G4GeometryType GetEntityType() const =0