[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26524] trunk/blender: Mesh Extrude menu
Martin Poirier
theeth at yahoo.com
Mon Feb 1 19:30:01 CET 2010
Revision: 26524
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26524
Author: theeth
Date: 2010-02-01 19:30:00 +0100 (Mon, 01 Feb 2010)
Log Message:
-----------
Mesh Extrude menu
Todo for Campbell:
- Make menu context sensitive
- Make menu automatically run the operator if there is only one option
Note: Saved configurations and keymaps with references to "Extrude and Move" operator needs to be updated to either call the menu or one of the new extrude macros.
Modified Paths:
--------------
trunk/blender/release/scripts/ui/space_view3d.py
trunk/blender/release/scripts/ui/space_view3d_toolbar.py
trunk/blender/source/blender/editors/mesh/editmesh_tools.c
trunk/blender/source/blender/editors/mesh/mesh_ops.c
Modified: trunk/blender/release/scripts/ui/space_view3d.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d.py 2010-02-01 18:26:45 UTC (rev 26523)
+++ trunk/blender/release/scripts/ui/space_view3d.py 2010-02-01 18:30:00 UTC (rev 26524)
@@ -1131,7 +1131,7 @@
layout.separator()
- layout.operator("mesh.extrude_move")
+ layout.operator("wm.call_menu", text="Extrude").name = "VIEW3D_MT_edit_mesh_extrude"
layout.operator("mesh.duplicate_move")
layout.operator("mesh.delete", text="Delete...")
@@ -1198,7 +1198,20 @@
prop.value = "(False, False, True)"
prop.path = "tool_settings.mesh_selection_mode"
+class VIEW3D_MT_edit_mesh_extrude(bpy.types.Menu):
+ bl_label = "Extrude"
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator_context = 'INVOKE_REGION_WIN'
+
+ layout.operator("mesh.extrude_region_move", text="Region")
+ layout.operator("mesh.extrude_faces_move", text="Individual Faces")
+ layout.operator("mesh.extrude_edges_move", text="Edges Only")
+ layout.operator("mesh.extrude_vertices_move", text="Vertices Only")
+
+
class VIEW3D_MT_edit_mesh_vertices(bpy.types.Menu):
bl_label = "Vertices"
@@ -2032,6 +2045,7 @@
bpy.types.register(VIEW3D_MT_edit_mesh_faces)
bpy.types.register(VIEW3D_MT_edit_mesh_normals)
bpy.types.register(VIEW3D_MT_edit_mesh_showhide)
+bpy.types.register(VIEW3D_MT_edit_mesh_extrude)
bpy.types.register(VIEW3D_MT_edit_curve)
bpy.types.register(VIEW3D_MT_edit_curve_ctrlpoints)
Modified: trunk/blender/release/scripts/ui/space_view3d_toolbar.py
===================================================================
--- trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2010-02-01 18:26:45 UTC (rev 26523)
+++ trunk/blender/release/scripts/ui/space_view3d_toolbar.py 2010-02-01 18:30:00 UTC (rev 26524)
@@ -99,7 +99,7 @@
col = layout.column(align=True)
col.label(text="Add:")
- col.operator("mesh.extrude_move")
+ col.operator("wm.call_menu", text="Extrude").name = "VIEW3D_MT_edit_mesh_extrude"
col.operator("mesh.subdivide")
col.operator("mesh.loopcut_slide")
col.operator("mesh.duplicate_move", text="Duplicate")
Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2010-02-01 18:26:45 UTC (rev 26523)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2010-02-01 18:30:00 UTC (rev 26524)
@@ -623,46 +623,16 @@
}
/* generic extern called extruder */
-void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op)
+void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op, short type)
{
float nor[3]= {0.0, 0.0, 0.0};
- short nr, transmode= 0;
+ short transmode= 0;
- /* extrude depends on totvertsel etc */
- EM_stats_update(em);
-
- if(em->selectmode & SCE_SELECT_VERTEX) {
- if(em->totvertsel==0) nr= 0;
- else if(em->totvertsel==1) nr= 4;
- else if(em->totedgesel==0) nr= 4;
- else if(em->totfacesel==0)
- nr= 3; // pupmenu("Extrude %t|Only Edges%x3|Only Vertices%x4");
- else if(em->totfacesel==1)
- nr= 1; // pupmenu("Extrude %t|Region %x1|Only Edges%x3|Only Vertices%x4");
- else
- nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3|Only Vertices%x4");
- }
- else if(em->selectmode & SCE_SELECT_EDGE) {
- if (em->totedgesel==0) nr = 0;
- else if (em->totedgesel==1) nr = 3;
- else if(em->totfacesel==0) nr = 3;
- else if(em->totfacesel==1)
- nr= 1; // pupmenu("Extrude %t|Region %x1|Only Edges%x3");
- else
- nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2|Only Edges%x3");
- }
- else {
- if (em->totfacesel == 0) nr = 0;
- else if (em->totfacesel == 1) nr = 1;
- else
- nr= 1; // pupmenu("Extrude %t|Region %x1||Individual Faces %x2");
- }
+ if(type<1) return;
- if(nr<1) return;
-
- if(nr==1) transmode= extrudeflag(obedit, em, SELECT, nor, 0);
- else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor);
- else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor);
+ if(type==1) transmode= extrudeflag(obedit, em, SELECT, nor, 0);
+ else if(type==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor);
+ else if(type==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor);
else transmode= extrudeflag_face_indiv(em, SELECT, nor);
if(transmode==0) {
@@ -682,7 +652,7 @@
/* individual faces? */
// BIF_TransformSetUndo("Extrude");
- if(nr==2) {
+ if(type==2) {
// initTransform(TFM_SHRINKFATTEN, CTX_NO_PET|CTX_NO_MIRROR);
// Transform();
}
@@ -706,7 +676,7 @@
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
- extrude_mesh(scene, obedit, em, op);
+ extrude_mesh(scene, obedit, em, op, RNA_int_get(op->ptr, "type"));
BKE_mesh_end_editmesh(obedit->data, em);
@@ -723,7 +693,7 @@
Object *obedit= CTX_data_edit_object(C);
EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
- extrude_mesh(scene, obedit, em, op);
+ extrude_mesh(scene, obedit, em, op, RNA_int_get(op->ptr, "type"));
DAG_id_flush_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
@@ -732,62 +702,69 @@
return OPERATOR_FINISHED;
}
-/* extrude options */
-EnumPropertyItem extrude_item_region = {1, "REGION", 0, "Region", ""};
-EnumPropertyItem extrude_item_faces = {2, "FACES", 0, "Individual Faces", ""};
-EnumPropertyItem extrude_item_edges = {3, "EDGES", 0, "Only Edges", ""};
-EnumPropertyItem extrude_item_verts = {4, "VERTS", 0, "Only Vertices", ""};
+EnumPropertyItem extrude_items[] = {
+ {1, "REGION", 0, "Region", ""},
+ {2, "FACES", 0, "Individual Faces", ""},
+ {3, "EDGES", 0, "Only Edges", ""},
+ {4, "VERTS", 0, "Only Vertices", ""},
+ {0, NULL, 0, NULL, NULL}};
+
static EnumPropertyItem *extrude_itemf(bContext *C, PointerRNA *ptr, int *free)
{
EnumPropertyItem *item= NULL;
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= BKE_mesh_get_editmesh(obedit->data);
+ EditMesh *em;
int totitem= 0;
if(!obedit)
- return NULL;
+ return extrude_items;
+ em = BKE_mesh_get_editmesh(obedit->data);
+
+ EM_stats_update(em);
+
if(em->selectmode & SCE_SELECT_VERTEX) {
if(em->totvertsel==0) {}
- else if(em->totvertsel==1) { RNA_enum_item_add(&item, &totitem, &extrude_item_verts); }
- else if(em->totedgesel==0) { RNA_enum_item_add(&item, &totitem, &extrude_item_verts); }
+ else if(em->totvertsel==1) { RNA_enum_item_add(&item, &totitem, &extrude_items[3]); }
+ else if(em->totedgesel==0) { RNA_enum_item_add(&item, &totitem, &extrude_items[3]); }
else if(em->totfacesel==0) {
- RNA_enum_item_add(&item, &totitem, &extrude_item_edges);
- RNA_enum_item_add(&item, &totitem, &extrude_item_verts);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[2]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[3]);
}
else if(em->totfacesel==1) {
- RNA_enum_item_add(&item, &totitem, &extrude_item_region);
- RNA_enum_item_add(&item, &totitem, &extrude_item_edges);
- RNA_enum_item_add(&item, &totitem, &extrude_item_verts);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[0]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[2]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[3]);
}
else {
- RNA_enum_item_add(&item, &totitem, &extrude_item_region);
- RNA_enum_item_add(&item, &totitem, &extrude_item_edges);
- RNA_enum_item_add(&item, &totitem, &extrude_item_verts);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[0]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[1]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[2]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[3]);
}
}
else if(em->selectmode & SCE_SELECT_EDGE) {
if (em->totedgesel==0) {}
- else if (em->totedgesel==1) { RNA_enum_item_add(&item, &totitem, &extrude_item_edges); }
- else if(em->totfacesel==0) { RNA_enum_item_add(&item, &totitem, &extrude_item_edges); }
+ else if (em->totedgesel==1) { RNA_enum_item_add(&item, &totitem, &extrude_items[2]); }
+ else if(em->totfacesel==0) { RNA_enum_item_add(&item, &totitem, &extrude_items[2]); }
else if(em->totfacesel==1) {
- RNA_enum_item_add(&item, &totitem, &extrude_item_region);
- RNA_enum_item_add(&item, &totitem, &extrude_item_edges);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[0]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[2]);
}
else {
- RNA_enum_item_add(&item, &totitem, &extrude_item_region);
- RNA_enum_item_add(&item, &totitem, &extrude_item_faces);
- RNA_enum_item_add(&item, &totitem, &extrude_item_edges);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[0]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[1]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[2]);
}
}
else {
if (em->totfacesel == 0) {}
- else if (em->totfacesel == 1) { RNA_enum_item_add(&item, &totitem, &extrude_item_region); }
+ else if (em->totfacesel == 1) { RNA_enum_item_add(&item, &totitem, &extrude_items[0]); }
else {
- RNA_enum_item_add(&item, &totitem, &extrude_item_region);
- RNA_enum_item_add(&item, &totitem, &extrude_item_faces);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[0]);
+ RNA_enum_item_add(&item, &totitem, &extrude_items[1]);
}
}
@@ -803,9 +780,7 @@
void MESH_OT_extrude(wmOperatorType *ot)
{
-#if 0
PropertyRNA *prop;
-#endif
/* identifiers */
ot->name= "Extrude";
@@ -820,12 +795,10 @@
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-#if 0
/* properties */
- prop= RNA_def_enum(ot->srna, "type", DummyRNA_NULL_items, 0, "Type", "");
+ prop= RNA_def_enum(ot->srna, "type", extrude_items, 0, "Type", "");
RNA_def_enum_funcs(prop, extrude_itemf);
ot->prop= prop;
-#endif
}
static int split_mesh(bContext *C, wmOperator *op)
Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c 2010-02-01 18:26:45 UTC (rev 26523)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c 2010-02-01 18:30:00 UTC (rev 26524)
@@ -188,18 +188,31 @@
otmacro= WM_operatortype_macro_define(ot, "TRANSFORM_OT_translate");
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list