Feature: added support for 'Maintain volume' constraint.
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@11068 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
dc045d9630
commit
eb0ee795a7
@ -52,6 +52,7 @@ public class ConstraintDefinitionFactory {
|
|||||||
CONSTRAINT_CLASSES.put("bSizeLimitConstraint", ConstraintDefinitionSizeLimit.class);
|
CONSTRAINT_CLASSES.put("bSizeLimitConstraint", ConstraintDefinitionSizeLimit.class);
|
||||||
CONSTRAINT_CLASSES.put("bKinematicConstraint", ConstraintDefinitionIK.class);
|
CONSTRAINT_CLASSES.put("bKinematicConstraint", ConstraintDefinitionIK.class);
|
||||||
CONSTRAINT_CLASSES.put("bTransLikeConstraint", ConstraintDefinitionTransLike.class);// since blender 2.51
|
CONSTRAINT_CLASSES.put("bTransLikeConstraint", ConstraintDefinitionTransLike.class);// since blender 2.51
|
||||||
|
CONSTRAINT_CLASSES.put("bSameVolumeConstraint", ConstraintDefinitionMaintainVolume.class);// since blender 2.53
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Map<String, String> UNSUPPORTED_CONSTRAINTS = new HashMap<String, String>();
|
private static final Map<String, String> UNSUPPORTED_CONSTRAINTS = new HashMap<String, String>();
|
||||||
@ -73,7 +74,6 @@ public class ConstraintDefinitionFactory {
|
|||||||
UNSUPPORTED_CONSTRAINTS.put("bPivotConstraint", "Pivot");
|
UNSUPPORTED_CONSTRAINTS.put("bPivotConstraint", "Pivot");
|
||||||
// Blender 2.56+
|
// Blender 2.56+
|
||||||
UNSUPPORTED_CONSTRAINTS.put("bTrackToConstraint", "Track to");
|
UNSUPPORTED_CONSTRAINTS.put("bTrackToConstraint", "Track to");
|
||||||
UNSUPPORTED_CONSTRAINTS.put("bSameVolumeConstraint", "Same volume");
|
|
||||||
// Blender 2.62+
|
// Blender 2.62+
|
||||||
UNSUPPORTED_CONSTRAINTS.put("bCameraSolverConstraint", "Camera solver");
|
UNSUPPORTED_CONSTRAINTS.put("bCameraSolverConstraint", "Camera solver");
|
||||||
UNSUPPORTED_CONSTRAINTS.put("bObjectSolverConstraint", "Object solver");
|
UNSUPPORTED_CONSTRAINTS.put("bObjectSolverConstraint", "Object solver");
|
||||||
|
@ -0,0 +1,45 @@
|
|||||||
|
package com.jme3.scene.plugins.blender.constraints.definitions;
|
||||||
|
|
||||||
|
import com.jme3.math.Transform;
|
||||||
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
|
public class ConstraintDefinitionMaintainVolume extends ConstraintDefinition {
|
||||||
|
private static final int FLAG_MASK_X = 0;
|
||||||
|
private static final int FLAG_MASK_Y = 1;
|
||||||
|
private static final int FLAG_MASK_Z = 2;
|
||||||
|
|
||||||
|
private float volume;
|
||||||
|
|
||||||
|
public ConstraintDefinitionMaintainVolume(Structure constraintData, Long ownerOMA, BlenderContext blenderContext) {
|
||||||
|
super(constraintData, ownerOMA, blenderContext);
|
||||||
|
volume = (float) Math.sqrt(((Number) constraintData.getFieldValue("volume")).floatValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
||||||
|
if (volume != 1 && influence > 0) {
|
||||||
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
|
switch (flag) {
|
||||||
|
case FLAG_MASK_X:
|
||||||
|
ownerTransform.getScale().multLocal(1, volume, volume);
|
||||||
|
break;
|
||||||
|
case FLAG_MASK_Y:
|
||||||
|
ownerTransform.getScale().multLocal(volume, 1, volume);
|
||||||
|
break;
|
||||||
|
case FLAG_MASK_Z:
|
||||||
|
ownerTransform.getScale().multLocal(volume, volume, 1);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalStateException("Unknown flag value: " + flag);
|
||||||
|
}
|
||||||
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getConstraintTypeName() {
|
||||||
|
return "Maintain volume";
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user