From 0d8ab41c579ed1b55ba64a3ff48c3207c022600f Mon Sep 17 00:00:00 2001 From: "christophe.seux" Date: Fri, 31 Jan 2025 15:43:22 +0100 Subject: [PATCH] velocity mode --- interpolate_strokes/operators_velocity.py | 25 ++++++---------------- resources/nodes.blend | Bin 3537020 -> 3566838 bytes 2 files changed, 6 insertions(+), 19 deletions(-) diff --git a/interpolate_strokes/operators_velocity.py b/interpolate_strokes/operators_velocity.py index e7c4001..da1aae3 100644 --- a/interpolate_strokes/operators_velocity.py +++ b/interpolate_strokes/operators_velocity.py @@ -89,7 +89,6 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): scn = bpy.context.scene settings = context.scene.gp_interpo_settings - col = settings.target_collection ## Prepare context manager attrs = [ @@ -107,7 +106,8 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): instance_col_mod = velocity_ob.modifiers.new('IngestCollection', 'NODES') ingest_node_group = load_datablock(RESOURCES_DIR/'nodes.blend', 'Ingest Collection', type='node_groups', link=False) instance_col_mod.node_group = ingest_node_group - instance_col_mod["Socket_2"] = col + instance_col_mod["Socket_3"] = settings.target_object + instance_col_mod["Socket_2"] = settings.target_collection scn.collection.objects.link(velocity_ob) @@ -159,32 +159,25 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): scn = context.scene cam = scn.camera #dg = bpy.context.evaluated_depsgraph_get() - col = self.settings.target_collection + target_object = self.settings.target_object + target_col = self.settings.target_collection smooth_level = self.settings.smooth_level origin = scn.camera.matrix_world.to_translation() plane_co, plane_no = get_gp_draw_plane(self.gp) - #print("interpolate_frame") - - print(self.gp_matrix) - print(self.gp.matrix_world) - velocity_ob = self.velocity_ob - velocity_ob.hide_set(True) - grid_velocity_mod = velocity_ob.modifiers.new('VelocityGrid', 'NODES') grid_velocity_mod.node_group = self.velocity_node_group - grid_velocity_mod["Socket_2"] = col + grid_velocity_mod["Socket_8"] = target_object + grid_velocity_mod["Socket_2"] = target_col grid_velocity_mod["Socket_4"] = self.camera grid_velocity_mod["Socket_5"] = self.camera.data.angle grid_velocity_mod["Socket_6"] = self.camera.data.shift_x grid_velocity_mod["Socket_7"] = self.camera.data.shift_y - #raise Exception() - # Apply velocity grid modifier dg = bpy.context.evaluated_depsgraph_get() eval_ob = velocity_ob.evaluated_get(dg) @@ -195,8 +188,6 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): #scn.collection.objects.link(copy_ob) velocity_ob.modifiers.remove(grid_velocity_mod) - #velocity_ob.data = eval_data - #Create kd tree for finding nearest points kd = KDTree(len(grid_ob.data.vertices)) @@ -209,12 +200,10 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): kd.balance() - #nb_strokes = len(self.gp.data.layers.active.active_frame.strokes) bpy.ops.gpencil.paste(type='LAYER') ## List of newly pasted strokes (using range) new_strokes = [s for l in self.layers for s in l.active_frame.strokes if s.select] - #new_strokes = self.gp.data.layers.active.active_frame.strokes[-nb_strokes:] velocity_attr = grid_ob.data.attributes["velocity"].data @@ -247,8 +236,6 @@ class GP_OT_interpolate_stroke_velocity(GP_OT_interpolate_stroke_base): #stroke.points.foreach_set('co', [v for p in points_2d for v in self.gp.matrix_world.inverted() @p]) stroke.points.update() - #velocity_ob.modifiers.remove(grid_velocity_mod) - bpy.data.meshes.remove(grid_ob.data) def exit(self, context, status='INFO', text=None, cancelled=False): diff --git a/resources/nodes.blend b/resources/nodes.blend index bb4b30d13895692d115e35333cce50259092114d..ce49fb0978d12baf538e932f29d8430ba41b06b2 100644 GIT binary patch delta 25077 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 delta 19149 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 eHbaZqf;Nm