ATLAS Offline Software
Loading...
Searching...
No Matches
snakeHandler.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3*/
4
10#include "AGDDModel/AGDDSnake.h"
11
12#include <iostream>
13#include <vector>
14
15using namespace xercesc;
16
17snakeHandler::snakeHandler(const std::string& s,
19 : XMLHandler(s, c)
20{
21}
22
24 xercesc::DOMNode *t)
25{
26 bool res=false;
27 std::string name=getAttributeAsString(c, t, "name",res);
28 std::string material=getAttributeAsString(c, t, "material",res);
29 double radius=getAttributeAsDouble(c, t, "radius",res);
30
31 std::vector<GeoTrf::Vector3D> points;
32
33 AGDDSnake *vol=new AGDDSnake(name, c.GetVolumeStore(), c.GetSectionStore());
34 vol->SetMaterial(material);
35 vol->Radius(radius);
36
37 StopLoop(true);
38 DOMNode* child;
39
40 snake_pointHandler* pointHand = dynamic_cast<snake_pointHandler*>
41 (c.GetHandlerStore().GetHandler("snake_point"));
42 if (!pointHand) std::abort();
43
44 IAGDDParser& parser = *c.GetParser();
45 for (child=t->getFirstChild();child!=0;child=child->getNextSibling())
46 {
47 if (child->getNodeType()==DOMNode::ELEMENT_NODE) {
48 parser.elementLoop(c, child);
49 points.push_back (pointHand->CurrentPoint());
50 }
51 }
52
53 int nPoints=points.size();
54 for (int i=0;i<nPoints;i++)
55 vol->SetPoint(points[i]);
56
57 std::string col=getAttributeAsString(c, t,"color",res);
58 if (res)
59 vol->SetColor(col);
60
61}
std::pair< std::vector< unsigned int >, bool > res
void SetPoint(const GeoTrf::Vector3D &p)
Definition AGDDSnake.h:20
double Radius() const
Definition AGDDSnake.h:25
void SetMaterial(const std::string &n)
Definition AGDDVolume.h:24
void SetColor(const std::string &c)
Definition AGDDVolume.h:36
void StopLoop(bool)
double getAttributeAsDouble(AGDDController &c, const xercesc::DOMNode *t, const std::string &) const
XMLHandler(const std::string &n, AGDDController &c)
std::string getAttributeAsString(AGDDController &c, const xercesc::DOMNode *t, const std::string &) const
snakeHandler(const std::string &, AGDDController &c)
virtual void ElementHandle(AGDDController &c, xercesc::DOMNode *t) override
GeoTrf::Vector3D CurrentPoint()