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:
authorJacques Lucke <jacques@blender.org>2022-07-05 16:06:14 +0300
committerJacques Lucke <jacques@blender.org>2022-07-05 16:06:31 +0300
commit7ff054c6d1be0e9f022215c86426805032adc196 (patch)
tree69a3159991009fb121e93a26069d029f9df321d0 /source/blender/editors/curves/intern/curves_ops.cc
parentc46d4d9fad5e16daa9f50e30e6373d20b8386bbb (diff)
Cleanup: use curves surface transform utility in operators
Diffstat (limited to 'source/blender/editors/curves/intern/curves_ops.cc')
-rw-r--r--source/blender/editors/curves/intern/curves_ops.cc25
1 files changed, 10 insertions, 15 deletions
diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc
index 2ac1a576286..aca074a1d61 100644
--- a/source/blender/editors/curves/intern/curves_ops.cc
+++ b/source/blender/editors/curves/intern/curves_ops.cc
@@ -243,17 +243,14 @@ static void try_convert_single_object(Object &curves_ob,
}
/* Prepare transformation matrices. */
- const float4x4 curves_to_world_mat = curves_ob.obmat;
- const float4x4 surface_to_world_mat = surface_ob.obmat;
- const float4x4 world_to_surface_mat = surface_to_world_mat.inverted();
- const float4x4 curves_to_surface_mat = world_to_surface_mat * curves_to_world_mat;
+ const bke::CurvesSurfaceTransforms transforms{curves_ob, &surface_ob};
for (const int new_hair_i : IndexRange(hair_num)) {
const int curve_i = new_hair_i;
const IndexRange points = curves.points_for_curve(curve_i);
const float3 &root_pos_cu = positions_cu[points.first()];
- const float3 root_pos_su = curves_to_surface_mat * root_pos_cu;
+ const float3 root_pos_su = transforms.curves_to_surface * root_pos_cu;
BVHTreeNearest nearest;
nearest.dist_sq = FLT_MAX;
@@ -293,7 +290,7 @@ static void try_convert_single_object(Object &curves_ob,
for (const int key_i : hair_keys.index_range()) {
const float3 &key_pos_cu = positions_cu[points[key_i]];
- const float3 key_pos_su = curves_to_surface_mat * key_pos_cu;
+ const float3 key_pos_su = transforms.curves_to_surface * key_pos_cu;
const float3 key_pos_ha = surface_to_hair_mat * key_pos_su;
HairKey &key = hair_keys[key_i];
@@ -558,12 +555,7 @@ static int snap_curves_to_surface_exec(bContext *C, wmOperator *op)
const Span<MLoopTri> surface_looptris = {BKE_mesh_runtime_looptri_ensure(&surface_mesh),
BKE_mesh_runtime_looptri_len(&surface_mesh)};
- const float4x4 curves_to_world_mat = curves_ob->obmat;
- const float4x4 world_to_curves_mat = curves_to_world_mat.inverted();
- const float4x4 surface_to_world_mat = surface_ob.obmat;
- const float4x4 world_to_surface_mat = surface_to_world_mat.inverted();
- const float4x4 curves_to_surface_mat = world_to_surface_mat * curves_to_world_mat;
- const float4x4 surface_to_curves_mat = world_to_curves_mat * surface_to_world_mat;
+ const bke::CurvesSurfaceTransforms transforms{*curves_ob, &surface_ob};
switch (attach_mode) {
case AttachMode::Nearest: {
@@ -576,7 +568,8 @@ static int snap_curves_to_surface_exec(bContext *C, wmOperator *op)
const IndexRange points = curves.points_for_curve(curve_i);
const int first_point_i = points.first();
const float3 old_first_point_pos_cu = positions_cu[first_point_i];
- const float3 old_first_point_pos_su = curves_to_surface_mat * old_first_point_pos_cu;
+ const float3 old_first_point_pos_su = transforms.curves_to_surface *
+ old_first_point_pos_cu;
BVHTreeNearest nearest;
nearest.index = -1;
@@ -592,7 +585,8 @@ static int snap_curves_to_surface_exec(bContext *C, wmOperator *op)
}
const float3 new_first_point_pos_su = nearest.co;
- const float3 new_first_point_pos_cu = surface_to_curves_mat * new_first_point_pos_su;
+ const float3 new_first_point_pos_cu = transforms.surface_to_curves *
+ new_first_point_pos_su;
const float3 pos_diff_cu = new_first_point_pos_cu - old_first_point_pos_cu;
for (float3 &pos_cu : positions_cu.slice(points)) {
@@ -651,7 +645,8 @@ static int snap_curves_to_surface_exec(bContext *C, wmOperator *op)
float3 new_first_point_pos_su;
interp_v3_v3v3v3(new_first_point_pos_su, p0_su, p1_su, p2_su, bary_coords);
- const float3 new_first_point_pos_cu = surface_to_curves_mat * new_first_point_pos_su;
+ const float3 new_first_point_pos_cu = transforms.surface_to_curves *
+ new_first_point_pos_su;
const float3 pos_diff_cu = new_first_point_pos_cu - old_first_point_pos_cu;
for (float3 &pos_cu : positions_cu.slice(points)) {