Blender V4.3
strip_transform.cc File Reference
#include "DNA_scene_types.h"
#include "DNA_sequence_types.h"
#include "BLI_listbase.h"
#include "BLI_math_matrix.h"
#include "BLI_math_rotation.h"
#include "BLI_math_vector.h"
#include "BLI_math_vector_types.hh"
#include "SEQ_animation.hh"
#include "SEQ_channels.hh"
#include "SEQ_edit.hh"
#include "SEQ_effects.hh"
#include "SEQ_iterator.hh"
#include "SEQ_relations.hh"
#include "SEQ_sequencer.hh"
#include "SEQ_time.hh"
#include "SEQ_transform.hh"
#include "sequencer.hh"
#include "strip_time.hh"

Go to the source code of this file.

Enumerations

enum  eOvelapDescrition {
  STRIP_OVERLAP_NONE , STRIP_OVERLAP_IS_FULL , STRIP_OVERLAP_IS_INSIDE , STRIP_OVERLAP_LEFT_SIDE ,
  STRIP_OVERLAP_RIGHT_SIDE
}
 

Functions

bool SEQ_transform_single_image_check (const Sequence *seq)
 
bool SEQ_transform_seqbase_isolated_sel_check (ListBase *seqbase)
 
bool SEQ_transform_sequence_can_be_translated (const Sequence *seq)
 
bool SEQ_transform_test_overlap_seq_seq (const Scene *scene, Sequence *seq1, Sequence *seq2)
 
bool SEQ_transform_test_overlap (const Scene *scene, ListBase *seqbasep, Sequence *test)
 
void SEQ_transform_translate_sequence (Scene *evil_scene, Sequence *seq, int delta)
 
bool SEQ_transform_seqbase_shuffle_ex (ListBase *seqbasep, Sequence *test, Scene *evil_scene, int channel_delta)
 
bool SEQ_transform_seqbase_shuffle (ListBase *seqbasep, Sequence *test, Scene *evil_scene)
 
static bool shuffle_seq_test_overlap (const Scene *scene, const Sequence *seq1, const Sequence *seq2, const int offset)
 
static int shuffle_seq_time_offset_get (const Scene *scene, blender::Span< Sequence * > strips_to_shuffle, ListBase *seqbasep, char dir)
 
bool SEQ_transform_seqbase_shuffle_time (blender::Span< Sequence * > strips_to_shuffle, ListBase *seqbasep, Scene *evil_scene, ListBase *markers, const bool use_sync_markers)
 
bool SEQ_transform_seqbase_shuffle_time (blender::Span< Sequence * > strips_to_shuffle, blender::Span< Sequence * > time_dependent_strips, ListBase *seqbasep, Scene *evil_scene, ListBase *markers, const bool use_sync_markers)
 
static blender::VectorSet< Sequence * > extract_standalone_strips (blender::Span< Sequence * > transformed_strips)
 
static blender::VectorSet< Sequence * > query_right_side_strips (const Scene *scene, ListBase *seqbase, blender::Span< Sequence * > transformed_strips, blender::Span< Sequence * > time_dependent_strips)
 
static void seq_transform_handle_expand_to_fit (Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips, blender::Span< Sequence * > time_dependent_strips, bool use_sync_markers)
 
static blender::VectorSet< Sequence * > query_overwrite_targets (const Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips)
 
static eOvelapDescrition overlap_description_get (const Scene *scene, const Sequence *transformed, const Sequence *target)
 
static void seq_transform_handle_overwrite_split (Scene *scene, ListBase *seqbasep, const Sequence *transformed, Sequence *target)
 
static void seq_transform_handle_overwrite_trim (Scene *scene, ListBase *seqbasep, const Sequence *transformed, Sequence *target, const eOvelapDescrition overlap)
 
static void seq_transform_handle_overwrite (Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips)
 
static void seq_transform_handle_overlap_shuffle (Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips, blender::Span< Sequence * > time_dependent_strips, bool use_sync_markers)
 
void SEQ_transform_handle_overlap (Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips, bool use_sync_markers)
 
void SEQ_transform_handle_overlap (Scene *scene, ListBase *seqbasep, blender::Span< Sequence * > transformed_strips, blender::Span< Sequence * > time_dependent_strips, bool use_sync_markers)
 
void SEQ_transform_offset_after_frame (Scene *scene, ListBase *seqbase, const int delta, const int timeline_frame)
 
bool SEQ_transform_is_locked (ListBase *channels, const Sequence *seq)
 
void SEQ_image_transform_mirror_factor_get (const Sequence *seq, float r_mirror[2])
 
void SEQ_image_transform_origin_offset_pixelspace_get (const Scene *scene, const Sequence *seq, float r_origin[2])
 
static void seq_image_transform_quad_get_ex (const Scene *scene, const Sequence *seq, bool apply_rotation, float r_quad[4][2])
 
void SEQ_image_transform_quad_get (const Scene *scene, const Sequence *seq, bool apply_rotation, float r_quad[4][2])
 
void SEQ_image_transform_final_quad_get (const Scene *scene, const Sequence *seq, float r_quad[4][2])
 
void SEQ_image_preview_unit_to_px (const Scene *scene, const float co_src[2], float co_dst[2])
 
void SEQ_image_preview_unit_from_px (const Scene *scene, const float co_src[2], float co_dst[2])
 
void SEQ_image_transform_bounding_box_from_collection (Scene *scene, blender::Span< Sequence * > strips, bool apply_rotation, float r_min[2], float r_max[2])
 

Enumeration Type Documentation

◆ eOvelapDescrition

Enumerator
STRIP_OVERLAP_NONE 
STRIP_OVERLAP_IS_FULL 
STRIP_OVERLAP_IS_INSIDE 
STRIP_OVERLAP_LEFT_SIDE 
STRIP_OVERLAP_RIGHT_SIDE 

Definition at line 378 of file strip_transform.cc.

Function Documentation

◆ extract_standalone_strips()

◆ overlap_description_get()

◆ query_overwrite_targets()

◆ query_right_side_strips()

◆ SEQ_image_preview_unit_from_px()

void SEQ_image_preview_unit_from_px ( const Scene * scene,
const float co_src[2],
float co_dst[2] )

Definition at line 719 of file strip_transform.cc.

Referenced by sequencer_set_2d_cursor_exec().

◆ SEQ_image_preview_unit_to_px()

void SEQ_image_preview_unit_to_px ( const Scene * scene,
const float co_src[2],
float co_dst[2] )

◆ SEQ_image_transform_bounding_box_from_collection()

void SEQ_image_transform_bounding_box_from_collection ( Scene * scene,
blender::Span< Sequence * > strips,
bool apply_rotation,
float r_min[2],
float r_max[2] )

Get viewport axis aligned bounding box from a collection of sequences. The collection must have one or more strips

Parameters
sceneScene in which strips are located
stripsCollection of strips to get the bounding box from
apply_rotationInclude sequence rotation transform in the bounding box calculation
r_minMinimum x and y values
r_maxMaximum x and y values

Definition at line 725 of file strip_transform.cc.

References INIT_MINMAX2, minmax_v2v2_v2(), quad, and SEQ_image_transform_quad_get().

Referenced by gizmo2d_calc_bounds(), and seq_view_collection_rect_preview().

◆ SEQ_image_transform_final_quad_get()

void SEQ_image_transform_final_quad_get ( const Scene * scene,
const Sequence * seq,
float r_quad[4][2] )

Get 4 corner points of strip image. Corner vectors are in viewport space.

Parameters
sceneScene in which strips are located
seqSequence to calculate transformed image quad
r_quadarray of 4 2D vectors

Definition at line 706 of file strip_transform.cc.

References seq_image_transform_quad_get_ex().

Referenced by get_strip_screen_quad(), seq_box_select_rect_image_isect(), seq_draw_image_origin_and_outline(), seq_point_image_isect(), seq_snap_source_points_build_preview(), and seq_snap_target_points_build_preview().

◆ SEQ_image_transform_mirror_factor_get()

void SEQ_image_transform_mirror_factor_get ( const Sequence * seq,
float r_mirror[2] )

◆ SEQ_image_transform_origin_offset_pixelspace_get()

void SEQ_image_transform_origin_offset_pixelspace_get ( const Scene * scene,
const Sequence * seq,
float r_origin[2] )

Get strip transform origin offset from image center NOTE: This function does not apply axis mirror.

Parameters
sceneScene in which strips are located
seqSequence to calculate image transform origin
r_originreturn value

Definition at line 619 of file strip_transform.cc.

References mul_v2_v2(), StripElem::orig_height, StripElem::orig_width, SEQ_image_transform_mirror_factor_get(), Sequence::strip, Strip::stripdata, Strip::transform, and StripTransform::xofs.

Referenced by seq_draw_image_origin_and_outline(), seq_get_strip_pivot_median(), seq_select_seq_from_preview(), seq_snap_source_points_build_preview(), seq_snap_target_points_build_preview(), and SeqToTransData().

◆ SEQ_image_transform_quad_get()

void SEQ_image_transform_quad_get ( const Scene * scene,
const Sequence * seq,
bool apply_rotation,
float r_quad[4][2] )

Get 4 corner points of strip image, optionally without rotation component applied. Corner vectors are in viewport space.

Parameters
sceneScene in which strips are located
seqSequence to calculate transformed image quad
apply_rotationApply sequence rotation transform to the quad
r_quadarray of 4 2D vectors

Definition at line 698 of file strip_transform.cc.

References seq_image_transform_quad_get_ex().

Referenced by SEQ_image_transform_bounding_box_from_collection().

◆ seq_image_transform_quad_get_ex()

◆ seq_transform_handle_expand_to_fit()

static void seq_transform_handle_expand_to_fit ( Scene * scene,
ListBase * seqbasep,
blender::Span< Sequence * > transformed_strips,
blender::Span< Sequence * > time_dependent_strips,
bool use_sync_markers )
static

◆ SEQ_transform_handle_overlap() [1/2]

◆ SEQ_transform_handle_overlap() [2/2]

void SEQ_transform_handle_overlap ( Scene * scene,
ListBase * seqbasep,
blender::Span< Sequence * > transformed_strips,
bool use_sync_markers )

◆ seq_transform_handle_overlap_shuffle()

static void seq_transform_handle_overlap_shuffle ( Scene * scene,
ListBase * seqbasep,
blender::Span< Sequence * > transformed_strips,
blender::Span< Sequence * > time_dependent_strips,
bool use_sync_markers )
static

◆ seq_transform_handle_overwrite()

◆ seq_transform_handle_overwrite_split()

static void seq_transform_handle_overwrite_split ( Scene * scene,
ListBase * seqbasep,
const Sequence * transformed,
Sequence * target )
static

◆ seq_transform_handle_overwrite_trim()

◆ SEQ_transform_is_locked()

◆ SEQ_transform_offset_after_frame()

void SEQ_transform_offset_after_frame ( Scene * scene,
ListBase * seqbase,
int delta,
int timeline_frame )

Move strips and markers (if not locked) that start after timeline_frame by delta frames

Parameters
sceneScene in which strips are located
seqbaseListBase in which strips are located
deltaoffset in frames to be applied
timeline_frameframe on timeline from where strips are moved

Definition at line 578 of file strip_transform.cc.

References LISTBASE_FOREACH, SEQ_relations_invalidate_cache_preprocessed(), SEQ_time_left_handle_frame_get(), and SEQ_transform_translate_sequence().

Referenced by SEQ_edit_remove_gaps(), and sequencer_gap_insert_exec().

◆ SEQ_transform_seqbase_isolated_sel_check()

bool SEQ_transform_seqbase_isolated_sel_check ( ListBase * seqbase)

Check if the selected seq's reference unselected seq's.

Definition at line 38 of file strip_transform.cc.

References LISTBASE_FOREACH, SELECT, and SEQ_TYPE_EFFECT.

Referenced by sequencer_clipboard_copy_exec(), and sequencer_meta_make_exec().

◆ SEQ_transform_seqbase_shuffle()

◆ SEQ_transform_seqbase_shuffle_ex()

bool SEQ_transform_seqbase_shuffle_ex ( ListBase * seqbasep,
Sequence * test,
Scene * evil_scene,
int channel_delta )

◆ SEQ_transform_seqbase_shuffle_time() [1/2]

bool SEQ_transform_seqbase_shuffle_time ( blender::Span< Sequence * > strips_to_shuffle,
blender::Span< Sequence * > time_dependent_strips,
ListBase * seqbasep,
Scene * evil_scene,
ListBase * markers,
const bool use_sync_markers )

◆ SEQ_transform_seqbase_shuffle_time() [2/2]

bool SEQ_transform_seqbase_shuffle_time ( blender::Span< Sequence * > strips_to_shuffle,
ListBase * seqbasep,
Scene * evil_scene,
ListBase * markers,
const bool use_sync_markers )

◆ SEQ_transform_sequence_can_be_translated()

bool SEQ_transform_sequence_can_be_translated ( const Sequence * seq)

◆ SEQ_transform_single_image_check()

bool SEQ_transform_single_image_check ( const Sequence * seq)

Used so we can do a quick check for single image seq since they work a bit differently to normal image seq's (during transform).

Definition at line 33 of file strip_transform.cc.

References Sequence::flag, and SEQ_SINGLE_FRAME_CONTENT.

Referenced by SEQ_give_frame_index(), SEQ_time_left_handle_frame_set(), and strip_draw_context_get().

◆ SEQ_transform_test_overlap()

◆ SEQ_transform_test_overlap_seq_seq()

bool SEQ_transform_test_overlap_seq_seq ( const Scene * scene,
Sequence * seq1,
Sequence * seq2 )

◆ SEQ_transform_translate_sequence()

◆ shuffle_seq_test_overlap()

static bool shuffle_seq_test_overlap ( const Scene * scene,
const Sequence * seq1,
const Sequence * seq2,
const int offset )
static

◆ shuffle_seq_time_offset_get()

static int shuffle_seq_time_offset_get ( const Scene * scene,
blender::Span< Sequence * > strips_to_shuffle,
ListBase * seqbasep,
char dir )
static