Jbin doesn't get saved

Loading the model works fine

But no jbin file is created!

Any suggestion? Thanks




package game.bin.obj;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.logging.Logger;

import com.jme.image.Texture;
import com.jme.math.FastMath;
import com.jme.math.Quaternion;
import com.jme.math.Vector3f;
import com.jme.scene.Node;
import com.jme.system.DisplaySystem;
import com.jme.util.export.Savable;
import com.jme.util.export.binary.BinaryExporter;
import com.jme.util.export.binary.BinaryImporter;
import com.jme.util.resource.ResourceLocatorTool;
import com.jmex.model.converters.AseToJme;
import com.jmex.model.converters.FormatConverter;
import com.jmex.model.converters.MaxToJme;
import com.jmex.model.converters.Md2ToJme;
import com.jmex.model.converters.Md3ToJme;
import com.jmex.model.converters.MilkToJme;
import com.jmex.model.converters.ObjToJme;

public class Mesh extends Node{
   
   private static final Logger logger = Logger.getLogger(Mesh.class.getName());
   private DisplaySystem display = DisplaySystem.getDisplaySystem();
   
   
   public Mesh(String name){
      super(name);
      logger.info("Mesh " + name + " created.");
   }

   Texture baseMap;
   Texture normalMap;
   Texture specMap;
   
   public void addModel(String model_path, String model_name){
      logger.info("Add Mesh " + model_name + " to " + name);
      Node loaded_model = new Node(model_name);
      FormatConverter   formatConverter = null;      
        ByteArrayOutputStream BO = new ByteArrayOutputStream();
       
       
        String modelFormat = model_path.substring(model_path.lastIndexOf(".") + 1, model_path.length());
        String modelBinary = model_path.substring(0, model_path.lastIndexOf(".") + 1) + "jbin";
       
        URL model_url = ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_MODEL, model_path);
        URL model_url_jbin = ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_MODEL, modelBinary);
       
        if (model_url_jbin == null){
           logger.info("Create jbin Format" + " (Node_" + name + " - Child_" + model_name + ")");
            //evaluate the format
            if (modelFormat.equals("3ds") || modelFormat.equals("3DS")){
                    formatConverter = new MaxToJme();
            } else if (modelFormat.equals("md2")){
                    formatConverter = new Md2ToJme();
            } else if (modelFormat.equals("md3")){
                    formatConverter = new Md3ToJme();
            } else if (modelFormat.equals("ms3d")){
                    formatConverter = new MilkToJme();
            } else if (modelFormat.equals("ase")){
                    formatConverter = new AseToJme();
            } else if (modelFormat.equals("obj")){
                    formatConverter = new ObjToJme();
            }
            formatConverter.setProperty("mtllib", model_url);

            try {
                    formatConverter.convert(model_url.openStream(), BO);
                    loaded_model = (Node) BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray()));

                    //save the jbin format
                    BinaryExporter.getInstance().save((Savable)loaded_model, new File(modelBinary));
            } catch (IOException e) {            
                    e.printStackTrace();
                   
            }
           
        }
       
        else{
           logger.info("Found jbin Format" + " (Node_" + name + " - Child_" + model_name + ")");
           try {
              //load the jbin format
            loaded_model = (Node) BinaryImporter.getInstance().load(model_url.openStream());
                 //load the jbin format
                    //loadedModel = (Node) BinaryImporter.getInstance().load(modelURL.openStream());
                    //loaded_model =(Node)BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray()));
            } catch (IOException e) {
                   
            }
       }
       Quaternion temp = new Quaternion();
       temp.fromAngleAxis(FastMath.PI / 2, new Vector3f(-1, 0, 0));
       loaded_model.setLocalRotation(temp);
       loaded_model.setLocalTranslation(new Vector3f(0.0f,0.0f,0.0f));
      
       this.attachChild(loaded_model);
       logger.info("Child_" + model_name + " has been added to Node_" + name);
   }
}

if you load the existing jbin file, you load model_url instead model_url_jbin.



Also you could print oit the patch of the newly created file, to see where it has been saved to new File(modelBinary)

You need to add "game/data/" as resource folders.

Then look up resources just by its name.



        try {
            ResourceLocatorTool.addResourceLocator(
                    ResourceLocatorTool.TYPE_TEXTURE,new SimpleResourceLocator(
                            Test.class.getClassLoader().getResource("game/data/")));
            ResourceLocatorTool.addResourceLocator(
                    ResourceLocatorTool.TYPE_MODEL,new SimpleResourceLocator(
                            Test.class.getClassLoader().getResource("game/data/")));
        } catch (URISyntaxException e1) {
            e1.printStackTrace();
        }



URL model_url = ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_MODEL, "yourmodel.obj");