Ver código fonte

SDK
- add FBX support via blender to SDK importer/converter

git-svn-id: https://jmonkeyengine.googlecode.com/svn/trunk@11037 75d07b2b-3a1a-0410-a2c5-0572b91ccdca

nor..67 11 anos atrás
pai
commit
f6fada23a4

+ 48 - 49
jme3-blender/src/com/jme3/gde/blender/filetypes/Blender3dsDataObject.java

@@ -4,7 +4,6 @@
  */
 package com.jme3.gde.blender.filetypes;
 
-import com.jme3.gde.core.assets.SpatialAssetDataObject;
 import java.io.IOException;
 import org.openide.awt.ActionID;
 import org.openide.awt.ActionReference;
@@ -20,65 +19,65 @@ import org.openide.util.NbBundle.Messages;
     "LBL_Blender3ds_LOADER=3DS Files (via Blender)"
 })
 @MIMEResolver.ExtensionRegistration(
-    displayName = "#LBL_Blender3ds_LOADER",
-mimeType = "application/x-3ds",
-extension = {"3ds", "3DS"})
+        displayName = "#LBL_Blender3ds_LOADER",
+        mimeType = "application/x-3ds",
+        extension = {"3ds", "3DS"})
 @DataObject.Registration(
-    mimeType = "application/x-3ds",
-iconBase = "com/jme3/gde/blender/blender.png",
-displayName = "#LBL_Blender3ds_LOADER",
-position = 300)
+        mimeType = "application/x-3ds",
+        iconBase = "com/jme3/gde/blender/blender.png",
+        displayName = "#LBL_Blender3ds_LOADER",
+        position = 300)
 @ActionReferences({
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
-    position = 100,
-    separatorAfter = 200),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
+            position = 100,
+            separatorAfter = 200),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
-    position = 300),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
+            position = 300),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
-    position = 400,
-    separatorAfter = 500),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
+            position = 400,
+            separatorAfter = 500),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
-    position = 600),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
+            position = 600),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
-    position = 700,
-    separatorAfter = 800),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
+            position = 700,
+            separatorAfter = 800),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
-    position = 900,
-    separatorAfter = 1000),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
+            position = 900,
+            separatorAfter = 1000),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
-    position = 1100,
-    separatorAfter = 1200),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
+            position = 1100,
+            separatorAfter = 1200),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
-    position = 1300),
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
+            position = 1300),
     @ActionReference(
-        path = "Loaders/application/x-3ds/Actions",
-    id =
-    @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
-    position = 1400)
+            path = "Loaders/application/x-3ds/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
+            position = 1400)
 })
 public class Blender3dsDataObject extends AbstractBlenderImportDataObject {
 

+ 93 - 0
jme3-blender/src/com/jme3/gde/blender/filetypes/BlenderFbxDataObject.java

@@ -0,0 +1,93 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package com.jme3.gde.blender.filetypes;
+
+import java.io.IOException;
+import org.openide.awt.ActionID;
+import org.openide.awt.ActionReference;
+import org.openide.awt.ActionReferences;
+import org.openide.filesystems.FileObject;
+import org.openide.filesystems.MIMEResolver;
+import org.openide.loaders.DataObject;
+import org.openide.loaders.DataObjectExistsException;
+import org.openide.loaders.MultiFileLoader;
+import org.openide.util.NbBundle.Messages;
+
+@Messages({
+    "LBL_BlenderFbx_LOADER=Files of BlenderFbx"
+})
[email protected](
+        displayName = "#LBL_BlenderFbx_LOADER",
+        mimeType = "application/fbx",
+        extension = {"fbx"})
[email protected](
+        mimeType = "application/fbx",
+        iconBase = "com/jme3/gde/blender/blender.png",
+        displayName = "#LBL_BlenderFbx_LOADER",
+        position = 300)
+@ActionReferences({
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.OpenAction"),
+            position = 100,
+            separatorAfter = 200),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.CutAction"),
+            position = 300),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.CopyAction"),
+            position = 400,
+            separatorAfter = 500),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "Edit", id = "org.openide.actions.DeleteAction"),
+            position = 600),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.RenameAction"),
+            position = 700,
+            separatorAfter = 800),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.SaveAsTemplateAction"),
+            position = 900,
+            separatorAfter = 1000),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.FileSystemAction"),
+            position = 1100,
+            separatorAfter = 1200),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.ToolsAction"),
+            position = 1300),
+    @ActionReference(
+            path = "Loaders/application/fbx/Actions",
+            id =
+            @ActionID(category = "System", id = "org.openide.actions.PropertiesAction"),
+            position = 1400)
+})
+public class BlenderFbxDataObject extends AbstractBlenderImportDataObject {
+
+    public BlenderFbxDataObject(FileObject pf, MultiFileLoader loader) throws DataObjectExistsException, IOException {
+        super(pf, loader);
+        SUFFIX = "3ds";
+//        registerEditor("application/fbx", false);
+    }
+//    @Override
+//    protected int associateLookup() {
+//        return 1;
+//    }
+}

+ 1 - 0
jme3-blender/src/com/jme3/gde/blender/scripts/Scripts.java

@@ -30,6 +30,7 @@ public class Scripts {
         }
         checkScript(folder, "import_3ds.py");
         checkScript(folder, "import_dae.py");
+        checkScript(folder, "import_fbx.py");
     }
 
     private static void checkScript(FileObject folder, String name) {

+ 83 - 0
jme3-blender/src/com/jme3/gde/blender/scripts/import_fbx.py

@@ -0,0 +1,83 @@
+# This script invokes blender to import and save external model formats as
+# .blend files to be processed further.
+#
+# Example usage for this importer:
+#  blender --background --factory-startup --python $HOME/import_3ds.py -- \
+#          --i="/tmp/hello.3ds" \
+#          --o="/tmp/hello.blend" \
+#
+# See blender --help for details.
+
+import bpy
+
+# Imports a file using importer
+def import_file(file_path):
+    # Import the model
+    bpy.ops.import_scene.fbx(filepath = file_path)
+
+# Clear existing objects.
+def clear_scene():
+    scene = bpy.context.scene
+    scene.camera = None
+    for obj in scene.objects:
+        scene.objects.unlink(obj)
+
+# Save current scene as .blend file
+def save_file(save_path):
+    # Check if output file exists already
+    try:
+        f = open(save_path, 'w')
+        f.close()
+        ok = True
+    except:
+        print("Cannot save to path %r" % save_path)
+
+        import traceback
+        traceback.print_exc()
+
+    # Save .blend file
+    if ok:
+        bpy.ops.wm.save_as_mainfile(filepath=save_path)
+
+def main():
+    import sys       # to get command line args
+    import argparse  # to parse options for us and print a nice help message
+
+    # get the args passed to blender after "--", all of which are ignored by
+    # blender so scripts may receive their own arguments
+    argv = sys.argv
+
+    if "--" not in argv:
+        argv = []  # as if no args are passed
+    else:
+        argv = argv[argv.index("--") + 1:]  # get all args after "--"
+
+    # When --help or no args are given, print this help
+    usage_text = \
+    "Run blender in background mode with this script:"
+    "  blender --background --factory-startup --python " + __file__ + " -- [options]"
+
+    parser = argparse.ArgumentParser(description=usage_text)
+
+    # Possible types are: string, int, long, choice, float and complex.
+    parser.add_argument("-i", "--input", dest="file_path", metavar='FILE',
+            help="Import the specified file")
+    parser.add_argument("-o", "--output", dest="save_path", metavar='FILE',
+            help="Save the generated file to the specified path")
+
+    args = parser.parse_args(argv)  # In this example we wont use the args
+
+    if not argv:
+        parser.print_help()
+        return
+
+    # Run the conversion
+    clear_scene()
+    import_file(args.file_path)
+    save_file(args.save_path)
+
+    print("batch job finished, exiting")
+
+
+if __name__ == "__main__":
+    main()