|
@@ -1,7 +1,7 @@
|
|
bl_info = {
|
|
bl_info = {
|
|
"name": "Babylon.js",
|
|
"name": "Babylon.js",
|
|
"author": "David Catuhe",
|
|
"author": "David Catuhe",
|
|
- "version": (1, 3),
|
|
|
|
|
|
+ "version": (1, 4),
|
|
"blender": (2, 69, 0),
|
|
"blender": (2, 69, 0),
|
|
"location": "File > Export > Babylon.js (.babylon)",
|
|
"location": "File > Export > Babylon.js (.babylon)",
|
|
"description": "Export Babylon.js scenes (.babylon)",
|
|
"description": "Export Babylon.js scenes (.babylon)",
|
|
@@ -47,11 +47,25 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
filepath = ""
|
|
filepath = ""
|
|
|
|
|
|
materialsNameSpace = None
|
|
materialsNameSpace = None
|
|
|
|
+
|
|
|
|
+ export_onlyCurrentLayer = BoolProperty(
|
|
|
|
+ name="Export only current layer",
|
|
|
|
+ description="Export only current layer",
|
|
|
|
+ default=False,
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ def draw(self, context):
|
|
|
|
+ layout = self.layout
|
|
|
|
+
|
|
|
|
+ row = layout.row()
|
|
|
|
+ row.prop(self, "export_onlyCurrentLayer")
|
|
|
|
|
|
# global_scale = FloatProperty(name="Scale", min=0.01, max=1000.0, default=1.0)
|
|
# global_scale = FloatProperty(name="Scale", min=0.01, max=1000.0, default=1.0)
|
|
|
|
|
|
- def execute(self, context):
|
|
|
|
- return Export_babylon.save(self, context, **self.as_keywords(ignore=("check_existing", "filter_glob", "global_scale")))
|
|
|
|
|
|
+ def execute(self, context):
|
|
|
|
+ keywords = self.as_keywords(ignore=("check_existing", "filter_glob"))
|
|
|
|
+
|
|
|
|
+ return Export_babylon.save(self, context, **keywords)
|
|
|
|
|
|
def mesh_triangulate(mesh):
|
|
def mesh_triangulate(mesh):
|
|
try:
|
|
try:
|
|
@@ -902,10 +916,10 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
file_handler.write("}")
|
|
file_handler.write("}")
|
|
bpy.context.scene.frame_set(start_frame)
|
|
bpy.context.scene.frame_set(start_frame)
|
|
|
|
|
|
- def save(operator, context, filepath="",
|
|
|
|
- use_apply_modifiers=False,
|
|
|
|
- use_triangulate=True,
|
|
|
|
- use_compress=False):
|
|
|
|
|
|
+ def isInSelectedLayer(obj, scene, export_onlyCurrentLayer):
|
|
|
|
+ return not export_onlyCurrentLayer or obj.layers[scene.active_layer]
|
|
|
|
+
|
|
|
|
+ def save(operator, context, filepath="", export_onlyCurrentLayer=False):
|
|
|
|
|
|
# assign materialsNameSpace, based on OS
|
|
# assign materialsNameSpace, based on OS
|
|
filepathMinusExtension = filepath.rpartition('.')[0]
|
|
filepathMinusExtension = filepath.rpartition('.')[0]
|
|
@@ -951,7 +965,7 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
# Cameras
|
|
# Cameras
|
|
file_handler.write(",\"cameras\":[")
|
|
file_handler.write(",\"cameras\":[")
|
|
first = True
|
|
first = True
|
|
- for object in [object for object in scene.objects if object.is_visible(scene)]:
|
|
|
|
|
|
+ for object in [object for object in scene.objects if object.is_visible(scene) and Export_babylon.isInSelectedLayer(object, scene, export_onlyCurrentLayer)]:
|
|
if (object.type == 'CAMERA'):
|
|
if (object.type == 'CAMERA'):
|
|
if first != True:
|
|
if first != True:
|
|
file_handler.write(",")
|
|
file_handler.write(",")
|
|
@@ -967,7 +981,7 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
# Lights
|
|
# Lights
|
|
file_handler.write(",\"lights\":[")
|
|
file_handler.write(",\"lights\":[")
|
|
first = True
|
|
first = True
|
|
- for object in [object for object in scene.objects if object.is_visible(scene)]:
|
|
|
|
|
|
+ for object in [object for object in scene.objects if object.is_visible(scene) and Export_babylon.isInSelectedLayer(object, scene, export_onlyCurrentLayer)]:
|
|
if (object.type == 'LAMP'):
|
|
if (object.type == 'LAMP'):
|
|
if first != True:
|
|
if first != True:
|
|
file_handler.write(",")
|
|
file_handler.write(",")
|
|
@@ -992,7 +1006,7 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
file_handler.write(",\"meshes\":[")
|
|
file_handler.write(",\"meshes\":[")
|
|
multiMaterials = []
|
|
multiMaterials = []
|
|
first = True
|
|
first = True
|
|
- for object in [object for object in scene.objects]:
|
|
|
|
|
|
+ for object in [object for object in scene.objects if Export_babylon.isInSelectedLayer(object, scene, export_onlyCurrentLayer)]:
|
|
if object.type == 'MESH' or object.type == 'EMPTY':
|
|
if object.type == 'MESH' or object.type == 'EMPTY':
|
|
# Check if current object is an instance
|
|
# Check if current object is an instance
|
|
currentFound = False
|
|
currentFound = False
|
|
@@ -1050,7 +1064,7 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
# Shadow generators
|
|
# Shadow generators
|
|
file_handler.write(",\"shadowGenerators\":[")
|
|
file_handler.write(",\"shadowGenerators\":[")
|
|
first = True
|
|
first = True
|
|
- for object in [object for object in scene.objects if object.is_visible(scene)]:
|
|
|
|
|
|
+ for object in [object for object in scene.objects if object.is_visible(scene) and Export_babylon.isInSelectedLayer(object, scene, export_onlyCurrentLayer)]:
|
|
if (object.type == 'LAMP' and object.data.shadowMap != 'NONE'):
|
|
if (object.type == 'LAMP' and object.data.shadowMap != 'NONE'):
|
|
if first != True:
|
|
if first != True:
|
|
file_handler.write(",")
|
|
file_handler.write(",")
|
|
@@ -1063,7 +1077,7 @@ class Export_babylon(bpy.types.Operator, ExportHelper):
|
|
file_handler.write(",\"skeletons\":[")
|
|
file_handler.write(",\"skeletons\":[")
|
|
first = True
|
|
first = True
|
|
i = 0
|
|
i = 0
|
|
- for object in [object for object in scene.objects if object.is_visible(scene)]:
|
|
|
|
|
|
+ for object in [object for object in scene.objects if object.is_visible(scene) and Export_babylon.isInSelectedLayer(object, scene, export_onlyCurrentLayer)]:
|
|
if (object.type == 'ARMATURE'):
|
|
if (object.type == 'ARMATURE'):
|
|
if first != True:
|
|
if first != True:
|
|
file_handler.write(",")
|
|
file_handler.write(",")
|
|
@@ -1124,13 +1138,20 @@ class ObjectPanel(bpy.types.Panel):
|
|
bl_space_type = "PROPERTIES"
|
|
bl_space_type = "PROPERTIES"
|
|
bl_region_type = "WINDOW"
|
|
bl_region_type = "WINDOW"
|
|
bl_context = "data"
|
|
bl_context = "data"
|
|
|
|
+
|
|
|
|
+ export_onlyCurrentLayer = BoolProperty(
|
|
|
|
+ name="Export only current layer",
|
|
|
|
+ description="Export only current layer",
|
|
|
|
+ default=False,
|
|
|
|
+ )
|
|
|
|
|
|
def draw(self, context):
|
|
def draw(self, context):
|
|
ob = context.object
|
|
ob = context.object
|
|
|
|
+ layout = self.layout
|
|
|
|
+
|
|
if not ob or not ob.data:
|
|
if not ob or not ob.data:
|
|
return
|
|
return
|
|
|
|
|
|
- layout = self.layout
|
|
|
|
isMesh = isinstance(ob.data, bpy.types.Mesh)
|
|
isMesh = isinstance(ob.data, bpy.types.Mesh)
|
|
isCamera = isinstance(ob.data, bpy.types.Camera)
|
|
isCamera = isinstance(ob.data, bpy.types.Camera)
|
|
isLight = isinstance(ob.data, bpy.types.Lamp)
|
|
isLight = isinstance(ob.data, bpy.types.Lamp)
|
|
@@ -1146,7 +1167,7 @@ class ObjectPanel(bpy.types.Panel):
|
|
layout.prop(ob.data, 'ellipsoid')
|
|
layout.prop(ob.data, 'ellipsoid')
|
|
elif isLight:
|
|
elif isLight:
|
|
layout.prop(ob.data, 'shadowMap')
|
|
layout.prop(ob.data, 'shadowMap')
|
|
- layout.prop(ob.data, 'shadowMapSize')
|
|
|
|
|
|
+ layout.prop(ob.data, 'shadowMapSize')
|
|
|
|
|
|
### REGISTER ###
|
|
### REGISTER ###
|
|
|
|
|