Package com.jme3.scene.plugins.blender.file

Examples of com.jme3.scene.plugins.blender.file.Pointer


    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();
        }
    }
View Full Code Here


     *             corrupted
     */
    public Constraint(Structure constraintStructure, Long ownerOMA, Ipo influenceIpo, BlenderContext blenderContext) throws BlenderFileException {
        this.blenderContext = blenderContext;
        name = constraintStructure.getFieldValue("name").toString();
        Pointer pData = (Pointer) constraintStructure.getFieldValue("data");
        if (pData.isNotNull()) {
            Structure data = pData.fetchData().get(0);
            constraintDefinition = ConstraintDefinitionFactory.createConstraintDefinition(data, ownerOMA, blenderContext);
            Pointer pTar = (Pointer) data.getFieldValue("tar");
            if (pTar != null && pTar.isNotNull()) {
                targetOMA = pTar.getOldMemoryAddress();
                targetSpace = Space.valueOf(((Number) constraintStructure.getFieldValue("tarspace")).byteValue());
                Object subtargetValue = data.getFieldValue("subtarget");
                if (subtargetValue != null) {// not all constraint data have the
                                             // subtarget field
                    subtargetName = subtargetValue.toString();
View Full Code Here

                    break;
                case 1:// FIXED LENGTH
                    modifierData.put("length", modifierStructure.getFieldValue("length"));
                    break;
                case 2:// FITCURVE
                    Pointer pCurveOb = (Pointer) modifierStructure.getFieldValue("curve_ob");
                    float length = 0;
                    if (pCurveOb.isNotNull()) {
                        Structure curveStructure = pCurveOb.fetchData().get(0);
                        ObjectHelper objectHelper = blenderContext.getHelper(ObjectHelper.class);
                        Node curveObject = (Node) objectHelper.toObject(curveStructure, blenderContext);
                        Set<Number> referencesToCurveLengths = new HashSet<Number>(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);
                                    }
                                }
                            }
                        }
                    }
                    modifierData.put("length", Float.valueOf(length));
                    modifierData.put("fittype", Integer.valueOf(1));// treat it like FIXED LENGTH
                    break;
                default:
                    assert false : "Unknown array modifier fit type: " + fittype;
            }

            // offset parameters
            int offsettype = ((Number) modifierStructure.getFieldValue("offset_type")).intValue();
            if ((offsettype & 0x01) != 0) {// Constant offset
                DynamicArray<Number> offsetArray = (DynamicArray<Number>) modifierStructure.getFieldValue("offset");
                float[] offset = new float[] { offsetArray.get(0).floatValue(), offsetArray.get(1).floatValue(), offsetArray.get(2).floatValue() };
                modifierData.put("offset", offset);
            }
            if ((offsettype & 0x02) != 0) {// Relative offset
                DynamicArray<Number> scaleArray = (DynamicArray<Number>) modifierStructure.getFieldValue("scale");
                float[] scale = new float[] { scaleArray.get(0).floatValue(), scaleArray.get(1).floatValue(), scaleArray.get(2).floatValue() };
                modifierData.put("scale", scale);
            }
            if ((offsettype & 0x04) != 0) {// Object offset
                Pointer pOffsetObject = (Pointer) modifierStructure.getFieldValue("offset_ob");
                if (pOffsetObject.isNotNull()) {
                    modifierData.put("offsetob", pOffsetObject);
                }
            }

            // start cap and end cap
            Pointer pStartCap = (Pointer) modifierStructure.getFieldValue("start_cap");
            if (pStartCap.isNotNull()) {
                modifierData.put("startcap", pStartCap);
            }
            Pointer pEndCap = (Pointer) modifierStructure.getFieldValue("end_cap");
            if (pEndCap.isNotNull()) {
                modifierData.put("endcap", pEndCap);
            }
        }
    }
View Full Code Here

                }
            }
   
            // adding object's offset
            float[] objectOffset = new float[] { 0.0f, 0.0f, 0.0f };
            Pointer pOffsetObject = (Pointer) modifierData.get("offsetob");
            if (pOffsetObject != null) {
                FileBlockHeader offsetObjectBlock = blenderContext.getFileBlock(pOffsetObject.getOldMemoryAddress());
                ObjectHelper objectHelper = blenderContext.getHelper(ObjectHelper.class);
                try {// we take the structure in case the object was not yet loaded
                    Structure offsetStructure = offsetObjectBlock.getStructure(blenderContext);
                    Vector3f translation = objectHelper.getTransformation(offsetStructure, blenderContext).getTranslation();
                    objectOffset[0] = translation.x;
                    objectOffset[1] = translation.y;
                    objectOffset[2] = translation.z;
                } catch (BlenderFileException e) {
                    LOGGER.log(Level.WARNING, "Problems in blender file structure! Object offset cannot be applied! The problem: {0}", e.getMessage());
                }
            }
   
            // getting start and end caps
            Node[] caps = new Node[] { null, null };
            Pointer[] pCaps = new Pointer[] { (Pointer) modifierData.get("startcap"), (Pointer) modifierData.get("endcap") };
            for (int i = 0; i < pCaps.length; ++i) {
                if (pCaps[i] != null) {
                    caps[i] = (Node) blenderContext.getLoadedFeature(pCaps[i].getOldMemoryAddress(), LoadedFeatureDataType.LOADED_FEATURE);
                    if (caps[i] != null) {
                        caps[i] = (Node) caps[i].clone();
                    } else {
                        FileBlockHeader capBlock = blenderContext.getFileBlock(pOffsetObject.getOldMemoryAddress());
                        try {// we take the structure in case the object was not yet loaded
                            Structure capStructure = capBlock.getStructure(blenderContext);
                            ObjectHelper objectHelper = blenderContext.getHelper(ObjectHelper.class);
                            caps[i] = (Node) objectHelper.toObject(capStructure, blenderContext);
                            if (caps[i] == null) {
View Full Code Here

        return !(ARMATURE_MODIFIER_DATA.equals(modifierType) || OBJECT_ANIMATION_MODIFIER_DATA.equals(modifierType));
    }

    protected boolean validate(Structure modifierStructure, BlenderContext blenderContext) {
        Structure modifierData = (Structure) modifierStructure.getFieldValue("modifier");
        Pointer pError = (Pointer) modifierData.getFieldValue("error");
        invalid = pError.isNotNull();
        return !invalid;
    }
View Full Code Here

     *             an exception is throw wneh there are problems with the
     *             blender file
     */
    public ParticlesModifier(Structure modifierStructure, BlenderContext blenderContext) throws BlenderFileException {
        if (this.validate(modifierStructure, blenderContext)) {
            Pointer pParticleSystem = (Pointer) modifierStructure.getFieldValue("psys");
            if (pParticleSystem.isNotNull()) {
                ParticlesHelper particlesHelper = blenderContext.getHelper(ParticlesHelper.class);
                Structure particleSystem = pParticleSystem.fetchData().get(0);
                particleEmitter = particlesHelper.toParticleEmitter(particleSystem);
            }
        }
    }
View Full Code Here

     *             corrupted
     */
    public ArmatureModifier(Structure objectStructure, Structure modifierStructure, BlenderContext blenderContext) throws BlenderFileException {
        Structure meshStructure = ((Pointer) objectStructure.getFieldValue("data")).fetchData().get(0);
        if (this.validate(modifierStructure, blenderContext)) {
            Pointer pArmatureObject = (Pointer) modifierStructure.getFieldValue("object");
            if (pArmatureObject.isNotNull()) {
                armatureObject = pArmatureObject.fetchData().get(0);

                // load skeleton
                Structure armatureStructure = ((Pointer) armatureObject.getFieldValue("data")).fetchData().get(0);
                List<Structure> bonebase = ((Structure) armatureStructure.getFieldValue("bonebase")).evaluateListBase();
                List<Bone> bonesList = new ArrayList<Bone>();
View Full Code Here

     *             this exception is thrown when the blend file structure is
     *             somehow invalid or corrupted
     */
    private VertexBuffer[] getBoneWeightAndIndexBuffer(Structure meshStructure, int vertexListSize, int[] bonesGroups, Map<Integer, List<Integer>> vertexReferenceMap, Map<Integer, Integer> groupToBoneIndexMap) throws BlenderFileException {
        bonesGroups[0] = 0;
        Pointer pDvert = (Pointer) meshStructure.getFieldValue("dvert");// dvert = DeformVERTices
        FloatBuffer weightsFloatData = BufferUtils.createFloatBuffer(vertexListSize * MAXIMUM_WEIGHTS_PER_VERTEX);
        ByteBuffer indicesData = BufferUtils.createByteBuffer(vertexListSize * MAXIMUM_WEIGHTS_PER_VERTEX);

        if (pDvert.isNotNull()) {// assigning weights and bone indices
            boolean warnAboutTooManyVertexWeights = false;
            // dverts.size() = verticesAmount (one dvert per vertex in blender)
            List<Structure> dverts = pDvert.fetchData();
            int vertexIndex = 0;
            // use tree map to sort weights from the lowest to the highest ones
            TreeMap<Float, Integer> weightToIndexMap = new TreeMap<Float, Integer>();

            for (Structure dvert : dverts) {
                // we fetch the referenced vertices here
                List<Integer> vertexIndices = vertexReferenceMap.get(Integer.valueOf(vertexIndex));
                if (vertexIndices != null) {
                    // total amount of wights assigned to the vertex (max. 4 in JME)
                    int totweight = ((Number) dvert.getFieldValue("totweight")).intValue();
                    Pointer pDW = (Pointer) dvert.getFieldValue("dw");
                    if (totweight > 0 && groupToBoneIndexMap != null) {
                        weightToIndexMap.clear();
                        int weightIndex = 0;
                        List<Structure> dw = pDW.fetchData();
                        for (Structure deformWeight : dw) {
                            Integer boneIndex = groupToBoneIndexMap.get(((Number) deformWeight.getFieldValue("def_nr")).intValue());
                            float weight = ((Number) deformWeight.getFieldValue("weight")).floatValue();
                            // boneIndex == null: it here means that we came
                            // accross group that has no bone attached to, so
View Full Code Here

            defaultMaterial.getAdditionalRenderState().setFaceCullMode(FaceCullMode.Off);
        }

        // getting or creating bevel object
        List<Geometry> bevelObject = null;
        Pointer pBevelObject = (Pointer) curveStructure.getFieldValue("bevobj");
        if (pBevelObject.isNotNull()) {
            Pointer pBevelStructure = (Pointer) pBevelObject.fetchData().get(0).getFieldValue("data");
            Structure bevelStructure = pBevelStructure.fetchData().get(0);
            bevelObject = this.toCurve(bevelStructure, blenderContext);
        } else {
            int bevResol = ((Number) curveStructure.getFieldValue("bevresol")).intValue();
            float extrude = ((Number) curveStructure.getFieldValue("ext1")).floatValue();
            float bevelDepth = ((Number) curveStructure.getFieldValue("ext2")).floatValue();
            if (bevelDepth > 0.0f) {
                float handlerLength = bevelDepth / 2.0f;

                List<Vector3f> conrtolPoints = new ArrayList<Vector3f>(extrude > 0.0f ? 19 : 13);
                if (extrude > 0.0f) {
                    conrtolPoints.add(new Vector3f(-bevelDepth, 0, extrude));
                    conrtolPoints.add(new Vector3f(-bevelDepth, 0, -handlerLength + extrude));
                    conrtolPoints.add(new Vector3f(-bevelDepth, 0, handlerLength - extrude));
                }

                conrtolPoints.add(new Vector3f(-bevelDepth, 0, -extrude));
                conrtolPoints.add(new Vector3f(-bevelDepth, 0, -handlerLength - extrude));

                conrtolPoints.add(new Vector3f(-handlerLength, 0, -bevelDepth - extrude));
                conrtolPoints.add(new Vector3f(0, 0, -bevelDepth - extrude));
                conrtolPoints.add(new Vector3f(handlerLength, 0, -bevelDepth - extrude));

                if (extrude > 0.0f) {
                    conrtolPoints.add(new Vector3f(bevelDepth, 0, -extrude - handlerLength));
                    conrtolPoints.add(new Vector3f(bevelDepth, 0, -extrude));
                    conrtolPoints.add(new Vector3f(bevelDepth, 0, -extrude + handlerLength));
                }

                conrtolPoints.add(new Vector3f(bevelDepth, 0, extrude - handlerLength));
                conrtolPoints.add(new Vector3f(bevelDepth, 0, extrude));
                conrtolPoints.add(new Vector3f(bevelDepth, 0, extrude + handlerLength));

                conrtolPoints.add(new Vector3f(handlerLength, 0, bevelDepth + extrude));
                conrtolPoints.add(new Vector3f(0, 0, bevelDepth + extrude));
                conrtolPoints.add(new Vector3f(-handlerLength, 0, bevelDepth + extrude));

                conrtolPoints.add(new Vector3f(-bevelDepth, 0, handlerLength + extrude));
                conrtolPoints.add(new Vector3f(-bevelDepth, 0, extrude));

                Spline bevelSpline = new Spline(SplineType.Bezier, conrtolPoints, 0, false);
                Curve bevelCurve = new Curve(bevelSpline, bevResol);
                bevelObject = new ArrayList<Geometry>(1);
                bevelObject.add(new Geometry("", bevelCurve));
            } else if (extrude > 0.0f) {
                Spline bevelSpline = new Spline(SplineType.Linear, new Vector3f[] { new Vector3f(0, 0, -extrude), new Vector3f(0, 0, extrude) }, 1, false);
                Curve bevelCurve = new Curve(bevelSpline, bevResol);
                bevelObject = new ArrayList<Geometry>(1);
                bevelObject.add(new Geometry("", bevelCurve));
            }
        }

        // getting taper object
        Spline taperObject = null;
        Pointer pTaperObject = (Pointer) curveStructure.getFieldValue("taperobj");
        if (bevelObject != null && pTaperObject.isNotNull()) {
            Pointer pTaperStructure = (Pointer) pTaperObject.fetchData().get(0).getFieldValue("data");
            Structure taperStructure = pTaperStructure.fetchData().get(0);
            taperObject = this.loadTaperObject(taperStructure);
        }

        Vector3f loc = this.getLoc(curveStructure);
        // creating the result curves
View Full Code Here

     * @return a list of geometries representing the curves
     * @throws BlenderFileException
     *             an exception is thrown when there are problems with the blender file
     */
    protected List<Geometry> loadBezierCurve(Vector3f loc, Structure nurb, List<Geometry> bevelObject, Spline taperObject, BlenderContext blenderContext) throws BlenderFileException {
        Pointer pBezierTriple = (Pointer) nurb.getFieldValue("bezt");
        List<Geometry> result = new ArrayList<Geometry>();
        if (pBezierTriple.isNotNull()) {
            boolean smooth = (((Number) nurb.getFlatFieldValue("flag")).intValue() & 0x01) != 0;
            int resolution = ((Number) nurb.getFieldValue("resolu")).intValue();
            boolean cyclic = (((Number) nurb.getFieldValue("flagu")).intValue() & 0x01) != 0;

            // creating the curve object
            BezierCurve bezierCurve = new BezierCurve(0, pBezierTriple.fetchData(), 3);
            List<Vector3f> controlPoints = bezierCurve.getControlPoints();
            if (fixUpAxis) {
                for (Vector3f v : controlPoints) {
                    float y = v.y;
                    v.y = v.z;
View Full Code Here

TOP

Related Classes of com.jme3.scene.plugins.blender.file.Pointer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.