-/*******************************************************************************\r
- * Copyright (c) 2007- VTT Technical Research Centre of Finland.\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