--- /dev/null
+package org.simantics.g3d.csg.actions;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import javax.vecmath.Quat4d;\r
+import javax.vecmath.Vector3d;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.simantics.g3d.csg.scenegraph2.CSGparentNode;\r
+import org.simantics.g3d.csg.scenegraph2.CSGrootNode;\r
+import org.simantics.g3d.csg.scenegraph2.ICSGnode;\r
+\r
+public class SplitBooleanOpAction2 extends Action {\r
+ private CSGrootNode root;\r
+ private CSGparentNode booleanOp;\r
+ \r
+ public SplitBooleanOpAction2(CSGrootNode root, CSGparentNode booleanOp) {\r
+ super();\r
+ setText("Split");\r
+ this.booleanOp = booleanOp;\r
+ this.root = root;\r
+ }\r
+ \r
+ @Override\r
+ public void run() {\r
+ Collection<ICSGnode> nodes = new ArrayList<ICSGnode>();\r
+ nodes.addAll(booleanOp.getPrimaryChild());\r
+ nodes.addAll(booleanOp.getSecondaryChild());\r
+ Map<ICSGnode,Vector3d> positions = new HashMap<ICSGnode, Vector3d>();\r
+ Map<ICSGnode,Quat4d> orientations = new HashMap<ICSGnode, Quat4d>();\r
+ for (ICSGnode node : nodes) {\r
+ positions.put(node, node.getWorldPosition());\r
+ orientations.put(node, node.getWorldOrientation());\r
+ node.deattach();\r
+ }\r
+ for (ICSGnode node : nodes) {\r
+ root.addChild(node);\r
+ node.setWorldPosition(positions.get(node));\r
+ node.setWorldOrientation(orientations.get(node));\r
+ }\r
+ root.remChild(booleanOp);\r
+ root.getNodeMap().commit();\r
+\r
+ }\r
+\r
+}\r