[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