[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [4696] contrib/py/scripts/addons/ io_scene_fpx: prepared for texture handling.

Alexander N alpha-beta-release at gmx.net
Fri Aug 23 21:37:15 CEST 2013


Revision: 4696
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=4696
Author:   beta-tester
Date:     2013-08-23 19:37:15 +0000 (Fri, 23 Aug 2013)
Log Message:
-----------
prepared for texture handling.

- added reading STRINGLIST for Fpt_ImageList_Reader, Fpt_LightList_Reader
- aligned entire future pinball coordinate system to global UV coordinate system
- added create/applying texture to PinCab, Surface, GuideWall, LightRound, LightShapeable, LightImage for 'BLENDER_INTERNAL' render engine
- changed some typo

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_spec.py
    contrib/py/scripts/addons/io_scene_fpx/fpx_ui.py

Modified: contrib/py/scripts/addons/io_scene_fpx/__init__.py
===================================================================
--- contrib/py/scripts/addons/io_scene_fpx/__init__.py	2013-08-22 13:44:39 UTC (rev 4695)
+++ contrib/py/scripts/addons/io_scene_fpx/__init__.py	2013-08-23 19:37:15 UTC (rev 4696)
@@ -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-12'),
+    'version': (0, 0, 0, '2013-08-23'),
     '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-22 13:44:39 UTC (rev 4695)
+++ contrib/py/scripts/addons/io_scene_fpx/fpx_import.py	2013-08-23 19:37:15 UTC (rev 4696)
@@ -207,6 +207,11 @@
         self.__context = blender_context
         self.__blend_data = blender_context.blend_data
 
+        self.__table_width = 0.0
+        self.__table_length = 0.0
+        self.__translite_width = 0.0
+        self.__translite_length = 0.0
+
         try:
             self.folder_name, file_name = path.split(filepath)
 
@@ -658,12 +663,21 @@
                 self.fpx_images = {}
                 self.GetLinked(fpx_reader.Image, self.fpx_images, Fpt_PackedLibrary_Type.TYPE_IMAGE, dst_sub_path_names)
 
+                self.fpx_image_lists = {}
+                for image_list in fpx_reader.ImageList.values():
+                    key = image_list.get_value("name")
+                    images = image_list.get_value("images")
+                    self.fpx_image_lists[key] = images
+
                 self.fpx_pinmodels = {}
                 self.GetLinked(fpx_reader.PinModel, self.fpx_pinmodels, Fpt_PackedLibrary_Type.TYPE_MODEL, dst_sub_path_names)
 
                 for key, item in self.fpx_images.items():
                     print("#DEBUG image:", key, item)
 
+                for key, item in self.fpx_image_lists.items():
+                    print("#DEBUG image_list:", key, item)
+
                 for key, item in self.fpx_pinmodels.items():
                     print("#DEBUG pinmodel:", key, item)
 
@@ -730,28 +744,28 @@
                         # handle curve objects with shape_points
                         if fpx_shape_points:
                             if fpx_id == FptElementType.SURFACE:
-                                blender_object = self.CreateSurface(fpx_item_name, layers, fpx_shape_points, fpx_item.get_value("top_height"), fpx_item.get_value("bottom_height"))
+                                blender_object = self.CreateSurface(fpx_item, fpx_item_name, layers, fpx_shape_points)
                             elif fpx_id == FptElementType.LIGHT_SHAPEABLE:
-                                blender_object = self.CreateLightShapeable(fpx_item_name, layers, fpx_shape_points, fpx_position_z)
+                                blender_object = self.CreateLightShapeable(fpx_item, fpx_item_name, layers, fpx_shape_points, fpx_position_z)
                             elif fpx_id == FptElementType.RUBBER_SHAPEABLE:
-                                blender_object = self.CreateRubberShapeable(fpx_item_name, layers, fpx_shape_points, fpx_position_z)
+                                blender_object = self.CreateRubberShapeable(fpx_item, fpx_item_name, layers, fpx_shape_points, fpx_position_z)
                             elif fpx_id == FptElementType.GUIDE_WALL:
-                                blender_object = self.CreateGuideWall(fpx_item_name, layers, fpx_shape_points, fpx_position_z, fpx_item.get_value("height"), fpx_item.get_value("width"))
+                                blender_object = self.CreateGuideWall(fpx_item, fpx_item_name, layers, fpx_shape_points, fpx_position_z)
                             elif fpx_id == FptElementType.GUIDE_WIRE:
-                                blender_object = self.CreateGuideWire(fpx_item_name, layers, fpx_shape_points, fpx_position_z, fpx_item.get_value("height"), fpx_item.get_value("width"))
+                                blender_object = self.CreateGuideWire(fpx_item, fpx_item_name, layers, fpx_shape_points, fpx_position_z)
                             else:
                                 blender_object = None
                         # handle curve objects with ramp_points
                         elif fpx_ramp_points:
                             if fpx_id == FptElementType.RAMP_WIRE:
-                                blender_object = self.CreateWireRamp(fpx_item_name, layers, fpx_ramp_points, fpx_position_z, fpx_item.get_value("start_height"), fpx_item.get_value("end_height"), fpx_id, fpx_item.get_value("model_start"), fpx_item.get_value("model_end"))
+                                blender_object = self.CreateWireRamp(fpx_item, fpx_item_name, layers, fpx_ramp_points, fpx_position_z, fpx_id)
                             elif fpx_id == FptElementType.RAMP_RAMP:
-                                blender_object = self.CreateRamp(fpx_item_name, layers, fpx_ramp_points, fpx_position_z, fpx_item.get_value("start_height"), fpx_item.get_value("end_height"), fpx_item.get_value("start_width"), fpx_item.get_value("end_width"), fpx_item.get_value("left_side_height"), fpx_item.get_value("right_side_height"))
+                                blender_object = self.CreateRamp(fpx_item, fpx_item_name, layers, fpx_ramp_points, fpx_position_z)
                             else:
                                 blender_object = None
                         else:
                             if fpx_id == FptElementType.LIGHT_LIGHTIMAGE:
-                                blender_object = self.CreateLightImage(fpx_item_name, layers, fpx_position_xy, fpx_position_z, fpx_item.get_value("height"), fpx_item.get_value("width"), fpx_item.get_value("rotation"))
+                                blender_object = self.CreateLightImage(fpx_item, fpx_item_name, layers, fpx_position_xy, fpx_position_z)
                             else:
                                 blender_object = None
 
@@ -764,17 +778,17 @@
                             if fpx_rotation:
                                 blender_rotation = Euler((0.0, 0.0, radians(self.angle_correction(fpx_rotation))), 'XZY')
                             else:
-                                blender_rotation = Euler((0.0, 0.0, 0.0), 'XZY')
+                                blender_rotation = Euler((0.0, 0.0, radians(self.angle_correction(0.0))), 'XZY')
 
                             if fpx_id in {FptElementType.CONTROL_FLIPPER, FptElementType.CONTROL_DIVERTER, }:
                                 fpx_start_angle = fpx_item.get_value("start_angle")
                                 if fpx_start_angle is None:
                                     fpx_start_angle = 0
                                 m0 = blender_rotation.to_matrix()
-                                m1 = Euler((0.0, 0.0, radians(self.angle_correction(fpx_start_angle))), 'XZY').to_matrix()
+                                m1 = Euler((0.0, 0.0, radians(self.angle_correction(fpx_start_angle) + 90)), 'XZY').to_matrix()
                                 blender_rotation = (m0 * m1).to_euler('XZY')
 
-                            blender_position = Vector(self.geometry_correction((fpx_position_xy[0], fpx_position_xy[1], fpx_position_z)))
+                            blender_position = self.geometry_correction((fpx_position_xy[0], fpx_position_xy[1], fpx_position_z))
 
                             blender_empty_object = self.__blend_data.objects.new(FORMAT_EMPTY_OBJECT.format(fpx_item_name), None)
                             blender_empty_object.location = blender_position
@@ -817,13 +831,13 @@
                                 self.attach_dupli_group(blender_empty_object, layers, fpx_model_name_end, "model_end")
 
                             if fpx_id == FptElementType.RUBBER_ROUND:
-                                blender_object = self.CreateRubberRound(fpx_item_name, layers, fpx_position_xy, fpx_position_z, fpx_item.get_value("subtype"))
+                                blender_object = self.CreateRubberRound(fpx_item, fpx_item_name, layers, fpx_position_xy, fpx_position_z)
 
                             if fpx_id:
                                 blender_empty_object.fpt.id = FptElementType.VALUE_INT_TO_NAME.get(fpx_id)
 
                             if fpx_id == FptElementType.LIGHT_ROUND:
-                                blender_object = self.CreateLightRound(fpx_item_name, layers, fpx_position_xy, fpx_position_z, fpx_item.get_value("diameter"))
+                                blender_object = self.CreateLightRound(fpx_item, fpx_item_name, layers, fpx_position_xy, fpx_position_z)
                                 if blender_object:
                                     blender_object.layers = layers
 
@@ -901,10 +915,239 @@
 
         return {"FINISHED"}
 
+    def append_texture_material(self, blender_object, fpx_image_name, uv_layer=None):
+        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:
+                if uv_layer:
+                    bm_name = "uv_{}".format(FORMAT_MATERIAL.format(fpx_image_name))
+                else:
+                    bm_name = "gen_{}".format(FORMAT_MATERIAL.format(fpx_image_name))
+                blender_material = self.__blend_data.materials.get(bm_name)
+                if not blender_material:
+                    print("#DEBUG create material", bm_name)
+                    blender_material = self.__blend_data.materials.new(bm_name)
+                    blender_material.use_transparency = True
+                    blender_material.use_raytrace = False
+                    blender_material.use_transparent_shadows = True
+                    blender_material.alpha = 0.0
+                    render_engine = self.__context.scene.render.engine
+                    #blender internal
+                    #self.__context.scene.render.engine = 'BLENDER_RENDER'
+                    if uv_layer:
+                        bt_name = "uv_{}".format(FORMAT_TEXTURE.format(fpx_image_name))

@@ Diff output truncated at 10240 characters. @@


More information about the Bf-extensions-cvs mailing list