From e0188e7a133d4c3178df0b9e3a93d1fea68c4060 Mon Sep 17 00:00:00 2001 From: "Kae..pl" Date: Mon, 20 Jun 2011 22:56:25 +0000 Subject: [PATCH] Support for 'Fit curve' mode in array modifier added. (also several small fixes to array modifier added) git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@7680 75d07b2b-3a1a-0410-a2c5-0572b91ccdca --- .../blender/helpers/v249/CurvesHelper.java | 2 + .../blender/helpers/v249/ModifierHelper.java | 36 +++++++++++++++--- .../test-data/Blender/2.4x/modifiers.blend | Bin 239520 -> 315916 bytes 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/CurvesHelper.java b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/CurvesHelper.java index 8e3662ef6..6733baf43 100644 --- a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/CurvesHelper.java +++ b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/CurvesHelper.java @@ -536,12 +536,14 @@ public class CurvesHelper extends AbstractBlenderHelper { } List result = new ArrayList(vertexBuffers.length); + Float oneReferenceToCurveLength = new Float(curveLength);//its important for array modifier to use one reference here for (int i = 0; i < vertexBuffers.length; ++i) { Mesh mesh = new Mesh(); mesh.setBuffer(Type.Position, 3, vertexBuffers[i]); mesh.setBuffer(Type.Index, 3, indexBuffers[i]); mesh.setBuffer(Type.Normal, 3, normalBuffers[i]); Geometry g = new Geometry("g" + i, mesh); + g.setUserData("curveLength", oneReferenceToCurveLength); g.updateModelBound(); result.add(g); } diff --git a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java index c63d6c2d9..7ac6c1e29 100644 --- a/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java +++ b/engine/src/blender/com/jme3/scene/plugins/blender/helpers/v249/ModifierHelper.java @@ -35,6 +35,7 @@ import java.nio.FloatBuffer; import java.nio.ShortBuffer; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -74,6 +75,7 @@ import com.jme3.scene.plugins.blender.utils.DataRepository.LoadedFeatureDataType import com.jme3.scene.plugins.blender.utils.DynamicArray; import com.jme3.scene.plugins.blender.utils.Pointer; import com.jme3.scene.plugins.ogre.AnimData; +import com.jme3.scene.shape.Curve; /** * A class that is used in modifiers calculations. @@ -149,7 +151,32 @@ public class ModifierHelper extends AbstractBlenderHelper { params.put("length", modifier.getFieldValue("length")); break; case 2:// FITCURVE - // TODO: implement after loading curves is added; warning will be generated during modifier applying + Pointer pCurveOb = (Pointer) modifier.getFieldValue("curve_ob"); + float length = 0; + if(pCurveOb.isNotNull()) { + Structure curveStructure = pCurveOb.fetchData(dataRepository.getInputStream()).get(0); + ObjectHelper objectHelper = dataRepository.getHelper(ObjectHelper.class); + Node curveObject = (Node)objectHelper.toObject(curveStructure, dataRepository); + Set referencesToCurveLengths = new HashSet(curveObject.getChildren().size()); + for(Spatial spatial : curveObject.getChildren()) { + if(spatial instanceof Geometry) { + Mesh mesh = ((Geometry) spatial).getMesh(); + if(mesh instanceof Curve) { + length += ((Curve) mesh).getLength(); + } else { + //if bevel object has several parts then each mesh will have the same reference + //to length value (and we should use only one) + Number curveLength = spatial.getUserData("curveLength"); + if(curveLength!=null && !referencesToCurveLengths.contains(curveLength)) { + length += curveLength.floatValue(); + referencesToCurveLengths.add(curveLength); + } + } + } + } + } + params.put("length", Float.valueOf(length)); + params.put("fittype", Integer.valueOf(1));// treat it like FIXED LENGTH break; default: assert false : "Unknown array modifier fit type: " + fittype; @@ -184,8 +211,7 @@ public class ModifierHelper extends AbstractBlenderHelper { params.put("endcap", pEndCap); } loadedModifier = params; - } - if (Modifier.MIRROR_MODIFIER_DATA.equals(modifier.getType())) {// ****************MIRROR MODIFIER + } else if (Modifier.MIRROR_MODIFIER_DATA.equals(modifier.getType())) {// ****************MIRROR MODIFIER Map params = new HashMap(); params.put("flag", modifier.getFieldValue("flag")); @@ -471,7 +497,7 @@ public class ModifierHelper extends AbstractBlenderHelper { count = (int) (length / translationVector.length()) - 1; } } else if (fittype == 2) {// Fit curve - LOGGER.warning("Fit curve mode in array modifier not yet implemented!");// TODO: implement fit curve + throw new IllegalStateException("Fit curve should be transformed to Fixed Length array type!"); } else { throw new IllegalStateException("Unknown fit type: " + fittype); } @@ -479,7 +505,7 @@ public class ModifierHelper extends AbstractBlenderHelper { // adding translated nodes and caps if (count > 0) { Node[] arrayNodes = new Node[count]; - Vector3f newTranslation = node.getLocalTranslation().clone(); + Vector3f newTranslation = new Vector3f(); for (int i = 0; i < count; ++i) { newTranslation.addLocal(translationVector); Node nodeClone = (Node) node.clone(); diff --git a/engine/src/test-data/Blender/2.4x/modifiers.blend b/engine/src/test-data/Blender/2.4x/modifiers.blend index 0f1269cecac879acc7fd6f9c00399172a9d43e85..d722d851fcd4b19ea33c494ef7e5de1d21ec6e46 100644 GIT binary patch delta 50833 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 z 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 c