[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