[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25522] trunk/blender: - make ToolSettings . mesh_selection_mode into an array of 3 bools rather then an enum since multiple can be set at once .

Campbell Barton ideasman42 at gmail.com
Tue Dec 22 17:11:12 CET 2009


Revision: 25522
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25522
Author:   campbellbarton
Date:     2009-12-22 17:11:11 +0100 (Tue, 22 Dec 2009)

Log Message:
-----------
- make ToolSettings.mesh_selection_mode into an array of 3 bools rather then an enum since multiple can be set at once.
- ToolSettings had its id.data set to NULL when taken directly from the context (causing a crash in cases)
- menu for changing vert/edge/face selection now a python menu, removed operator.
- wm.context_set_value(), would really prefer not to have this since it evaluates the value as a python expression however there are no ways to define arrays in PyOperators

Modified Paths:
--------------
    trunk/blender/release/scripts/op/mesh_skin.py
    trunk/blender/release/scripts/op/wm.py
    trunk/blender/release/scripts/ui/space_view3d.py
    trunk/blender/source/blender/editors/mesh/editmesh_mods.c
    trunk/blender/source/blender/editors/mesh/mesh_intern.h
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/makesrna/RNA_types.h
    trunk/blender/source/blender/makesrna/intern/rna_context.c
    trunk/blender/source/blender/makesrna/intern/rna_internal.h
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/release/scripts/op/mesh_skin.py
===================================================================
--- trunk/blender/release/scripts/op/mesh_skin.py	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/release/scripts/op/mesh_skin.py	2009-12-22 16:11:11 UTC (rev 25522)
@@ -249,17 +249,16 @@
 
 
 def getSelectedEdges(context, me, ob):
-    MESH_MODE= context.scene.tool_settings.mesh_selection_mode
+    MESH_MODE = tuple(context.tool_settings.mesh_selection_mode)
+    context.tool_settings.mesh_selection_mode = False, True, False
 
-    if MESH_MODE in ('EDGE', 'VERTEX'):
-        context.scene.tool_settings.mesh_selection_mode = 'EDGE'
+    if not MESH_MODE[2]:
         edges= [ ed for ed in me.edges if ed.selected ]
         # print len(edges), len(me.edges)
         context.scene.tool_settings.mesh_selection_mode = MESH_MODE
         return edges
 
-    if MESH_MODE == 'FACE':
-        context.scene.tool_settings.mesh_selection_mode = 'EDGE'
+    else:
         # value is [edge, face_sel_user_in]
         edge_dict=  dict((ed.key, [ed, 0]) for ed in me.edges)
 
@@ -268,7 +267,7 @@
                 for edkey in f.edge_keys:
                     edge_dict[edkey][1] += 1
 
-        context.scene.tool_settings.mesh_selection_mode = MESH_MODE
+        context.tool_settings.mesh_selection_mode = MESH_MODE
         return [ ed_data[0] for ed_data in edge_dict.values() if ed_data[1] == 1 ]
 
 

Modified: trunk/blender/release/scripts/op/wm.py
===================================================================
--- trunk/blender/release/scripts/op/wm.py	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/release/scripts/op/wm.py	2009-12-22 16:11:11 UTC (rev 25522)
@@ -68,7 +68,8 @@
 class WM_OT_context_set_boolean(bpy.types.Operator):
     '''Set a context value.'''
     bl_idname = "wm.context_set_boolean"
-    bl_label = "Context Set"
+    bl_label = "Context Set Boolean"
+    bl_undo = True
 
     path = rna_path_prop
     value = BoolProperty(name="Value",
@@ -81,6 +82,7 @@
     '''Set a context value.'''
     bl_idname = "wm.context_set_int"
     bl_label = "Context Set"
+    bl_undo = True
 
     path = rna_path_prop
     value = IntProperty(name="Value", description="Assign value", default=0)
@@ -91,7 +93,8 @@
 class WM_OT_context_set_float(bpy.types.Operator): # same as enum
     '''Set a context value.'''
     bl_idname = "wm.context_set_float"
-    bl_label = "Context Set"
+    bl_label = "Context Set Float"
+    bl_undo = True
 
     path = rna_path_prop
     value = FloatProperty(name="Value",
@@ -103,7 +106,8 @@
 class WM_OT_context_set_string(bpy.types.Operator): # same as enum
     '''Set a context value.'''
     bl_idname = "wm.context_set_string"
-    bl_label = "Context Set"
+    bl_label = "Context Set String"
+    bl_undo = True
 
     path = rna_path_prop
     value = StringProperty(name="Value",
@@ -115,7 +119,8 @@
 class WM_OT_context_set_enum(bpy.types.Operator):
     '''Set a context value.'''
     bl_idname = "wm.context_set_enum"
-    bl_label = "Context Set"
+    bl_label = "Context Set Enum"
+    bl_undo = True
 
     path = rna_path_prop
     value = StringProperty(name="Value",
@@ -125,10 +130,30 @@
     execute = execute_context_assign
 
 
+class WM_OT_context_set_value(bpy.types.Operator):
+    '''Set a context value.'''
+    bl_idname = "wm.context_set_value"
+    bl_label = "Context Set Value"
+    bl_undo = True
+
+    path = rna_path_prop
+    value = StringProperty(name="Value",
+            description="Assignment value (as a string)",
+            maxlen=1024, default="")
+
+    def execute(self, context):
+        if context_path_validate(context, self.properties.path) is Ellipsis:
+            return ('PASS_THROUGH',)
+        exec("context.%s=%s" % (self.properties.path, self.properties.value))
+        return ('FINISHED',)
+
+
 class WM_OT_context_toggle(bpy.types.Operator):
     '''Toggle a context value.'''
     bl_idname = "wm.context_toggle"
     bl_label = "Context Toggle"
+    bl_undo = True
+
     path = rna_path_prop
 
     def execute(self, context):
@@ -146,6 +171,7 @@
     '''Toggle a context value.'''
     bl_idname = "wm.context_toggle_enum"
     bl_label = "Context Toggle Values"
+    bl_undo = True
 
     path = rna_path_prop
     value_1 = StringProperty(name="Value", \
@@ -172,6 +198,8 @@
     vertex keys, groups' etc.'''
     bl_idname = "wm.context_cycle_int"
     bl_label = "Context Int Cycle"
+    bl_undo = True
+
     path = rna_path_prop
     reverse = rna_reverse_prop
 
@@ -203,6 +231,7 @@
     '''Toggle a context value.'''
     bl_idname = "wm.context_cycle_enum"
     bl_label = "Context Enum Cycle"
+    bl_undo = True
 
     path = rna_path_prop
     reverse = rna_reverse_prop
@@ -384,6 +413,7 @@
 bpy.ops.add(WM_OT_context_set_float)
 bpy.ops.add(WM_OT_context_set_string)
 bpy.ops.add(WM_OT_context_set_enum)
+bpy.ops.add(WM_OT_context_set_value)
 bpy.ops.add(WM_OT_context_toggle)
 bpy.ops.add(WM_OT_context_toggle_enum)
 bpy.ops.add(WM_OT_context_cycle_enum)

Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/release/scripts/ui/space_view3d.py	2009-12-22 16:11:11 UTC (rev 25522)
@@ -1121,6 +1121,28 @@
         layout.operator("mesh.select_vertex_path")
 
 
+class VIEW3D_MT_edit_mesh_selection_mode(bpy.types.Menu):
+    bl_label = "Mesh Select Mode"
+
+    def draw(self, context):
+        layout = self.layout
+
+        layout.operator_context = 'INVOKE_REGION_WIN'
+        path = "tool_settings.edit_select_vertex;tool_settings.edit_select_edge;tool_settings.edit_select_face"
+
+        prop = layout.operator("wm.context_set_value", text="Vertex")
+        prop.value = "(True, False, False)"
+        prop.path = "tool_settings.mesh_selection_mode"
+
+        prop = layout.operator("wm.context_set_value", text="Edge")
+        prop.value = "(False, True, False)"
+        prop.path = "tool_settings.mesh_selection_mode"
+
+        prop = layout.operator("wm.context_set_value", text="Face")
+        prop.value = "(False, False, True)"
+        prop.path = "tool_settings.mesh_selection_mode"
+
+
 class VIEW3D_MT_edit_mesh_vertices(bpy.types.Menu):
     bl_label = "Vertices"
 
@@ -1915,6 +1937,7 @@
 
 bpy.types.register(VIEW3D_MT_edit_mesh)
 bpy.types.register(VIEW3D_MT_edit_mesh_specials) # Only as a menu for keybindings
+bpy.types.register(VIEW3D_MT_edit_mesh_selection_mode) # Only as a menu for keybindings
 bpy.types.register(VIEW3D_MT_edit_mesh_vertices)
 bpy.types.register(VIEW3D_MT_edit_mesh_edges)
 bpy.types.register(VIEW3D_MT_edit_mesh_faces)

Modified: trunk/blender/source/blender/editors/mesh/editmesh_mods.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/source/blender/editors/mesh/editmesh_mods.c	2009-12-22 16:11:11 UTC (rev 25522)
@@ -3682,57 +3682,6 @@
 	EM_selectmode_flush(em);
 }
 
-static void mesh_selection_type(ToolSettings *ts, EditMesh *em, int val)
-{
-	if(val>0) {
-		//if(ctrl) EM_convertsel(em, em->selectmode, SCE_SELECT_EDGE);
-		//if((ctrl)) EM_convertsel(em, em->selectmode, SCE_SELECT_FACE);
-
-		em->selectmode= val;
-		EM_selectmode_set(em);
-		
-		/* note, em stores selectmode to be able to pass it on everywhere without scene,
-		   this is only until all select modes and toolsettings are settled more */
-		ts->selectmode= em->selectmode;
-//		if (EM_texFaceCheck())
-	}
-}
-
-static int mesh_selection_type_exec(bContext *C, wmOperator *op)
-{		
-	ToolSettings *ts= CTX_data_tool_settings(C);
-	Object *obedit= CTX_data_edit_object(C);
-	EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
-
-	mesh_selection_type(ts, em, RNA_enum_get(op->ptr,"type"));
-
-	WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
-	WM_event_add_notifier(C, NC_SCENE|ND_MODE, NULL); /* header redraw */
-	
-	BKE_mesh_end_editmesh(obedit->data, em);
-	return OPERATOR_FINISHED;
-}
-
-void MESH_OT_selection_type(wmOperatorType *ot)
-{
-	/* identifiers */
-	ot->name= "Selection Mode";
-	ot->description= "Set the selection mode type.";
-	ot->idname= "MESH_OT_selection_type";
-	
-	/* api callbacks */
-	ot->invoke= WM_menu_invoke;
-	ot->exec= mesh_selection_type_exec;
-	
-	ot->poll= ED_operator_editmesh;
-	
-	/* flags */
-	ot->flag= OPTYPE_UNDO;
-	
-	/* props */
-	RNA_def_enum(ot->srna, "type", mesh_select_mode_items, 0, "Type", "Set the mesh selection type");
-	
-}
 /* ************************* SEAMS AND EDGES **************** */
 
 static int editmesh_mark_seam(bContext *C, wmOperator *op)

Modified: trunk/blender/source/blender/editors/mesh/mesh_intern.h
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_intern.h	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/source/blender/editors/mesh/mesh_intern.h	2009-12-22 16:11:11 UTC (rev 25522)
@@ -158,7 +158,6 @@
 void MESH_OT_select_shortest_path(struct wmOperatorType *ot);
 void MESH_OT_select_similar(struct wmOperatorType *ot);
 void MESH_OT_select_random(struct wmOperatorType *ot);
-void MESH_OT_selection_type(struct wmOperatorType *ot);
 void MESH_OT_loop_multi_select(struct wmOperatorType *ot);
 void MESH_OT_mark_seam(struct wmOperatorType *ot);
 void MESH_OT_mark_sharp(struct wmOperatorType *ot);

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-12-22 15:20:31 UTC (rev 25521)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2009-12-22 16:11:11 UTC (rev 25522)
@@ -76,7 +76,6 @@
 	WM_operatortype_append(MESH_OT_select_linked);
 	WM_operatortype_append(MESH_OT_select_linked_pick);
 	WM_operatortype_append(MESH_OT_select_random);
-	WM_operatortype_append(MESH_OT_selection_type);
 	WM_operatortype_append(MESH_OT_hide);
 	WM_operatortype_append(MESH_OT_reveal);
 	WM_operatortype_append(MESH_OT_select_by_number_vertices);
@@ -240,7 +239,7 @@
 	WM_keymap_add_item(keymap, "MESH_OT_select_similar", GKEY, KM_PRESS, KM_SHIFT, 0);
 	
 	/* selection mode */
-	WM_keymap_add_item(keymap, "MESH_OT_selection_type", TABKEY, KM_PRESS, KM_CTRL, 0);
+	WM_keymap_add_menu(keymap, "VIEW3D_MT_edit_mesh_selection_mode", TABKEY, KM_PRESS, KM_CTRL, 0);
 	
 	/* hide */

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list