30#include "RNA_prototypes.hh"
42 Array<float2> quad_orig;
45 float2 orig_origin_relative;
46 float2 orig_origin_pixelspace;
51 float active_seq_orig_rotation;
64 TransDataSeq *tdseq = MEM_new<TransDataSeq>(
"TransSeq TransDataSeq");
67 tdseq->orig_origin_pixelspace = origin;
71 tdseq->orig_translation[0] =
transform->xofs;
72 tdseq->orig_translation[1] =
transform->yofs;
73 tdseq->orig_scale[0] =
transform->scale_x;
74 tdseq->orig_scale[1] =
transform->scale_y;
75 tdseq->orig_rotation =
transform->rotation;
76 tdseq->orig_flag = strip->
flag;
78 tdseq->active_seq_orig_rotation =
ed->act_strip &&
ed->act_strip->data->
transform ?
82 td->
extra =
static_cast<void *
>(tdseq);
91 float vertex[2] = {origin[0], origin[1]};
96 if (vert_index == 1) {
100 else if (vert_index == 2) {
105 td2d->
loc[0] = vertex[0];
106 td2d->
loc[1] = vertex[1];
107 td2d->
loc2d =
nullptr;
111 td->
center[0] = origin[0];
112 td->
center[1] = origin[1];
121 if (vert_index == 0) {
138 TransDataSeq *tdseq =
static_cast<TransDataSeq *
>((td +
i)->extra);
174 "TransSeq TransData2D");
176 for (
Strip *strip : strips) {
201 bool changed =
false;
205 C, scene, &
ptr, prop, -1, scene->
r.
cfra, only_when_keyed);
210 C, scene, &
ptr, prop, -1, scene->
r.
cfra, only_when_keyed);
213 C, scene, &
ptr, prop, -1, scene->
r.
cfra, only_when_keyed);
218 C, scene, &
ptr, prop, -1, scene->
r.
cfra, only_when_keyed);
221 C, scene, &
ptr, prop, -1, scene->
r.
cfra, only_when_keyed);
240 float2 handle_x =
float2((td2d + 1)->loc) - handle_origin;
241 float2 handle_y =
float2((td2d + 2)->loc) - handle_origin;
244 float2 orig_strip_origin_pixelspace = tdseq->orig_origin_pixelspace;
246 return TransformResult{(orig_strip_origin_pixelspace - handle_origin) * mirror * aspect,
260 TransDataSeq *tdseq =
static_cast<TransDataSeq *
>(td->
extra);
261 Strip *strip = tdseq->strip;
270 transform->xofs = roundf(tdseq->orig_translation.x -
result.translation.x);
271 transform->yofs = roundf(tdseq->orig_translation.y -
result.translation.y);
288 if (strip ==
ed->act_strip) {
289 transform->rotation = -tdseq->orig_rotation;
292 transform->rotation = tdseq->orig_rotation + (2 * -tdseq->active_seq_orig_rotation);
296 strip->
flag = tdseq->orig_flag;
303 transform->rotation = tdseq->orig_rotation;
318 Strip *strip = tdseq->strip;
323 transform->xofs = tdseq->orig_translation[0];
324 transform->yofs = tdseq->orig_translation[1];
330 return (quad_new[0] - tdseq->quad_orig[0]) * mirror / viewport_pixel_aspect;
335 Strip *strip = tdseq->strip;
346 const float2 origin = tdseq->orig_origin_pixelspace;
348 const float2 origin_pixelspace_unscaled = origin / viewport_pixel_aspect * mirror;
349 const float2 origin_translated = origin_pixelspace_unscaled - translation;
351 const float2 origin_abs = origin_raw_space + image_size / 2;
352 const float2 origin_rel = origin_abs / image_size;
364 TransDataSeq *tdseq =
static_cast<TransDataSeq *
>(td->
extra);
365 Strip *strip = tdseq->strip;
374 transform->xofs = tdseq->orig_translation.x - delta_translation.x;
375 transform->yofs = tdseq->orig_translation.y - delta_translation.y;
400 TransDataSeq *tdseq =
static_cast<TransDataSeq *
>(td->
extra);
401 Strip *strip = tdseq->strip;
404 transform->xofs = tdseq->orig_translation.x;
405 transform->yofs = tdseq->orig_translation.y;
406 transform->rotation = tdseq->orig_rotation;
407 transform->scale_x = tdseq->orig_scale.x;
408 transform->scale_y = tdseq->orig_scale.y;
409 transform->origin[0] = tdseq->orig_origin_relative.x;
410 transform->origin[1] = tdseq->orig_origin_relative.y;
411 strip->
flag = tdseq->orig_flag;
Functions to insert, delete or modify keyframes.
void unit_m3(float m[3][3])
void normalize_m3(float R[3][3]) ATTR_NONNULL()
void axis_angle_to_mat3_single(float R[3][3], char axis, float angle)
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void copy_v3_v3(float r[3], const float a[3])
@ SEQ_VIEW_SEQUENCE_PREVIEW
@ AUTOKEY_FLAG_INSERTAVAILABLE
Read Guarded memory(de)allocation.
int64_t remove_if(Predicate &&predicate)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
bool is_autokey_on(const Scene *scene)
bool autokeyframe_property(bContext *C, Scene *scene, PointerRNA *ptr, PropertyRNA *prop, int rnaindex, float cfra, bool only_if_property_keyed)
bool is_keying_flag(const Scene *scene, eKeying_Flag flag)
T length(const VecBase< T, Size > &a)
CartesianBasis invert(const CartesianBasis &basis)
VecBase< T, 3 > transform_point(const CartesianBasis &basis, const VecBase< T, 3 > &v)
Array< float2 > image_transform_final_quad_get(const Scene *scene, const Strip *strip)
void relations_invalidate_cache(Scene *scene, Strip *strip)
ListBase * channels_displayed_get(const Editing *ed)
float3x3 image_transform_matrix_get(const Scene *scene, const Strip *strip)
Editing * editing_get(const Scene *scene)
float2 image_transform_mirror_factor_get(const Strip *strip)
float2 image_transform_origin_offset_pixelspace_get(const Scene *scene, const Strip *strip)
VectorSet< Strip * > query_rendered_strips(const Scene *scene, ListBase *channels, ListBase *seqbase, const int timeline_frame, const int displayed_channel)
ListBase * active_seqbase_get(const Editing *ed)
VecBase< float, 2 > float2
MatBase< float, 3, 3 > float3x3
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
struct ToolSettings * toolsettings
StripTransform * transform