WIP:Make the extrude menus for vertices,edges,faces gray and adding a red tooltip when not selected #115756
|
@ -80,7 +80,9 @@ class VIEW3D_OT_edit_mesh_extrude_move(Operator):
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
return (obj is not None and obj.mode == 'EDIT')
|
mesh = context.object.data
|
||||||
|
cls.poll_message_set("Object has no face selected")
|
||||||
|
return (obj is not None and obj.mode == 'EDIT' and mesh.total_face_sel>=1)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def extrude_region(context, use_vert_normals, dissolve_and_intersect):
|
def extrude_region(context, use_vert_normals, dissolve_and_intersect):
|
||||||
|
@ -160,7 +162,9 @@ class VIEW3D_OT_edit_mesh_extrude_shrink_fatten(Operator):
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
return (obj is not None and obj.mode == 'EDIT')
|
mesh = context.object.data
|
||||||
|
cls.poll_message_set("Object has no face selected")
|
||||||
|
return (obj is not None and obj.mode == 'EDIT' and mesh.total_face_sel>=1)
|
||||||
|
|
||||||
def execute(self, context):
|
def execute(self, context):
|
||||||
return VIEW3D_OT_edit_mesh_extrude_move.extrude_region(context, True, False)
|
return VIEW3D_OT_edit_mesh_extrude_move.extrude_region(context, True, False)
|
||||||
|
@ -177,7 +181,9 @@ class VIEW3D_OT_edit_mesh_extrude_manifold_normal(Operator):
|
||||||
@classmethod
|
@classmethod
|
||||||
def poll(cls, context):
|
def poll(cls, context):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
return (obj is not None and obj.mode == 'EDIT')
|
mesh = context.object.data
|
||||||
|
cls.poll_message_set("Object has no face selected")
|
||||||
|
return (obj is not None and obj.mode == 'EDIT' and mesh.total_face_sel>=1)
|
||||||
|
|
||||||
def execute(self, _context):
|
def execute(self, _context):
|
||||||
bpy.ops.mesh.extrude_manifold(
|
bpy.ops.mesh.extrude_manifold(
|
||||||
|
|
|
@ -4558,24 +4558,13 @@ class VIEW3D_MT_edit_mesh_extrude(Menu):
|
||||||
select_mode = tool_settings.mesh_select_mode
|
select_mode = tool_settings.mesh_select_mode
|
||||||
mesh = context.object.data
|
mesh = context.object.data
|
||||||
|
|
||||||
if mesh.total_face_sel:
|
|
||||||
layout.operator("view3d.edit_mesh_extrude_move_normal",
|
layout.operator("view3d.edit_mesh_extrude_move_normal",text="Extrude Faces")
|
||||||
text="Extrude Faces")
|
layout.operator("view3d.edit_mesh_extrude_move_shrink_fatten",text="Extrude Faces Along Normals")
|
||||||
layout.operator("view3d.edit_mesh_extrude_move_shrink_fatten",
|
layout.operator("mesh.extrude_faces_move",text="Extrude Individual Faces")
|
||||||
text="Extrude Faces Along Normals")
|
layout.operator("view3d.edit_mesh_extrude_manifold_normal",text="Extrude Manifold")
|
||||||
layout.operator(
|
layout.operator("mesh.extrude_edges_move",text="Extrude Edges")
|
||||||
"mesh.extrude_faces_move",
|
layout.operator("mesh.extrude_vertices_move",text="Extrude Vertices")
|
||||||
text="Extrude Individual Faces")
|
|
||||||
layout.operator("view3d.edit_mesh_extrude_manifold_normal",
|
|
||||||
text="Extrude Manifold")
|
|
||||||
|
|
||||||
if mesh.total_edge_sel and (select_mode[0] or select_mode[1]):
|
|
||||||
layout.operator("mesh.extrude_edges_move",
|
|
||||||
text="Extrude Edges")
|
|
||||||
|
|
||||||
if mesh.total_vert_sel and select_mode[0]:
|
|
||||||
layout.operator("mesh.extrude_vertices_move",
|
|
||||||
text="Extrude Vertices")
|
|
||||||
|
|
||||||
layout.separator()
|
layout.separator()
|
||||||
|
|
||||||
|
|
|
@ -541,6 +541,9 @@ bool ED_operator_object_active_editable_mesh(bContext *C);
|
||||||
bool ED_operator_object_active_editable_font(bContext *C);
|
bool ED_operator_object_active_editable_font(bContext *C);
|
||||||
bool ED_operator_editable_mesh(bContext *C);
|
bool ED_operator_editable_mesh(bContext *C);
|
||||||
bool ED_operator_editmesh(bContext *C);
|
bool ED_operator_editmesh(bContext *C);
|
||||||
|
bool ED_operator_editmesh_extrude_vertices(bContext *C);
|
||||||
|
bool ED_operator_editmesh_extrude_edges(bContext *C);
|
||||||
|
bool ED_operator_editmesh_extrude_faces(bContext *C);
|
||||||
bool ED_operator_editmesh_view3d(bContext *C);
|
bool ED_operator_editmesh_view3d(bContext *C);
|
||||||
bool ED_operator_editmesh_region_view3d(bContext *C);
|
bool ED_operator_editmesh_region_view3d(bContext *C);
|
||||||
bool ED_operator_editarmature(bContext *C);
|
bool ED_operator_editarmature(bContext *C);
|
||||||
|
|
|
@ -578,7 +578,7 @@ void MESH_OT_extrude_verts_indiv(wmOperatorType *ot)
|
||||||
|
|
||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec = edbm_extrude_verts_exec;
|
ot->exec = edbm_extrude_verts_exec;
|
||||||
ot->poll = ED_operator_editmesh;
|
ot->poll = ED_operator_editmesh_extrude_vertices;
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
@ -631,7 +631,7 @@ void MESH_OT_extrude_edges_indiv(wmOperatorType *ot)
|
||||||
|
|
||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec = edbm_extrude_edges_exec;
|
ot->exec = edbm_extrude_edges_exec;
|
||||||
ot->poll = ED_operator_editmesh;
|
ot->poll = ED_operator_editmesh_extrude_edges;
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
@ -684,7 +684,7 @@ void MESH_OT_extrude_faces_indiv(wmOperatorType *ot)
|
||||||
|
|
||||||
/* api callbacks */
|
/* api callbacks */
|
||||||
ot->exec = edbm_extrude_faces_exec;
|
ot->exec = edbm_extrude_faces_exec;
|
||||||
ot->poll = ED_operator_editmesh;
|
ot->poll = ED_operator_editmesh_extrude_faces;
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||||
|
|
|
@ -467,6 +467,48 @@ bool ED_operator_editmesh(bContext *C)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ED_operator_editmesh_extrude_vertices(bContext *C)
|
||||||
|
{
|
||||||
|
Object *obedit = CTX_data_edit_object(C);
|
||||||
|
if (obedit && obedit->type == OB_MESH) {
|
||||||
|
BMEditMesh *mesh = BKE_editmesh_from_object(obedit);
|
||||||
|
if (mesh->bm->totvertsel == 0 && mesh->bm->selectmode != 0) {
|
||||||
|
CTX_wm_operator_poll_msg_set(C, "Object has no vertex selected");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return nullptr != BKE_editmesh_from_object(obedit);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ED_operator_editmesh_extrude_edges(bContext *C)
|
||||||
|
{
|
||||||
|
Object *obedit = CTX_data_edit_object(C);
|
||||||
|
if (obedit && obedit->type == OB_MESH) {
|
||||||
|
BMEditMesh *mesh = BKE_editmesh_from_object(obedit);
|
||||||
|
if (mesh->bm->totedgesel == 0 && (mesh->bm->selectmode != 0 || mesh->bm->selectmode != 1)) {
|
||||||
|
CTX_wm_operator_poll_msg_set(C, "Object has no edge selected");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return nullptr != BKE_editmesh_from_object(obedit);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ED_operator_editmesh_extrude_faces(bContext *C)
|
||||||
|
{
|
||||||
|
Object *obedit = CTX_data_edit_object(C);
|
||||||
|
if (obedit && obedit->type == OB_MESH) {
|
||||||
|
BMEditMesh *mesh = BKE_editmesh_from_object(obedit);
|
||||||
|
if (mesh->bm->totfacesel == 0) {
|
||||||
|
CTX_wm_operator_poll_msg_set(C, "Object has no face selected");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return nullptr != BKE_editmesh_from_object(obedit);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool ED_operator_editmesh_view3d(bContext *C)
|
bool ED_operator_editmesh_view3d(bContext *C)
|
||||||
{
|
{
|
||||||
return ED_operator_editmesh(C) && ED_operator_view3d_active(C);
|
return ED_operator_editmesh(C) && ED_operator_view3d_active(C);
|
||||||
|
|
Loading…
Reference in New Issue