[Bf-blender-cvs] [a08fb46700a] master: UI: move edge-tag option from the scene into the operator

Campbell Barton noreply at git.blender.org
Tue May 21 03:16:14 CEST 2019


Commit: a08fb46700a347ffcde77469ec8a0905acd54bc5
Author: Campbell Barton
Date:   Tue May 21 11:13:45 2019 +1000
Branches: master
https://developer.blender.org/rBa08fb46700a347ffcde77469ec8a0905acd54bc5

UI: move edge-tag option from the scene into the operator

This was a very specific option to display in global tool settings.

Now this is exposed in the operator when edge-select mode is enabled.

===================================================================

M	release/scripts/startup/bl_ui/space_view3d_toolbar.py
M	source/blender/editors/mesh/editmesh_path.c
M	source/blender/makesdna/DNA_scene_types.h
M	source/blender/makesrna/intern/rna_scene.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index dd9f09f0a45..91852aa8e57 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -109,7 +109,6 @@ class VIEW3D_PT_tools_meshedit_options(View3DPanel, Panel):
         layout.prop(tool_settings, "use_mesh_automerge")
 
         layout.prop(tool_settings, "double_threshold")
-        layout.prop(tool_settings, "edge_path_mode")
 
 # ********** default tools for editmode_curve ****************
 
diff --git a/source/blender/editors/mesh/editmesh_path.c b/source/blender/editors/mesh/editmesh_path.c
index f8ec4334427..aafa25a8242 100644
--- a/source/blender/editors/mesh/editmesh_path.c
+++ b/source/blender/editors/mesh/editmesh_path.c
@@ -63,6 +63,15 @@
 /** \name Path Select Struct & Properties
  * \{ */
 
+enum {
+  EDGE_MODE_SELECT = 0,
+  EDGE_MODE_TAG_SEAM = 1,
+  EDGE_MODE_TAG_SHARP = 2,
+  EDGE_MODE_TAG_CREASE = 3,
+  EDGE_MODE_TAG_BEVEL = 4,
+  EDGE_MODE_TAG_FREESTYLE = 5,
+};
+
 struct PathSelectParams {
   /** ensure the active element is the last selected item (handy for picking) */
   bool track_active;
@@ -75,6 +84,23 @@ struct PathSelectParams {
 
 static void path_select_properties(wmOperatorType *ot)
 {
+  static const EnumPropertyItem edge_tag_items[] = {
+      {EDGE_MODE_SELECT, "SELECT", 0, "Select", ""},
+      {EDGE_MODE_TAG_SEAM, "SEAM", 0, "Tag Seam", ""},
+      {EDGE_MODE_TAG_SHARP, "SHARP", 0, "Tag Sharp", ""},
+      {EDGE_MODE_TAG_CREASE, "CREASE", 0, "Tag Crease", ""},
+      {EDGE_MODE_TAG_BEVEL, "BEVEL", 0, "Tag Bevel", ""},
+      {EDGE_MODE_TAG_FREESTYLE, "FREESTYLE", 0, "Tag Freestyle Edge Mark", ""},
+      {0, NULL, 0, NULL, NULL},
+  };
+
+  RNA_def_enum(ot->srna,
+               "edge_mode",
+               edge_tag_items,
+               EDGE_MODE_SELECT,
+               "Edge Tag",
+               "The edge flag to tag when selecting the shortest path");
+
   RNA_def_boolean(ot->srna,
                   "use_face_step",
                   false,
@@ -93,9 +119,24 @@ static void path_select_properties(wmOperatorType *ot)
   WM_operator_properties_checker_interval(ot, true);
 }
 
-static void path_select_params_from_op(wmOperator *op, struct PathSelectParams *op_params)
+static void path_select_params_from_op(wmOperator *op,
+                                       ToolSettings *ts,
+                                       struct PathSelectParams *op_params)
 {
-  op_params->edge_mode = EDGE_MODE_SELECT;
+  {
+    PropertyRNA *prop = RNA_struct_find_property(op->ptr, "edge_mode");
+    if (RNA_property_is_set(op->ptr, prop)) {
+      op_params->edge_mode = RNA_property_enum_get(op->ptr, prop);
+      if (op->flag & OP_IS_INVOKE) {
+        ts->edge_mode = op_params->edge_mode;
+      }
+    }
+    else {
+      op_params->edge_mode = ts->edge_mode;
+      RNA_property_enum_set(op->ptr, prop, op_params->edge_mode);
+    }
+  }
+
   op_params->track_active = false;
   op_params->use_face_step = RNA_boolean_get(op->ptr, "use_face_step");
   op_params->use_fill = RNA_boolean_get(op->ptr, "use_fill");
@@ -103,6 +144,21 @@ static void path_select_params_from_op(wmOperator *op, struct PathSelectParams *
   WM_operator_properties_checker_interval_from_op(op, &op_params->interval_params);
 }
 
+static bool path_select_poll_property(const bContext *C,
+                                      wmOperator *UNUSED(op),
+                                      const PropertyRNA *prop)
+{
+  const char *prop_id = RNA_property_identifier(prop);
+  if (STREQ(prop_id, "edge_mode")) {
+    const Scene *scene = CTX_data_scene(C);
+    ToolSettings *ts = scene->toolsettings;
+    if ((ts->selectmode & SCE_SELECT_EDGE) == 0) {
+      return false;
+    }
+  }
+  return true;
+}
+
 struct UserData {
   BMesh *bm;
   Mesh *me;
@@ -649,12 +705,14 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
     return OPERATOR_FINISHED;
   }
 
+  struct PathSelectParams op_params;
+  path_select_params_from_op(op, vc.scene->toolsettings, &op_params);
+
   BMElem *ele_src, *ele_dst;
   if (!(ele_src = edbm_elem_active_elem_or_face_get(em->bm)) ||
       !(ele_dst = edbm_elem_find_nearest(&vc, ele_src->head.htype))) {
     /* special case, toggle edge tags even when we don't have a path */
-    if (((em->selectmode & SCE_SELECT_EDGE) &&
-         (vc.scene->toolsettings->edge_mode != EDGE_MODE_SELECT)) &&
+    if (((em->selectmode & SCE_SELECT_EDGE) && (op_params.edge_mode != EDGE_MODE_SELECT)) &&
         /* check if we only have a destination edge */
         ((ele_src == NULL) && (ele_dst = edbm_elem_find_nearest(&vc, BM_EDGE)))) {
       ele_src = ele_dst;
@@ -665,11 +723,7 @@ static int edbm_shortest_path_pick_invoke(bContext *C, wmOperator *op, const wmE
     }
   }
 
-  struct PathSelectParams op_params;
-
-  path_select_params_from_op(op, &op_params);
   op_params.track_active = track_active;
-  op_params.edge_mode = vc.scene->toolsettings->edge_mode;
 
   if (!edbm_shortest_path_pick_ex(vc.scene, vc.obedit, &op_params, ele_src, ele_dst)) {
     return OPERATOR_PASS_THROUGH;
@@ -707,9 +761,8 @@ static int edbm_shortest_path_pick_exec(bContext *C, wmOperator *op)
   }
 
   struct PathSelectParams op_params;
-  path_select_params_from_op(op, &op_params);
+  path_select_params_from_op(op, scene->toolsettings, &op_params);
   op_params.track_active = true;
-  op_params.edge_mode = scene->toolsettings->edge_mode;
 
   if (!edbm_shortest_path_pick_ex(scene, obedit, &op_params, ele_src, ele_dst)) {
     return OPERATOR_CANCELLED;
@@ -731,6 +784,7 @@ void MESH_OT_shortest_path_pick(wmOperatorType *ot)
   ot->invoke = edbm_shortest_path_pick_invoke;
   ot->exec = edbm_shortest_path_pick_exec;
   ot->poll = ED_operator_editmesh_region_view3d;
+  ot->poll_property = path_select_poll_property;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
@@ -832,7 +886,7 @@ static int edbm_shortest_path_select_exec(bContext *C, wmOperator *op)
 
     if (ele_src && ele_dst) {
       struct PathSelectParams op_params;
-      path_select_params_from_op(op, &op_params);
+      path_select_params_from_op(op, scene->toolsettings, &op_params);
 
       edbm_shortest_path_pick_ex(scene, obedit, &op_params, ele_src, ele_dst);
 
@@ -860,6 +914,7 @@ void MESH_OT_shortest_path_select(wmOperatorType *ot)
   /* api callbacks */
   ot->exec = edbm_shortest_path_select_exec;
   ot->poll = ED_operator_editmesh;
+  ot->poll_property = path_select_poll_property;
 
   /* flags */
   ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 611a52774c7..0973405ce7b 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1443,8 +1443,9 @@ typedef struct ToolSettings {
   /* Multires */
   char multires_subdiv_type;
 
-  /* Alt+RMB option */
+  /* Edge tagging, store operator settings (no UI access). */
   char edge_mode;
+
   char edge_mode_live_unwrap;
 
   char _pad1[1];
@@ -2240,14 +2241,6 @@ enum {
 #define UV_SELECT_FACE 4
 #define UV_SELECT_ISLAND 8
 
-/* ToolSettings.edge_mode */
-#define EDGE_MODE_SELECT 0
-#define EDGE_MODE_TAG_SEAM 1
-#define EDGE_MODE_TAG_SHARP 2
-#define EDGE_MODE_TAG_CREASE 3
-#define EDGE_MODE_TAG_BEVEL 4
-#define EDGE_MODE_TAG_FREESTYLE 5
-
 /* ToolSettings.gpencil_flags */
 typedef enum eGPencil_Flags {
   /* When creating new frames, the last frame gets used as the basis for the new one */
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 7661b294a1b..f861cf8cb1b 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2594,16 +2594,6 @@ static void rna_def_tool_settings(BlenderRNA *brna)
       {0, NULL, 0, NULL, NULL},
   };
 
-  static const EnumPropertyItem edge_tag_items[] = {
-      {EDGE_MODE_SELECT, "SELECT", 0, "Select", ""},
-      {EDGE_MODE_TAG_SEAM, "SEAM", 0, "Tag Seam", ""},
-      {EDGE_MODE_TAG_SHARP, "SHARP", 0, "Tag Sharp", ""},
-      {EDGE_MODE_TAG_CREASE, "CREASE", 0, "Tag Crease", ""},
-      {EDGE_MODE_TAG_BEVEL, "BEVEL", 0, "Tag Bevel", ""},
-      {EDGE_MODE_TAG_FREESTYLE, "FREESTYLE", 0, "Tag Freestyle Edge Mark", ""},
-      {0, NULL, 0, NULL, NULL},
-  };
-
   static const EnumPropertyItem draw_groupuser_items[] = {
       {OB_DRAW_GROUPUSER_NONE, "NONE", 0, "None", ""},
       {OB_DRAW_GROUPUSER_ACTIVE,
@@ -3145,13 +3135,6 @@ static void rna_def_tool_settings(BlenderRNA *brna)
   RNA_def_property_float_sdna(prop, NULL, "vgroup_weight");
   RNA_def_property_ui_text(prop, "Vertex Group Weight", "Weight to assign in vertex groups");
 
-  /* use with MESH_OT_shortest_path_pick */
-  prop = RNA_def_property(srna, "edge_path_mode", PROP_ENUM, PROP_NONE);
-  RNA_def_property_enum_sdna(prop, NULL, "edge_mode");
-  RNA_def_property_enum_items(prop, edge_tag_items);
-  RNA_def_property_ui_text(
-      prop, "Edge Tag Mode", "The edge flag to tag when selecting the shortest path");
-
   prop = RNA_def_property(srna, "use_edge_path_live_unwrap", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_boolean_sdna(prop, NULL, "edge_mode_live_unwrap", 1);
   RNA_def_property_ui_text(prop, "Live Unwrap", "Changing edges seam re-calculates UV unwrap");



More information about the Bf-blender-cvs mailing list