GeomConverter/src/org/lcsim/detector
diff -N IPhysicalVolumeVisitor.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ IPhysicalVolumeVisitor.java 7 Mar 2007 00:43:32 -0000 1.1
@@ -0,0 +1,10 @@
+package org.lcsim.detector;
+
+import org.lcsim.detector.IPhysicalVolume;
+import org.lcsim.detector.IVisitor;
+
+public interface IPhysicalVolumeVisitor
+extends IVisitor<IPhysicalVolume>
+{
+ public void visit(IPhysicalVolume volume);
+}
GeomConverter/src/org/lcsim/detector
diff -N IVisitor.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ IVisitor.java 7 Mar 2007 00:43:32 -0000 1.1
@@ -0,0 +1,6 @@
+package org.lcsim.detector;
+
+public interface IVisitor<T>
+{
+ public abstract void visit(T object);
+}
GeomConverter/src/org/lcsim/detector
diff -u -r1.6 -r1.7
--- PhysicalVolumeNavigator.java 6 Mar 2007 20:22:17 -0000 1.6
+++ PhysicalVolumeNavigator.java 7 Mar 2007 00:43:32 -0000 1.7
@@ -315,6 +315,47 @@
*/
public PhysicalVolumeNavigator(IPhysicalVolumePath path)
{
+ if ( path == null )
+ {
+ throw new IllegalArgumentException("The path is null!");
+ }
+
setTopPhysicalVolume(path);
}
+
+ public void traversePreOrder(
+ IPhysicalVolumeVisitor visitor)
+ {
+ if ( visitor == null )
+ {
+ throw new IllegalArgumentException("The Visitor is null!");
+ }
+
+ traversePreOrder(getTopPhysicalVolume(), visitor);
+ }
+
+ /**
+ * Visit the PhysicalVolume recursively using preorder,
+ * calling the given IPhysicalVolumeVisitor's visit method
+ * for each node.
+ *
+ * @param physicalVolume
+ * @param visitor
+ */
+ protected void traversePreOrder(
+ IPhysicalVolume physicalVolume,
+ IPhysicalVolumeVisitor visitor)
+ {
+ // Visit this node.
+ visitor.visit(physicalVolume);
+
+ // Recursively traverse the daughters.
+ if ( physicalVolume.getLogicalVolume().getNumberOfDaughters() > 0 )
+ {
+ for ( IPhysicalVolume child : physicalVolume.getLogicalVolume().getDaughters())
+ {
+ traversePreOrder(child, visitor);
+ }
+ }
+ }
}
\ No newline at end of file