Commit: 345c6298e995ea618c34282ba6d7ab5af032f191 Author: Campbell Barton Date: Thu Feb 8 21:14:26 2018 +1100 Branches: blender2.8 https://developer.blender.org/rB345c6298e995ea618c34282ba6d7ab5af032f191
Object Mode: move to workspace struct - Read-only access can often use EvaluationContext.object_mode - Write access to go to WorkSpace.object_mode. - Some TODO's remain (marked as "TODO/OBMODE") - Add-ons will need updating (context.active_object.mode -> context.workspace.object_mode) - There will be small/medium issues that still need resolving this does work on a basic level though. See D3037 =================================================================== M intern/cycles/blender/blender_curves.cpp M release/scripts/modules/bpy_extras/object_utils.py M release/scripts/modules/keyingsets_utils.py M release/scripts/startup/bl_operators/freestyle.py M release/scripts/startup/bl_operators/mesh.py M release/scripts/startup/bl_operators/object.py M release/scripts/startup/bl_operators/object_quick_effects.py M release/scripts/startup/bl_operators/uvcalc_lightmap.py M release/scripts/startup/bl_operators/uvcalc_smart_project.py M release/scripts/startup/bl_operators/view3d.py M release/scripts/startup/bl_ui/properties_constraint.py M release/scripts/startup/bl_ui/properties_data_bone.py M release/scripts/startup/bl_ui/properties_data_mesh.py M release/scripts/startup/bl_ui/properties_data_modifier.py M release/scripts/startup/bl_ui/properties_material.py M release/scripts/startup/bl_ui/space_image.py M release/scripts/startup/bl_ui/space_info.py M release/scripts/startup/bl_ui/space_view3d.py M release/scripts/startup/bl_ui/space_view3d_toolbar.py M release/scripts/startup/keyingsets_builtins.py M source/blender/blenkernel/BKE_DerivedMesh.h M source/blender/blenkernel/BKE_multires.h M source/blender/blenkernel/BKE_object.h M source/blender/blenkernel/BKE_paint.h M source/blender/blenkernel/BKE_shrinkwrap.h M source/blender/blenkernel/BKE_workspace.h M source/blender/blenkernel/intern/cdderivedmesh.c M source/blender/blenkernel/intern/context.c M source/blender/blenkernel/intern/multires.c M source/blender/blenkernel/intern/object.c M source/blender/blenkernel/intern/paint.c M source/blender/blenkernel/intern/particle.c M source/blender/blenkernel/intern/scene.c M source/blender/blenkernel/intern/shrinkwrap.c M source/blender/blenkernel/intern/subsurf_ccg.c M source/blender/blenkernel/intern/workspace.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/versioning_250.c M source/blender/bmesh/intern/bmesh_mesh.c M source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc M source/blender/editors/armature/armature_relations.c M source/blender/editors/armature/pose_edit.c M source/blender/editors/include/ED_image.h M source/blender/editors/include/ED_info.h M source/blender/editors/include/ED_object.h M source/blender/editors/include/ED_screen.h M source/blender/editors/interface/interface_handlers.c M source/blender/editors/object/object_add.c M source/blender/editors/object/object_bake.c M source/blender/editors/object/object_bake_api.c M source/blender/editors/object/object_edit.c M source/blender/editors/object/object_modifier.c M source/blender/editors/object/object_relations.c M source/blender/editors/object/object_select.c M source/blender/editors/physics/particle_edit.c M source/blender/editors/physics/particle_object.c M source/blender/editors/render/render_update.c M source/blender/editors/screen/screen_edit.c M source/blender/editors/screen/screen_ops.c M source/blender/editors/screen/workspace_edit.c M source/blender/editors/sculpt_paint/paint_hide.c M source/blender/editors/sculpt_paint/paint_image.c M source/blender/editors/sculpt_paint/paint_utils.c M source/blender/editors/sculpt_paint/paint_vertex.c M source/blender/editors/sculpt_paint/sculpt.c M source/blender/editors/space_image/image_edit.c M source/blender/editors/space_image/image_ops.c M source/blender/editors/space_image/space_image.c M source/blender/editors/space_info/info_stats.c M source/blender/editors/space_time/space_time.c M source/blender/editors/util/ed_util.c M source/blender/makesdna/DNA_object_types.h M source/blender/makesdna/DNA_workspace_types.h M source/blender/makesrna/intern/rna_brush.c M source/blender/makesrna/intern/rna_layer.c M source/blender/makesrna/intern/rna_object.c M source/blender/makesrna/intern/rna_object_force.c M source/blender/makesrna/intern/rna_scene.c M source/blender/makesrna/intern/rna_space.c M source/blender/makesrna/intern/rna_texture.c M source/blender/makesrna/intern/rna_userdef.c M source/blender/makesrna/intern/rna_wm.c M source/blender/makesrna/intern/rna_workspace.c M source/blender/modifiers/intern/MOD_multires.c M source/blender/modifiers/intern/MOD_shrinkwrap.c M source/blender/windowmanager/WM_api.h M source/blender/windowmanager/intern/wm_event_system.c M source/blender/windowmanager/intern/wm_window.c M source/blenderplayer/bad_level_call_stubs/stubs.c =================================================================== diff --git a/intern/cycles/blender/blender_curves.cpp b/intern/cycles/blender/blender_curves.cpp index 1499390f1d5..5ed021aa1e4 100644 --- a/intern/cycles/blender/blender_curves.cpp +++ b/intern/cycles/blender/blender_curves.cpp @@ -894,7 +894,8 @@ void BlenderSync::sync_curves(Mesh *mesh, /* obtain general settings */ const bool use_curves = scene->curve_system_manager->use_curves; - if(!(use_curves && b_ob.mode() != b_ob.mode_PARTICLE_EDIT)) { + /* TODO/OBMODE, make cycles mode aware. */ + if(!(use_curves /* && b_ob.mode() != b_ob.mode_PARTICLE_EDIT */ )) { if(!motion) mesh->compute_bounds(); return; diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py index 04b3858bb0d..31938f3ad3e 100644 --- a/release/scripts/modules/bpy_extras/object_utils.py +++ b/release/scripts/modules/bpy_extras/object_utils.py @@ -119,6 +119,7 @@ def object_data_add(context, obdata, operator=None, name=None): :return: the newly created object in the scene. :rtype: :class:`bpy.types.Object` """ + workspace = context.workspace scene = context.scene layer = context.view_layer layer_collection = context.layer_collection @@ -146,9 +147,9 @@ def object_data_add(context, obdata, operator=None, name=None): # caused because entering edit-mode does not add a empty undo slot! if context.user_preferences.edit.use_enter_edit_mode: if not (obj_act and - obj_act.mode == 'EDIT' and - obj_act.type == obj_new.type): - + obj_act.type == obj_new.type and + workspace.object_mode == 'EDIT' + ): _obdata = bpy.data.meshes.new(name) obj_act = bpy.data.objects.new(_obdata.name, _obdata) obj_act.matrix_world = obj_new.matrix_world @@ -159,7 +160,10 @@ def object_data_add(context, obdata, operator=None, name=None): bpy.ops.ed.undo_push(message="Enter Editmode") # XXX - if obj_act and obj_act.mode == 'EDIT' and obj_act.type == obj_new.type: + if (obj_act and + obj_act.type == obj_new.type and + workspace.object_mode == 'EDIT' + ): bpy.ops.mesh.select_all(action='DESELECT') obj_act.select_set(action='SELECT') bpy.ops.object.mode_set(mode='OBJECT') @@ -249,9 +253,10 @@ def object_image_guess(obj, bm=None): first checking the texture-faces, then the material. """ # TODO, cycles/nodes materials + workspace = context.workspace me = obj.data if bm is None: - if obj.mode == 'EDIT': + if workspace.object_mode == 'EDIT': import bmesh bm = bmesh.from_edit_mesh(me) diff --git a/release/scripts/modules/keyingsets_utils.py b/release/scripts/modules/keyingsets_utils.py index 7ce5f3e029b..40e74e27ed2 100644 --- a/release/scripts/modules/keyingsets_utils.py +++ b/release/scripts/modules/keyingsets_utils.py @@ -57,9 +57,10 @@ def path_add_property(path, prop): # selected objects (active object must be in object mode) def RKS_POLL_selected_objects(ksi, context): + workspace = context.workspace ob = context.active_object if ob: - return ob.mode == 'OBJECT' + return workspace.object_mode == 'OBJECT' else: return bool(context.selected_objects) @@ -67,8 +68,9 @@ def RKS_POLL_selected_objects(ksi, context): # selected bones def RKS_POLL_selected_bones(ksi, context): # we must be in Pose Mode, and there must be some bones selected + workspace = context.workspace ob = context.active_object - if ob and ob.mode == 'POSE': + if ob and workspace.object_mode == 'POSE': if context.active_pose_bone or context.selected_pose_bones: return True @@ -87,8 +89,9 @@ def RKS_POLL_selected_items(ksi, context): # all selected objects or pose bones, depending on which we've got def RKS_ITER_selected_item(ksi, context, ks): + workspace = context.workspace ob = context.active_object - if ob and ob.mode == 'POSE': + if ob and workspace.object_mode == 'POSE': for bone in context.selected_pose_bones: ksi.generate(context, ks, bone) else: diff --git a/release/scripts/startup/bl_operators/freestyle.py b/release/scripts/startup/bl_operators/freestyle.py index 0cfe78879db..9b1d054cc15 100644 --- a/release/scripts/startup/bl_operators/freestyle.py +++ b/release/scripts/startup/bl_operators/freestyle.py @@ -53,6 +53,7 @@ class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator): def execute(self, context): import sys + workspace = context.workspace scene = context.scene view_layer = scene.view_layers.active lineset = view_layer.freestyle_settings.linesets.active @@ -79,7 +80,7 @@ class SCENE_OT_freestyle_fill_range_by_selection(bpy.types.Operator): return {'CANCELLED'} # Find selected vertices in editmesh ob = context.active_object - if ob.type == 'MESH' and ob.mode == 'EDIT' and ob.name != ref.name: + if ob.type == 'MESH' and workspace.object_mode == 'EDIT' and ob.name != ref.name: bpy.ops.object.mode_set(mode='OBJECT') selected_verts = [v for v in ob.data.vertices if v.select] bpy.ops.object.mode_set(mode='EDIT') @@ -143,6 +144,7 @@ class SCENE_OT_freestyle_add_edge_marks_to_keying_set(bpy.types.Operator): def execute(self, context): # active keying set + workspace = context.workspace scene = context.scene ks = scene.keying_sets.active if ks is None: @@ -150,7 +152,7 @@ class SCENE_OT_freestyle_add_edge_marks_to_keying_set(bpy.types.Operator): ks.bl_description = "" # add data paths to the keying set ob = context.active_object - ob_mode = ob.mode + ob_mode = workspace.object_mode mesh = ob.data bpy.ops.object.mode_set(mode='OBJECT', toggle=False) for i, edge in enumerate(mesh.edges): @@ -174,6 +176,7 @@ class SCENE_OT_freestyle_add_face_marks_to_keying_set(bpy.types.Operator): def execute(self, context): # active keying set + workspace = context.workspace scene = context.scene ks = scene.keying_sets.active if ks is None: @@ -181,7 +184,7 @@ class SCENE_OT_freestyle_add_face_marks_to_keying_set(bpy.types.Operator): ks.bl_description = "" # add data paths to the keying set ob = context.active_object - ob_mode = ob.mode + ob_mode = workspace.object_mode mesh = ob.data bpy.ops.object.mode_set(mode='OBJECT', toggle=False) for i, polygon in enumerate(mesh.polygons): diff --git a/release/scripts/startup/bl_operators/mesh.py b/release/scripts/startup/bl_operators/mesh.py index c7a11c23c3f..ccc592e80b8 100644 --- a/release/scripts/startup/bl_operators/mesh.py +++ b/release/scripts/startup/bl_operators/mesh.py @@ -57,8 +57,9 @@ class MeshMirrorUV(Operator): precision = self.precision double_warn = 0 + workspace = context.workspace ob = context.active_object - is_editmode = (ob.mode == 'EDIT') + is_editmode = (workspace.object_mode == 'EDIT') if is_editmode: bpy.ops.object.mode_set(mode='OBJECT', toggle=False) diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py index 566487d9d0e..58f3afa3d6c 100644 --- a/release/scripts/startup/bl_operators/object.py +++ b/release/scripts/startup/bl_operators/object.py @@ -63,12 +63,13 @@ class SelectPattern(Operator): pattern_match = (lambda a, b: fnmatch.fnmatchcase(a.upper(), b.upper())) is_ebone = False + workspace = context.workspace obj = context.object - if obj and obj.mode == 'POSE': + if obj and workspace.object_mode == 'POSE': items = obj.data.bones if not self.extend: bpy.ops.pose.select_all(action='DESELECT') - elif obj and obj.type == 'ARMATURE' and obj.mode == 'EDIT': + elif obj and obj.type == 'ARMATURE' and workspace.object_mode == 'EDIT': items = obj.data.edit_bones if not self.extend: bpy.ops.armature.select_all(action='DESELECT') @@ -248,6 +249,8 @@ class SubdivisionSet(Operator): if not relative and level < 0: self.level = level = 0 + workspace = context.workspace + def set_object_subd(obj): for mod in obj.modifiers: if mod.type == 'MULTIRES': @@ -257,18 +260,18 @@ class SubdivisionSet(Operator): for i in range(sub): bpy.ops.object.multires_subdivide(modifier="Multires") - if obj.mode == 'SCULPT': + if workspace.object_mode == 'SCULPT': if mod.sculpt_levels != level: mod.sculpt_levels = level - elif obj.mode == 'OBJECT': + elif workspace.object_mode == 'OBJECT': if mod.levels != level: mod.levels = level return else: - if obj.mode == 'SCULPT': + if workspace.object_mode == 'SCULPT': if mod.sculpt_levels + level <= mod.total_levels: mod.sculpt_levels += level - elif obj.mode == 'OBJECT': + elif workspace.object_mode == 'OBJECT': if mod.levels + level <= mod.total_levels: mod.levels += level return @@ -284,7 +287,7 @@ class SubdivisionSet(Operator): # add a new modifier try: - if obj.mode == 'SCULPT': + if workspace.object_mode == 'SCULPT': mod = obj.modifiers.new("Multires", 'MULTIRES') if @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs