Blender V4.3
COM_TrackPositionNode.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2012 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
6
9
10#include "DNA_movieclip_types.h"
11
12#include "BKE_node.hh"
13
14namespace blender::compositor {
15
17{
18 /* pass */
19}
20
22 MovieClip *clip,
23 NodeTrackPosData *trackpos_data,
24 int axis,
25 int frame_number,
26 int delta)
27{
29 operation->set_movie_clip(clip);
30 operation->set_tracking_object(trackpos_data->tracking_object);
31 operation->set_track_name(trackpos_data->track_name);
32 operation->set_framenumber(frame_number);
33 operation->set_axis(axis);
35 operation->set_relative_frame(frame_number + delta);
36 operation->set_speed_output(true);
37 converter.add_operation(operation);
38 return operation;
39}
40
42 const CompositorContext &context) const
43{
44 const bNode *editor_node = this->get_bnode();
45 MovieClip *clip = (MovieClip *)editor_node->id;
46 NodeTrackPosData *trackpos_data = (NodeTrackPosData *)editor_node->storage;
47
48 NodeOutput *outputX = this->get_output_socket(0);
49 NodeOutput *outputY = this->get_output_socket(1);
50 NodeOutput *output_speed = this->get_output_socket(2);
51
52 int frame_number;
54 frame_number = editor_node->custom2;
55 }
56 else {
57 frame_number = context.get_framenumber();
58 }
59
61 operationX->set_movie_clip(clip);
62 operationX->set_tracking_object(trackpos_data->tracking_object);
63 operationX->set_track_name(trackpos_data->track_name);
64 operationX->set_framenumber(frame_number);
65 operationX->set_axis(0);
66 operationX->set_position(static_cast<CMPNodeTrackPositionMode>(editor_node->custom1));
67 operationX->set_relative_frame(editor_node->custom2);
68 converter.add_operation(operationX);
69 converter.map_output_socket(outputX, operationX->get_output_socket());
70
72 operationY->set_movie_clip(clip);
73 operationY->set_tracking_object(trackpos_data->tracking_object);
74 operationY->set_track_name(trackpos_data->track_name);
75 operationY->set_framenumber(frame_number);
76 operationY->set_axis(1);
77 operationY->set_position(static_cast<CMPNodeTrackPositionMode>(editor_node->custom1));
78 operationY->set_relative_frame(editor_node->custom2);
79 converter.add_operation(operationY);
80 converter.map_output_socket(outputY, operationY->get_output_socket());
81
83 converter, clip, trackpos_data, 0, frame_number, -1);
85 converter, clip, trackpos_data, 1, frame_number, -1);
86 TrackPositionOperation *operationMotionPostX = create_motion_operation(
87 converter, clip, trackpos_data, 0, frame_number, 1);
88 TrackPositionOperation *operationMotionPostY = create_motion_operation(
89 converter, clip, trackpos_data, 1, frame_number, 1);
90
91 CombineChannelsOperation *combine_operation = new CombineChannelsOperation();
92 converter.add_operation(combine_operation);
93 converter.add_link(operationMotionPreX->get_output_socket(),
94 combine_operation->get_input_socket(0));
95 converter.add_link(operationMotionPreY->get_output_socket(),
96 combine_operation->get_input_socket(1));
97 converter.add_link(operationMotionPostX->get_output_socket(),
98 combine_operation->get_input_socket(2));
99 converter.add_link(operationMotionPostY->get_output_socket(),
100 combine_operation->get_input_socket(3));
101 converter.map_output_socket(output_speed, combine_operation->get_output_socket());
102}
103
104} // namespace blender::compositor
CMPNodeTrackPositionMode
@ CMP_NODE_TRACK_POSITION_ABSOLUTE_FRAME
@ CMP_NODE_TRACK_POSITION_ABSOLUTE
Overall context of the compositor.
void add_link(NodeOperationOutput *from, NodeOperationInput *to)
void map_output_socket(NodeOutput *node_socket, NodeOperationOutput *operation_socket)
void add_operation(NodeOperation *operation)
NodeOperationOutput * get_output_socket(unsigned int index=0)
NodeOperationInput * get_input_socket(unsigned int index)
NodeOutput are sockets that can send data/input.
Definition COM_Node.h:239
NodeOutput * get_output_socket(unsigned int index=0) const
Definition COM_Node.cc:85
const bNode * get_bnode() const
get the reference to the SDNA bNode struct
Definition COM_Node.h:65
void convert_to_operations(NodeConverter &converter, const CompositorContext &context) const override
convert node to operation
void set_position(CMPNodeTrackPositionMode value)
static TrackPositionOperation * create_motion_operation(NodeConverter &converter, MovieClip *clip, NodeTrackPosData *trackpos_data, int axis, int frame_number, int delta)
int16_t custom1
struct ID * id
void * storage
int16_t custom2