diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2011-11-21 01:02:12 +0400 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2011-11-21 01:02:12 +0400 |
commit | 2676f2d58f71f438008b413a86b873e7787d80ea (patch) | |
tree | eb541972cf32d5958b7c0f7f8ece525b78cfcbff /release/scripts | |
parent | bb9976f058ba2090812074e1b774213d20821a30 (diff) | |
parent | 4ab1dadf72a821b344a714fff59aed11d15ecb14 (diff) |
Merged changes in the trunk up to revision 42021.
Conflicts resolved:
source/blender/blenkernel/intern/scene.c
source/blender/blenloader/intern/readfile.c
source/blender/editors/interface/resources.c
source/blender/render/intern/source/pipeline.c
Diffstat (limited to 'release/scripts')
20 files changed, 384 insertions, 211 deletions
diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py index 26611fb93ad..1bd218ad92a 100644 --- a/release/scripts/modules/addon_utils.py +++ b/release/scripts/modules/addon_utils.py @@ -62,7 +62,7 @@ def modules(module_cache): path_list = paths() # fake module importing - def fake_module(mod_name, mod_path, speedy=True): + def fake_module(mod_name, mod_path, speedy=True, force_support=None): global error_encoding if _bpy.app.debug: @@ -134,6 +134,9 @@ def modules(module_cache): traceback.print_exc() raise + if force_support is not None: + mod.bl_info["support"] = force_support + return mod else: return None @@ -141,6 +144,10 @@ def modules(module_cache): modules_stale = set(module_cache.keys()) for path in path_list: + + # force all contrib addons to be 'TESTING' + force_support = 'TESTING' if path.endswith("addons_contrib") else None + for mod_name, mod_path in _bpy.path.module_names(path): modules_stale -= {mod_name} mod = module_cache.get(mod_name) @@ -161,7 +168,7 @@ def modules(module_cache): mod = None if mod is None: - mod = fake_module(mod_name, mod_path) + mod = fake_module(mod_name, mod_path, force_support=force_support) if mod: module_cache[mod_name] = mod diff --git a/release/scripts/modules/animsys_refactor.py b/release/scripts/modules/animsys_refactor.py index 64110b0f620..f97ba3c2a50 100644 --- a/release/scripts/modules/animsys_refactor.py +++ b/release/scripts/modules/animsys_refactor.py @@ -35,9 +35,9 @@ def drepr(string): class DataPathBuilder(object): - __slots__ = ("data_path", ) """ Dummy class used to parse fcurve and driver data paths. """ + __slots__ = ("data_path", ) def __init__(self, attrs): self.data_path = attrs diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py index e6d0fbb99a2..4173d71b39c 100644 --- a/release/scripts/modules/bpy/path.py +++ b/release/scripts/modules/bpy/path.py @@ -154,25 +154,23 @@ def resolve_ncase(path): returning a string with the path if found else return the original path. """ - import os - def _ncase_path_found(path): - if not path or os.path.exists(path): + if not path or _os.path.exists(path): return path, True # filename may be a directory or a file - filename = os.path.basename(path) - dirpath = os.path.dirname(path) + filename = _os.path.basename(path) + dirpath = _os.path.dirname(path) suffix = path[:0] # "" but ensure byte/str match if not filename: # dir ends with a slash? if len(dirpath) < len(path): suffix = path[:len(path) - len(dirpath)] - filename = os.path.basename(dirpath) - dirpath = os.path.dirname(dirpath) + filename = _os.path.basename(dirpath) + dirpath = _os.path.dirname(dirpath) - if not os.path.exists(dirpath): + if not _os.path.exists(dirpath): if dirpath == path: return path, False @@ -184,8 +182,8 @@ def resolve_ncase(path): # at this point, the directory exists but not the file # we are expecting 'dirpath' to be a directory, but it could be a file - if os.path.isdir(dirpath): - files = os.listdir(dirpath) + if _os.path.isdir(dirpath): + files = _os.listdir(dirpath) else: return path, False @@ -198,7 +196,7 @@ def resolve_ncase(path): break if f_iter_nocase: - return os.path.join(dirpath, f_iter_nocase) + suffix, True + return _os.path.join(dirpath, f_iter_nocase) + suffix, True else: # cant find the right one, just return the path as is. return path, False @@ -216,8 +214,7 @@ def ensure_ext(filepath, ext, case_sensitive=False): :arg case_sensitive: Check for matching case when comparing extensions. :type case_sensitive: bool """ - import os - fn_base, fn_ext = os.path.splitext(filepath) + fn_base, fn_ext = _os.path.splitext(filepath) if fn_base and fn_ext: if ((case_sensitive and ext == fn_ext) or (ext.lower() == fn_ext.lower())): diff --git a/release/scripts/presets/camera/Sony_A55.py b/release/scripts/presets/camera/Sony_A55.py new file mode 100644 index 00000000000..b0f172206fa --- /dev/null +++ b/release/scripts/presets/camera/Sony_A55.py @@ -0,0 +1,4 @@ +import bpy +bpy.context.object.data.sensor_width = 23.4 +bpy.context.object.data.sensor_height = 15.6 +bpy.context.object.data.sensor_fit = 'HORIZONTAL' diff --git a/release/scripts/presets/tracking_camera/Sony_A55.py b/release/scripts/presets/tracking_camera/Sony_A55.py new file mode 100644 index 00000000000..5805bfa41db --- /dev/null +++ b/release/scripts/presets/tracking_camera/Sony_A55.py @@ -0,0 +1,10 @@ +import bpy +camera = bpy.context.edit_movieclip.tracking.camera + +camera.sensor_width = 23.4 +camera.units = 'MILLIMETERS' +camera.focal_length = 24.0 +camera.pixel_aspect = 1 +camera.k1 = 0.0 +camera.k2 = 0.0 +camera.k3 = 0.0 diff --git a/release/scripts/startup/bl_operators/clip.py b/release/scripts/startup/bl_operators/clip.py index 55592621112..59c4f88251d 100644 --- a/release/scripts/startup/bl_operators/clip.py +++ b/release/scripts/startup/bl_operators/clip.py @@ -24,27 +24,28 @@ from bpy.types import Operator from bpy_extras.io_utils import unpack_list +def CLIP_track_view_selected(sc, track): + if track.select_anchor: + return True + + if sc.show_marker_pattern and track.select_pattern: + return True + + if sc.show_marker_search and track.select_search: + return True + + return False + + class CLIP_OT_track_to_empty(Operator): """Create an Empty object which will be copying movement of active track""" bl_idname = "clip.track_to_empty" - bl_label = "2D Track to Empty" + bl_label = "Link Empty to Track" bl_options = {'UNDO', 'REGISTER'} - @classmethod - def poll(cls, context): - if context.space_data.type != 'CLIP_EDITOR': - return False - + def _link_track(self, context, track): sc = context.space_data - clip = sc.clip - - return clip and clip.tracking.tracks.active - - def execute(self, context): - sc = context.space_data - clip = sc.clip - track = clip.tracking.tracks.active constraint = None ob = None @@ -63,27 +64,30 @@ class CLIP_OT_track_to_empty(Operator): constraint.clip = sc.clip constraint.track = track.name - constraint.reference = 'TRACK' + constraint.use_3d_position = False + + def execute(self, context): + sc = context.space_data + clip = sc.clip + + for track in clip.tracking.tracks: + if CLIP_track_view_selected(sc, track): + self._link_track(context, track) return {'FINISHED'} -class CLIP_OT_bundles_to_mesh(Operator): - """Create vertex cloud using coordinates of bundles""" +class CLIP_OT_tracks_to_mesh(Operator): + """Create vertex cloud using coordinates of tracks""" - bl_idname = "clip.bundles_to_mesh" - bl_label = "Bundles to Mesh" + bl_idname = "clip.tracks_to_mesh" + bl_label = "Tracks to Mesh" bl_options = {'UNDO', 'REGISTER'} @classmethod def poll(cls, context): - if context.space_data.type != 'CLIP_EDITOR': - return False - sc = context.space_data - clip = sc.clip - - return clip + return (sc.type == 'CLIP_EDITOR') and sc.clip def execute(self, context): sc = context.space_data @@ -91,7 +95,7 @@ class CLIP_OT_bundles_to_mesh(Operator): new_verts = [] - mesh = bpy.data.meshes.new(name="Bundles") + mesh = bpy.data.meshes.new(name="Tracks") for track in clip.tracking.tracks: if track.has_bundle: new_verts.append(track.bundle) @@ -100,7 +104,7 @@ class CLIP_OT_bundles_to_mesh(Operator): mesh.vertices.add(len(new_verts)) mesh.vertices.foreach_set("co", unpack_list(new_verts)) - ob = bpy.data.objects.new(name="Bundles", object_data=mesh) + ob = bpy.data.objects.new(name="Tracks", object_data=mesh) bpy.context.scene.objects.link(ob) @@ -112,10 +116,13 @@ class CLIP_OT_delete_proxy(Operator): bl_idname = "clip.delete_proxy" bl_label = "Delete Proxy" - bl_options = {'UNDO', 'REGISTER'} + bl_options = {'REGISTER'} @classmethod def poll(cls, context): + if context.space_data.type != 'CLIP_EDITOR': + return False + sc = context.space_data return sc.clip @@ -179,11 +186,12 @@ class CLIP_OT_delete_proxy(Operator): class CLIP_OT_set_viewport_background(Operator): - """Set current movie clip as a camera background in 3D viewport""" + """Set current movie clip as a camera background in 3D viewport \ +(works only when a 3D viewport is visible)""" bl_idname = "clip.set_viewport_background" bl_label = "Set as Background" - bl_options = {'UNDO', 'REGISTER'} + bl_options = {'REGISTER'} @classmethod def poll(cls, context): @@ -203,7 +211,7 @@ class CLIP_OT_set_viewport_background(Operator): break if not bgpic: - bgpic = space_v3d.background_images.add() + bgpic = space_v3d.background_images.new() bgpic.source = 'MOVIE' bgpic.clip = clip @@ -228,7 +236,8 @@ class CLIP_OT_set_viewport_background(Operator): class CLIP_OT_constraint_to_fcurve(Operator): - """Create F-Curves for object which will copy object's movement caused by this constraint""" + """Create F-Curves for object which will copy \ +object's movement caused by this constraint""" bl_idname = "clip.constraint_to_fcurve" bl_label = "Constraint to F-Curve" @@ -250,14 +259,10 @@ class CLIP_OT_constraint_to_fcurve(Operator): con = x if not con: - return - - if con.type == 'FOLLOW_TRACK' and con.reference == 'BUNDLE': - mat = ob.matrix_world.copy() - ob.constraints.remove(con) - ob.matrix_world = mat + self.report({'ERROR'}, + "Motion Tracking constraint to be converted not found") - return + return {'CANCELLED'} # Get clip used for parenting if con.use_active_clip: @@ -266,7 +271,17 @@ class CLIP_OT_constraint_to_fcurve(Operator): clip = con.clip if not clip: - return + self.report({'ERROR'}, + "Movie clip to use tracking data from isn't set") + + return {'CANCELLED'} + + if con.type == 'FOLLOW_TRACK' and con.use_3d_position: + mat = ob.matrix_world.copy() + ob.constraints.remove(con) + ob.matrix_world = mat + + return {'FINISHED'} # Find start and end frames for track in clip.tracking.tracks: diff --git a/release/scripts/startup/bl_operators/image.py b/release/scripts/startup/bl_operators/image.py index 8c12a6442f7..c97f6eae6c7 100644 --- a/release/scripts/startup/bl_operators/image.py +++ b/release/scripts/startup/bl_operators/image.py @@ -147,7 +147,7 @@ class ProjectEdit(Operator): # opengl buffer may fail, we can't help this, but best report it. try: - ret = bpy.ops.paint.image_from_view() + bpy.ops.paint.image_from_view() except RuntimeError as err: self.report({'ERROR'}, str(err)) return {'CANCELLED'} diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py index dca96b302fb..100b21fc303 100644 --- a/release/scripts/startup/bl_operators/presets.py +++ b/release/scripts/startup/bl_operators/presets.py @@ -349,7 +349,7 @@ class AddPresetTrackingTrackColor(AddPresetBase, Operator): preset_menu = "CLIP_MT_track_color_presets" preset_defines = [ - "track = bpy.context.edit_movieclip.tracking.tracks" + "track = bpy.context.edit_movieclip.tracking.tracks.active" ] preset_values = [ diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py index aa661b76512..14c9a090529 100644 --- a/release/scripts/startup/bl_operators/wm.py +++ b/release/scripts/startup/bl_operators/wm.py @@ -106,7 +106,7 @@ def operator_path_is_undo(context, data_path): # luckily we don't do this! # # When we cant find the data owner assume no undo is needed. - data_path_head, data_path_sep, data_path_tail = data_path.rpartition(".") + data_path_head = data_path.rpartition(".")[0] if not data_path_head: return False diff --git a/release/scripts/startup/bl_ui/__init__.py b/release/scripts/startup/bl_ui/__init__.py index 3db768f73fe..6aa08a7f50d 100644 --- a/release/scripts/startup/bl_ui/__init__.py +++ b/release/scripts/startup/bl_ui/__init__.py @@ -116,11 +116,15 @@ def register(): ) WindowManager.addon_support = EnumProperty( - items=[('OFFICIAL', "Official", ""), - ('COMMUNITY', 'Community', ""), + items=[('OFFICIAL', "Official", "Officially supported"), + ('COMMUNITY', "Community", "Maintained by community developers"), + ('TESTING', "Testing", "Newly contributed scripts (excluded from release builds)"), ], name="Support", - description="Display support level", default={'OFFICIAL', 'COMMUNITY'}, options={'ENUM_FLAG'}) + description="Display support level", + default={'OFFICIAL', 'COMMUNITY'}, + options={'ENUM_FLAG'}, + ) # done... diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py index e1b08d1ff8e..288f04b084e 100644 --- a/release/scripts/startup/bl_ui/properties_data_modifier.py +++ b/release/scripts/startup/bl_ui/properties_data_modifier.py @@ -414,6 +414,80 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel): row.operator("object.multires_external_save", text="Save External...") row.label() + def OCEAN(self, layout, ob, md): + if not md.is_build_enabled: + layout.label("Built without OceanSim modifier") + return + + layout.prop(md, "geometry_mode") + + if md.geometry_mode == 'GENERATE': + row = layout.row() + row.prop(md, "repeat_x") + row.prop(md, "repeat_y") + + layout.separator() + + flow = layout.column_flow() + flow.prop(md, "time") + flow.prop(md, "resolution") + flow.prop(md, "spatial_size") + flow.prop(md, "depth") + + layout.label("Waves:") + + split = layout.split() + + col = split.column() + col.prop(md, "choppiness") + col.prop(md, "wave_scale", text="Scale") + col.prop(md, "wave_scale_min") + col.prop(md, "wind_velocity") + + col = split.column() + col.prop(md, "wave_alignment", text="Alignment") + sub = col.column() + sub.active = md.wave_alignment > 0 + sub.prop(md, "wave_direction", text="Direction") + sub.prop(md, "damping") + + layout.separator() + + layout.prop(md, "use_normals") + + split = layout.split() + + col = split.column() + col.prop(md, "use_foam") + sub = col.row() + sub.active = md.use_foam + sub.prop(md, "foam_coverage", text="Coverage") + + col = split.column() + col.active = md.use_foam + col.label("Foam Data Layer Name:") + col.prop(md, "foam_layer_name", text="") + + layout.separator() + + if md.is_cached: + layout.operator("object.ocean_bake", text="Free Bake").free = True + else: + layout.operator("object.ocean_bake") + + split = layout.split() + split.enabled = not md.is_cached + + col = split.column(align=True) + col.prop(md, "frame_start", text="Start") + col.prop(md, "frame_end", text="End") + + col = split.column(align=True) + col.label(text="Cache path:") + col.prop(md, "filepath", text="") + + #col.prop(md, "bake_foam_fade") + def PARTICLE_INSTANCE(self, layout, ob, md): layout.prop(md, "object") layout.prop(md, "particle_system_index", text="Particle System") diff --git a/release/scripts/startup/bl_ui/properties_object_constraint.py b/release/scripts/startup/bl_ui/properties_object_constraint.py index 508818b62dc..038d7a38fd6 100644 --- a/release/scripts/startup/bl_ui/properties_object_constraint.py +++ b/release/scripts/startup/bl_ui/properties_object_constraint.py @@ -420,7 +420,9 @@ class ConstraintButtonsPanel(): layout.prop(con, "volume") - self.space_template(layout, con) + row = layout.row() + row.label(text="Convert:") + row.prop(con, "owner_space", text="") def COPY_TRANSFORMS(self, context, layout, con): self.target_template(layout, con) @@ -754,15 +756,15 @@ class ConstraintButtonsPanel(): col.prop(con, "rotation_range", text="Pivot When") def FOLLOW_TRACK(self, context, layout, con): - layout.prop(con, "use_active_clip") + row = layout.row() + row.prop(con, "use_active_clip") + row.prop(con, "use_3d_position") if not con.use_active_clip: layout.prop(con, "clip") layout.prop(con, "track") - layout.row().prop(con, "reference", expand=True) - layout.operator("clip.constraint_to_fcurve") def CAMERA_SOLVER(self, context, layout, con): diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py index a541f43be66..f7f67527b63 100644 --- a/release/scripts/startup/bl_ui/properties_particle.py +++ b/release/scripts/startup/bl_ui/properties_particle.py @@ -262,10 +262,6 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel): return psys.settings.type == 'HAIR' and (engine in cls.COMPAT_ENGINES) def draw_header(self, context): - #cloth = context.cloth.collision_settings - - #self.layout.active = cloth_panel_enabled(context.cloth) - #self.layout.prop(cloth, "use_collision", text="") psys = context.particle_system self.layout.prop(psys, "use_hair_dynamics", text="") diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py index a934e103c35..68fa0cedaa3 100644 --- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py +++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py @@ -46,7 +46,6 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel): layout = self.layout md = context.dynamic_paint - ob = context.object layout.prop(md, "ui_type", expand=True) @@ -99,8 +98,8 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel): split = layout.split() col = split.column() - col.prop(brush, "absolute_alpha") - col.prop(brush, "paint_erase") + col.prop(brush, "use_absolute_alpha") + col.prop(brush, "use_paint_erase") col.prop(brush, "paint_wetness", text="Wetness") col = split.column() @@ -129,7 +128,6 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel): canvas = context.dynamic_paint.canvas_settings surface = canvas.canvas_surfaces.active - ob = context.object surface_type = surface.surface_type @@ -168,7 +166,7 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel): row.prop(surface, "displace_factor") elif surface_type == 'WAVE': - layout.prop(surface, "wave_open_borders") + layout.prop(surface, "use_wave_open_border") split = layout.split() @@ -213,33 +211,33 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel): # paintmap output row = layout.row() - row.prop_search(surface, "output_name", ob.data, "vertex_colors", text="Paintmap layer: ") + row.prop_search(surface, "output_name_a", ob.data, "vertex_colors", text="Paintmap layer: ") if surface.output_exists(object=ob, index=0): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' - row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 + row.operator("dpaint.output_toggle", icon=ic, text="").output = 'A' # wetmap output row = layout.row() - row.prop_search(surface, "output_name2", ob.data, "vertex_colors", text="Wetmap layer: ") + row.prop_search(surface, "output_name_b", ob.data, "vertex_colors", text="Wetmap layer: ") if surface.output_exists(object=ob, index=1): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' - row.operator("dpaint.output_toggle", icon=ic, text="").index = 1 + row.operator("dpaint.output_toggle", icon=ic, text="").output = 'B' elif surface_type == 'WEIGHT': row = layout.row() - row.prop_search(surface, "output_name", ob, "vertex_groups", text="Vertex Group: ") + row.prop_search(surface, "output_name_a", ob, "vertex_groups", text="Vertex Group: ") if surface.output_exists(object=ob, index=0): ic = 'ZOOMOUT' else: ic = 'ZOOMIN' - row.operator("dpaint.output_toggle", icon=ic, text="").index = 0 + row.operator("dpaint.output_toggle", icon=ic, text="").output = 'A' # image format outputs if surface.surface_format == 'IMAGE': @@ -250,23 +248,23 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel): layout.prop(surface, "image_output_path", text="") row = layout.row() row.prop(surface, "image_fileformat", text="") - row.prop(surface, "premultiply", text="Premultiply alpha") + row.prop(surface, "use_premultiply", text="Premultiply alpha") if surface_type == 'PAINT': split = layout.split(percentage=0.4) - split.prop(surface, "do_output1", text="Paintmaps:") + split.prop(surface, "use_output_a", text="Paintmaps:") sub = split.row() - sub.active = surface.do_output1 - sub.prop(surface, "output_name", text="") + sub.active = surface.use_output_a + sub.prop(surface, "output_name_a", text="") split = layout.split(percentage=0.4) - split.prop(surface, "do_output2", text="Wetmaps:") + split.prop(surface, "use_output_b", text="Wetmaps:") sub = split.row() - sub.active = surface.do_output2 - sub.prop(surface, "output_name2", text="") + sub.active = surface.use_output_b + sub.prop(surface, "output_name_b", text="") else: col = layout.column() - col.prop(surface, "output_name", text="Filename: ") + col.prop(surface, "output_name_a", text="Filename: ") if surface_type == 'DISPLACE': col.prop(surface, "displace_type", text="Displace Type") col.prop(surface, "depth_clamp") @@ -367,11 +365,9 @@ class PHYSICS_PT_dp_cache(PhysicButtonsPanel, Panel): md.ui_type == 'CANVAS' and md.canvas_settings and md.canvas_settings.canvas_surfaces.active and - md.canvas_settings.canvas_surfaces.active.uses_cache) + md.canvas_settings.canvas_surfaces.active.is_cache_user) def draw(self, context): - layout = self.layout - surface = context.dynamic_paint.canvas_settings.canvas_surfaces.active cache = surface.point_cache @@ -411,21 +407,21 @@ class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, Panel): split = layout.row().split(percentage=0.4) sub = split.column() if brush.paint_source == 'DISTANCE': - sub.prop(brush, "proximity_project") + sub.prop(brush, "use_proximity_project") elif brush.paint_source == 'VOLUME_DISTANCE': - sub.prop(brush, "proximity_inverse") - sub.prop(brush, "negate_volume") + sub.prop(brush, "invert_proximity") + sub.prop(brush, "use_negative_volume") sub = split.column() if brush.paint_source == 'DISTANCE': column = sub.column() - column.active = brush.proximity_project + column.active = brush.use_proximity_project column.prop(brush, "ray_direction") sub.prop(brush, "proximity_falloff") if brush.proximity_falloff == 'RAMP': col = layout.row().column() col.separator() - col.prop(brush, "proximity_ramp_alpha", text="Only Use Alpha") + col.prop(brush, "use_proximity_ramp_alpha", text="Only Use Alpha") col.template_color_ramp(brush, "paint_ramp", expand=True) @@ -442,26 +438,25 @@ class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, Panel): layout = self.layout brush = context.dynamic_paint.brush_settings - ob = context.object split = layout.split() col = split.column() - col.prop(brush, "velocity_alpha") - col.prop(brush, "velocity_color") + col.prop(brush, "use_velocity_alpha") + col.prop(brush, "use_velocity_color") - split.prop(brush, "velocity_depth") + split.prop(brush, "use_velocity_depth") col = layout.column() - col.active = (brush.velocity_alpha or brush.velocity_color or brush.velocity_depth) - col.prop(brush, "max_velocity") + col.active = (brush.use_velocity_alpha or brush.use_velocity_color or brush.use_velocity_depth) + col.prop(brush, "velocity_max") col.template_color_ramp(brush, "velocity_ramp", expand=True) layout.separator() row = layout.row() - row.prop(brush, "do_smudge") + row.prop(brush, "use_smudge") sub = row.row() - sub.active = brush.do_smudge + sub.active = brush.use_smudge sub.prop(brush, "smudge_strength") @@ -478,7 +473,6 @@ class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, Panel): layout = self.layout brush = context.dynamic_paint.brush_settings - ob = context.object layout.prop(brush, "wave_type") if brush.wave_type != 'REFLECT': diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py index 86880b9ddec..05f4887a542 100644 --- a/release/scripts/startup/bl_ui/properties_scene.py +++ b/release/scripts/startup/bl_ui/properties_scene.py @@ -195,14 +195,13 @@ class SCENE_PT_simplify(SceneButtonsPanel, Panel): COMPAT_ENGINES = {'BLENDER_RENDER'} def draw_header(self, context): - scene = context.scene - rd = scene.render + rd = context.scene.render self.layout.prop(rd, "use_simplify", text="") def draw(self, context): layout = self.layout - scene = context.scene - rd = scene.render + + rd = context.scene.render layout.active = rd.use_simplify diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py index 9ba0309aacd..6b4cfa8fb95 100644 --- a/release/scripts/startup/bl_ui/properties_texture.py +++ b/release/scripts/startup/bl_ui/properties_texture.py @@ -774,6 +774,22 @@ class TEXTURE_PT_pointdensity_turbulence(TextureButtonsPanel, Panel): col.prop(pd, "turbulence_strength") +class TEXTURE_PT_ocean(TextureTypePanel, Panel): + bl_label = "Ocean" + tex_type = 'OCEAN' + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} + + def draw(self, context): + layout = self.layout + + tex = context.texture + ot = tex.ocean + + col = layout.column() + col.prop(ot, "ocean_object") + col.prop(ot, "output") + + class TEXTURE_PT_mapping(TextureSlotPanel, Panel): bl_label = "Mapping" COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py index 55fc641f5ae..a70d632e8b0 100644 --- a/release/scripts/startup/bl_ui/space_clip.py +++ b/release/scripts/startup/bl_ui/space_clip.py @@ -54,11 +54,17 @@ class CLIP_HT_header(Header): row = layout.row(align=True) if sc.show_filters: - row.prop(sc, "show_filters", icon='DISCLOSURE_TRI_DOWN', text="Filters") - row.prop(sc, "show_graph_frames", icon='SEQUENCE', text="") + row.prop(sc, "show_filters", icon='DISCLOSURE_TRI_DOWN', + text="Filters") + + sub = row.column() + sub.active = clip.tracking.reconstruction.is_valid + sub.prop(sc, "show_graph_frames", icon='SEQUENCE', text="") + row.prop(sc, "show_graph_tracks", icon='ANIM', text="") else: - row.prop(sc, "show_filters", icon='DISCLOSURE_TRI_RIGHT', text="Filters") + row.prop(sc, "show_filters", icon='DISCLOSURE_TRI_RIGHT', + text="Filters") row = layout.row() row.template_ID(sc, "clip", open='clip.open') @@ -109,7 +115,6 @@ class CLIP_PT_tools_tracking(Panel): def draw(self, context): layout = self.layout clip = context.space_data.clip - settings = clip.tracking.settings row = layout.row(align=True) @@ -130,16 +135,16 @@ class CLIP_PT_tools_tracking(Panel): props = col.operator("clip.clear_track_path", text="Clear Before") props.action = 'UPTO' - props = col.operator("clip.clear_track_path", text="Clear Track Path") + props = col.operator("clip.clear_track_path", text="Clear") props.action = 'ALL' - layout.operator("clip.join_tracks") + layout.operator("clip.join_tracks", text="Join") -class CLIP_PT_tools_solving(Panel): +class CLIP_PT_tools_solve(Panel): bl_space_type = 'CLIP_EDITOR' bl_region_type = 'TOOLS' - bl_label = "Solving" + bl_label = "Solve" @classmethod def poll(cls, context): @@ -154,13 +159,17 @@ class CLIP_PT_tools_solving(Panel): settings = clip.tracking.settings col = layout.column(align=True) - col.operator("clip.solve_camera") + col.operator("clip.solve_camera", text="Camera Motion") col.operator("clip.clear_solution") col = layout.column(align=True) col.prop(settings, "keyframe_a") col.prop(settings, "keyframe_b") + col = layout.column(align=True) + col.label(text="Refine:") + col.prop(settings, "refine_intrinsics", text="") + class CLIP_PT_tools_cleanup(Panel): bl_space_type = 'CLIP_EDITOR' @@ -201,7 +210,7 @@ class CLIP_PT_tools_geometry(Panel): def draw(self, context): layout = self.layout - layout.operator("clip.bundles_to_mesh") + layout.operator("clip.tracks_to_mesh") layout.operator("clip.track_to_empty") @@ -223,7 +232,6 @@ class CLIP_PT_tools_orientation(Panel): settings = sc.clip.tracking.settings col = layout.column(align=True) - col.label(text="Scene Orientation:") col.operator("clip.set_floor") col.operator("clip.set_origin") @@ -367,7 +375,7 @@ class CLIP_PT_tracking_camera(Panel): col.prop(clip.tracking.camera, "pixel_aspect") col = layout.column() - col.label(text="Principal Point") + col.label(text="Optical Center:") row = col.row() row.prop(clip.tracking.camera, "principal", text="") col.operator("clip.set_center_principal", text="Center") @@ -402,8 +410,8 @@ class CLIP_PT_display(Panel): col.prop(sc, "show_disabled", "Disabled Tracks") col.prop(sc, "show_bundles", text="Bundles") - col.prop(sc, "show_names", text="Track Names") - col.prop(sc, "show_tiny_markers", text="Tiny Markers") + col.prop(sc, "show_names", text="Track Names and Status") + col.prop(sc, "show_tiny_markers", text="Compact Markers") col.prop(sc, "show_grease_pencil", text="Grease Pencil") col.prop(sc, "use_mute_footage", text="Mute") @@ -418,7 +426,7 @@ class CLIP_PT_display(Panel): clip = sc.clip if clip: - col.label(text="Display Aspect:") + col.label(text="Display Aspect Ratio:") col.prop(clip, "display_aspect", text="") @@ -466,16 +474,14 @@ class CLIP_PT_stabilization(Panel): return sc.mode == 'RECONSTRUCTION' and sc.clip def draw_header(self, context): - sc = context.space_data - tracking = sc.clip.tracking - stab = tracking.stabilization - + stab = context.space_data.clip.tracking.stabilization + self.layout.prop(stab, "use_2d_stabilization", text="") def draw(self, context): layout = self.layout - sc = context.space_data - tracking = sc.clip.tracking + + tracking = context.space_data.clip.tracking stab = tracking.stabilization layout.active = stab.use_2d_stabilization @@ -493,23 +499,21 @@ class CLIP_PT_stabilization(Panel): layout.prop(stab, "influence_location") - layout.separator() - layout.prop(stab, "use_autoscale") col = layout.column() col.active = stab.use_autoscale col.prop(stab, "scale_max") col.prop(stab, "influence_scale") - layout.separator() - - layout.label(text="Rotation:") + layout.prop(stab, "use_stabilize_rotation") + col = layout.column() + col.active = stab.use_stabilize_rotation - row = layout.row(align=True) + row = col.row(align=True) row.prop_search(stab, "rotation_track", tracking, "tracks", text="") row.operator("clip.stabilize_2d_set_rotation", text="", icon='ZOOMIN') - row = layout.row() + row = col.row() row.active = stab.rotation_track is not None row.prop(stab, "influence_rotation") @@ -634,7 +638,6 @@ class CLIP_PT_tools_clip(Panel): def draw(self, context): layout = self.layout - clip = context.space_data.clip layout.operator("clip.set_viewport_background") @@ -691,9 +694,6 @@ class CLIP_MT_proxy(Menu): def draw(self, context): layout = self.layout - sc = context.space_data - clip = sc.clip - layout.operator("clip.rebuild_proxy") layout.operator("clip.delete_proxy") @@ -714,7 +714,8 @@ class CLIP_MT_track(Menu): props = layout.operator("clip.clear_track_path", text="Clear Before") props.action = 'UPTO' - props = layout.operator("clip.clear_track_path", text="Clear Track Path") + props = layout.operator("clip.clear_track_path", + text="Clear Track Path") props.action = 'ALL' layout.separator() @@ -765,7 +766,7 @@ class CLIP_MT_reconstruction(Menu): layout.separator() layout.operator("clip.track_to_empty") - layout.operator("clip.bundles_to_mesh") + layout.operator("clip.tracks_to_mesh") class CLIP_MT_track_visibility(Menu): @@ -797,8 +798,6 @@ class CLIP_MT_select(Menu): def draw(self, context): layout = self.layout - sc = context.space_data - layout.operator("clip.select_border") layout.operator("clip.select_circle") @@ -851,6 +850,7 @@ class CLIP_MT_tracking_specials(Menu): class CLIP_MT_camera_presets(Menu): + """Predefined tracking camera intrinsics""" bl_label = "Camera Presets" preset_subdir = "tracking_camera" preset_operator = "script.execute_preset" @@ -858,6 +858,7 @@ class CLIP_MT_camera_presets(Menu): class CLIP_MT_track_color_presets(Menu): + """Predefined track color""" bl_label = "Color Presets" preset_subdir = "tracking_track_color" preset_operator = "script.execute_preset" diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index c1c9bc12b2d..06f481d2993 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -473,9 +473,9 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel): if strip.type == 'SPEED': col.prop(strip, "multiply_speed") elif strip.type in {'CROSS', 'GAMMA_CROSS', 'PLUGIN', 'WIPE'}: - col.prop(strip, "use_default_fade", "Default fade") - if not strip.use_default_fade: - col.prop(strip, "effect_fader", text="Effect fader") + col.prop(strip, "use_default_fade", "Default fade") + if not strip.use_default_fade: + col.prop(strip, "effect_fader", text="Effect fader") layout.prop(strip, "use_translation", text="Image Offset:") if strip.use_translation: diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index 51f55fe019c..d71d57509c1 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -634,12 +634,51 @@ class USERPREF_PT_theme(Panel): colsub.row().prop(ui, "inner_key_sel") colsub.row().prop(ui, "blend") + col.separator() + col.separator() + ui = theme.user_interface + col.label("Icons:") + + row = col.row() + + subsplit = row.split(percentage=0.95) + + padding = subsplit.split(percentage=0.15) + colsub = padding.column() + colsub = padding.column() + colsub.row().prop(ui, "icon_file") + + subsplit = row.split(percentage=0.85) + + padding = subsplit.split(percentage=0.15) + colsub = padding.column() + colsub = padding.column() + colsub.row().prop(ui, "icon_alpha") + col.separator() col.separator() - split = col.split(percentage=0.93) - split.prop(ui, "icon_file") + ui = theme.user_interface.panel + col.label("Panels:") + + row = col.row() + + subsplit = row.split(percentage=0.95) + + padding = subsplit.split(percentage=0.15) + colsub = padding.column() + colsub = padding.column() + rowsub = colsub.row() + rowsub.prop(ui, "show_header") + rowsub.label() + + subsplit = row.split(percentage=0.85) + + padding = subsplit.split(percentage=0.15) + colsub = padding.column() + colsub = padding.column() + colsub.row().prop(ui, "header") layout.separator() layout.separator() @@ -765,10 +804,9 @@ class USERPREF_MT_ndof_settings(Menu): layout.label(text="Orbit options") 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.prop(input_prefs, "ndof_tilt_invert_axis") + layout.prop(input_prefs, "ndof_rotate_invert_axis") + layout.prop(input_prefs, "ndof_zoom_invert") layout.separator() layout.label(text="Pan options") @@ -776,6 +814,9 @@ class USERPREF_MT_ndof_settings(Menu): layout.prop(input_prefs, "ndof_pany_invert_axis") layout.prop(input_prefs, "ndof_panz_invert_axis") + layout.label(text="Zoom options") + layout.prop(input_prefs, "ndof_zoom_updown") + layout.separator() layout.label(text="Fly options") layout.prop(input_prefs, "ndof_fly_helicopter", icon='NDOF_FLY') @@ -889,6 +930,12 @@ class USERPREF_PT_addons(Panel): bl_region_type = 'WINDOW' bl_options = {'HIDE_HEADER'} + _support_icon_mapping = { + 'OFFICIAL': 'FILE_BLEND', + 'COMMUNITY': 'POSE_DATA', + 'TESTING': 'MOD_EXPLODE', + } + @classmethod def poll(cls, context): userpref = context.user_preferences @@ -929,12 +976,13 @@ class USERPREF_PT_addons(Panel): split = layout.split(percentage=0.2) col = split.column() col.prop(context.window_manager, "addon_search", text="", icon='VIEWZOOM') - col.label(text="Categories") - col.prop(context.window_manager, "addon_filter", expand=True) col.label(text="Supported Level") col.prop(context.window_manager, "addon_support", expand=True) + col.label(text="Categories") + col.prop(context.window_manager, "addon_filter", expand=True) + col = split.column() # set in addon_utils.modules(...) @@ -993,12 +1041,7 @@ class USERPREF_PT_addons(Panel): rowsub.label(icon='ERROR') # icon showing support level. - if info["support"] == 'OFFICIAL': - rowsub.label(icon='FILE_BLEND') - elif info["support"] == 'COMMUNITY': - rowsub.label(icon='POSE_DATA') - else: - rowsub.label(icon='QUESTION') + rowsub.label(icon=self._support_icon_mapping.get(info["support"], 'QUESTION')) if is_enabled: row.operator("wm.addon_disable", icon='CHECKBOX_HLT', text="", emboss=False).module = module_name diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 1314401a1ef..0753b49f69f 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -55,8 +55,8 @@ class VIEW3D_HT_header(Header): sub.menu("VIEW3D_MT_object") # Contains buttons like Mode, Pivot, Manipulator, Layer, Mesh Select Mode... - row = layout.row() # XXX Narrowed down vert/edge/face selector in edit mode/solid drawmode. -DingTo - row.template_header_3D() + row = layout + layout.template_header_3D() if obj: # Particle edit @@ -366,6 +366,7 @@ class VIEW3D_MT_view_align(Menu): layout.operator("view3d.view_all", text="Center Cursor and View All").center = True layout.operator("view3d.camera_to_view", text="Align Active Camera to View") + layout.operator("view3d.camera_to_view_selected", text="Align Active Camera to Selected") layout.operator("view3d.view_selected") layout.operator("view3d.view_center_cursor") @@ -524,7 +525,7 @@ class VIEW3D_MT_select_edit_mesh(Menu): layout.operator("mesh.select_by_number_vertices", text="Triangles").type = 'TRIANGLES' layout.operator("mesh.select_by_number_vertices", text="Quads").type = 'QUADS' if context.scene.tool_settings.mesh_select_mode[2] == False: - layout.operator("mesh.select_non_manifold", text="Non Manifold") + layout.operator("mesh.select_non_manifold", text="Non Manifold") layout.operator("mesh.select_by_number_vertices", text="Loose Verts/Edges").type = 'OTHER' layout.operator("mesh.select_similar", text="Similar") @@ -1839,32 +1840,32 @@ class VIEW3D_MT_edit_text_chars(Menu): def draw(self, context): layout = self.layout - layout.operator("font.text_insert", text="Copyright|Alt C").text = b'\xC2\xA9'.decode() - layout.operator("font.text_insert", text="Registered Trademark|Alt R").text = b'\xC2\xAE'.decode() + layout.operator("font.text_insert", text="Copyright|Alt C").text = "\u00A9" + layout.operator("font.text_insert", text="Registered Trademark|Alt R").text = "\u00AE" layout.separator() - layout.operator("font.text_insert", text="Degree Sign|Alt G").text = b'\xC2\xB0'.decode() - layout.operator("font.text_insert", text="Multiplication Sign|Alt x").text = b'\xC3\x97'.decode() - layout.operator("font.text_insert", text="Circle|Alt .").text = b'\xC2\x8A'.decode() - layout.operator("font.text_insert", text="Superscript 1|Alt 1").text = b'\xC2\xB9'.decode() - layout.operator("font.text_insert", text="Superscript 2|Alt 2").text = b'\xC2\xB2'.decode() - layout.operator("font.text_insert", text="Superscript 3|Alt 3").text = b'\xC2\xB3'.decode() - layout.operator("font.text_insert", text="Double >>|Alt >").text = b'\xC2\xBB'.decode() - layout.operator("font.text_insert", text="Double <<|Alt <").text = b'\xC2\xAB'.decode() - layout.operator("font.text_insert", text="Promillage|Alt %").text = b'\xE2\x80\xB0'.decode() + layout.operator("font.text_insert", text="Degree Sign|Alt G").text = "\u00B0" + layout.operator("font.text_insert", text="Multiplication Sign|Alt x").text = "\u00D7" + layout.operator("font.text_insert", text="Circle|Alt .").text = "\u008A" + layout.operator("font.text_insert", text="Superscript 1|Alt 1").text = "\u00B9" + layout.operator("font.text_insert", text="Superscript 2|Alt 2").text = "\u00B2" + layout.operator("font.text_insert", text="Superscript 3|Alt 3").text = "\u00B3" + layout.operator("font.text_insert", text="Double >>|Alt >").text = "\u00BB" + layout.operator("font.text_insert", text="Double <<|Alt <").text = "\u00AB" + layout.operator("font.text_insert", text="Promillage|Alt %").text = "\u2030" layout.separator() - layout.operator("font.text_insert", text="Dutch Florin|Alt F").text = b'\xC2\xA4'.decode() - layout.operator("font.text_insert", text="British Pound|Alt L").text = b'\xC2\xA3'.decode() - layout.operator("font.text_insert", text="Japanese Yen|Alt Y").text = b'\xC2\xA5'.decode() + layout.operator("font.text_insert", text="Dutch Florin|Alt F").text = "\u00A4" + layout.operator("font.text_insert", text="British Pound|Alt L").text = "\u00A3" + layout.operator("font.text_insert", text="Japanese Yen|Alt Y").text = "\u00A5" layout.separator() - layout.operator("font.text_insert", text="German S|Alt S").text = b'\xC3\x9F'.decode() - layout.operator("font.text_insert", text="Spanish Question Mark|Alt ?").text = b'\xC2\xBF'.decode() - layout.operator("font.text_insert", text="Spanish Exclamation Mark|Alt !").text = b'\xC2\xA1'.decode() + layout.operator("font.text_insert", text="German S|Alt S").text = "\u00DF" + layout.operator("font.text_insert", text="Spanish Question Mark|Alt ?").text = "\u00BF" + layout.operator("font.text_insert", text="Spanish Exclamation Mark|Alt !").text = "\u00A1" class VIEW3D_MT_edit_meta(Menu): @@ -2174,16 +2175,6 @@ class VIEW3D_PT_view3d_display(Panel): layout.separator() - layout.prop(view, "show_reconstruction") - if view.show_reconstruction: - layout.label(text="Bundle type:") - layout.prop(view, "bundle_draw_type", text="") - layout.prop(view, "bundle_draw_size") - layout.prop(view, "show_bundle_name") - layout.prop(view, "show_camera_path") - - layout.separator() - region = view.region_quadview layout.operator("screen.region_quadview", text="Toggle Quad View") @@ -2199,6 +2190,36 @@ class VIEW3D_PT_view3d_display(Panel): row.prop(region, "use_box_clip") +class VIEW3D_PT_view3d_motion_tracking(Panel): + bl_space_type = 'VIEW_3D' + bl_region_type = 'UI' + bl_label = "Motion Tracking" + bl_options = {'DEFAULT_CLOSED'} + + @classmethod + def poll(cls, context): + view = context.space_data + return (view) + + def draw_header(self, context): + view = context.space_data + + self.layout.prop(view, "show_reconstruction", text="") + + def draw(self, context): + layout = self.layout + + view = context.space_data + + col = layout.column() + col.active = view.show_reconstruction + col.prop(view, "show_tracks_name") + col.prop(view, "show_camera_path") + col.label(text="Tracks:") + col.prop(view, "tracks_draw_type", text="") + col.prop(view, "tracks_draw_size", text="Size") + + class VIEW3D_PT_view3d_meshdisplay(Panel): bl_space_type = 'VIEW_3D' bl_region_type = 'UI' @@ -2266,17 +2287,10 @@ class VIEW3D_PT_background_image(Panel): bl_label = "Background Images" bl_options = {'DEFAULT_CLOSED'} - @classmethod - def poll(cls, context): - view = context.space_data - #~ bg = context.space_data.background_image - return (view) - def draw_header(self, context): - layout = self.layout view = context.space_data - layout.prop(view, "show_background_images", text="") + self.layout.prop(view, "show_background_images", text="") def draw(self, context): layout = self.layout @@ -2293,7 +2307,7 @@ class VIEW3D_PT_background_image(Panel): row.prop(bg, "show_expanded", text="", emboss=False) if bg.source == 'IMAGE' and bg.image: row.prop(bg.image, "name", text="", emboss=False) - if bg.source == 'MOVIE' and bg.clip: + elif bg.source == 'MOVIE' and bg.clip: row.prop(bg.clip, "name", text="", emboss=False) else: row.label(text="Not Set") @@ -2305,16 +2319,15 @@ class VIEW3D_PT_background_image(Panel): row = box.row() row.prop(bg, "source", expand=True) - hasbg = False + has_bg = False if bg.source == 'IMAGE': row = box.row() row.template_ID(bg, "image", open="image.open") if (bg.image): box.template_image(bg, "image", bg.image_user, compact=True) - hasbg = True + has_bg = True elif bg.source == 'MOVIE': - has_clip = False box.prop(bg, 'use_camera_clip') column = box.column() @@ -2325,14 +2338,14 @@ class VIEW3D_PT_background_image(Panel): column.template_movieclip(bg, "clip", compact=True) if bg.use_camera_clip or bg.clip: - hasbg = True + has_bg = True column = box.column() - column.active = hasbg + column.active = has_bg column.prop(bg.clip_user, "proxy_render_size", text="") column.prop(bg.clip_user, "use_render_undistorted") - if hasbg: + if has_bg: box.prop(bg, "opacity", slider=True) if bg.view_axis != 'CAMERA': box.prop(bg, "size") @@ -2356,14 +2369,12 @@ class VIEW3D_PT_transform_orientations(Panel): layout = self.layout view = context.space_data + orientation = view.current_orientation col = layout.column() - col.prop(view, "transform_orientation") col.operator("transform.create_orientation", text="Create") - orientation = view.current_orientation - if orientation: col.prop(orientation, "name") col.operator("transform.delete_orientation", text="Delete") |