[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