Merge branch 'master' into blender2.8
[blender.git] / source / blender / editors / mesh / editmesh_tools.c
index c979a73e9645b70985d681b26fb1dd0885c5b74c..a71b03b6ff7a2f290d9600358b25c9193d33b9e6 100644 (file)
 #include "BLI_rand.h"
 #include "BLI_sort_utils.h"
 
+#include "BKE_layer.h"
 #include "BKE_material.h"
 #include "BKE_context.h"
 #include "BKE_deform.h"
-#include "BKE_depsgraph.h"
 #include "BKE_report.h"
 #include "BKE_texture.h"
 #include "BKE_main.h"
 #include "BKE_editmesh.h"
 
+#include "DEG_depsgraph.h"
+#include "DEG_depsgraph_build.h"
+
 #include "BLT_translation.h"
 
 #include "RNA_define.h"
@@ -144,6 +147,8 @@ void MESH_OT_subdivide(wmOperatorType *ot)
 
        RNA_def_float(ot->srna, "smoothness", 0.0f, 0.0f, 1e3f, "Smoothness", "Smoothness factor", 0.0f, 1.0f);
 
+       WM_operatortype_props_advanced_begin(ot);
+
        RNA_def_boolean(ot->srna, "quadtri", 0, "Quad/Tri Mode", "Tries to prevent ngons");
        RNA_def_enum(ot->srna, "quadcorner", prop_mesh_cornervert_types, SUBD_CORNER_STRAIGHT_CUT,
                     "Quad Corner Type", "How to subdivide quad corners (anything other than Straight Cut will prevent ngons)");
@@ -306,7 +311,7 @@ void EMBM_project_snap_verts(bContext *C, ARegion *ar, BMEditMesh *em)
        ED_view3d_init_mats_rv3d(obedit, ar->regiondata);
 
        struct SnapObjectContext *snap_context = ED_transform_snap_object_context_create_view3d(
-               CTX_data_main(C), CTX_data_scene(C), 0,
+               CTX_data_main(C), CTX_data_scene(C), CTX_data_view_layer(C), CTX_data_engine_type(C), 0,
                ar, CTX_wm_view3d(C));
 
        BM_ITER_MESH (eve, &iter, em->bm, BM_VERTS_OF_MESH) {
@@ -860,9 +865,11 @@ void MESH_OT_mark_seam(wmOperatorType *ot)
        
        /* flags */
        ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
-       
+
        prop = RNA_def_boolean(ot->srna, "clear", 0, "Clear", "");
        RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+
+       WM_operatortype_props_advanced_begin(ot);
 }
 
 static int edbm_mark_sharp_exec(bContext *C, wmOperator *op)
@@ -1804,6 +1811,9 @@ void MESH_OT_vertices_smooth(wmOperatorType *ot)
 
        RNA_def_float(ot->srna, "factor", 0.5f, -10.0f, 10.0f, "Smoothing", "Smoothing factor", 0.0f, 1.0f);
        RNA_def_int(ot->srna, "repeat", 1, 1, 1000, "Repeat", "Number of times to smooth the mesh", 1, 100);
+
+       WM_operatortype_props_advanced_begin(ot);
+
        RNA_def_boolean(ot->srna, "xaxis", true, "X-Axis", "Smooth along the X axis");
        RNA_def_boolean(ot->srna, "yaxis", true, "Y-Axis", "Smooth along the Y axis");
        RNA_def_boolean(ot->srna, "zaxis", true, "Z-Axis", "Smooth along the Z axis");
@@ -1887,6 +1897,9 @@ void MESH_OT_vertices_smooth_laplacian(wmOperatorType *ot)
                      "Lambda factor", "", 1e-7f, 1000.0f);
        RNA_def_float(ot->srna, "lambda_border", 5e-5f, 1e-7f, 1000.0f,
                      "Lambda factor in border", "", 1e-7f, 1000.0f);
+
+       WM_operatortype_props_advanced_begin(ot);
+
        RNA_def_boolean(ot->srna, "use_x", true, "Smooth X Axis", "Smooth object along X axis");
        RNA_def_boolean(ot->srna, "use_y", true, "Smooth Y Axis", "Smooth object along Y axis");
        RNA_def_boolean(ot->srna, "use_z", true, "Smooth Z Axis", "Smooth object along Z axis");
@@ -2342,6 +2355,9 @@ void MESH_OT_merge(wmOperatorType *ot)
        /* properties */
        ot->prop = RNA_def_enum(ot->srna, "type", merge_type_items, MESH_MERGE_CENTER, "Type", "Merge method to use");
        RNA_def_enum_funcs(ot->prop, merge_type_itemf);
+
+       WM_operatortype_props_advanced_begin(ot);
+
        RNA_def_boolean(ot->srna, "uvs", false, "UVs", "Move UVs according to merge");
 }
 
@@ -2453,7 +2469,7 @@ static void shape_propagate(BMEditMesh *em, wmOperator *op)
        //TAG Mesh Objects that share this data
        for (base = scene->base.first; base; base = base->next) {
                if (base->object && base->object->data == me) {
-                       DAG_id_tag_update(&base->object->id, OB_RECALC_DATA);
+                       DEG_id_tag_update(&base->object->id, OB_RECALC_DATA);
                }
        }
 #endif
@@ -3016,7 +3032,7 @@ enum {
        MESH_SEPARATE_LOOSE    = 2,
 };
 
-static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static Base *mesh_separate_tagged(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
 {
        Base *base_new;
        Object *obedit = base_old->object;
@@ -3037,11 +3053,11 @@ static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMe
        CustomData_bmesh_init_pool(&bm_new->ldata, bm_mesh_allocsize_default.totloop, BM_LOOP);
        CustomData_bmesh_init_pool(&bm_new->pdata, bm_mesh_allocsize_default.totface, BM_FACE);
 
-       base_new = ED_object_add_duplicate(bmain, scene, base_old, USER_DUP_MESH);
+       base_new = ED_object_add_duplicate(bmain, scene, view_layer, base_old, USER_DUP_MESH);
        /* DAG_relations_tag_update(bmain); */ /* normally would call directly after but in this case delay recalc */
        assign_matarar(base_new->object, give_matarar(obedit), *give_totcolp(obedit)); /* new in 2.5 */
 
-       ED_base_object_select(base_new, BA_SELECT);
+       ED_object_base_select(base_new, BA_SELECT);
 
        BMO_op_callf(bm_old, (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE),
                     "duplicate geom=%hvef dest=%p", BM_ELEM_TAG, bm_new);
@@ -3063,7 +3079,7 @@ static Base *mesh_separate_tagged(Main *bmain, Scene *scene, Base *base_old, BMe
        return base_new;
 }
 
-static bool mesh_separate_selected(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_selected(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
 {
        /* we may have tags from previous operators */
        BM_mesh_elem_hflag_disable_all(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, false);
@@ -3071,7 +3087,7 @@ static bool mesh_separate_selected(Main *bmain, Scene *scene, Base *base_old, BM
        /* sel -> tag */
        BM_mesh_elem_hflag_enable_test(bm_old, BM_FACE | BM_EDGE | BM_VERT, BM_ELEM_TAG, true, false, BM_ELEM_SELECT);
 
-       return (mesh_separate_tagged(bmain, scene, base_old, bm_old) != NULL);
+       return (mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old) != NULL);
 }
 
 /* flush a hflag to from verts to edges/faces */
@@ -3170,7 +3186,7 @@ static void mesh_separate_material_assign_mat_nr(Main *bmain, Object *ob, const
        }
 }
 
-static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_material(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
 {
        BMFace *f_cmp, *f;
        BMIter iter;
@@ -3211,7 +3227,7 @@ static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BM
                }
 
                /* Move selection into a separate object */
-               base_new = mesh_separate_tagged(bmain, scene, base_old, bm_old);
+               base_new = mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old);
                if (base_new) {
                        mesh_separate_material_assign_mat_nr(bmain, base_new->object, mat_nr);
                }
@@ -3222,7 +3238,7 @@ static bool mesh_separate_material(Main *bmain, Scene *scene, Base *base_old, BM
        return result;
 }
 
-static bool mesh_separate_loose(Main *bmain, Scene *scene, Base *base_old, BMesh *bm_old)
+static bool mesh_separate_loose(Main *bmain, Scene *scene, ViewLayer *view_layer, Base *base_old, BMesh *bm_old)
 {
        int i;
        BMEdge *e;
@@ -3275,7 +3291,7 @@ static bool mesh_separate_loose(Main *bmain, Scene *scene, Base *base_old, BMesh
                bm_mesh_hflag_flush_vert(bm_old, BM_ELEM_TAG);
 
                /* Move selection into a separate object */
-               result |= (mesh_separate_tagged(bmain, scene, base_old, bm_old) != NULL);
+               result |= (mesh_separate_tagged(bmain, scene, view_layer, base_old, bm_old) != NULL);
        }
 
        return result;
@@ -3285,6 +3301,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
 {
        Main *bmain = CTX_data_main(C);
        Scene *scene = CTX_data_scene(C);
+       ViewLayer *view_layer = CTX_data_view_layer(C);
        const int type = RNA_enum_get(op->ptr, "type");
        int retval = 0;
        
@@ -3305,13 +3322,13 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
                /* editmode separate */
                switch (type) {
                        case MESH_SEPARATE_SELECTED:
-                               retval = mesh_separate_selected(bmain, scene, base, em->bm);
+                               retval = mesh_separate_selected(bmain, scene, view_layer, base, em->bm);
                                break;
                        case MESH_SEPARATE_MATERIAL:
-                               retval = mesh_separate_material(bmain, scene, base, em->bm);
+                               retval = mesh_separate_material(bmain, scene, view_layer, base, em->bm);
                                break;
                        case MESH_SEPARATE_LOOSE:
-                               retval = mesh_separate_loose(bmain, scene, base, em->bm);
+                               retval = mesh_separate_loose(bmain, scene, view_layer, base, em->bm);
                                break;
                        default:
                                BLI_assert(0);
@@ -3346,10 +3363,10 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
 
                                        switch (type) {
                                                case MESH_SEPARATE_MATERIAL:
-                                                       retval_iter = mesh_separate_material(bmain, scene, base_iter, bm_old);
+                                                       retval_iter = mesh_separate_material(bmain, scene, view_layer, base_iter, bm_old);
                                                        break;
                                                case MESH_SEPARATE_LOOSE:
-                                                       retval_iter = mesh_separate_loose(bmain, scene, base_iter, bm_old);
+                                                       retval_iter = mesh_separate_loose(bmain, scene, view_layer, base_iter, bm_old);
                                                        break;
                                                default:
                                                        BLI_assert(0);
@@ -3363,7 +3380,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
                                                            .calc_object_remap = true,
                                                        }));
 
-                                               DAG_id_tag_update(&me->id, OB_RECALC_DATA);
+                                               DEG_id_tag_update(&me->id, OB_RECALC_DATA);
                                                WM_event_add_notifier(C, NC_GEOM | ND_DATA, me);
                                        }
 
@@ -3378,7 +3395,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op)
 
        if (retval) {
                /* delay depsgraph recalc until all objects are duplicated */
-               DAG_relations_tag_update(bmain);
+               DEG_relations_tag_update(bmain);
                WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL);
 
                return OPERATOR_FINISHED;
@@ -5069,7 +5086,7 @@ static void sort_bmelem_flag(Scene *scene, Object *ob,
        }
 
        BM_mesh_remap(em->bm, map[0], map[1], map[2]);
-/*     DAG_id_tag_update(ob->data, 0);*/
+/*     DEG_id_tag_update(ob->data, 0);*/
 
        for (j = 3; j--; ) {
                if (map[j])
@@ -5896,7 +5913,7 @@ static int edbm_mark_freestyle_edge_exec(bContext *C, wmOperator *op)
                }
        }
 
-       DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
+       DEG_id_tag_update(obedit->data, OB_RECALC_DATA);
        WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
 
        return OPERATOR_FINISHED;
@@ -5960,7 +5977,7 @@ static int edbm_mark_freestyle_face_exec(bContext *C, wmOperator *op)
                }
        }
 
-       DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
+       DEG_id_tag_update(obedit->data, OB_RECALC_DATA);
        WM_event_add_notifier(C, NC_GEOM | ND_DATA, obedit->data);
 
        return OPERATOR_FINISHED;