From 9e143968d3fd9dbe59e7a72bdb043c31cd13c5ab Mon Sep 17 00:00:00 2001 From: YimingWu Date: Tue, 27 Feb 2024 13:07:47 +0800 Subject: [PATCH] LineArt: Fix back transformation issue for v3 Line art v3 strokes should not move along with the grease pencil object to keep the same behaviour as the old line art. Now fixed. --- .../gpencil_modifiers_legacy/intern/lineart/MOD_lineart.h | 2 ++ .../gpencil_modifiers_legacy/intern/lineart/lineart_cpu.cc | 4 ++-- source/blender/modifiers/intern/MOD_lineart.cc | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/blender/gpencil_modifiers_legacy/intern/lineart/MOD_lineart.h b/source/blender/gpencil_modifiers_legacy/intern/lineart/MOD_lineart.h index 6546a4bf0f0..5c2cb9c9737 100644 --- a/source/blender/gpencil_modifiers_legacy/intern/lineart/MOD_lineart.h +++ b/source/blender/gpencil_modifiers_legacy/intern/lineart/MOD_lineart.h @@ -10,6 +10,7 @@ #include "BLI_linklist.h" #include "BLI_listbase.h" +#include "BLI_math_matrix_types.hh" #include "BLI_math_vector.h" #include "BLI_threads.h" @@ -963,6 +964,7 @@ namespace blender::bke::greasepencil { class Drawing; } void MOD_lineart_gpencil_generate_v3(const LineartCache *cache, + blender::float4x4 mat, Depsgraph *depsgraph, blender::bke::greasepencil::Drawing &drawing, int8_t source_type, diff --git a/source/blender/gpencil_modifiers_legacy/intern/lineart/lineart_cpu.cc b/source/blender/gpencil_modifiers_legacy/intern/lineart/lineart_cpu.cc index d267b55a891..cce316efa9f 100644 --- a/source/blender/gpencil_modifiers_legacy/intern/lineart/lineart_cpu.cc +++ b/source/blender/gpencil_modifiers_legacy/intern/lineart/lineart_cpu.cc @@ -5640,6 +5640,7 @@ void MOD_lineart_gpencil_generate(LineartCache *cache, } void MOD_lineart_gpencil_generate_v3(const LineartCache *cache, + blender::float4x4 inverse_mat, Depsgraph *depsgraph, blender::bke::greasepencil::Drawing &drawing, const int8_t source_type, @@ -5865,8 +5866,7 @@ void MOD_lineart_gpencil_generate_v3(const LineartCache *cache, int i; LISTBASE_FOREACH_INDEX (LineartEdgeChainItem *, eci, &cwi.chain->chain, i) { int point_i = i + up_to_point; - float *point = (float *)&point_positions[point_i]; - copy_v3_v3(point, eci->gpos); + point_positions[point_i] = blender::math::transform_point(inverse_mat, float3(eci->gpos)); point_radii.span[point_i] = thickness / 2.0f; point_opacities.span[point_i] = opacity; diff --git a/source/blender/modifiers/intern/MOD_lineart.cc b/source/blender/modifiers/intern/MOD_lineart.cc index 484f4cb1363..3afbb98205a 100644 --- a/source/blender/modifiers/intern/MOD_lineart.cc +++ b/source/blender/modifiers/intern/MOD_lineart.cc @@ -802,8 +802,11 @@ static void generate_strokes(ModifierData &md, return *grease_pencil.get_editable_drawing_at(layer, current_frame); }(); + float4x4 mat = ctx.object->world_to_object(); + MOD_lineart_gpencil_generate_v3( lmd.cache, + mat, ctx.depsgraph, drawing, lmd.source_type,