git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@8146 75d07b2b-3a1a-0410-a2c5-0572b91ccdca3.0
parent
31e151fec1
commit
028f9d86f6
@ -0,0 +1,137 @@ |
||||
/* |
||||
* To change this template, choose Tools | Templates |
||||
* and open the template in the editor. |
||||
*/ |
||||
package com.jme3.gde.scenecomposer.tools; |
||||
|
||||
import com.jme3.asset.AssetManager; |
||||
import com.jme3.gde.core.sceneexplorer.nodes.JmeNode; |
||||
import com.jme3.gde.core.undoredo.AbstractUndoableSceneEdit; |
||||
import com.jme3.gde.scenecomposer.SceneComposerToolController; |
||||
import com.jme3.gde.scenecomposer.SceneEditTool; |
||||
import com.jme3.math.Vector2f; |
||||
import com.jme3.math.Vector3f; |
||||
import com.jme3.scene.Node; |
||||
import com.jme3.scene.Spatial; |
||||
import org.openide.loaders.DataObject; |
||||
|
||||
/** |
||||
* |
||||
* @author sploreg |
||||
*/ |
||||
public class ScaleTool extends SceneEditTool { |
||||
|
||||
private Vector3f pickedPlane; |
||||
private Vector2f lastScreenCoord; |
||||
private Vector3f startScale; |
||||
private Vector3f lastScale; |
||||
private boolean wasDragging = false; |
||||
|
||||
public ScaleTool() { |
||||
axisPickType = AxisMarkerPickType.axisAndPlane; |
||||
setOverrideCameraControl(true); |
||||
} |
||||
|
||||
@Override |
||||
public void activate(AssetManager manager, Node toolNode, Node onTopToolNode, Spatial selectedSpatial, SceneComposerToolController toolController) { |
||||
super.activate(manager, toolNode, onTopToolNode, selectedSpatial, toolController); |
||||
displayPlanes(); |
||||
} |
||||
|
||||
@Override |
||||
public void actionPrimary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) { |
||||
if (!pressed) { |
||||
setDefaultAxisMarkerColors(); |
||||
pickedPlane = null; // mouse released, reset selection
|
||||
lastScreenCoord = null; |
||||
if (wasDragging) { |
||||
actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startScale, lastScale)); |
||||
wasDragging = false; |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void actionSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject dataObject) { |
||||
|
||||
} |
||||
|
||||
@Override |
||||
public void mouseMoved(Vector2f screenCoord) { |
||||
if (pickedPlane == null) { |
||||
highlightAxisMarker(camera, screenCoord, axisPickType, true); |
||||
} |
||||
/*else { |
||||
pickedPlane = null; |
||||
lastScreenCoord = null; |
||||
}*/ |
||||
} |
||||
|
||||
@Override |
||||
public void draggedPrimary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) { |
||||
if (!pressed) { |
||||
setDefaultAxisMarkerColors(); |
||||
pickedPlane = null; // mouse released, reset selection
|
||||
lastScreenCoord = null; |
||||
|
||||
if (wasDragging) { |
||||
actionPerformed(new ScaleUndo(toolController.getSelectedSpatial(), startScale, lastScale)); |
||||
wasDragging = false; |
||||
} |
||||
return; |
||||
} |
||||
|
||||
if (toolController.getSelectedSpatial() == null) |
||||
return; |
||||
if (pickedPlane == null) { |
||||
pickedPlane = pickAxisMarker(camera, screenCoord, axisPickType); |
||||
if (pickedPlane == null) |
||||
return; |
||||
startScale = toolController.getSelectedSpatial().getLocalScale().clone(); |
||||
} |
||||
|
||||
if (lastScreenCoord == null) { |
||||
lastScreenCoord = screenCoord; |
||||
} else { |
||||
float diff = screenCoord.y-lastScreenCoord.y; |
||||
diff *= 0.1f; |
||||
lastScreenCoord = screenCoord; |
||||
Vector3f scale = toolController.getSelectedSpatial().getLocalScale().add(diff, diff, diff); |
||||
lastScale = scale; |
||||
toolController.getSelectedSpatial().setLocalScale(scale); |
||||
updateToolsTransformation(); |
||||
} |
||||
|
||||
wasDragging = true; |
||||
} |
||||
|
||||
@Override |
||||
public void draggedSecondary(Vector2f screenCoord, boolean pressed, JmeNode rootNode, DataObject currentDataObject) { |
||||
|
||||
} |
||||
|
||||
private class ScaleUndo extends AbstractUndoableSceneEdit { |
||||
|
||||
private Spatial spatial; |
||||
private Vector3f before,after; |
||||
|
||||
ScaleUndo(Spatial spatial, Vector3f before, Vector3f after) { |
||||
this.spatial = spatial; |
||||
this.before = before; |
||||
this.after = after; |
||||
} |
||||
|
||||
@Override |
||||
public void sceneUndo() { |
||||
spatial.setLocalScale(before); |
||||
toolController.selectedSpatialTransformed(); |
||||
} |
||||
|
||||
@Override |
||||
public void sceneRedo() { |
||||
spatial.setLocalScale(after); |
||||
toolController.selectedSpatialTransformed(); |
||||
} |
||||
|
||||
} |
||||
} |
Loading…
Reference in new issue