diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:17:24 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-04-17 07:21:24 +0300 |
commit | e12c08e8d170b7ca40f204a5b0423c23a9fbc2c1 (patch) | |
tree | 8cf3453d12edb177a218ef8009357518ec6cab6a /source/blender/editors/mesh/editmesh_add_gizmo.c | |
parent | b3dabc200a4b0399ec6b81f2ff2730d07b44fcaa (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_add_gizmo.c')
-rw-r--r-- | source/blender/editors/mesh/editmesh_add_gizmo.c | 491 |
1 files changed, 250 insertions, 241 deletions
diff --git a/source/blender/editors/mesh/editmesh_add_gizmo.c b/source/blender/editors/mesh/editmesh_add_gizmo.c index b01a935e4d2..9ed2c15f1c1 100644 --- a/source/blender/editors/mesh/editmesh_add_gizmo.c +++ b/source/blender/editors/mesh/editmesh_add_gizmo.c @@ -48,7 +48,7 @@ #include "BLT_translation.h" -#include "mesh_intern.h" /* own include */ +#include "mesh_intern.h" /* own include */ /* -------------------------------------------------------------------- */ /** \name Helper Functions @@ -60,51 +60,52 @@ * We may base this choice on context, * for now pick the "ground" based on the 3D cursor's dominant plane pointing down relative to the view. */ -static void calc_initial_placement_point_from_view( - bContext *C, const float mval[2], - float r_location[3], float r_rotation[3][3]) +static void calc_initial_placement_point_from_view(bContext *C, + const float mval[2], + float r_location[3], + float r_rotation[3][3]) { - Scene *scene = CTX_data_scene(C); - ARegion *ar = CTX_wm_region(C); - RegionView3D *rv3d = ar->regiondata; - - bool use_mouse_project = true; /* TODO: make optional */ - - float cursor_matrix[4][4]; - float orient_matrix[3][3]; - ED_view3d_cursor3d_calc_mat4(scene, cursor_matrix); - - float dots[3] = { - dot_v3v3(rv3d->viewinv[2], cursor_matrix[0]), - dot_v3v3(rv3d->viewinv[2], cursor_matrix[1]), - dot_v3v3(rv3d->viewinv[2], cursor_matrix[2]), - }; - const int axis = axis_dominant_v3_single(dots); - - copy_v3_v3(orient_matrix[0], cursor_matrix[(axis + 1) % 3]); - copy_v3_v3(orient_matrix[1], cursor_matrix[(axis + 2) % 3]); - copy_v3_v3(orient_matrix[2], cursor_matrix[axis]); - - if (dot_v3v3(rv3d->viewinv[2], orient_matrix[2]) < 0.0f) { - negate_v3(orient_matrix[2]); - } - if (is_negative_m3(orient_matrix)) { - swap_v3_v3(orient_matrix[0], orient_matrix[1]); - } - - if (use_mouse_project) { - float plane[4]; - plane_from_point_normal_v3(plane, cursor_matrix[3], orient_matrix[2]); - if (ED_view3d_win_to_3d_on_plane(ar, plane, mval, true, r_location)) { - copy_m3_m3(r_rotation, orient_matrix); - return; - } - } - - /* fallback */ - copy_v3_v3(r_location, cursor_matrix[3]); - copy_m3_m3(r_rotation, orient_matrix); + Scene *scene = CTX_data_scene(C); + ARegion *ar = CTX_wm_region(C); + RegionView3D *rv3d = ar->regiondata; + + bool use_mouse_project = true; /* TODO: make optional */ + + float cursor_matrix[4][4]; + float orient_matrix[3][3]; + ED_view3d_cursor3d_calc_mat4(scene, cursor_matrix); + + float dots[3] = { + dot_v3v3(rv3d->viewinv[2], cursor_matrix[0]), + dot_v3v3(rv3d->viewinv[2], cursor_matrix[1]), + dot_v3v3(rv3d->viewinv[2], cursor_matrix[2]), + }; + const int axis = axis_dominant_v3_single(dots); + + copy_v3_v3(orient_matrix[0], cursor_matrix[(axis + 1) % 3]); + copy_v3_v3(orient_matrix[1], cursor_matrix[(axis + 2) % 3]); + copy_v3_v3(orient_matrix[2], cursor_matrix[axis]); + + if (dot_v3v3(rv3d->viewinv[2], orient_matrix[2]) < 0.0f) { + negate_v3(orient_matrix[2]); + } + if (is_negative_m3(orient_matrix)) { + swap_v3_v3(orient_matrix[0], orient_matrix[1]); + } + + if (use_mouse_project) { + float plane[4]; + plane_from_point_normal_v3(plane, cursor_matrix[3], orient_matrix[2]); + if (ED_view3d_win_to_3d_on_plane(ar, plane, mval, true, r_location)) { + copy_m3_m3(r_rotation, orient_matrix); + return; + } + } + + /* fallback */ + copy_v3_v3(r_location, cursor_matrix[3]); + copy_m3_m3(r_rotation, orient_matrix); } /** \} */ @@ -114,12 +115,12 @@ static void calc_initial_placement_point_from_view( * \{ */ typedef struct GizmoPlacementGroup { - struct wmGizmo *cage; - struct { - bContext *context; - wmOperator *op; - PropertyRNA *prop_matrix; - } data; + struct wmGizmo *cage; + struct { + bContext *context; + wmOperator *op; + PropertyRNA *prop_matrix; + } data; } GizmoPlacementGroup; /** @@ -129,178 +130,181 @@ typedef struct GizmoPlacementGroup { */ static void gizmo_placement_exec(GizmoPlacementGroup *ggd) { - wmOperator *op = ggd->data.op; - if (op == WM_operator_last_redo((bContext *)ggd->data.context)) { - ED_undo_operator_repeat((bContext *)ggd->data.context, op); - } + wmOperator *op = ggd->data.op; + if (op == WM_operator_last_redo((bContext *)ggd->data.context)) { + ED_undo_operator_repeat((bContext *)ggd->data.context, op); + } } static void gizmo_mesh_placement_update_from_op(GizmoPlacementGroup *ggd) { - wmOperator *op = ggd->data.op; - UNUSED_VARS(op); - /* For now don't read back from the operator. */ + wmOperator *op = ggd->data.op; + UNUSED_VARS(op); + /* For now don't read back from the operator. */ #if 0 - RNA_property_float_get_array(op->ptr, ggd->data.prop_matrix, &ggd->cage->matrix_offset[0][0]); + RNA_property_float_get_array(op->ptr, ggd->data.prop_matrix, &ggd->cage->matrix_offset[0][0]); #endif } /* translate callbacks */ -static void gizmo_placement_prop_matrix_get( - const wmGizmo *gz, wmGizmoProperty *gz_prop, - void *value_p) +static void gizmo_placement_prop_matrix_get(const wmGizmo *gz, + wmGizmoProperty *gz_prop, + void *value_p) { - GizmoPlacementGroup *ggd = gz->parent_gzgroup->customdata; - wmOperator *op = ggd->data.op; - float *value = value_p; - BLI_assert(gz_prop->type->array_length == 16); - UNUSED_VARS_NDEBUG(gz_prop); - - if (value_p != ggd->cage->matrix_offset) { - mul_m4_m4m4(value_p, ggd->cage->matrix_basis, ggd->cage->matrix_offset); - RNA_property_float_get_array(op->ptr, ggd->data.prop_matrix, value); - } + GizmoPlacementGroup *ggd = gz->parent_gzgroup->customdata; + wmOperator *op = ggd->data.op; + float *value = value_p; + BLI_assert(gz_prop->type->array_length == 16); + UNUSED_VARS_NDEBUG(gz_prop); + + if (value_p != ggd->cage->matrix_offset) { + mul_m4_m4m4(value_p, ggd->cage->matrix_basis, ggd->cage->matrix_offset); + RNA_property_float_get_array(op->ptr, ggd->data.prop_matrix, value); + } } -static void gizmo_placement_prop_matrix_set( - const wmGizmo *gz, wmGizmoProperty *gz_prop, - const void *value) +static void gizmo_placement_prop_matrix_set(const wmGizmo *gz, + wmGizmoProperty *gz_prop, + const void *value) { - GizmoPlacementGroup *ggd = gz->parent_gzgroup->customdata; - wmOperator *op = ggd->data.op; + GizmoPlacementGroup *ggd = gz->parent_gzgroup->customdata; + wmOperator *op = ggd->data.op; - BLI_assert(gz_prop->type->array_length == 16); - UNUSED_VARS_NDEBUG(gz_prop); + BLI_assert(gz_prop->type->array_length == 16); + UNUSED_VARS_NDEBUG(gz_prop); - float mat[4][4]; - mul_m4_m4m4(mat, ggd->cage->matrix_basis, value); + float mat[4][4]; + mul_m4_m4m4(mat, ggd->cage->matrix_basis, value); - if (is_negative_m4(mat)) { - negate_mat3_m4(mat); - } + if (is_negative_m4(mat)) { + negate_mat3_m4(mat); + } - RNA_property_float_set_array(op->ptr, ggd->data.prop_matrix, &mat[0][0]); + RNA_property_float_set_array(op->ptr, ggd->data.prop_matrix, &mat[0][0]); - gizmo_placement_exec(ggd); + gizmo_placement_exec(ggd); } static bool gizmo_mesh_placement_poll(const bContext *C, wmGizmoGroupType *gzgt) { - return ED_gizmo_poll_or_unlink_delayed_from_operator(C, gzgt, "MESH_OT_primitive_cube_add_gizmo"); + return ED_gizmo_poll_or_unlink_delayed_from_operator( + C, gzgt, "MESH_OT_primitive_cube_add_gizmo"); } -static void gizmo_mesh_placement_modal_from_setup( - const bContext *C, wmGizmoGroup *gzgroup) +static void gizmo_mesh_placement_modal_from_setup(const bContext *C, wmGizmoGroup *gzgroup) { - GizmoPlacementGroup *ggd = gzgroup->customdata; - - /* Initial size. */ - { - wmGizmo *gz = ggd->cage; - zero_m4(gz->matrix_offset); - - /* TODO: support zero scaled matrix in 'GIZMO_GT_cage_3d'. */ - gz->matrix_offset[0][0] = 0.01; - gz->matrix_offset[1][1] = 0.01; - gz->matrix_offset[2][2] = 0.01; - gz->matrix_offset[3][3] = 1.0f; - } - - /* Start off dragging. */ - { - wmWindow *win = CTX_wm_window(C); - ARegion *ar = CTX_wm_region(C); - wmGizmo *gz = ggd->cage; - - { - float mat3[3][3]; - float location[3]; - calc_initial_placement_point_from_view( - (bContext *)C, (float[2]){ - win->eventstate->x - ar->winrct.xmin, - win->eventstate->y - ar->winrct.ymin, - }, - location, mat3); - copy_m4_m3(gz->matrix_basis, mat3); - copy_v3_v3(gz->matrix_basis[3], location); - } - - if (1) { - wmGizmoMap *gzmap = gzgroup->parent_gzmap; - WM_gizmo_modal_set_from_setup( - gzmap, (bContext *)C, ggd->cage, ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z, win->eventstate); - } - } + GizmoPlacementGroup *ggd = gzgroup->customdata; + + /* Initial size. */ + { + wmGizmo *gz = ggd->cage; + zero_m4(gz->matrix_offset); + + /* TODO: support zero scaled matrix in 'GIZMO_GT_cage_3d'. */ + gz->matrix_offset[0][0] = 0.01; + gz->matrix_offset[1][1] = 0.01; + gz->matrix_offset[2][2] = 0.01; + gz->matrix_offset[3][3] = 1.0f; + } + + /* Start off dragging. */ + { + wmWindow *win = CTX_wm_window(C); + ARegion *ar = CTX_wm_region(C); + wmGizmo *gz = ggd->cage; + + { + float mat3[3][3]; + float location[3]; + calc_initial_placement_point_from_view((bContext *)C, + (float[2]){ + win->eventstate->x - ar->winrct.xmin, + win->eventstate->y - ar->winrct.ymin, + }, + location, + mat3); + copy_m4_m3(gz->matrix_basis, mat3); + copy_v3_v3(gz->matrix_basis[3], location); + } + + if (1) { + wmGizmoMap *gzmap = gzgroup->parent_gzmap; + WM_gizmo_modal_set_from_setup(gzmap, + (bContext *)C, + ggd->cage, + ED_GIZMO_CAGE3D_PART_SCALE_MAX_X_MAX_Y_MAX_Z, + win->eventstate); + } + } } static void gizmo_mesh_placement_setup(const bContext *C, wmGizmoGroup *gzgroup) { - wmOperator *op = WM_operator_last_redo(C); + wmOperator *op = WM_operator_last_redo(C); - if (op == NULL || !STREQ(op->type->idname, "MESH_OT_primitive_cube_add_gizmo")) { - return; - } + if (op == NULL || !STREQ(op->type->idname, "MESH_OT_primitive_cube_add_gizmo")) { + return; + } - struct GizmoPlacementGroup *ggd = MEM_callocN(sizeof(GizmoPlacementGroup), __func__); - gzgroup->customdata = ggd; + struct GizmoPlacementGroup *ggd = MEM_callocN(sizeof(GizmoPlacementGroup), __func__); + gzgroup->customdata = ggd; - const wmGizmoType *gzt_cage = WM_gizmotype_find("GIZMO_GT_cage_3d", true); + const wmGizmoType *gzt_cage = WM_gizmotype_find("GIZMO_GT_cage_3d", true); - ggd->cage = WM_gizmo_new_ptr(gzt_cage, gzgroup, NULL); + ggd->cage = WM_gizmo_new_ptr(gzt_cage, gzgroup, NULL); - UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->cage->color); + UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->cage->color); - RNA_enum_set(ggd->cage->ptr, "transform", - ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE | - ED_GIZMO_CAGE2D_XFORM_FLAG_TRANSLATE | - ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_SIGNED); + RNA_enum_set(ggd->cage->ptr, + "transform", + ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE | ED_GIZMO_CAGE2D_XFORM_FLAG_TRANSLATE | + ED_GIZMO_CAGE2D_XFORM_FLAG_SCALE_SIGNED); - WM_gizmo_set_flag(ggd->cage, WM_GIZMO_DRAW_VALUE, true); + WM_gizmo_set_flag(ggd->cage, WM_GIZMO_DRAW_VALUE, true); - ggd->data.context = (bContext *)C; - ggd->data.op = op; - ggd->data.prop_matrix = RNA_struct_find_property(op->ptr, "matrix"); + ggd->data.context = (bContext *)C; + ggd->data.op = op; + ggd->data.prop_matrix = RNA_struct_find_property(op->ptr, "matrix"); - gizmo_mesh_placement_update_from_op(ggd); + gizmo_mesh_placement_update_from_op(ggd); - /* Setup property callbacks */ - { - WM_gizmo_target_property_def_func( - ggd->cage, "matrix", - &(const struct wmGizmoPropertyFnParams) { - .value_get_fn = gizmo_placement_prop_matrix_get, - .value_set_fn = gizmo_placement_prop_matrix_set, - .range_get_fn = NULL, - .user_data = NULL, - }); - } + /* Setup property callbacks */ + { + WM_gizmo_target_property_def_func(ggd->cage, + "matrix", + &(const struct wmGizmoPropertyFnParams){ + .value_get_fn = gizmo_placement_prop_matrix_get, + .value_set_fn = gizmo_placement_prop_matrix_set, + .range_get_fn = NULL, + .user_data = NULL, + }); + } - gizmo_mesh_placement_modal_from_setup(C, gzgroup); + gizmo_mesh_placement_modal_from_setup(C, gzgroup); } -static void gizmo_mesh_placement_draw_prepare( - const bContext *UNUSED(C), wmGizmoGroup *gzgroup) +static void gizmo_mesh_placement_draw_prepare(const bContext *UNUSED(C), wmGizmoGroup *gzgroup) { - GizmoPlacementGroup *ggd = gzgroup->customdata; - if (ggd->data.op->next) { - ggd->data.op = WM_operator_last_redo((bContext *)ggd->data.context); - } - gizmo_mesh_placement_update_from_op(ggd); + GizmoPlacementGroup *ggd = gzgroup->customdata; + if (ggd->data.op->next) { + ggd->data.op = WM_operator_last_redo((bContext *)ggd->data.context); + } + gizmo_mesh_placement_update_from_op(ggd); } static void MESH_GGT_add_bounds(struct wmGizmoGroupType *gzgt) { - gzgt->name = "Mesh Add Bounds"; - gzgt->idname = "MESH_GGT_add_bounds"; + gzgt->name = "Mesh Add Bounds"; + gzgt->idname = "MESH_GGT_add_bounds"; - gzgt->flag = WM_GIZMOGROUPTYPE_3D; + gzgt->flag = WM_GIZMOGROUPTYPE_3D; - gzgt->gzmap_params.spaceid = SPACE_VIEW3D; - gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW; + gzgt->gzmap_params.spaceid = SPACE_VIEW3D; + gzgt->gzmap_params.regionid = RGN_TYPE_WINDOW; - gzgt->poll = gizmo_mesh_placement_poll; - gzgt->setup = gizmo_mesh_placement_setup; - gzgt->draw_prepare = gizmo_mesh_placement_draw_prepare; + gzgt->poll = gizmo_mesh_placement_poll; + gzgt->setup = gizmo_mesh_placement_setup; + gzgt->draw_prepare = gizmo_mesh_placement_draw_prepare; } /** \} */ @@ -313,89 +317,94 @@ static void MESH_GGT_add_bounds(struct wmGizmoGroupType *gzgt) * and share the same BMesh creation code. * \{ */ - static int add_primitive_cube_gizmo_exec(bContext *C, wmOperator *op) { - Object *obedit = CTX_data_edit_object(C); - BMEditMesh *em = BKE_editmesh_from_object(obedit); - float matrix[4][4]; - - /* Get the matrix that defines the cube bounds (as set by the gizmo cage). */ - { - PropertyRNA *prop_matrix = RNA_struct_find_property(op->ptr, "matrix"); - if (RNA_property_is_set(op->ptr, prop_matrix)) { - RNA_property_float_get_array(op->ptr, prop_matrix, &matrix[0][0]); - invert_m4_m4(obedit->imat, obedit->obmat); - mul_m4_m4m4(matrix, obedit->imat, matrix); - } - else { - /* For the first update the widget may not set the matrix. */ - return OPERATOR_FINISHED; - } - } - - const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); - - if (calc_uvs) { - ED_mesh_uv_texture_ensure(obedit->data, NULL); - } - - if (!EDBM_op_call_and_selectf( - em, op, "verts.out", false, - "create_cube matrix=%m4 size=%f calc_uvs=%b", - matrix, 1.0f, calc_uvs)) - { - return OPERATOR_CANCELLED; - } - - EDBM_selectmode_flush_ex(em, SCE_SELECT_VERTEX); - EDBM_update_generic(em, true, true); - - return OPERATOR_FINISHED; + Object *obedit = CTX_data_edit_object(C); + BMEditMesh *em = BKE_editmesh_from_object(obedit); + float matrix[4][4]; + + /* Get the matrix that defines the cube bounds (as set by the gizmo cage). */ + { + PropertyRNA *prop_matrix = RNA_struct_find_property(op->ptr, "matrix"); + if (RNA_property_is_set(op->ptr, prop_matrix)) { + RNA_property_float_get_array(op->ptr, prop_matrix, &matrix[0][0]); + invert_m4_m4(obedit->imat, obedit->obmat); + mul_m4_m4m4(matrix, obedit->imat, matrix); + } + else { + /* For the first update the widget may not set the matrix. */ + return OPERATOR_FINISHED; + } + } + + const bool calc_uvs = RNA_boolean_get(op->ptr, "calc_uvs"); + + if (calc_uvs) { + ED_mesh_uv_texture_ensure(obedit->data, NULL); + } + + if (!EDBM_op_call_and_selectf(em, + op, + "verts.out", + false, + "create_cube matrix=%m4 size=%f calc_uvs=%b", + matrix, + 1.0f, + calc_uvs)) { + return OPERATOR_CANCELLED; + } + + EDBM_selectmode_flush_ex(em, SCE_SELECT_VERTEX); + EDBM_update_generic(em, true, true); + + return OPERATOR_FINISHED; } -static int add_primitive_cube_gizmo_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) +static int add_primitive_cube_gizmo_invoke(bContext *C, + wmOperator *op, + const wmEvent *UNUSED(event)) { - View3D *v3d = CTX_wm_view3d(C); - - int ret = add_primitive_cube_gizmo_exec(C, op); - if (ret & OPERATOR_FINISHED) { - /* Setup gizmos */ - if (v3d && ((v3d->gizmo_flag & V3D_GIZMO_HIDE) == 0)) { - wmGizmoGroupType *gzgt = WM_gizmogrouptype_find("MESH_GGT_add_bounds", false); - if (!WM_gizmo_group_type_ensure_ptr(gzgt)) { - struct Main *bmain = CTX_data_main(C); - WM_gizmo_group_type_reinit_ptr(bmain, gzgt); - } - } - } - - return ret; + View3D *v3d = CTX_wm_view3d(C); + + int ret = add_primitive_cube_gizmo_exec(C, op); + if (ret & OPERATOR_FINISHED) { + /* Setup gizmos */ + if (v3d && ((v3d->gizmo_flag & V3D_GIZMO_HIDE) == 0)) { + wmGizmoGroupType *gzgt = WM_gizmogrouptype_find("MESH_GGT_add_bounds", false); + if (!WM_gizmo_group_type_ensure_ptr(gzgt)) { + struct Main *bmain = CTX_data_main(C); + WM_gizmo_group_type_reinit_ptr(bmain, gzgt); + } + } + } + + return ret; } void MESH_OT_primitive_cube_add_gizmo(wmOperatorType *ot) { - /* identifiers */ - ot->name = "Add Cube"; - ot->description = "Construct a cube mesh"; - ot->idname = "MESH_OT_primitive_cube_add_gizmo"; + /* identifiers */ + ot->name = "Add Cube"; + ot->description = "Construct a cube mesh"; + ot->idname = "MESH_OT_primitive_cube_add_gizmo"; - /* api callbacks */ - ot->invoke = add_primitive_cube_gizmo_invoke; - ot->exec = add_primitive_cube_gizmo_exec; - ot->poll = ED_operator_editmesh_view3d; + /* api callbacks */ + ot->invoke = add_primitive_cube_gizmo_invoke; + ot->exec = add_primitive_cube_gizmo_exec; + ot->poll = ED_operator_editmesh_view3d; - /* flags */ - ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; + /* flags */ + ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; - ED_object_add_mesh_props(ot); - ED_object_add_generic_props(ot, true); + ED_object_add_mesh_props(ot); + ED_object_add_generic_props(ot, true); - /* hidden props */ - PropertyRNA *prop = RNA_def_float_matrix(ot->srna, "matrix", 4, 4, NULL, 0.0f, 0.0f, "Matrix", "", 0.0f, 0.0f); - RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); + /* hidden props */ + PropertyRNA *prop = RNA_def_float_matrix( + ot->srna, "matrix", 4, 4, NULL, 0.0f, 0.0f, "Matrix", "", 0.0f, 0.0f); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); - WM_gizmogrouptype_append(MESH_GGT_add_bounds); + WM_gizmogrouptype_append(MESH_GGT_add_bounds); } /** \} */ |