61 if ((seq->seq1 && (seq->seq1->flag &
SELECT) == 0) ||
62 (seq->seq2 && (seq->seq2->flag &
SELECT) == 0))
68 if ((seq->seq1 && (seq->seq1->flag &
SELECT)) || (seq->seq2 && (seq->seq2->flag &
SELECT))) {
122 else if (seq->
seq1 ==
nullptr && seq->
seq2 ==
nullptr) {
140 const int orig_machine = test->
machine;
143 test->
machine += channel_delta;
149 test->
machine += channel_delta;
159 if (seq->machine == orig_machine) {
198 bool all_conflicts_resolved =
false;
200 while (!all_conflicts_resolved) {
201 all_conflicts_resolved =
true;
202 for (
Sequence *seq : strips_to_shuffle) {
204 if (strips_to_shuffle.contains(seq_other)) {
214 all_conflicts_resolved =
false;
237 const bool use_sync_markers)
241 strips_to_shuffle, empty_set, seqbasep, evil_scene, markers, use_sync_markers);
249 const bool use_sync_markers)
253 int offset = (-offset_l < offset_r) ? offset_l : offset_r;
256 for (
Sequence *seq : strips_to_shuffle) {
261 if (!time_dependent_strips.
is_empty()) {
262 for (
Sequence *seq : time_dependent_strips) {
270 if (marker->flag &
SELECT) {
271 marker->frame += offset;
277 return offset ?
false :
true;
285 for (
Sequence *seq : transformed_strips) {
287 standalone_strips.
add(seq);
290 return standalone_strips;
302 for (
Sequence *seq : transformed_strips) {
309 if (!time_dependent_strips.
is_empty() && time_dependent_strips.
contains(seq)) {
312 if (transformed_strips.
contains(seq)) {
317 right_side_strips.
add(seq);
320 return right_side_strips;
329 bool use_sync_markers)
334 scene, seqbasep, transformed_strips, time_dependent_strips);
337 for (
Sequence *seq : right_side_strips) {
345 standalone_strips, time_dependent_strips, seqbasep, scene, markers, use_sync_markers);
348 for (
Sequence *seq : right_side_strips) {
354 right_side_strips, seqbasep, scene, markers, use_sync_markers);
365 bool does_overlap =
false;
366 for (
Sequence *seq_transformed : transformed_strips) {
372 return !does_overlap;
375 return overwrite_targets;
433 Main *bmain =
nullptr;
494 for (
Sequence *transformed : transformed_strips) {
495 if (transformed->machine != target->machine) {
502 strips_to_delete.
add(target);
516 for (
Sequence *seq : strips_to_delete) {
527 bool use_sync_markers)
534 standalone_strips, time_dependent_strips, seqbasep, scene, markers, use_sync_markers);
540 bool use_sync_markers)
550 bool use_sync_markers)
554 switch (overlap_mode) {
557 scene, seqbasep, transformed_strips, time_dependent_strips, use_sync_markers);
564 scene, seqbasep, transformed_strips, time_dependent_strips, use_sync_markers);
570 for (
Sequence *seq : transformed_strips) {
581 const int timeline_frame)
592 if (marker->frame >= timeline_frame) {
593 marker->frame += delta;
625 if (strip_elem ==
nullptr) {
626 image_size[0] = scene->
r.
xsch;
627 image_size[1] = scene->
r.
ysch;
635 r_origin[0] = (image_size[0] *
transform->origin[0]) - (image_size[0] * 0.5f) +
transform->xofs;
636 r_origin[1] = (image_size[1] *
transform->origin[1]) - (image_size[1] * 0.5f) +
transform->yofs;
638 const float viewport_pixel_aspect[2] = {scene->
r.
xasp / scene->
r.
yasp, 1.0f};
642 mul_v2_v2(r_origin, viewport_pixel_aspect);
659 float transform_matrix[4][4];
660 float rotation_matrix[3][3];
666 const float origin[2] = {image_size[0] *
transform->origin[0],
668 const float pivot[3] = {origin[0] - (image_size[0] / 2), origin[1] - (image_size[1] / 2), 0.0f};
671 float quad_temp[4][3];
672 for (
int i = 0; i < 4; i++) {
676 quad_temp[0][0] = (image_size[0] / 2) - crop->
right;
677 quad_temp[0][1] = (image_size[1] / 2) - crop->
top;
678 quad_temp[1][0] = (image_size[0] / 2) - crop->
right;
679 quad_temp[1][1] = (-image_size[1] / 2) + crop->
bottom;
680 quad_temp[2][0] = (-image_size[0] / 2) + crop->
left;
681 quad_temp[2][1] = (-image_size[1] / 2) + crop->
bottom;
682 quad_temp[3][0] = (-image_size[0] / 2) + crop->
left;
683 quad_temp[3][1] = (image_size[1] / 2) - crop->
top;
688 const float viewport_pixel_aspect[2] = {scene->
r.
xasp / scene->
r.
yasp, 1.0f};
690 for (
int i = 0; i < 4; i++) {
691 mul_m4_v3(transform_matrix, quad_temp[i]);
693 mul_v2_v2(quad_temp[i], viewport_pixel_aspect);
715 co_dst[0] = co_src[0] * scene->
r.
xsch;
716 co_dst[1] = co_src[1] * scene->
r.
ysch;
721 co_dst[0] = co_src[0] / scene->
r.
xsch;
722 co_dst[1] = co_src[1] / scene->
r.
ysch;
735 for (
int i = 0; i < 4; i++) {
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void loc_rot_size_to_mat4(float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
void mul_m4_v3(const float M[4][4], float r[3])
void axis_angle_to_mat3_single(float R[3][3], char axis, float angle)
MINLINE void mul_v2_v2(float r[2], const float a[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
MINLINE void zero_v3(float r[3])
#define INIT_MINMAX2(min, max)
@ SEQ_SINGLE_FRAME_CONTENT
@ SEQ_IGNORE_CHANNEL_LOCK
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
constexpr int SEQ_MAX_CHANNELS
void SEQ_offset_animdata(Scene *scene, Sequence *seq, int ofs)
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
SeqTimelineChannel * SEQ_channel_get_by_index(const ListBase *channels, const int channel_index)
bool SEQ_channel_is_locked(const SeqTimelineChannel *channel)
constexpr bool is_empty() const
constexpr bool contains(const T &value) const
int64_t remove_if(Predicate &&predicate)
draw_view in_light_buf[] float
int SEQ_effect_get_num_inputs(int seq_type)
blender::gpu::Batch * quad
VectorSet< Sequence * > SEQ_query_unselected_strips(ListBase *seqbase)
void SEQ_iterator_set_expand(const Scene *scene, ListBase *seqbase, VectorSet< Sequence * > &strips, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
void SEQ_query_strip_effect_chain(const Scene *scene, Sequence *reference_strip, ListBase *seqbase, VectorSet< Sequence * > &strips)
VectorSet< Sequence * > SEQ_query_by_reference(Sequence *seq_reference, const Scene *scene, ListBase *seqbase, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
VecBase< float, 3 > float3
Sequence * seq_sequence_lookup_meta_by_seq(const Scene *scene, const Sequence *key)
blender::Span< Sequence * > seq_sequence_lookup_effects_by_seq(const Scene *scene, const Sequence *key)
eSeqOverlapMode SEQ_tool_settings_overlap_mode_get(Scene *scene)
bool SEQ_is_valid_strip_channel(const Sequence *seq)
void SEQ_edit_flag_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq)
Sequence * SEQ_edit_strip_split(Main *bmain, Scene *scene, ListBase *seqbase, Sequence *seq, const int timeline_frame, const eSeqSplitMethod method, const char **r_error)
void SEQ_edit_remove_flagged_sequences(Scene *scene, ListBase *seqbase)
bool SEQ_relation_is_effect_of_strip(const Sequence *effect, const Sequence *input)
void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_time_update_meta_strip_range(const Scene *scene, Sequence *seq_meta)
void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int offset)
void seq_time_update_effects_strip_range(const Scene *scene, const blender::Span< Sequence * > effects)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)
struct ToolSettings * toolsettings
StripTransform * transform