]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/LoadFolderAction.java
Moved 3D plug-ins to /3d/branches/dev.
[simantics/3d.git] / org.simantics.proconf.g3d.shapeeditor / src / org / simantics / proconf / g3d / shapeeditor / actions / LoadFolderAction.java
diff --git a/org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/LoadFolderAction.java b/org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/LoadFolderAction.java
new file mode 100644 (file)
index 0000000..2b7d49e
--- /dev/null
@@ -0,0 +1,100 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.proconf.g3d.shapeeditor.actions;\r
+\r
+import java.io.File;\r
+import java.io.FilenameFilter;\r
+import java.util.Stack;\r
+\r
+import org.eclipse.jface.action.Action;\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.DirectoryDialog;\r
+import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase;\r
+import org.simantics.proconf.g3d.occ.geometry.OccTriangulator;\r
+\r
+import com.jme.bounding.BoundingBox;\r
+import com.jme.renderer.ColorRGBA;\r
+import com.jme.scene.Geometry;\r
+import com.jme.scene.state.MaterialState;\r
+\r
+\r
+public class LoadFolderAction extends Action {\r
+       private ThreeDimensionalEditorBase editor;\r
+       \r
+       public LoadFolderAction(ThreeDimensionalEditorBase editor) {\r
+               super("Load folder");\r
+               this.editor = editor;\r
+               \r
+       }\r
+       \r
+       public void run() {\r
+        \r
+      DirectoryDialog loadDialog = new DirectoryDialog(editor.getRenderingComposite().getShell(), SWT.OPEN);\r
+      loadDialog.setText("Select directory");\r
+\r
+      String directory = loadDialog.open();\r
+      if (directory != null) {\r
+          File file = new File(directory);\r
+          if (!file.isDirectory())\r
+              return;\r
+          Stack<File> directories = new Stack<File>();\r
+          directories.push(file);\r
+          boolean recursive = true;\r
+          while (!directories.empty()) {\r
+              File dir = directories.pop();\r
+\r
+              String[] files = dir.list(new PLYFilter());\r
+              for (String filename : files) {\r
+                  Geometry g = OccTriangulator.getGeometryFromFile(dir.getAbsolutePath() + "/" + filename)[0];\r
+                MaterialState ms = editor.getRenderingComponent().getDisplaySystem().getRenderer().createMaterialState();\r
+                ms.setAmbient(new ColorRGBA(0.f,0.f,0.f,0.f));\r
+                ms.setEmissive(new ColorRGBA(0.f,0.f,0.f,0.f));\r
+                ms.setShininess(128.f);\r
+                ms.setDiffuse(new ColorRGBA(0.8f,0.8f,0.8f,0.f));\r
+                ms.setSpecular(new ColorRGBA(1.f,1.f,1.f,0.f));\r
+                ms.setMaterialFace(MaterialState.MF_FRONT_AND_BACK);\r
+                if (g.getColorBuffer(0) != null) {\r
+                       ms.setColorMaterial(MaterialState.CM_DIFFUSE);\r
+                }\r
+                g.setModelBound(new BoundingBox());\r
+                g.updateModelBound();\r
+                g.setRenderState(ms);\r
+                editor.getRenderingComponent().getShadowRoot().attachChild(g);\r
+                g.updateWorldBound();\r
+                g.lock();\r
+               \r
+              }\r
+              if (recursive) {\r
+                  File[] newDirs = dir.listFiles(new DirectoryFilter());\r
+                  for (File d : newDirs)\r
+                      directories.push(d);\r
+              }\r
+          }\r
+          \r
+      }\r
+\r
+\r
+    }\r
+       \r
+        protected class DirectoryFilter implements FilenameFilter {\r
+               public boolean accept(File dir, String name) {\r
+                   File file = new File(dir.getAbsolutePath() + "/" + name);\r
+                   return file.isDirectory();\r
+               }\r
+           }\r
+\r
+           protected class PLYFilter implements FilenameFilter {\r
+               public boolean accept(File dir, String name) {\r
+                   return (name.endsWith("ply"));\r
+               }\r
+           }\r
+\r
+}\r