From 4bb0b7f6e47e36b3710f41973a32daa2a8f4bd27 Mon Sep 17 00:00:00 2001
From: Andrea Dell'Acqua <andrea.dellacqua@cern.ch>
Date: Tue, 8 Feb 2022 10:40:04 +0100
Subject: [PATCH] adding the possibility of calculating expressions in
 AddPlane::process()

---
 .../GeoModelXml/GeoModelXml/shape/AddPlane.h         |  3 +++
 .../GeoModelXML/GeoModelXml/src/AddPlane.cxx         | 12 +++++++++---
 .../GeoModelXML/GeoModelXml/src/MakePcon.cxx         |  1 +
 .../GeoModelXML/GeoModelXml/src/MakePgon.cxx         |  1 +
 4 files changed, 14 insertions(+), 3 deletions(-)

diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/shape/AddPlane.h b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/shape/AddPlane.h
index 7bac7dfa8..5bdf2cf62 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/shape/AddPlane.h
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/GeoModelXml/shape/AddPlane.h
@@ -10,11 +10,14 @@ XERCES_CPP_NAMESPACE_BEGIN
 class DOMElement;
 XERCES_CPP_NAMESPACE_END
 
+class GmxUtil;
+
 class AddPlane {
 public:
     AddPlane() {};
     ~AddPlane() {};
     void process(const xercesc::DOMElement *element, double &zPlane, double &rMinPlane, double &rMaxPlane);
+    GmxUtil* gmxUtil=nullptr;
 };
 
 
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/AddPlane.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/AddPlane.cxx
index 77eb53507..4ae47791d 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/AddPlane.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/AddPlane.cxx
@@ -3,6 +3,7 @@
 */
 
 #include "GeoModelXml/shape/AddPlane.h"
+#include "GeoModelXml/GmxUtil.h"
 #include <string>
 #include <sstream>
 
@@ -13,12 +14,17 @@ using namespace xercesc;
 
 void AddPlane::process(const xercesc::DOMElement *element, double &zPlane, double &rMinPlane, double &rMaxPlane) {
 
+  if (!gmxUtil)
+  {
+	std::cout<<"This is AddPlane::process()!! gmxUtil is 0!!!!!"<<std::endl;
+	return;
+  }
   XMLCh * zplane_tmp = XMLString::transcode("zplane");
-  std::istringstream(XMLString::transcode(element->getAttribute(zplane_tmp))) >> zPlane;
+  zPlane=gmxUtil->evaluate(XMLString::transcode(element->getAttribute(zplane_tmp)));
   XMLCh * rminplane_tmp = XMLString::transcode("rminplane");
-  std::istringstream(XMLString::transcode(element->getAttribute(rminplane_tmp))) >> rMinPlane;
+  rMinPlane=gmxUtil->evaluate(XMLString::transcode(element->getAttribute(rminplane_tmp)));
   XMLCh * rmaxplane_tmp = XMLString::transcode("rmaxplane");
-  std::istringstream(XMLString::transcode(element->getAttribute(rmaxplane_tmp))) >> rMaxPlane;
+  rMaxPlane=gmxUtil->evaluate(XMLString::transcode(element->getAttribute(rmaxplane_tmp)));
   XMLString::release(&zplane_tmp);
   XMLString::release(&rminplane_tmp);
   XMLString::release(&rmaxplane_tmp);
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePcon.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePcon.cxx
index 4b98472a3..20e7b8851 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePcon.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePcon.cxx
@@ -31,6 +31,7 @@ char *toRelease;
 //
 //    Add planes
 //
+    if (!gmxUtil.tagHandler.addplane.gmxUtil) gmxUtil.tagHandler.addplane.gmxUtil=&gmxUtil;
     double zPlane = 0.;
     double rMinPlane = 0.;
     double rMaxPlane = 0.;
diff --git a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePgon.cxx b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePgon.cxx
index a73b002c7..59afebcf1 100644
--- a/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePgon.cxx
+++ b/GeoModelTools/GeoModelXML/GeoModelXml/src/MakePgon.cxx
@@ -31,6 +31,7 @@ char *toRelease;
 //
 //    Add planes
 //
+    if (!gmxUtil.tagHandler.addplane.gmxUtil) gmxUtil.tagHandler.addplane.gmxUtil=&gmxUtil;
     double zPlane = 0.;
     double rMinPlane = 0.;
     double rMaxPlane = 0.;
-- 
GitLab