[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4709] contrib/py/scripts/addons/ io_scene_fpx: added more texture handling and materials.
Alexander N.
alpha-beta-release at gmx.net
Wed Aug 28 21:44:05 CEST 2013
Revision: 4709
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4709
Author: beta-tester
Date: 2013-08-28 19:44:04 +0000 (Wed, 28 Aug 2013)
Log Message:
-----------
added more texture handling and materials.
Modified Paths:
--------------
contrib/py/scripts/addons/io_scene_fpx/__init__.py
contrib/py/scripts/addons/io_scene_fpx/fpx_import.py
contrib/py/scripts/addons/io_scene_fpx/fpx_resource.blend
Modified: contrib/py/scripts/addons/io_scene_fpx/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_fpx/__init__.py 2013-08-28 17:43:09 UTC (rev 4708)
+++ contrib/py/scripts/addons/io_scene_fpx/__init__.py 2013-08-28 19:44:04 UTC (rev 4709)
@@ -34,7 +34,7 @@
'name': "Future Pinball FPx format (.fpm/.fpl/.fpt)",
'description': "Import Future Pinball Model, Library and Table files",
'author': "Alexander Nussbaumer",
- 'version': (0, 0, 0, '2013-08-24'),
+ 'version': (0, 0, 0, '2013-08-28'),
'blender': (2, 68, 0),
'location': "File > Import",
'warning': "",
Modified: contrib/py/scripts/addons/io_scene_fpx/fpx_import.py
===================================================================
--- contrib/py/scripts/addons/io_scene_fpx/fpx_import.py 2013-08-28 17:43:09 UTC (rev 4708)
+++ contrib/py/scripts/addons/io_scene_fpx/fpx_import.py 2013-08-28 19:44:04 UTC (rev 4709)
@@ -141,6 +141,9 @@
FORMAT_MODEL_CAP2 = "{}.cap2"
FORMAT_MODEL_RING = "{}.ring{:02d}"
+#DEFAULT_LAMP_TEXTURE = "{1}.rsrc_bmp_254.i"
+DEFAULT_LAMP_TEXTURE = "rsrc_bmp_254"
+
TRANSLITE_OBJECT = 2
###############################################################################
class FpmImporter():
@@ -669,6 +672,10 @@
images = image_list.get_value("images")
self.fpx_image_lists[key] = images
+ blender_image_name = FpxUtilities.toGoodName(FORMAT_RESOURCE.format(PREFIX_LOCAL, FORMAT_IMAGE.format(DEFAULT_LAMP_TEXTURE)))
+ self.LoadObjectLite(blender_image_name, Fpt_PackedLibrary_Type.TYPE_IMAGE)
+ self.fpx_images[DEFAULT_LAMP_TEXTURE] = [blender_image_name, ]
+
self.fpx_pinmodels = {}
self.GetLinked(fpx_reader.PinModel, self.fpx_pinmodels, Fpt_PackedLibrary_Type.TYPE_MODEL, dst_sub_path_names)
@@ -807,28 +814,54 @@
fpx_model_beam_width = fpx_item.get_value("beam_width")
if fpx_model_beam_width:
offset = 3.75
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model", Vector((0.0 , ((fpx_model_beam_width / 2.0) + offset), 0.0)), -90)
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model", Vector((0.0 , -((fpx_model_beam_width / 2.0) + offset), 0.0)), 90)
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model", Vector((0.0 , ((fpx_model_beam_width / 2.0) + offset), 0.0)), -90)
+ texture = fpx_item.get_value("texture_emitter")
+ if texture:
+ self.append_texture_material(blender_object, texture, uv_layer="ms3d_uv_layer")
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model", Vector((0.0 , -((fpx_model_beam_width / 2.0) + offset), 0.0)), 90)
+ texture = fpx_item.get_value("texture_collector")
+ if texture:
+ self.append_texture_material(blender_object, texture, uv_layer="ms3d_uv_layer")
else:
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model")
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name, "model")
+ if fpx_transparency or fpx_crystal or fpx_id in FptElementType.SET_LIGHT_OBJECTS:
+ self.append_christal_material(blender_object)
+ elif fpx_sphere_mapping and fpx_id not in FptElementType.SET_LIGHT_OBJECTS:
+ self.append_chrome_material(blender_object)
+ else:
+ texture = fpx_item.get_value("texture")
+ if texture:
+ print("#DEBUG texture", texture)
+ self.append_texture_material(blender_object, texture, light_on=(fpx_id not in FptElementType.SET_LIGHT_OBJECTS), uv_layer="ms3d_uv_layer")
+
fpx_model_name_cap = fpx_item.get_value("model_cap")
if fpx_model_name_cap:
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_cap, "model_cap")
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_cap, "model_cap")
+ texture = fpx_item.get_value("cap_texture")
+ if texture:
+ self.append_texture_material(blender_object, texture, light_on=True, uv_layer="ms3d_uv_layer")
fpx_model_name_base = fpx_item.get_value("model_base")
if fpx_model_name_base:
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_base, "model_base")
- self.attach_dupli_group(blender_empty_object, layers, "bumperring", 'LOCAL', Vector((0.0 , 0.0, 4.0)))
- self.attach_dupli_group(blender_empty_object, layers, "bumperskirt", 'LOCAL', Vector((0.0 , 0.0, 3.5)))
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_base, "model_base")
+ if not fpx_item.get_value("passive"):
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, "bumperring", 'LOCAL', Vector((0.0 , 0.0, 4.0)))
+ self.append_chrome_material(blender_object)
+ if fpx_item.get_value("trigger_skirt"):
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, "bumperskirt", 'LOCAL', Vector((0.0 , 0.0, 3.5)))
+ """
fpx_model_name_start = fpx_item.get_value("model_start")
if fpx_model_name_start:
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_start, "model_start")
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_start, "model_start")
+ self.append_chrome_material(blender_object)
fpx_model_name_end = fpx_item.get_value("model_end")
if fpx_model_name_end:
- self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_end, "model_end")
+ blender_object = self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_end, "model_end")
+ self.append_chrome_material(blender_object)
+ """
if fpx_id == FptElementType.RUBBER_ROUND:
blender_object = self.CreateRubberRound(fpx_item, fpx_item_name, layers, fpx_position_xy, fpx_position_z)
@@ -844,7 +877,8 @@
## #DEBUG : light dummies
if fpx_id in FptElementType.SET_LIGHT_OBJECTS: # and not blender_empty_object.children:
if ops.mesh.primitive_ico_sphere_add.poll():
- blender_object = ops.mesh.primitive_ico_sphere_add(subdivisions=2, size=self.debug_lightball_size, location=blender_empty_object.location + Vector((0.0, 0.0, self.debug_lightball_height)), layers=FptImporter.LAYERS_LIGHT_SPHERE)
+ ops.mesh.primitive_ico_sphere_add(subdivisions=2, size=self.debug_lightball_size, location=blender_empty_object.location + Vector((0.0, 0.0, self.debug_lightball_height)), layers=FptImporter.LAYERS_LIGHT_SPHERE)
+ self.append_light_material(self.__context.active_object)
# cleanup
if not self.keep_temp:
@@ -915,8 +949,18 @@
return {"FINISHED"}
- def append_texture_material(self, blender_object, fpx_image_name, uv_layer=None):
+ def append_texture_material(self, blender_object, fpx_image_name, light_on=True, uv_layer=None):
+ if not blender_object:
+ return
+ if blender_object.type not in {'MESH', 'CURVE', }:
+ for child in blender_object.children:
+ self.append_texture_material(child, fpx_image_name, light_on, uv_layer)
+ return
+
fpx_image_object = self.fpx_images.get(fpx_image_name)
+ if not fpx_image_object:
+ fpx_image_name = FpxUtilities.toGoodName(fpx_image_name)
+ fpx_image_object = self.fpx_images.get(fpx_image_name)
if fpx_image_object:
blender_image = self.__blend_data.images.get(fpx_image_object[self.BLENDER_OBJECT_NAME])
if blender_image:
@@ -928,14 +972,18 @@
if not blender_material:
print("#DEBUG create material", bm_name)
blender_material = self.__blend_data.materials.new(bm_name)
+ render_engine = self.__context.scene.render.engine
+
+ #blender internal
+ self.__context.scene.render.engine = 'BLENDER_RENDER'
blender_material.use_transparency = True
- blender_material.use_raytrace = False
+ #blender_material.use_raytrace = False # Material | Options | Traceable
blender_material.use_transparent_shadows = True
blender_material.alpha = 0.0
- render_engine = self.__context.scene.render.engine
+ #blender_material.use_shadeless = True #DEBUG
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-extensions-cvs
mailing list