Bugfix: fixed a bug (that occured during work on IK) that caused NPE to be raised when constraint other than IK was applied to bone.
git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@10851 75d07b2b-3a1a-0410-a2c5-0572b91ccdca
This commit is contained in:
parent
1df0a0a17b
commit
2ccadb7a7a
@ -2,9 +2,11 @@ package com.jme3.scene.plugins.blender.constraints.definitions;
|
|||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.jme3.animation.Bone;
|
||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext.LoadedFeatureDataType;
|
import com.jme3.scene.plugins.blender.BlenderContext.LoadedFeatureDataType;
|
||||||
|
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper;
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
@ -67,6 +69,36 @@ public abstract class ConstraintDefinition {
|
|||||||
return owner;
|
return owner;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method gets the owner's transformation. The owner can be either bone or spatial.
|
||||||
|
* @param ownerSpace
|
||||||
|
* the space in which the computed transformation is given
|
||||||
|
* @return the constraint owner's transformation
|
||||||
|
*/
|
||||||
|
protected Transform getOwnerTransform(Space ownerSpace) {
|
||||||
|
if (this.getOwner() instanceof Bone) {
|
||||||
|
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
||||||
|
return constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
||||||
|
}
|
||||||
|
return constraintHelper.getTransform(ownerOMA, null, ownerSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method applies the given transformation to the owner.
|
||||||
|
* @param ownerTransform
|
||||||
|
* the transformation to apply to the owner
|
||||||
|
* @param ownerSpace
|
||||||
|
* the space that defines which owner's transformation (ie. global, local, etc. will be set)
|
||||||
|
*/
|
||||||
|
protected void applyOwnerTransform(Transform ownerTransform, Space ownerSpace) {
|
||||||
|
if (this.getOwner() instanceof Bone) {
|
||||||
|
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
||||||
|
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
||||||
|
} else {
|
||||||
|
constraintHelper.applyTransform(ownerOMA, null, ownerSpace, ownerTransform);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return <b>true</b> if the definition is implemented and <b>false</b>
|
* @return <b>true</b> if the definition is implemented and <b>false</b>
|
||||||
* otherwise
|
* otherwise
|
||||||
|
@ -4,7 +4,6 @@ import com.jme3.animation.Bone;
|
|||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -34,8 +33,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Vector3f v = ownerTransform.getTranslation().subtract(targetTransform.getTranslation());
|
Vector3f v = ownerTransform.getTranslation().subtract(targetTransform.getTranslation());
|
||||||
float currentDistance = v.length();
|
float currentDistance = v.length();
|
||||||
@ -67,7 +65,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
throw new IllegalStateException("Unknown distance limit constraint mode: " + mode);
|
throw new IllegalStateException("Unknown distance limit constraint mode: " + mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,7 +4,6 @@ import com.jme3.animation.Bone;
|
|||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -51,8 +50,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Vector3f ownerLocation = ownerTransform.getTranslation();
|
Vector3f ownerLocation = ownerTransform.getTranslation();
|
||||||
Vector3f targetLocation = targetTransform.getTranslation();
|
Vector3f targetLocation = targetTransform.getTranslation();
|
||||||
@ -89,7 +87,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
ownerLocation.addLocal(startLocation);
|
ownerLocation.addLocal(startLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -4,7 +4,6 @@ import com.jme3.animation.Bone;
|
|||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -61,8 +60,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Vector3f translation = ownerTransform.getTranslation();
|
Vector3f translation = ownerTransform.getTranslation();
|
||||||
|
|
||||||
@ -85,7 +83,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
translation.z -= (translation.z - limits[2][1]) * influence;
|
translation.z -= (translation.z - limits[2][1]) * influence;
|
||||||
}
|
}
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package com.jme3.scene.plugins.blender.constraints.definitions;
|
|||||||
import com.jme3.math.Quaternion;
|
import com.jme3.math.Quaternion;
|
||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -30,8 +29,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Quaternion ownerRotation = ownerTransform.getRotation();
|
Quaternion ownerRotation = ownerTransform.getRotation();
|
||||||
ownerAngles = ownerRotation.toAngles(ownerAngles);
|
ownerAngles = ownerRotation.toAngles(ownerAngles);
|
||||||
@ -70,7 +68,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package com.jme3.scene.plugins.blender.constraints.definitions;
|
|||||||
import com.jme3.math.FastMath;
|
import com.jme3.math.FastMath;
|
||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -70,8 +69,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
ownerTransform.getRotation().toAngles(angles);
|
ownerTransform.getRotation().toAngles(angles);
|
||||||
// make sure that the rotations are always in range [0, 2PI)
|
// make sure that the rotations are always in range [0, 2PI)
|
||||||
@ -111,7 +109,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
}
|
}
|
||||||
ownerTransform.getRotation().fromAngles(angles);
|
ownerTransform.getRotation().fromAngles(angles);
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package com.jme3.scene.plugins.blender.constraints.definitions;
|
|||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -33,8 +32,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Vector3f ownerScale = ownerTransform.getScale();
|
Vector3f ownerScale = ownerTransform.getScale();
|
||||||
Vector3f targetScale = targetTransform.getScale();
|
Vector3f targetScale = targetTransform.getScale();
|
||||||
@ -56,7 +54,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
}
|
}
|
||||||
ownerScale.addLocal(offset);
|
ownerScale.addLocal(offset);
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3,7 +3,6 @@ package com.jme3.scene.plugins.blender.constraints.definitions;
|
|||||||
import com.jme3.math.Transform;
|
import com.jme3.math.Transform;
|
||||||
import com.jme3.math.Vector3f;
|
import com.jme3.math.Vector3f;
|
||||||
import com.jme3.scene.plugins.blender.BlenderContext;
|
import com.jme3.scene.plugins.blender.BlenderContext;
|
||||||
import com.jme3.scene.plugins.blender.animations.BoneContext;
|
|
||||||
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
import com.jme3.scene.plugins.blender.constraints.ConstraintHelper.Space;
|
||||||
import com.jme3.scene.plugins.blender.file.Structure;
|
import com.jme3.scene.plugins.blender.file.Structure;
|
||||||
|
|
||||||
@ -55,8 +54,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) {
|
||||||
BoneContext boneContext = blenderContext.getBoneContext(ownerOMA);
|
Transform ownerTransform = this.getOwnerTransform(ownerSpace);
|
||||||
Transform ownerTransform = constraintHelper.getTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace);
|
|
||||||
|
|
||||||
Vector3f scale = ownerTransform.getScale();
|
Vector3f scale = ownerTransform.getScale();
|
||||||
if ((flag & LIMIT_XMIN) != 0 && scale.x < limits[0][0]) {
|
if ((flag & LIMIT_XMIN) != 0 && scale.x < limits[0][0]) {
|
||||||
@ -78,7 +76,7 @@ import com.jme3.scene.plugins.blender.file.Structure;
|
|||||||
scale.z -= (scale.z - limits[2][1]) * influence;
|
scale.z -= (scale.z - limits[2][1]) * influence;
|
||||||
}
|
}
|
||||||
|
|
||||||
constraintHelper.applyTransform(boneContext.getArmatureObjectOMA(), boneContext.getBone().getName(), ownerSpace, ownerTransform);
|
this.applyOwnerTransform(ownerTransform, ownerSpace);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user