提交 c2a401f2 编写于 作者: A alteredq

Added option not to export materials to Blender exporter.

In such case faces will not get material index in JSON data and then no material reference in Face objects, so MeshFaceMaterial is not going to show anything and you have to add your own material for the whole mesh after loading.

Tested on few models and it seems to work, new JSON format allows to omit materials :)
上级 5a684c29
......@@ -124,6 +124,7 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
filename_ext = ".js"
option_flip_yz = BoolProperty(name="Flip YZ", description="Flip YZ", default=True)
use_materials = BoolProperty(name="Materials", description="Export materials", default=True)
use_normals = BoolProperty(name="Normals", description="Export normals", default=True)
use_colors = BoolProperty(name="Colors", description="Export vertex colors", default=True)
use_uv_coords = BoolProperty(name="UVs", description="Export texture coordinates", default=True)
......@@ -167,6 +168,8 @@ class ExportTHREEJS(bpy.types.Operator, ExportHelper):
row.prop(self.properties, "use_colors")
row = layout.row()
row.prop(self.properties, "use_uv_coords")
row = layout.row()
row.prop(self.properties, "use_materials")
# ################################################################
......
......@@ -415,7 +415,7 @@ def setBit(value, position, on):
mask = ~(1 << position)
return (value & mask)
def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz):
def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz):
isTriangle = ( len(f.vertices) == 3 )
if isTriangle:
......@@ -423,7 +423,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
else:
nVertices = 4
hasMaterial = True # for the moment objects without materials get default material
hasMaterial = use_materials
hasFaceUvs = False # not supported in Blender
hasFaceVertexUvs = use_uv_coords
......@@ -459,6 +459,7 @@ def generate_face(f, faceIndex, normals, uvs, colors, mesh, use_normals, use_col
faceData.append(faceType)
# must clamp in case on polygons bigger than quads
for i in range(nVertices):
index = f.vertices[i]
faceData.append(index)
......@@ -736,7 +737,7 @@ def generate_materials_string(mesh, scene, use_colors, draw_type):
# ASCII model generator
# #####################################################
def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, draw_type):
def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, draw_type):
vertices = mesh.vertices[:]
......@@ -751,7 +752,11 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
colors, ncolor = extract_vertex_colors(mesh, use_colors)
uvs, nuv = extract_uvs(mesh, use_uv_coords)
mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type)
mstring = ""
nmaterial = 0
if use_materials:
mstring, nmaterial = generate_materials_string(mesh, scene, use_colors, draw_type)
text = TEMPLATE_FILE_ASCII % {
"nvertex" : len(mesh.vertices),
......@@ -769,7 +774,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
"vertices" : ",".join(generate_vertex(v) for v in vertices),
"faces" : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, flipyz) for i, f in enumerate(mesh.faces))
"faces" : ",".join(generate_face(f, i, normals, uvs, colors, mesh, use_normals, use_colors, use_uv_coords, use_materials, flipyz) for i, f in enumerate(mesh.faces))
}
......@@ -780,7 +785,7 @@ def generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, al
# Model exporter - export single mesh
# #####################################################
def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, flipyz, export_single_model):
def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, export_single_model):
"""Export single mesh"""
......@@ -823,7 +828,7 @@ def export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, al
if not active_col_layer:
use_colors = False
text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, align_model, flipyz, obj.draw_type)
text = generate_ascii_model(mesh, scene, use_normals, use_colors, use_uv_coords, use_materials, align_model, flipyz, obj.draw_type)
write_file(filepath, text)
# remove temp mesh
......@@ -1250,7 +1255,7 @@ def export_scene(scene, filepath, flipyz):
# Main
# #####################################################
def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, align_model = 0, option_export_scene = True):
def save(operator, context, filepath = "", option_flip_yz = True, use_normals = True, use_colors = True, use_uv_coords = True, use_materials = True, align_model = 0, option_export_scene = True):
filepath = ensure_extension(filepath, '.js')
......@@ -1281,7 +1286,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
if name not in geo_set:
fname = generate_mesh_filename(name, filepath)
export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, 0, option_flip_yz, False)
export_mesh(obj, scene, fname, use_normals, use_colors, use_uv_coords, use_materials, 0, option_flip_yz, False)
geo_set.add(name)
......@@ -1291,7 +1296,7 @@ def save(operator, context, filepath = "", option_flip_yz = True, use_normals =
if not obj:
raise Exception("Error, Select 1 active object or select 'export scene'")
export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, align_model, option_flip_yz, True)
export_mesh(obj, scene, filepath, use_normals, use_colors, use_uv_coords, use_materials, align_model, option_flip_yz, True)
return {'FINISHED'}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册