[Bf-blender-cvs] [b7b74fcef99] temp-vse-preview-transform: Add origin for strip images
Richard Antalik
noreply at git.blender.org
Fri Sep 10 11:40:18 CEST 2021
Commit: b7b74fcef994e8c22a05d1b47bca06cc52b34500
Author: Richard Antalik
Date: Tue Sep 7 00:48:40 2021 +0200
Branches: temp-vse-preview-transform
https://developer.blender.org/rBb7b74fcef994e8c22a05d1b47bca06cc52b34500
Add origin for strip images
===================================================================
M release/scripts/startup/bl_ui/space_sequencer.py
M source/blender/blenloader/intern/versioning_300.c
M source/blender/editors/space_sequencer/sequencer_draw.c
M source/blender/editors/transform/transform_convert_sequencer_image.c
M source/blender/editors/transform/transform_gizmo_2d.c
M source/blender/makesdna/DNA_sequence_types.h
M source/blender/makesrna/intern/rna_sequencer.c
M source/blender/sequencer/intern/render.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 0decfe71b78..0de8dc308f1 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1749,6 +1749,9 @@ class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
col = layout.column(align=True)
col.prop(strip.transform, "rotation", text="Rotation")
+ col = layout.column(align=True)
+ col.prop(strip.transform, "origin")
+
row = layout.row(heading="Mirror")
sub = row.row(align=True)
sub.prop(strip, "use_flip_x", text="X", toggle=True)
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 9062c089401..bc19f6ed809 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -63,6 +63,7 @@
#include "readfile.h"
#include "SEQ_sequencer.h"
+#include "SEQ_iterator.h"
#include "RNA_access.h"
@@ -630,6 +631,12 @@ static bNodeSocket *do_version_replace_float_size_with_vector(bNodeTree *ntree,
return new_socket;
}
+static bool seq_transform_origin_set(Sequence *seq, void *UNUSED(user_data))
+{
+ StripTransform *transform = seq->strip->transform;
+ transform->origin[0] = transform->origin[1] = 0.0f;
+}
+
/* NOLINTNEXTLINE: readability-function-size */
void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
{
@@ -1098,6 +1105,10 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene);
sequencer_tool_settings->pivot_point = V3D_AROUND_LOCAL_ORIGINS;
+
+ if (scene->ed != NULL) {
+ SEQ_for_each_callback(&scene->ed->seqbase, seq_transform_origin_set, NULL);
+ }
}
}
}
diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c
index b56ad48cec2..c05e1abdbea 100644
--- a/source/blender/editors/space_sequencer/sequencer_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_draw.c
@@ -71,6 +71,7 @@
#include "BIF_glutil.h"
#include "SEQ_effects.h"
+#include "SEQ_iterator.h"
#include "SEQ_prefetch.h"
#include "SEQ_proxy.h"
#include "SEQ_relations.h"
@@ -2047,6 +2048,25 @@ static int sequencer_draw_get_transform_preview_frame(Scene *scene)
return preview_frame;
}
+static void seq_draw_origins(const bContext *C, Sequence *seq)
+{
+ const StripTransform *transform = seq->strip->transform;
+ float x = transform->xofs + transform->origin[0];
+ float y = transform->yofs + transform->origin[1];
+
+ GPUVertFormat *format = immVertexFormat();
+ uint pos = GPU_vertformat_attr_add(format, "pos", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ immBindBuiltinProgram(GPU_SHADER_2D_POINT_UNIFORM_SIZE_UNIFORM_COLOR_OUTLINE_AA);
+ immUniform1f("outlineWidth", 1.5f);
+ immUniformColor3f(1.0f, 1.0f, 1.0f);
+ immUniform4f("outlineColor", 0.0f, 0.0f, 0.0f, 1.0f);
+ immUniform1f("size", 12.0f);
+ immBegin(GPU_PRIM_POINTS, 1);
+ immVertex2f(pos, x, y);
+ immEnd();
+ immUnbindProgram();
+}
+
void sequencer_draw_preview(const bContext *C,
Scene *scene,
ARegion *region,
@@ -2135,6 +2155,14 @@ void sequencer_draw_preview(const bContext *C,
IMB_freeImBuf(ibuf);
}
+ /* Image origins, may be only visible for development. */
+ SeqCollection *collection = SEQ_query_all_strips(&scene->ed->seqbase);
+ Sequence *seq;
+ SEQ_ITERATOR_FOREACH (seq, collection) {
+ seq_draw_origins(C, seq);
+ }
+ SEQ_collection_free(collection);
+
UI_view2d_view_restore(C);
seq_prefetch_wm_notify(C, scene);
}
diff --git a/source/blender/editors/transform/transform_convert_sequencer_image.c b/source/blender/editors/transform/transform_convert_sequencer_image.c
index e3ef9ab9515..b7f0324fe58 100644
--- a/source/blender/editors/transform/transform_convert_sequencer_image.c
+++ b/source/blender/editors/transform/transform_convert_sequencer_image.c
@@ -55,7 +55,8 @@ static TransData *SeqToTransData(
Sequence *seq, TransData *td, TransData2D *td2d, TransDataSeq *tdseq, int vert_index)
{
const StripTransform *transform = seq->strip->transform;
- float vertex[2] = {transform->xofs, transform->yofs};
+ float vertex[2] = {transform->xofs + transform->origin[0],
+ transform->yofs + transform->origin[1]};
/* Add control vertex, so rotation and scale can be calculated. */
if (vert_index == 1) {
@@ -71,8 +72,8 @@ static TransData *SeqToTransData(
td->loc = td2d->loc;
copy_v3_v3(td->iloc, td->loc);
- td->center[0] = transform->xofs;
- td->center[1] = transform->yofs;
+ td->center[0] = transform->xofs + transform->origin[0];
+ td->center[1] = transform->yofs + transform->origin[1];
memset(td->axismtx, 0, sizeof(td->axismtx));
td->axismtx[2][2] = 1.0f;
@@ -135,7 +136,7 @@ void recalcData_sequencer_image(TransInfo *t)
copy_v2_v2(loc, td2d->loc);
i++, td++, td2d++;
- /* X and Y helper handle points used to read scale and rotation. */
+ /* X and Y control points used to read scale and rotation. */
float handle_x[2];
copy_v2_v2(handle_x, td2d->loc);
sub_v2_v2(handle_x, loc);
@@ -147,8 +148,8 @@ void recalcData_sequencer_image(TransInfo *t)
TransDataSeq *tdseq = td->extra;
Sequence *seq = tdseq->seq;
StripTransform *transform = seq->strip->transform;
- transform->xofs = round_fl_to_int(loc[0]);
- transform->yofs = round_fl_to_int(loc[1]);
+ transform->xofs = round_fl_to_int(loc[0] - transform->origin[0]);
+ transform->yofs = round_fl_to_int(loc[1] - transform->origin[1]);
transform->scale_x = tdseq->orig_scale_x * fabs(len_v2(handle_x));
transform->scale_y = tdseq->orig_scale_y * fabs(len_v2(handle_y));
/* Scaling can cause negative rotation. */
diff --git a/source/blender/editors/transform/transform_gizmo_2d.c b/source/blender/editors/transform/transform_gizmo_2d.c
index 2e22712a67f..a3aa7c679cb 100644
--- a/source/blender/editors/transform/transform_gizmo_2d.c
+++ b/source/blender/editors/transform/transform_gizmo_2d.c
@@ -290,8 +290,8 @@ static bool gizmo2d_calc_center(const bContext *C, float r_center[2])
Sequence *seq;
SEQ_ITERATOR_FOREACH (seq, strips) {
StripTransform *transform = seq->strip->transform;
- r_center[0] += transform->xofs;
- r_center[1] += transform->yofs;
+ r_center[0] += transform->xofs + transform->origin[0];
+ r_center[1] += transform->yofs + transform->origin[1];
}
r_center[0] /= SEQ_collection_len(strips);
r_center[1] /= SEQ_collection_len(strips);
diff --git a/source/blender/makesdna/DNA_sequence_types.h b/source/blender/makesdna/DNA_sequence_types.h
index 03c38eb71a0..8c4436ee968 100644
--- a/source/blender/makesdna/DNA_sequence_types.h
+++ b/source/blender/makesdna/DNA_sequence_types.h
@@ -74,6 +74,7 @@ typedef struct StripTransform {
float scale_x;
float scale_y;
float rotation;
+ float origin[2];
} StripTransform;
typedef struct StripColorBalance {
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index d9837f21833..ba0cf1fdbe3 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -1431,6 +1431,12 @@ static void rna_def_strip_transform(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Rotation", "Rotate around image center");
RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTransform_update");
+ prop = RNA_def_property(srna, "origin", PROP_FLOAT, PROP_PIXEL);
+ RNA_def_property_float_sdna(prop, NULL, "origin");
+ RNA_def_property_ui_text(prop, "Origin", "Origin of image for transformation");
+ RNA_def_property_ui_range(prop, -FLT_MAX, FLT_MAX, 100, 2);
+ RNA_def_property_update(prop, NC_SCENE | ND_SEQUENCER, "rna_SequenceTransform_update");
+
RNA_def_struct_path_func(srna, "rna_SequenceTransform_path");
}
diff --git a/source/blender/sequencer/intern/render.c b/source/blender/sequencer/intern/render.c
index 6715e53ede4..a63cfed4427 100644
--- a/source/blender/sequencer/intern/render.c
+++ b/source/blender/sequencer/intern/render.c
@@ -410,7 +410,7 @@ static void sequencer_image_crop_transform_matrix(const Sequence *seq,
const float image_center_offs_y = (out->y - in->y) / 2;
const float translate_x = transform->xofs * preview_scale_factor + image_center_offs_x;
const float translate_y = transform->yofs * preview_scale_factor + image_center_offs_y;
- const float pivot[2] = {in->x / 2, in->y / 2};
+ const float pivot[2] = {(in->x / 2) + transform->origin[0], (in->y / 2) + transform->origin[1]};
loc_rot_size_to_mat3(r_transform_matrix,
(const float[]){translate_x, translate_y},
transform->rotation,
More information about the Bf-blender-cvs
mailing list