Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-04-17 07:17:24 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-04-17 07:21:24 +0300
commite12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch)
tree8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/mesh/editmesh_polybuild.c
parentb3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (diff)
ClangFormat: apply to source, most of intern
Apply clang format as proposed in T53211. For details on usage and instructions for migrating branches without conflicts, see: https://wiki.blender.org/wiki/Tools/ClangFormat
Diffstat (limited to 'source/blender/editors/mesh/editmesh_polybuild.c')
-rw-r--r--source/blender/editors/mesh/editmesh_polybuild.c680
1 files changed, 338 insertions, 342 deletions
diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c
index 7decd5f4b2f..088d1672cc9 100644
--- a/source/blender/editors/mesh/editmesh_polybuild.c
+++ b/source/blender/editors/mesh/editmesh_polybuild.c
@@ -44,7 +44,7 @@
#include "bmesh.h"
-#include "mesh_intern.h" /* own include */
+#include "mesh_intern.h" /* own include */
#include "RNA_access.h"
#include "RNA_define.h"
@@ -59,70 +59,67 @@
static void edbm_selectmode_ensure(Scene *scene, BMEditMesh *em, short selectmode)
{
- if ((scene->toolsettings->selectmode & selectmode) == 0) {
- scene->toolsettings->selectmode |= selectmode;
- em->selectmode = scene->toolsettings->selectmode;
- EDBM_selectmode_set(em);
- }
+ if ((scene->toolsettings->selectmode & selectmode) == 0) {
+ scene->toolsettings->selectmode |= selectmode;
+ em->selectmode = scene->toolsettings->selectmode;
+ EDBM_selectmode_set(em);
+ }
}
/* Could make public, for now just keep here. */
static void edbm_flag_disable_all_multi(ViewLayer *view_layer, View3D *v3d, const char hflag)
{
- uint objects_len = 0;
- Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(view_layer, v3d, &objects_len);
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *ob_iter = objects[ob_index];
- BMEditMesh *em_iter = BKE_editmesh_from_object(ob_iter);
- BMesh *bm_iter = em_iter->bm;
- if (bm_iter->totvertsel) {
- EDBM_flag_disable_all(em_iter, hflag);
- DEG_id_tag_update(ob_iter->data, ID_RECALC_SELECT);
- }
- }
- MEM_freeN(objects);
+ uint objects_len = 0;
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode_unique_data(
+ view_layer, v3d, &objects_len);
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
+ Object *ob_iter = objects[ob_index];
+ BMEditMesh *em_iter = BKE_editmesh_from_object(ob_iter);
+ BMesh *bm_iter = em_iter->bm;
+ if (bm_iter->totvertsel) {
+ EDBM_flag_disable_all(em_iter, hflag);
+ DEG_id_tag_update(ob_iter->data, ID_RECALC_SELECT);
+ }
+ }
+ MEM_freeN(objects);
}
/* When accessed as a tool, get the active edge from the preselection gizmo. */
-static bool edbm_preselect_or_active(
- bContext *C,
- const View3D *v3d,
- Base **r_base,
- BMElem **r_ele)
+static bool edbm_preselect_or_active(bContext *C, const View3D *v3d, Base **r_base, BMElem **r_ele)
{
- ARegion *ar = CTX_wm_region(C);
- const bool show_gizmo = !((v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_TOOL)));
-
- wmGizmoMap *gzmap = show_gizmo ? ar->gizmo_map : NULL;
- wmGizmoGroup *gzgroup = gzmap ? WM_gizmomap_group_find(gzmap, "VIEW3D_GGT_mesh_preselect_elem") : NULL;
- if (gzgroup != NULL) {
- wmGizmo *gz = gzgroup->gizmos.first;
- ED_view3d_gizmo_mesh_preselect_get_active(C, gz, r_base, r_ele);
- }
- else {
- ViewLayer *view_layer = CTX_data_view_layer(C);
- Base *base = view_layer->basact;
- Object *obedit = base->object;
- BMEditMesh *em = BKE_editmesh_from_object(obedit);
- BMesh *bm = em->bm;
- *r_base = base;
- *r_ele = BM_mesh_active_elem_get(bm);
- }
- return (*r_ele != NULL);
+ ARegion *ar = CTX_wm_region(C);
+ const bool show_gizmo = !((v3d->gizmo_flag & (V3D_GIZMO_HIDE | V3D_GIZMO_HIDE_TOOL)));
+
+ wmGizmoMap *gzmap = show_gizmo ? ar->gizmo_map : NULL;
+ wmGizmoGroup *gzgroup = gzmap ? WM_gizmomap_group_find(gzmap, "VIEW3D_GGT_mesh_preselect_elem") :
+ NULL;
+ if (gzgroup != NULL) {
+ wmGizmo *gz = gzgroup->gizmos.first;
+ ED_view3d_gizmo_mesh_preselect_get_active(C, gz, r_base, r_ele);
+ }
+ else {
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = view_layer->basact;
+ Object *obedit = base->object;
+ BMEditMesh *em = BKE_editmesh_from_object(obedit);
+ BMesh *bm = em->bm;
+ *r_base = base;
+ *r_ele = BM_mesh_active_elem_get(bm);
+ }
+ return (*r_ele != NULL);
}
-static bool edbm_preselect_or_active_init_viewcontext(
- bContext *C,
- ViewContext *vc,
- Base **r_base,
- BMElem **r_ele)
+static bool edbm_preselect_or_active_init_viewcontext(bContext *C,
+ ViewContext *vc,
+ Base **r_base,
+ BMElem **r_ele)
{
- em_setup_viewcontext(C, vc);
- bool ok = edbm_preselect_or_active(C, vc->v3d, r_base, r_ele);
- if (ok) {
- ED_view3d_viewcontext_init_object(vc, (*r_base)->object);
- }
- return ok;
+ em_setup_viewcontext(C, vc);
+ bool ok = edbm_preselect_or_active(C, vc->v3d, r_base, r_ele);
+ if (ok) {
+ ED_view3d_viewcontext_init_object(vc, (*r_base)->object);
+ }
+ return ok;
}
/** \} */
@@ -131,163 +128,161 @@ static bool edbm_preselect_or_active_init_viewcontext(
/** \name Face at Cursor
* \{ */
-static int edbm_polybuild_face_at_cursor_invoke(
- bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+static int edbm_polybuild_face_at_cursor_invoke(bContext *C,
+ wmOperator *UNUSED(op),
+ const wmEvent *event)
{
- float center[3];
- bool changed = false;
-
- ViewContext vc;
- Base *basact = NULL;
- BMElem *ele_act = NULL;
- edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
- BMEditMesh *em = vc.em;
- BMesh *bm = em->bm;
-
- invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
- ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
-
- edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
-
- if (ele_act == NULL || ele_act->head.htype == BM_FACE) {
- /* Just add vert */
- copy_v3_v3(center, vc.scene->cursor.location);
- mul_v3_m4v3(center, vc.obedit->obmat, center);
- ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
- mul_m4_v3(vc.obedit->imat, center);
-
- BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
- edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
- BM_vert_select_set(bm, v_new, true);
- BM_select_history_store(bm, v_new);
- changed = true;
- }
- else if (ele_act->head.htype == BM_EDGE) {
- BMEdge *e_act = (BMEdge *)ele_act;
- BMFace *f_reference = e_act->l ? e_act->l->f : NULL;
-
- mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
- mul_m4_v3(vc.obedit->obmat, center);
- ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
- mul_m4_v3(vc.obedit->imat, center);
-
- BMVert *v_tri[3];
- v_tri[0] = e_act->v1;
- v_tri[1] = e_act->v2;
- v_tri[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
- if (e_act->l && e_act->l->v == v_tri[0]) {
- SWAP(BMVert *, v_tri[0], v_tri[1]);
- }
- // BMFace *f_new =
- BM_face_create_verts(bm, v_tri, 3, f_reference, BM_CREATE_NOP, true);
-
- edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
- BM_vert_select_set(bm, v_tri[2], true);
- BM_select_history_store(bm, v_tri[2]);
- changed = true;
- }
- else if (ele_act->head.htype == BM_VERT) {
- BMVert *v_act = (BMVert *)ele_act;
- BMEdge *e_pair[2] = {NULL};
-
- if (v_act->e != NULL) {
- for (uint allow_wire = 0; allow_wire < 2 && (e_pair[1] == NULL); allow_wire++) {
- int i = 0;
- BMEdge *e_iter = v_act->e;
- do {
- if ((BM_elem_flag_test(e_iter, BM_ELEM_HIDDEN) == false) &&
- (allow_wire ? BM_edge_is_wire(e_iter) : BM_edge_is_boundary(e_iter)))
- {
- if (i == 2) {
- e_pair[0] = e_pair[1] = NULL;
- break;
- }
- e_pair[i++] = e_iter;
- }
- } while ((e_iter = BM_DISK_EDGE_NEXT(e_iter, v_act)) != v_act->e);
- }
- }
-
- if (e_pair[1] != NULL) {
- /* Quad from edge pair. */
- if (BM_edge_calc_length_squared(e_pair[0]) <
- BM_edge_calc_length_squared(e_pair[1]))
- {
- SWAP(BMEdge *, e_pair[0], e_pair[1]);
- }
-
- BMFace *f_reference = e_pair[0]->l ? e_pair[0]->l->f : NULL;
-
- mul_v3_m4v3(center, vc.obedit->obmat, v_act->co);
- ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
- mul_m4_v3(vc.obedit->imat, center);
-
- BMVert *v_quad[4];
- v_quad[0] = v_act;
- v_quad[1] = BM_edge_other_vert(e_pair[0], v_act);
- v_quad[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
- v_quad[3] = BM_edge_other_vert(e_pair[1], v_act);
- if (e_pair[0]->l && e_pair[0]->l->v == v_quad[0]) {
- SWAP(BMVert *, v_quad[1], v_quad[3]);
- }
- // BMFace *f_new =
- BM_face_create_verts(bm, v_quad, 4, f_reference, BM_CREATE_NOP, true);
-
- edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
- BM_vert_select_set(bm, v_quad[2], true);
- BM_select_history_store(bm, v_quad[2]);
- changed = true;
- }
- else {
- /* Just add edge */
- mul_m4_v3(vc.obedit->obmat, center);
- ED_view3d_win_to_3d_int(vc.v3d, vc.ar, v_act->co, event->mval, center);
- mul_m4_v3(vc.obedit->imat, center);
-
- BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
-
- BM_edge_create(bm, v_act, v_new, NULL, BM_CREATE_NOP);
-
- BM_vert_select_set(bm, v_new, true);
- BM_select_history_store(bm, v_new);
- changed = true;
- }
- }
-
- if (changed) {
- EDBM_mesh_normals_update(em);
- EDBM_update_generic(em, true, true);
-
- if (basact != NULL) {
- if (vc.view_layer->basact != basact) {
- ED_object_base_activate(C, basact);
- }
- }
-
- WM_event_add_mousemove(C);
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ float center[3];
+ bool changed = false;
+
+ ViewContext vc;
+ Base *basact = NULL;
+ BMElem *ele_act = NULL;
+ edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
+ BMEditMesh *em = vc.em;
+ BMesh *bm = em->bm;
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
+
+ if (ele_act == NULL || ele_act->head.htype == BM_FACE) {
+ /* Just add vert */
+ copy_v3_v3(center, vc.scene->cursor.location);
+ mul_v3_m4v3(center, vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_new, true);
+ BM_select_history_store(bm, v_new);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
+ BMEdge *e_act = (BMEdge *)ele_act;
+ BMFace *f_reference = e_act->l ? e_act->l->f : NULL;
+
+ mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_tri[3];
+ v_tri[0] = e_act->v1;
+ v_tri[1] = e_act->v2;
+ v_tri[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ if (e_act->l && e_act->l->v == v_tri[0]) {
+ SWAP(BMVert *, v_tri[0], v_tri[1]);
+ }
+ // BMFace *f_new =
+ BM_face_create_verts(bm, v_tri, 3, f_reference, BM_CREATE_NOP, true);
+
+ edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_tri[2], true);
+ BM_select_history_store(bm, v_tri[2]);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_VERT) {
+ BMVert *v_act = (BMVert *)ele_act;
+ BMEdge *e_pair[2] = {NULL};
+
+ if (v_act->e != NULL) {
+ for (uint allow_wire = 0; allow_wire < 2 && (e_pair[1] == NULL); allow_wire++) {
+ int i = 0;
+ BMEdge *e_iter = v_act->e;
+ do {
+ if ((BM_elem_flag_test(e_iter, BM_ELEM_HIDDEN) == false) &&
+ (allow_wire ? BM_edge_is_wire(e_iter) : BM_edge_is_boundary(e_iter))) {
+ if (i == 2) {
+ e_pair[0] = e_pair[1] = NULL;
+ break;
+ }
+ e_pair[i++] = e_iter;
+ }
+ } while ((e_iter = BM_DISK_EDGE_NEXT(e_iter, v_act)) != v_act->e);
+ }
+ }
+
+ if (e_pair[1] != NULL) {
+ /* Quad from edge pair. */
+ if (BM_edge_calc_length_squared(e_pair[0]) < BM_edge_calc_length_squared(e_pair[1])) {
+ SWAP(BMEdge *, e_pair[0], e_pair[1]);
+ }
+
+ BMFace *f_reference = e_pair[0]->l ? e_pair[0]->l->f : NULL;
+
+ mul_v3_m4v3(center, vc.obedit->obmat, v_act->co);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_quad[4];
+ v_quad[0] = v_act;
+ v_quad[1] = BM_edge_other_vert(e_pair[0], v_act);
+ v_quad[2] = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+ v_quad[3] = BM_edge_other_vert(e_pair[1], v_act);
+ if (e_pair[0]->l && e_pair[0]->l->v == v_quad[0]) {
+ SWAP(BMVert *, v_quad[1], v_quad[3]);
+ }
+ // BMFace *f_new =
+ BM_face_create_verts(bm, v_quad, 4, f_reference, BM_CREATE_NOP, true);
+
+ edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_quad[2], true);
+ BM_select_history_store(bm, v_quad[2]);
+ changed = true;
+ }
+ else {
+ /* Just add edge */
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, v_act->co, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ BMVert *v_new = BM_vert_create(bm, center, NULL, BM_CREATE_NOP);
+
+ BM_edge_create(bm, v_act, v_new, NULL, BM_CREATE_NOP);
+
+ BM_vert_select_set(bm, v_new, true);
+ BM_select_history_store(bm, v_new);
+ changed = true;
+ }
+ }
+
+ if (changed) {
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ if (basact != NULL) {
+ if (vc.view_layer->basact != basact) {
+ ED_object_base_activate(C, basact);
+ }
+ }
+
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void MESH_OT_polybuild_face_at_cursor(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Poly Build Face at Cursor";
- ot->idname = "MESH_OT_polybuild_face_at_cursor";
+ /* identifiers */
+ ot->name = "Poly Build Face at Cursor";
+ ot->idname = "MESH_OT_polybuild_face_at_cursor";
- /* api callbacks */
- ot->invoke = edbm_polybuild_face_at_cursor_invoke;
- ot->poll = EDBM_view3d_poll;
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_face_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- /* to give to transform */
- Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
+ /* to give to transform */
+ Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
}
/** \} */
@@ -296,170 +291,171 @@ void MESH_OT_polybuild_face_at_cursor(wmOperatorType *ot)
/** \name Split at Cursor
* \{ */
-static int edbm_polybuild_split_at_cursor_invoke(
- bContext *C, wmOperator *UNUSED(op), const wmEvent *event)
+static int edbm_polybuild_split_at_cursor_invoke(bContext *C,
+ wmOperator *UNUSED(op),
+ const wmEvent *event)
{
- float center[3];
- bool changed = false;
-
- ViewContext vc;
- Base *basact = NULL;
- BMElem *ele_act = NULL;
- edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
- BMEditMesh *em = vc.em;
- BMesh *bm = em->bm;
-
- invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
- ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
-
- edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
-
- if (ele_act == NULL || ele_act->head.hflag == BM_FACE) {
- return OPERATOR_PASS_THROUGH;
- }
- else if (ele_act->head.htype == BM_EDGE) {
- BMEdge *e_act = (BMEdge *)ele_act;
- mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
- mul_m4_v3(vc.obedit->obmat, center);
- ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
- mul_m4_v3(vc.obedit->imat, center);
-
- const float fac = line_point_factor_v3(center, e_act->v1->co, e_act->v2->co);
- BMVert *v_new = BM_edge_split(bm, e_act, e_act->v1, NULL, CLAMPIS(fac, 0.0f, 1.0f));
- copy_v3_v3(v_new->co, center);
-
- edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
- BM_vert_select_set(bm, v_new, true);
- BM_select_history_store(bm, v_new);
- changed = true;
- }
- else if (ele_act->head.htype == BM_VERT) {
- /* Just do nothing, allow dragging. */
- return OPERATOR_FINISHED;
- }
-
- if (changed) {
- EDBM_mesh_normals_update(em);
- EDBM_update_generic(em, true, true);
-
- WM_event_add_mousemove(C);
-
- if (vc.view_layer->basact != basact) {
- ED_object_base_activate(C, basact);
- }
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ float center[3];
+ bool changed = false;
+
+ ViewContext vc;
+ Base *basact = NULL;
+ BMElem *ele_act = NULL;
+ edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
+ BMEditMesh *em = vc.em;
+ BMesh *bm = em->bm;
+
+ invert_m4_m4(vc.obedit->imat, vc.obedit->obmat);
+ ED_view3d_init_mats_rv3d(vc.obedit, vc.rv3d);
+
+ edbm_selectmode_ensure(vc.scene, vc.em, SCE_SELECT_VERTEX);
+
+ if (ele_act == NULL || ele_act->head.hflag == BM_FACE) {
+ return OPERATOR_PASS_THROUGH;
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
+ BMEdge *e_act = (BMEdge *)ele_act;
+ mid_v3_v3v3(center, e_act->v1->co, e_act->v2->co);
+ mul_m4_v3(vc.obedit->obmat, center);
+ ED_view3d_win_to_3d_int(vc.v3d, vc.ar, center, event->mval, center);
+ mul_m4_v3(vc.obedit->imat, center);
+
+ const float fac = line_point_factor_v3(center, e_act->v1->co, e_act->v2->co);
+ BMVert *v_new = BM_edge_split(bm, e_act, e_act->v1, NULL, CLAMPIS(fac, 0.0f, 1.0f));
+ copy_v3_v3(v_new->co, center);
+
+ edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
+ BM_vert_select_set(bm, v_new, true);
+ BM_select_history_store(bm, v_new);
+ changed = true;
+ }
+ else if (ele_act->head.htype == BM_VERT) {
+ /* Just do nothing, allow dragging. */
+ return OPERATOR_FINISHED;
+ }
+
+ if (changed) {
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ WM_event_add_mousemove(C);
+
+ if (vc.view_layer->basact != basact) {
+ ED_object_base_activate(C, basact);
+ }
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void MESH_OT_polybuild_split_at_cursor(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Poly Build Split at Cursor";
- ot->idname = "MESH_OT_polybuild_split_at_cursor";
+ /* identifiers */
+ ot->name = "Poly Build Split at Cursor";
+ ot->idname = "MESH_OT_polybuild_split_at_cursor";
- /* api callbacks */
- ot->invoke = edbm_polybuild_split_at_cursor_invoke;
- ot->poll = EDBM_view3d_poll;
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_split_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
- /* to give to transform */
- Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
+ /* to give to transform */
+ Transform_Properties(ot, P_PROPORTIONAL | P_MIRROR_DUMMY);
}
/** \} */
-
/* -------------------------------------------------------------------- */
/** \name Dissolve at Cursor
*
* \{ */
-static int edbm_polybuild_dissolve_at_cursor_invoke(
- bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+static int edbm_polybuild_dissolve_at_cursor_invoke(bContext *C,
+ wmOperator *op,
+ const wmEvent *UNUSED(event))
{
- bool changed = false;
-
- ViewContext vc;
- Base *basact = NULL;
- BMElem *ele_act = NULL;
- edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
- BMEditMesh *em = vc.em;
- BMesh *bm = em->bm;
-
- if (ele_act == NULL) {
- /* pass */
- }
- else if (ele_act->head.htype == BM_EDGE) {
- BMEdge *e_act = (BMEdge *)ele_act;
- BMLoop *l_a, *l_b;
- if (BM_edge_loop_pair(e_act, &l_a, &l_b)) {
- BMFace *f_new = BM_faces_join_pair(bm, l_a, l_b, true);
- if (f_new) {
- changed = true;
- }
- }
- }
- else if (ele_act->head.htype == BM_VERT) {
- BMVert *v_act = (BMVert *)ele_act;
- if (BM_vert_is_edge_pair(v_act)) {
- BM_edge_collapse(
- bm, v_act->e, v_act,
- true, true);
- }
- else {
- /* too involved to do inline */
-
- /* Avoid using selection so failure wont leave modified state. */
- EDBM_flag_disable_all(em, BM_ELEM_TAG);
- BM_elem_flag_enable(v_act, BM_ELEM_TAG);
-
- if (!EDBM_op_callf(em, op,
- "dissolve_verts verts=%hv use_face_split=%b use_boundary_tear=%b",
- BM_ELEM_TAG, false, false))
- {
- return OPERATOR_CANCELLED;
- }
- }
- changed = true;
- }
-
- if (changed) {
- edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
-
- EDBM_mesh_normals_update(em);
- EDBM_update_generic(em, true, true);
-
- if (vc.view_layer->basact != basact) {
- ED_object_base_activate(C, basact);
- }
-
- WM_event_add_mousemove(C);
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
+ bool changed = false;
+
+ ViewContext vc;
+ Base *basact = NULL;
+ BMElem *ele_act = NULL;
+ edbm_preselect_or_active_init_viewcontext(C, &vc, &basact, &ele_act);
+ BMEditMesh *em = vc.em;
+ BMesh *bm = em->bm;
+
+ if (ele_act == NULL) {
+ /* pass */
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
+ BMEdge *e_act = (BMEdge *)ele_act;
+ BMLoop *l_a, *l_b;
+ if (BM_edge_loop_pair(e_act, &l_a, &l_b)) {
+ BMFace *f_new = BM_faces_join_pair(bm, l_a, l_b, true);
+ if (f_new) {
+ changed = true;
+ }
+ }
+ }
+ else if (ele_act->head.htype == BM_VERT) {
+ BMVert *v_act = (BMVert *)ele_act;
+ if (BM_vert_is_edge_pair(v_act)) {
+ BM_edge_collapse(bm, v_act->e, v_act, true, true);
+ }
+ else {
+ /* too involved to do inline */
+
+ /* Avoid using selection so failure wont leave modified state. */
+ EDBM_flag_disable_all(em, BM_ELEM_TAG);
+ BM_elem_flag_enable(v_act, BM_ELEM_TAG);
+
+ if (!EDBM_op_callf(em,
+ op,
+ "dissolve_verts verts=%hv use_face_split=%b use_boundary_tear=%b",
+ BM_ELEM_TAG,
+ false,
+ false)) {
+ return OPERATOR_CANCELLED;
+ }
+ }
+ changed = true;
+ }
+
+ if (changed) {
+ edbm_flag_disable_all_multi(vc.view_layer, vc.v3d, BM_ELEM_SELECT);
+
+ EDBM_mesh_normals_update(em);
+ EDBM_update_generic(em, true, true);
+
+ if (vc.view_layer->basact != basact) {
+ ED_object_base_activate(C, basact);
+ }
+
+ WM_event_add_mousemove(C);
+
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
void MESH_OT_polybuild_dissolve_at_cursor(wmOperatorType *ot)
{
- /* identifiers */
- ot->name = "Poly Build Dissolve at Cursor";
- ot->idname = "MESH_OT_polybuild_dissolve_at_cursor";
+ /* identifiers */
+ ot->name = "Poly Build Dissolve at Cursor";
+ ot->idname = "MESH_OT_polybuild_dissolve_at_cursor";
- /* api callbacks */
- ot->invoke = edbm_polybuild_dissolve_at_cursor_invoke;
- ot->poll = EDBM_view3d_poll;
+ /* api callbacks */
+ ot->invoke = edbm_polybuild_dissolve_at_cursor_invoke;
+ ot->poll = EDBM_view3d_poll;
- /* flags */
- ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
}
/** \} */