- Add Atlas Batch command
- Add undo to geometry batching

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10088 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
3.0
nor..67 12 years ago
parent 3d38b634d5
commit bcedc37037
  1. 104
      sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/AtlasBatchGeometry.java
  2. 40
      sdk/jme3-core/src/com/jme3/gde/core/sceneexplorer/nodes/actions/impl/OptimizeGeometry.java

@ -0,0 +1,104 @@
/*
* Copyright (c) 2009-2010 jMonkeyEngine
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'jMonkeyEngine' nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.jme3.gde.core.sceneexplorer.nodes.actions.impl;
import com.jme3.asset.AssetManager;
import com.jme3.gde.core.assets.ProjectAssetManager;
import com.jme3.gde.core.sceneexplorer.nodes.AbstractSceneExplorerNode;
import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractToolAction;
import com.jme3.gde.core.sceneexplorer.nodes.actions.ToolAction;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import jme3tools.optimize.TextureAtlas;
/**
*
* @author normenhansen
*/
@org.openide.util.lookup.ServiceProvider(service = ToolAction.class)
public class AtlasBatchGeometry extends AbstractToolAction {
private class OldNew {
public OldNew(Spatial newSpat, List<Spatial> oldChildren) {
this.newSpat = newSpat;
this.oldChildren = oldChildren;
}
Spatial newSpat;
List<Spatial> oldChildren;
}
public AtlasBatchGeometry() {
name = "Batch Geometry with TextureAtlas";
}
@Override
protected Object doApplyTool(AbstractSceneExplorerNode rootNode) {
Node parent = rootNode.getLookup().lookup(Node.class);
AssetManager mgr = rootNode.getLookup().lookup(ProjectAssetManager.class);
if (parent == null || mgr == null) {
return null;
}
Geometry batch = TextureAtlas.makeAtlasBatch(parent, mgr, 4096);
batch.setName(parent.getName() + " - batched");
List<Spatial> currentChildren = new ArrayList<Spatial>();
if (parent != null && batch != null) {
currentChildren.addAll(parent.getChildren());
parent.detachAllChildren();
parent.attachChild(batch);
}
return new OldNew(batch, currentChildren);
}
@Override
protected void doUndoTool(AbstractSceneExplorerNode rootNode, Object undoObject) {
Node parent = rootNode.getLookup().lookup(Node.class);
OldNew undo = (OldNew) undoObject;
if (parent == null || undo == null) {
return;
}
parent.detachChild(undo.newSpat);
for (Iterator<Spatial> it = undo.oldChildren.iterator(); it.hasNext();) {
Spatial spatial = it.next();
parent.attachChild(spatial);
}
}
public Class<?> getNodeClass() {
return JmeNode.class;
}
}

@ -36,6 +36,10 @@ import com.jme3.gde.core.sceneexplorer.nodes.JmeNode;
import com.jme3.gde.core.sceneexplorer.nodes.actions.AbstractToolAction;
import com.jme3.gde.core.sceneexplorer.nodes.actions.ToolAction;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import jme3tools.optimize.GeometryBatchFactory;
/**
@ -45,25 +49,49 @@ import jme3tools.optimize.GeometryBatchFactory;
@org.openide.util.lookup.ServiceProvider(service = ToolAction.class)
public class OptimizeGeometry extends AbstractToolAction {
private class OldNew {
public OldNew(List<Spatial> newChildren, List<Spatial> oldChildren) {
this.newChildren = newChildren;
this.oldChildren = oldChildren;
}
List<Spatial> newChildren;
List<Spatial> oldChildren;
}
public OptimizeGeometry() {
name = "Batch Geometry";
}
@Override
protected Object doApplyTool(AbstractSceneExplorerNode rootNode) {
Node geom = rootNode.getLookup().lookup(Node.class);
GeometryBatchFactory.optimize(geom);
return geom;
Node node = rootNode.getLookup().lookup(Node.class);
List<Spatial> currentChildren = new ArrayList<Spatial>();
currentChildren.addAll(node.getChildren());
GeometryBatchFactory.optimize(node);
List<Spatial> newChildren = new ArrayList<Spatial>();
newChildren.addAll(node.getChildren());
return new OldNew(newChildren, currentChildren);
}
@Override
protected void doUndoTool(AbstractSceneExplorerNode rootNode, Object undoObject) {
// Spatial geom = rootNode.getLookup().lookup(Spatial.class);
// geom.removeFromParent();
Node parent = rootNode.getLookup().lookup(Node.class);
OldNew undo = (OldNew) undoObject;
if (parent == null || undo == null) {
return;
}
for (Iterator<Spatial> it = undo.newChildren.iterator(); it.hasNext();) {
Spatial spatial = it.next();
spatial.removeFromParent();
}
for (Iterator<Spatial> it = undo.oldChildren.iterator(); it.hasNext();) {
Spatial spatial = it.next();
parent.attachChild(spatial);
}
}
public Class<?> getNodeClass() {
return JmeNode.class;
}
}

Loading…
Cancel
Save