diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-09-13 14:05:30 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-09-13 14:05:30 +0400 |
commit | 7d02e66256ea2866b121bd958f83d55866381412 (patch) | |
tree | df5c675d1351aab20bd4f10e51effaae7a19b39e /release | |
parent | 92089e3c4d89c2689dbd4452fb21cbbd9a0ecc71 (diff) | |
parent | ee32d36a599ccda9c3d5543cb631bb07da06958b (diff) |
svn merge -r40000:40179 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Diffstat (limited to 'release')
10 files changed, 257 insertions, 117 deletions
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py index 101416f4943..b3127733c1e 100644 --- a/release/scripts/modules/bpy_types.py +++ b/release/scripts/modules/bpy_types.py @@ -356,7 +356,7 @@ class Mesh(bpy_types.ID): @property def edge_keys(self): - return [edge_key for face in self.faces for edge_key in face.edge_keys] + return [ed.key for ed in self.edges] class MeshEdge(StructRNA): @@ -376,17 +376,31 @@ class MeshFace(StructRNA): face_verts = self.vertices[:] mesh_verts = self.id_data.vertices if len(face_verts) == 3: - return (mesh_verts[face_verts[0]].co + mesh_verts[face_verts[1]].co + mesh_verts[face_verts[2]].co) / 3.0 + return (mesh_verts[face_verts[0]].co + + mesh_verts[face_verts[1]].co + + mesh_verts[face_verts[2]].co + ) / 3.0 else: - return (mesh_verts[face_verts[0]].co + mesh_verts[face_verts[1]].co + mesh_verts[face_verts[2]].co + mesh_verts[face_verts[3]].co) / 4.0 + return (mesh_verts[face_verts[0]].co + + mesh_verts[face_verts[1]].co + + mesh_verts[face_verts[2]].co + + mesh_verts[face_verts[3]].co + ) / 4.0 @property def edge_keys(self): verts = self.vertices[:] if len(verts) == 3: - return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[0]) - - return ord_ind(verts[0], verts[1]), ord_ind(verts[1], verts[2]), ord_ind(verts[2], verts[3]), ord_ind(verts[3], verts[0]) + return (ord_ind(verts[0], verts[1]), + ord_ind(verts[1], verts[2]), + ord_ind(verts[2], verts[0]), + ) + else: + return (ord_ind(verts[0], verts[1]), + ord_ind(verts[1], verts[2]), + ord_ind(verts[2], verts[3]), + ord_ind(verts[3], verts[0]), + ) class Text(bpy_types.ID): diff --git a/release/scripts/startup/bl_operators/animsys_update.py b/release/scripts/startup/bl_operators/animsys_update.py index 3710c57ac16..23b9cf13f07 100644 --- a/release/scripts/startup/bl_operators/animsys_update.py +++ b/release/scripts/startup/bl_operators/animsys_update.py @@ -685,7 +685,6 @@ data_path_update = [ ] -import bpy from bpy.types import Operator diff --git a/release/scripts/startup/bl_operators/nla.py b/release/scripts/startup/bl_operators/nla.py index c764f7d62f1..feb0016b1c7 100644 --- a/release/scripts/startup/bl_operators/nla.py +++ b/release/scripts/startup/bl_operators/nla.py @@ -271,7 +271,8 @@ class BakeAction(Operator): class ClearUselessActions(Operator): - '''Mark actions with no F-Curves for deletion after save+reload of file preserving "action libraries"''' + '''Mark actions with no F-Curves for deletion after save+reload of ''' \ + '''file preserving "action libraries"''' bl_idname = "anim.clear_useless_actions" bl_label = "Clear Useless Actions" bl_options = {'REGISTER', 'UNDO'} @@ -292,12 +293,14 @@ class ClearUselessActions(Operator): if ((self.only_unused is False) or (action.use_fake_user and action.users == 1)): - # if it has F-Curves, then it's a "action library" (i.e. walk, wave, jump, etc.) + # if it has F-Curves, then it's a "action library" + # (i.e. walk, wave, jump, etc.) # and should be left alone as that's what fake users are for! if not action.fcurves: # mark action for deletion action.user_clear() removed += 1 - self.report({'INFO'}, "Removed %d empty and/or fake-user only Actions" % (removed)) + self.report({'INFO'}, "Removed %d empty and/or fake-user only Actions" + % removed) return {'FINISHED'} diff --git a/release/scripts/startup/bl_ui/properties_data_armature.py b/release/scripts/startup/bl_ui/properties_data_armature.py index 463ba84470f..61093abe814 100644 --- a/release/scripts/startup/bl_ui/properties_data_armature.py +++ b/release/scripts/startup/bl_ui/properties_data_armature.py @@ -74,6 +74,7 @@ class DATA_PT_skeleton(ArmatureButtonsPanel, Panel): if context.scene.render.engine == "BLENDER_GAME": layout.row().prop(arm, "vert_deformer", expand=True) + class DATA_PT_display(ArmatureButtonsPanel, Panel): bl_label = "Display" @@ -185,11 +186,10 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel): layout.template_ID(ob, "pose_library", new="poselib.new", unlink="poselib.unlink") if poselib: - - # list of poses in pose library + # list of poses in pose library row = layout.row() row.template_list(poselib, "pose_markers", poselib.pose_markers, "active_index", rows=5) - + # column of operators for active pose # - goes beside list col = row.column(align=True) @@ -206,9 +206,9 @@ class DATA_PT_pose_library(ArmatureButtonsPanel, Panel): if pose_marker_active is not None: col.operator("poselib.pose_remove", icon='ZOOMOUT', text="").pose = pose_marker_active.name col.operator("poselib.apply_pose", icon='ZOOM_SELECTED', text="").pose_index = poselib.pose_markers.active_index - - col.operator("poselib.action_sanitise", icon='HELP', text="") # XXX: put in menu? - + + col.operator("poselib.action_sanitise", icon='HELP', text="") # XXX: put in menu? + # properties for active marker if pose_marker_active is not None: layout.prop(pose_marker_active, "name") diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index 058e8161fe6..f0904ca8976 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -379,6 +379,10 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col.label(text="Mirror Object:") col.prop(md, "mirror_object", text="") + def NAVMESH(self, layout, ob, md): + layout.operator("object.assign_navpolygon") + layout.operator("object.assign_new_navpolygon") + def MULTIRES(self, layout, ob, md): layout.row().prop(md, "subdivision_type", expand=True) @@ -608,32 +612,31 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): layout.label(text="Settings can be found inside the Physics context") def UV_PROJECT(self, layout, ob, md): - if ob.type == 'MESH': - split = layout.split() + split = layout.split() - col = split.column() - col.label(text="Image:") - col.prop(md, "image", text="") + col = split.column() + col.label(text="Image:") + col.prop(md, "image", text="") - col = split.column() - col.label(text="UV Layer:") - col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="") + col = split.column() + col.label(text="UV Layer:") + col.prop_search(md, "uv_layer", ob.data, "uv_textures", text="") - split = layout.split() - col = split.column() - col.prop(md, "use_image_override") - col.prop(md, "projector_count", text="Projectors") - for proj in md.projectors: - col.prop(proj, "object", text="") + split = layout.split() + col = split.column() + col.prop(md, "use_image_override") + col.prop(md, "projector_count", text="Projectors") + for proj in md.projectors: + col.prop(proj, "object", text="") - col = split.column() - sub = col.column(align=True) - sub.prop(md, "aspect_x", text="Aspect X") - sub.prop(md, "aspect_y", text="Aspect Y") + col = split.column() + sub = col.column(align=True) + sub.prop(md, "aspect_x", text="Aspect X") + sub.prop(md, "aspect_y", text="Aspect Y") - sub = col.column(align=True) - sub.prop(md, "scale_x", text="Scale X") - sub.prop(md, "scale_y", text="Scale Y") + sub = col.column(align=True) + sub.prop(md, "scale_x", text="Scale X") + sub.prop(md, "scale_y", text="Scale Y") def WARP(self, layout, ob, md): use_falloff = (md.falloff_type != 'NONE') @@ -738,27 +741,29 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): col.prop(md, "narrowness", slider=True) @staticmethod - def weight_vg_mask(layout, ob, md): + def vertex_weight_mask(layout, ob, md): layout.label(text="Influence/Mask Options:") - split = layout.split() - col1 = split.column() - col2 = split.column() - col1.label(text="Global Influence:") - col2.prop(md, "mask_constant", text="") + split = layout.split(percentage=0.4) + split.label(text="Global Influence:") + split.prop(md, "mask_constant", text="") if not md.mask_texture: - col1.label(text="Vertex Group Mask:") - col2.prop_search(md, "mask_vertex_group", ob, "vertex_groups", text="") + split = layout.split(percentage=0.4) + split.label(text="Vertex Group Mask:") + split.prop_search(md, "mask_vertex_group", ob, "vertex_groups", text="") if not md.mask_vertex_group: - col1.label(text="Texture Mask:") - col2.template_ID(md, "mask_texture", new="texture.new") + split = layout.split(percentage=0.4) + split.label(text="Texture Mask:") + split.template_ID(md, "mask_texture", new="texture.new") if md.mask_texture: split = layout.split() + col = split.column() col.label(text="Texture Coordinates:") col.prop(md, "mask_tex_mapping", text="") + col = split.column() col.label(text="Use Channel:") col.prop(md, "mask_tex_use_channel", text="") @@ -769,88 +774,85 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): layout.prop_search(md, "mask_tex_uv_layer", ob.data, "uv_textures") def VERTEX_WEIGHT_EDIT(self, layout, ob, md): - if ob.type == 'MESH': - split = layout.split() - col = split.column() - col.label(text="Vertex Group:") - col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + split = layout.split() + col = split.column() + col.label(text="Vertex Group:") + col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") - col = split.column() - col.label(text="Default Weight:") - col.prop(md, "default_weight", text="") + col = split.column() + col.label(text="Default Weight:") + col.prop(md, "default_weight", text="") - layout.prop(md, "falloff_type") - if md.falloff_type == 'CURVE': - col = layout.column() - col.template_curve_mapping(md, "map_curve") + layout.prop(md, "falloff_type") + if md.falloff_type == 'CURVE': + col = layout.column() + col.template_curve_mapping(md, "map_curve") - split = layout.split(percentage=0.4) - split.prop(md, "use_add") - row = split.row() - row.active = md.use_add - row.prop(md, "add_threshold") + split = layout.split(percentage=0.4) + split.prop(md, "use_add") + row = split.row() + row.active = md.use_add + row.prop(md, "add_threshold") - split = layout.split(percentage=0.4) - split.prop(md, "use_remove") - row = split.row() - row.active = md.use_remove - row.prop(md, "remove_threshold") + split = layout.split(percentage=0.4) + split.prop(md, "use_remove") + row = split.row() + row.active = md.use_remove + row.prop(md, "remove_threshold") - # Common mask options… - layout.separator() - self.weight_vg_mask(layout, ob, md) + # Common mask options + layout.separator() + self.vertex_weight_mask(layout, ob, md) def VERTEX_WEIGHT_MIX(self, layout, ob, md): - if ob.type == 'MESH': - split = layout.split() - col = split.column() - col.label(text="Vertex Group A:") - col.prop_search(md, "vertex_group_a", ob, "vertex_groups", text="") - col.label(text="Default Weight A:") - col.prop(md, "default_weight_a", text="") + split = layout.split() + + col = split.column() + col.label(text="Vertex Group A:") + col.prop_search(md, "vertex_group_a", ob, "vertex_groups", text="") + col.label(text="Default Weight A:") + col.prop(md, "default_weight_a", text="") - col.label(text="Mix Mode:") - col.prop(md, "mix_mode", text="") + col.label(text="Mix Mode:") + col.prop(md, "mix_mode", text="") - col = split.column() - col.label(text="Vertex Group B:") - col.prop_search(md, "vertex_group_b", ob, "vertex_groups", text="") - col.label(text="Default Weight B:") - col.prop(md, "default_weight_b", text="") + col = split.column() + col.label(text="Vertex Group B:") + col.prop_search(md, "vertex_group_b", ob, "vertex_groups", text="") + col.label(text="Default Weight B:") + col.prop(md, "default_weight_b", text="") - col.label(text="Mix Set:") - col.prop(md, "mix_set", text="") + col.label(text="Mix Set:") + col.prop(md, "mix_set", text="") - # Common mask options… - layout.separator() - self.weight_vg_mask(layout, ob, md) + # Common mask options + layout.separator() + self.vertex_weight_mask(layout, ob, md) def VERTEX_WEIGHT_PROXIMITY(self, layout, ob, md): - if ob.type == 'MESH': - split = layout.split() - col = split.column() - col.label(text="Vertex Group:") - col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") + split = layout.split() - col = split.column() - col.label(text="Target Object:") - col.prop(md, "target", text="") + col = split.column() + col.label(text="Vertex Group:") + col.prop_search(md, "vertex_group", ob, "vertex_groups", text="") - row = layout.row() - row.prop(md, "proximity_mode", expand=True) - if md.proximity_mode == 'GEOMETRY': - row = layout.row() - row.prop(md, "proximity_geometry", expand=True) + col = split.column() + col.label(text="Target Object:") + col.prop(md, "target", text="") + + layout.row().prop(md, "proximity_mode", expand=True) + if md.proximity_mode == 'GEOMETRY': + layout.row().prop(md, "proximity_geometry", expand=True) - row = layout.split() - row.prop(md, "min_dist") - row.prop(md, "max_dist") + row = layout.row() + row.prop(md, "min_dist") + row.prop(md, "max_dist") - layout.prop(md, "falloff_type") + layout.prop(md, "falloff_type") - # Common mask options… - layout.separator() - self.weight_vg_mask(layout, ob, md) + # Common mask options + layout.separator() + self.vertex_weight_mask(layout, ob, md) if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/properties_data_speaker.py b/release/scripts/startup/bl_ui/properties_data_speaker.py index 657c0fe652a..a1b86b51f5f 100644 --- a/release/scripts/startup/bl_ui/properties_data_speaker.py +++ b/release/scripts/startup/bl_ui/properties_data_speaker.py @@ -81,7 +81,7 @@ class DATA_PT_distance(DataButtonsPanel, bpy.types.Panel): speaker = context.speaker split = layout.split() - + col = split.column() col.label("Volume:") col.prop(speaker, "volume_min", text="Minimum") diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py index 161e4b10cff..26b95484b28 100644 --- a/release/scripts/startup/bl_ui/properties_game.py +++ b/release/scripts/startup/bl_ui/properties_game.py @@ -196,6 +196,33 @@ class PHYSICS_PT_game_collision_bounds(PhysicsButtonsPanel, Panel): row.prop(game, "use_collision_compound", text="Compound") +class PHYSICS_PT_game_obstacles(PhysicsButtonsPanel, Panel): + bl_label = "Create Obstacle" + COMPAT_ENGINES = {'BLENDER_GAME'} + + @classmethod + def poll(cls, context): + game = context.object.game + rd = context.scene.render + return (game.physics_type in ('DYNAMIC', 'RIGID_BODY', 'SENSOR', 'SOFT_BODY', 'STATIC')) and (rd.engine in cls.COMPAT_ENGINES) + + def draw_header(self, context): + game = context.active_object.game + + self.layout.prop(game, "create_obstacle", text="") + + def draw(self, context): + layout = self.layout + + game = context.active_object.game + + layout.active = game.create_obstacle + + row = layout.row() + row.prop(game, "obstacle_radius", text="Radius") + row.label() + + class RenderButtonsPanel(): bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -344,7 +371,7 @@ class RENDER_PT_game_performance(RenderButtonsPanel, Panel): row = col.row() row.prop(gs, "use_frame_rate") row.prop(gs, "use_display_lists") - + col.prop(gs, "restrict_animation_updates") @@ -364,6 +391,70 @@ class RENDER_PT_game_display(RenderButtonsPanel, Panel): flow.prop(gs, "show_mouse", text="Mouse Cursor") +class SceneButtonsPanel(): + bl_space_type = 'PROPERTIES' + bl_region_type = 'WINDOW' + bl_context = "scene" + + +class SCENE_PT_game_navmesh(SceneButtonsPanel, bpy.types.Panel): + bl_label = "Navigation mesh" + bl_default_closed = True + COMPAT_ENGINES = {'BLENDER_GAME'} + + @classmethod + def poll(cls, context): + scene = context.scene + return (scene and scene.render.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + + rd = context.scene.game_settings.recast_data + + layout.operator("object.create_navmesh", text='Build navigation mesh') + + col = layout.column() + col.label(text="Rasterization:") + row = col.row() + row.prop(rd, "cell_size") + row.prop(rd, "cell_height") + + col = layout.column() + col.label(text="Agent:") + split = col.split() + + col = split.column() + col.prop(rd, "agent_height", text="Height") + col.prop(rd, "agent_radius", text="Radius") + + col = split.column() + col.prop(rd, "max_slope") + col.prop(rd, "max_climb") + + col = layout.column() + col.label(text="Region:") + row = col.row() + row.prop(rd, "region_min_size") + row.prop(rd, "region_merge_size") + + col = layout.column() + col.label(text="Polygonization:") + split = col.split() + + col = split.column() + col.prop(rd, "edge_max_len") + col.prop(rd, "edge_max_error") + + split.prop(rd, "verts_per_poly") + + col = layout.column() + col.label(text="Detail Mesh:") + row = col.row() + row.prop(rd, "sample_dist") + row.prop(rd, "sample_max_error") + + class WorldButtonsPanel(): bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' @@ -487,5 +578,25 @@ class WORLD_PT_game_physics(WorldButtonsPanel, Panel): col.label(text="Logic Steps:") col.prop(gs, "logic_step_max", text="Max") + +class WORLD_PT_game_physics_obstacles(WorldButtonsPanel, Panel): + bl_label = "Obstacle simulation" + COMPAT_ENGINES = {'BLENDER_GAME'} + + @classmethod + def poll(cls, context): + scene = context.scene + return (scene.world and scene.render.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + + gs = context.scene.game_settings + + layout.prop(gs, "obstacle_simulation", text="Type") + if gs.obstacle_simulation != 'NONE': + layout.prop(gs, "level_height") + layout.prop(gs, "show_obstacle_simulation") + if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py index 46893af3582..55629e6c6b9 100644 --- a/release/scripts/startup/bl_ui/properties_physics_fluid.py +++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py @@ -46,7 +46,7 @@ class PHYSICS_PT_fluid(PhysicButtonsPanel, Panel): row = layout.row() if fluid is None: - row.label("built without fluids") + row.label("Built without fluids") return row.prop(fluid, "type") diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 13edc3471d2..67aca5eb4c1 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -773,7 +773,18 @@ class USERPREF_MT_ndof_settings(Menu): layout.separator() layout.label(text="orbit options") - layout.prop(input_prefs, "ndof_orbit_invert_axes") + if input_prefs.view_rotate_method == 'TRACKBALL': + layout.prop(input_prefs, "ndof_roll_invert_axis") + layout.prop(input_prefs, "ndof_tilt_invert_axis") + layout.prop(input_prefs, "ndof_rotate_invert_axis") + else: + layout.prop(input_prefs, "ndof_orbit_invert_axes") + + layout.separator() + layout.label(text="pan options") + layout.prop(input_prefs, "ndof_panx_invert_axis") + layout.prop(input_prefs, "ndof_pany_invert_axis") + layout.prop(input_prefs, "ndof_panz_invert_axis") layout.separator() layout.label(text="fly options") diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py index fd70cc9edb3..78b4a31f931 100644 --- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py +++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py @@ -770,9 +770,9 @@ class VIEW3D_PT_tools_brush_texture(PaintPanel, Panel): col = row.column() if brush.use_texture_overlay: - col.prop(brush, "use_texture_overlay", toggle=True, text="", icon='MUTE_IPO_OFF') + col.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_OFF') else: - col.prop(brush, "use_texture_overlay", toggle=True, text="", icon='MUTE_IPO_ON') + col.prop(brush, "use_texture_overlay", toggle=True, text="", icon='RESTRICT_VIEW_ON') col.active = tex_slot.map_mode in {'FIXED', 'TILED'} |