git-svn-id: https://jmonkeyengine.googlecode.com/svn/branches/gradle-restructure@11006 75d07b2b-3a1a-0410-a2c5-0572b91ccdcaexperimental
parent
595dc4cd8a
commit
3284164a25
@ -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