git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@11006 75d07b2b-3a1a-0410-a2c5-0572b91ccdcaexperimental
parent
5ac87508d6
commit
f50cf31f05
@ -0,0 +1,73 @@ |
|||||||
|
package com.jme3.scene.plugins.blender.constraints.definitions; |
||||||
|
|
||||||
|
import com.jme3.animation.Bone; |
||||||
|
import com.jme3.animation.Skeleton; |
||||||
|
import com.jme3.math.Matrix4f; |
||||||
|
import com.jme3.math.Transform; |
||||||
|
import com.jme3.scene.plugins.blender.BlenderContext; |
||||||
|
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.Space; |
||||||
|
import com.jme3.scene.plugins.blender.file.Pointer; |
||||||
|
import com.jme3.scene.plugins.blender.file.Structure; |
||||||
|
import com.jme3.scene.plugins.blender.objects.ObjectHelper; |
||||||
|
import com.jme3.util.TempVars; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class represents 'Trans like' constraint type in blender. |
||||||
|
* |
||||||
|
* @author Marcin Roguski (Kaelthas) |
||||||
|
*/ |
||||||
|
public class ConstraintDefinitionTransLike extends ConstraintDefinition { |
||||||
|
private Long targetOMA; |
||||||
|
private String subtargetName; |
||||||
|
|
||||||
|
public ConstraintDefinitionTransLike(Structure constraintData, Long ownerOMA, BlenderContext blenderContext) { |
||||||
|
super(constraintData, ownerOMA, blenderContext); |
||||||
|
Pointer pTarget = (Pointer) constraintData.getFieldValue("tar"); |
||||||
|
targetOMA = pTarget.getOldMemoryAddress(); |
||||||
|
Object subtarget = constraintData.getFieldValue("subtarget"); |
||||||
|
if (subtarget != null) { |
||||||
|
subtargetName = subtarget.toString(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void bake(Space ownerSpace, Space targetSpace, Transform targetTransform, float influence) { |
||||||
|
Object target = this.getTarget();// Bone or Node
|
||||||
|
Object owner = this.getOwner();// Bone or Node
|
||||||
|
if (!target.getClass().equals(owner.getClass())) { |
||||||
|
ConstraintHelper constraintHelper = blenderContext.getHelper(ConstraintHelper.class); |
||||||
|
|
||||||
|
TempVars tempVars = TempVars.get(); |
||||||
|
Matrix4f m = constraintHelper.toMatrix(targetTransform, tempVars.tempMat4); |
||||||
|
tempVars.tempMat42.set(BoneContext.BONE_ARMATURE_TRANSFORMATION_MATRIX); |
||||||
|
if (target instanceof Bone) { |
||||||
|
tempVars.tempMat42.invertLocal(); |
||||||
|
} |
||||||
|
m = m.multLocal(tempVars.tempMat42); |
||||||
|
tempVars.release(); |
||||||
|
|
||||||
|
targetTransform = new Transform(m.toTranslationVector(), m.toRotationQuat(), m.toScaleVector()); |
||||||
|
} |
||||||
|
this.applyOwnerTransform(targetTransform, ownerSpace); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* @return the target feature; it is either Node or Bone (vertex group subtarger is not yet supported) |
||||||
|
*/ |
||||||
|
private Object getTarget() { |
||||||
|
Object target = blenderContext.getLoadedFeature(targetOMA, LoadedFeatureDataType.LOADED_FEATURE); |
||||||
|
if (subtargetName != null && blenderContext.getMarkerValue(ObjectHelper.ARMATURE_NODE_MARKER, target) != null) { |
||||||
|
Skeleton skeleton = blenderContext.getSkeleton(targetOMA); |
||||||
|
target = skeleton.getBone(subtargetName); |
||||||
|
} |
||||||
|
return target; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public String getConstraintTypeName() { |
||||||
|
return "Copy transforms"; |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue