3 modified files
GeomConverter/src/org/lcsim/geometry/compact
diff -u -r1.25 -r1.26
--- Detector.java 11 May 2007 00:21:09 -0000 1.25
+++ Detector.java 14 Dec 2007 21:57:51 -0000 1.26
@@ -1,6 +1,9 @@
package org.lcsim.geometry.compact;
+import java.net.URL;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -28,6 +31,7 @@
private Map<String,Region> regions = new HashMap<String,Region>();
private Map<String,VisAttributes> display = new HashMap<String,VisAttributes>();
private XMLMaterialManager materialMgr;
+ private List<URL> gdmlReferences = new ArrayList<URL>();
private SystemIDMap idmap = new SystemIDMap();
@@ -261,4 +265,14 @@
{
this.de = de;
}
+
+ public void addGDMLReference(URL url)
+ {
+ gdmlReferences.add(url);
+ }
+
+ public List<URL> getGDMLReferences()
+ {
+ return gdmlReferences;
+ }
}
\ No newline at end of file
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd
diff -u -r1.18 -r1.19
--- LCDDDetector.java 11 Oct 2006 00:58:05 -0000 1.18
+++ LCDDDetector.java 14 Dec 2007 21:57:51 -0000 1.19
@@ -2,6 +2,7 @@
import java.io.IOException;
import java.io.OutputStream;
+import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -208,6 +209,12 @@
((LCDDField) field).addToLCDD(lcdd);
}
+ // Merge in referenced GDML files from includes block.
+ for (URL gdmlFile : getGDMLReferences())
+ {
+ lcdd.mergeGDML(gdmlFile.openStream());
+ }
+
lcdd.cleanUp();
Document doc = new Document();
GeomConverter/src/org/lcsim/geometry/compact/converter/lcdd/util
diff -u -r1.23 -r1.24
--- LCDD.java 29 Sep 2006 23:42:10 -0000 1.23
+++ LCDD.java 14 Dec 2007 21:57:51 -0000 1.24
@@ -1,14 +1,19 @@
package org.lcsim.geometry.compact.converter.lcdd.util;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
+
+import org.jdom.Attribute;
+import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
-import org.jdom.Attribute;
-import org.lcsim.material.XMLMaterialManager;
+import org.jdom.input.SAXBuilder;
import org.lcsim.geometry.compact.converter.lcdd.LCDDSubdetector;
+import org.lcsim.material.XMLMaterialManager;
/**
*
@@ -446,4 +451,46 @@
}
return null;
}
+
+ /**
+ * Merge in an existing GDML file into this LCDD document.
+ * @param in InputStream from a GDML data source.
+ */
+ public void mergeGDML(InputStream in)
+ {
+ SAXBuilder builder = new SAXBuilder();
+ Document doc = null;
+ try {
+ doc = builder.build(in);
+ }
+ catch (Exception x)
+ {
+ throw new RuntimeException(x);
+ }
+
+ Element root = doc.getRootElement();
+
+ if (!root.getName().equals("gdml"))
+ {
+ throw new RuntimeException("Document is not a valid GDML file.");
+ }
+
+ Element gdml = getChild("gdml");
+
+ for (Object o1 : root.getChildren())
+ {
+ Element section = (Element)o1;
+
+ if (!section.getName().equals("setup"))
+ {
+ Element target = gdml.getChild(section.getName());
+
+ for (Object o2 : section.getChildren())
+ {
+ Element element = (Element)o2;
+ target.addContent(element);
+ }
+ }
+ }
+ }
}
\ No newline at end of file
CVSspam 0.2.8