[Bf-blender-cvs] [8f6c81b0675] soc-2021-curves: Refactoring
Dilith Jayakody
noreply at git.blender.org
Sun Jan 30 13:37:20 CET 2022
Commit: 8f6c81b0675085dfa57d1aa58caf4c0a22cfee22
Author: Dilith Jayakody
Date: Sun Jan 30 18:07:06 2022 +0530
Branches: soc-2021-curves
https://developer.blender.org/rB8f6c81b0675085dfa57d1aa58caf4c0a22cfee22
Refactoring
===================================================================
M source/blender/editors/curve/editcurve_pen.c
===================================================================
diff --git a/source/blender/editors/curve/editcurve_pen.c b/source/blender/editors/curve/editcurve_pen.c
index 543c26fa555..a1b39fc17c1 100644
--- a/source/blender/editors/curve/editcurve_pen.c
+++ b/source/blender/editors/curve/editcurve_pen.c
@@ -151,21 +151,15 @@ static const EnumPropertyItem prop_handle_types[] = {
{0, NULL, 0, NULL, NULL},
};
-static void screenspace_to_worldspace(const float pos_2d[2],
- const float depth[3],
- const ViewContext *vc,
- float r_pos_3d[3])
+static void update_location_for_2d_curve(const ViewContext *vc, float location[3])
{
- mul_v3_m4v3(r_pos_3d, vc->obedit->obmat, depth);
- ED_view3d_win_to_3d(vc->v3d, vc->region, r_pos_3d, pos_2d, r_pos_3d);
-
Curve *cu = vc->obedit->data;
if (CU_IS_2D(cu)) {
const float eps = 1e-6f;
/* get the view vector to 'location' */
float view_dir[3];
- ED_view3d_global_to_vector(vc->rv3d, r_pos_3d, view_dir);
+ ED_view3d_global_to_vector(vc->rv3d, location, view_dir);
/* get the plane */
float plane[4];
@@ -178,13 +172,13 @@ static void screenspace_to_worldspace(const float pos_2d[2],
}
else {
float lambda;
- if (isect_ray_plane_v3(r_pos_3d, view_dir, plane, &lambda, false)) {
+ if (isect_ray_plane_v3(location, view_dir, plane, &lambda, false)) {
/* check if we're behind the viewport */
float location_test[3];
- madd_v3_v3v3fl(location_test, r_pos_3d, view_dir, lambda);
+ madd_v3_v3v3fl(location_test, location, view_dir, lambda);
if ((vc->rv3d->is_persp == false) ||
(mul_project_m4_v3_zfac(vc->rv3d->persmat, location_test) > 0.0f)) {
- copy_v3_v3(r_pos_3d, location_test);
+ copy_v3_v3(location, location_test);
}
}
}
@@ -192,13 +186,23 @@ static void screenspace_to_worldspace(const float pos_2d[2],
float imat[4][4];
invert_m4_m4(imat, vc->obedit->obmat);
- mul_m4_v3(imat, r_pos_3d);
+ mul_m4_v3(imat, location);
if (CU_IS_2D(cu)) {
- r_pos_3d[2] = 0.0f;
+ location[2] = 0.0f;
}
}
+static void screenspace_to_worldspace(const float pos_2d[2],
+ const float depth[3],
+ const ViewContext *vc,
+ float r_pos_3d[3])
+{
+ mul_v3_m4v3(r_pos_3d, vc->obedit->obmat, depth);
+ ED_view3d_win_to_3d(vc->v3d, vc->region, r_pos_3d, pos_2d, r_pos_3d);
+ update_location_for_2d_curve(vc, r_pos_3d);
+}
+
static void screenspace_to_worldspace_int(const int pos_2d[2],
const float depth[3],
const ViewContext *vc,
@@ -277,34 +281,6 @@ static void move_bezt_handle_or_vertex_to_location(BezTriple *bezt,
}
}
-static void move_bezt_handle_or_vertex_to_location_int(BezTriple *bezt,
- const int mval[2],
- const short cp_index,
- const ViewContext *vc)
-{
- const float mval_fl[2] = {UNPACK2(mval)};
- move_bezt_handle_or_vertex_to_location(bezt, mval_fl, cp_index, vc);
-}
-
-/* Move handles or entire #BezTriple to mouse based on selection. */
-static void move_selected_bezt_to_location(BezTriple *bezt,
- const ViewContext *vc,
- const int mval[2])
-{
- if (BEZT_ISSEL_IDX(bezt, 1)) {
- move_bezt_handle_or_vertex_to_location_int(bezt, mval, 1, vc);
- }
- else {
- remove_handle_movement_constraints(bezt, BEZT_ISSEL_IDX(bezt, 0), BEZT_ISSEL_IDX(bezt, 2));
- if (BEZT_ISSEL_IDX(bezt, 0)) {
- move_bezt_handle_or_vertex_to_location_int(bezt, mval, 0, vc);
- }
- else {
- move_bezt_handle_or_vertex_to_location_int(bezt, mval, 2, vc);
- }
- }
-}
-
static void move_bp_to_location(BPoint *bp, const float mval[2], const ViewContext *vc)
{
float location[3];
@@ -366,7 +342,6 @@ static bool get_selected_center(const ListBase *nurbs,
static void move_all_selected_points(ListBase *nurbs,
const bool bezt_only,
const bool move_entire,
- const bool handles_only,
CurvePenData *cpd,
const wmEvent *event,
const ViewContext *vc)
@@ -399,7 +374,7 @@ static void move_all_selected_points(ListBase *nurbs,
if (nu->type == CU_BEZIER) {
for (int i = 0; i < nu->pntsu; i++) {
BezTriple *bezt = nu->bezt + i;
- if (!handles_only && (BEZT_ISSEL_IDX(bezt, 1) || (move_entire && BEZT_ISSEL_ANY(bezt)))) {
+ if (BEZT_ISSEL_IDX(bezt, 1) || (move_entire && BEZT_ISSEL_ANY(bezt))) {
float pos[2], dst[2];
worldspace_to_screenspace(bezt->vec[1], vc, pos);
add_v2_v2v2(dst, pos, change);
@@ -1180,45 +1155,9 @@ static void extrude_points_from_selected_vertices(const ViewContext *vc,
ED_view3d_win_to_3d_int(vc->v3d, vc->region, location, event->mval, location);
- if (CU_IS_2D(cu)) {
- const float eps = 1e-6f;
-
- /* get the view vector to 'location' */
- float view_dir[3];
- ED_view3d_global_to_vector(vc->rv3d, location, view_dir);
-
- /* get the plane */
- float plane[4];
- /* only normalize to avoid precision errors */
- normalize_v3_v3(plane, vc->obedit->obmat[2]);
- plane[3] = -dot_v3v3(plane, vc->obedit->obmat[3]);
-
- if (fabsf(dot_v3v3(view_dir, plane)) < eps) {
- /* can't project on an aligned plane. */
- }
- else {
- float lambda;
- if (isect_ray_plane_v3(location, view_dir, plane, &lambda, false)) {
- /* check if we're behind the viewport */
- float location_test[3];
- madd_v3_v3v3fl(location_test, location, view_dir, lambda);
- if ((vc->rv3d->is_persp == false) ||
- (mul_project_m4_v3_zfac(vc->rv3d->persmat, location_test) > 0.0f)) {
- copy_v3_v3(location, location_test);
- }
- }
- }
- }
+ update_location_for_2d_curve(vc, location);
EditNurb *editnurb = cu->editnurb;
- float imat[4][4];
- invert_m4_m4(imat, obedit->obmat);
- mul_m4_v3(imat, location);
-
- if (CU_IS_2D(cu)) {
- location[2] = 0.0f;
- }
-
if (!extrude_center && sel_exists) {
float change[3];
sub_v3_v3v3(change, location, center);
@@ -1628,7 +1567,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (!cpd->link_handles_pressed && is_extra_key_pressed(event, link_handles)) {
cpd->link_handles = !cpd->link_handles;
if (cpd->link_handles) {
- move_all_selected_points(nurbs, false, false, true, cpd, event, &vc);
+ move_all_selected_points(nurbs, false, false, cpd, event, &vc);
}
else {
// Recalculate offset after link handles is turned off
@@ -1640,7 +1579,7 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
if (!cpd->lock_angle_pressed && is_extra_key_pressed(event, lock_angle)) {
cpd->lock_angle = !cpd->lock_angle;
if (cpd->lock_angle) {
- move_all_selected_points(nurbs, false, false, true, cpd, event, &vc);
+ move_all_selected_points(nurbs, false, false, cpd, event, &vc);
}
else {
// Recalculate offset after lock angle is turned off
@@ -1677,13 +1616,13 @@ static int curve_pen_modal(bContext *C, wmOperator *op, const wmEvent *event)
/* If dragging a new control point, move handle point with mouse cursor. Else move entire
* control point. */
else if (cpd->new_point) {
- move_all_selected_points(nurbs, true, move_entire_pressed, false, cpd, event, &vc);
+ move_all_selected_points(nurbs, true, move_entire_pressed, cpd, event, &vc);
cpd->acted = true;
}
else if ((select_point || move_point) && !cpd->spline_nearby) {
if (cpd->found_point) {
if (move_point) {
- move_all_selected_points(nurbs, false, move_entire_pressed, false, cpd, event, &vc);
+ move_all_selected_points(nurbs, false, move_entire_pressed, cpd, event, &vc);
cpd->acted = true;
}
}
More information about the Bf-blender-cvs
mailing list