X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.proconf.g3d.shapeeditor%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fshapeeditor%2Factions%2FLoadFolderAction.java;fp=org.simantics.proconf.g3d.shapeeditor%2Fsrc%2Forg%2Fsimantics%2Fproconf%2Fg3d%2Fshapeeditor%2Factions%2FLoadFolderAction.java;h=2b7d49ec83953614d0532f5a9910fba2dd54a09f;hb=477a3eae417fe71addfcf8f87dab41f87151a384;hp=0000000000000000000000000000000000000000;hpb=d0db32bb067d2a7c323054295f6356bdb42078c9;p=simantics%2F3d.git 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 index 00000000..2b7d49ec --- /dev/null +++ b/org.simantics.proconf.g3d.shapeeditor/src/org/simantics/proconf/g3d/shapeeditor/actions/LoadFolderAction.java @@ -0,0 +1,100 @@ +/******************************************************************************* + * Copyright (c) 2007 VTT Technical Research Centre of Finland and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.proconf.g3d.shapeeditor.actions; + +import java.io.File; +import java.io.FilenameFilter; +import java.util.Stack; + +import org.eclipse.jface.action.Action; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.DirectoryDialog; +import org.simantics.proconf.g3d.base.ThreeDimensionalEditorBase; +import org.simantics.proconf.g3d.occ.geometry.OccTriangulator; + +import com.jme.bounding.BoundingBox; +import com.jme.renderer.ColorRGBA; +import com.jme.scene.Geometry; +import com.jme.scene.state.MaterialState; + + +public class LoadFolderAction extends Action { + private ThreeDimensionalEditorBase editor; + + public LoadFolderAction(ThreeDimensionalEditorBase editor) { + super("Load folder"); + this.editor = editor; + + } + + public void run() { + + DirectoryDialog loadDialog = new DirectoryDialog(editor.getRenderingComposite().getShell(), SWT.OPEN); + loadDialog.setText("Select directory"); + + String directory = loadDialog.open(); + if (directory != null) { + File file = new File(directory); + if (!file.isDirectory()) + return; + Stack directories = new Stack(); + directories.push(file); + boolean recursive = true; + while (!directories.empty()) { + File dir = directories.pop(); + + String[] files = dir.list(new PLYFilter()); + for (String filename : files) { + Geometry g = OccTriangulator.getGeometryFromFile(dir.getAbsolutePath() + "/" + filename)[0]; + MaterialState ms = editor.getRenderingComponent().getDisplaySystem().getRenderer().createMaterialState(); + ms.setAmbient(new ColorRGBA(0.f,0.f,0.f,0.f)); + ms.setEmissive(new ColorRGBA(0.f,0.f,0.f,0.f)); + ms.setShininess(128.f); + ms.setDiffuse(new ColorRGBA(0.8f,0.8f,0.8f,0.f)); + ms.setSpecular(new ColorRGBA(1.f,1.f,1.f,0.f)); + ms.setMaterialFace(MaterialState.MF_FRONT_AND_BACK); + if (g.getColorBuffer(0) != null) { + ms.setColorMaterial(MaterialState.CM_DIFFUSE); + } + g.setModelBound(new BoundingBox()); + g.updateModelBound(); + g.setRenderState(ms); + editor.getRenderingComponent().getShadowRoot().attachChild(g); + g.updateWorldBound(); + g.lock(); + + } + if (recursive) { + File[] newDirs = dir.listFiles(new DirectoryFilter()); + for (File d : newDirs) + directories.push(d); + } + } + + } + + + } + + protected class DirectoryFilter implements FilenameFilter { + public boolean accept(File dir, String name) { + File file = new File(dir.getAbsolutePath() + "/" + name); + return file.isDirectory(); + } + } + + protected class PLYFilter implements FilenameFilter { + public boolean accept(File dir, String name) { + return (name.endsWith("ply")); + } + } + +}