[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