Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2012-07-27 15:07:12 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2012-07-27 15:07:12 +0400
commit18e874798d68e4796146e9f5958f66dc3ea61909 (patch)
tree8fac06b4ab2345a1e9baa85f92fad7d06dae7ac6
parentd0b387a0dfcb259a36d7bff3c6bdd63ee0e5a1d9 (diff)
Track input node: more control on over output value
Now supports output value of: - Absolute marker position - Marker position relative to the very first marker - Marker position relative to given scene frame
-rw-r--r--source/blender/compositor/nodes/COM_TrackPositionNode.cpp6
-rw-r--r--source/blender/compositor/operations/COM_TrackPositionOperation.cpp15
-rw-r--r--source/blender/compositor/operations/COM_TrackPositionOperation.h12
-rw-r--r--source/blender/editors/space_node/drawnode.c6
-rw-r--r--source/blender/makesrna/intern/rna_nodetree.c19
5 files changed, 47 insertions, 11 deletions
diff --git a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
index 58b26eb7128..f4efcfe27f0 100644
--- a/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
+++ b/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
@@ -52,14 +52,16 @@ void TrackPositionNode::convertToOperations(ExecutionSystem *graph, CompositorCo
operationX->setTrackName(trackpos_data->track_name);
operationX->setFramenumber(context->getFramenumber());
operationX->setAxis(0);
- operationX->setRelative(editorNode->custom1);
+ operationX->setPosition(editorNode->custom1);
+ operationX->setRelativeFrame(editorNode->custom2);
operationY->setMovieClip(clip);
operationY->setTrackingObject(trackpos_data->tracking_object);
operationY->setTrackName(trackpos_data->track_name);
operationY->setFramenumber(context->getFramenumber());
operationY->setAxis(1);
- operationY->setRelative(editorNode->custom1);
+ operationY->setPosition(editorNode->custom1);
+ operationY->setRelativeFrame(editorNode->custom2);
outputX->relinkConnections(operationX->getOutputSocket());
outputY->relinkConnections(operationY->getOutputSocket());
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.cpp b/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
index d61bfd4b235..2b7cc8f0660 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
@@ -44,7 +44,8 @@ TrackPositionOperation::TrackPositionOperation() : NodeOperation()
this->m_trackingObjectName[0] = 0;
this->m_trackName[0] = 0;
this->m_axis = 0;
- this->m_relative = false;
+ this->m_position = POSITION_ABSOLUTE;;
+ this->m_relativeFrame = 0;
}
void TrackPositionOperation::initExecution()
@@ -72,12 +73,13 @@ void TrackPositionOperation::initExecution()
if (track) {
MovieTrackingMarker *marker;
+ int clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(this->m_movieClip, this->m_framenumber);
- marker = BKE_tracking_marker_get(track, this->m_framenumber);
+ marker = BKE_tracking_marker_get(track, clip_framenr);
copy_v2_v2(this->m_markerPos, marker->pos);
- if (this->m_relative) {
+ if (this->m_position == POSITION_RELATIVE_START) {
int i;
for (i = 0; i < track->markersnr; i++) {
@@ -90,6 +92,13 @@ void TrackPositionOperation::initExecution()
}
}
}
+ else if (this->m_position == POSITION_RELATIVE_FRAME) {
+ int relative_clip_framenr = BKE_movieclip_remap_scene_to_clip_frame(this->m_movieClip,
+ this->m_relativeFrame);
+
+ marker = BKE_tracking_marker_get(track, relative_clip_framenr);
+ copy_v2_v2(this->m_relativePos, marker->pos);
+ }
}
}
}
diff --git a/source/blender/compositor/operations/COM_TrackPositionOperation.h b/source/blender/compositor/operations/COM_TrackPositionOperation.h
index 537974e733a..3f6f237e5ea 100644
--- a/source/blender/compositor/operations/COM_TrackPositionOperation.h
+++ b/source/blender/compositor/operations/COM_TrackPositionOperation.h
@@ -40,12 +40,19 @@
*/
class TrackPositionOperation : public NodeOperation {
protected:
+ enum {
+ POSITION_ABSOLUTE = 0,
+ POSITION_RELATIVE_START,
+ POSITION_RELATIVE_FRAME
+ };
+
MovieClip *m_movieClip;
int m_framenumber;
char m_trackingObjectName[64];
char m_trackName[64];
int m_axis;
- bool m_relative;
+ int m_position;
+ int m_relativeFrame;
int m_width, m_height;
float m_markerPos[2];
@@ -64,7 +71,8 @@ public:
void setTrackName(char *track) {strncpy(this->m_trackName, track, sizeof(this->m_trackName));}
void setFramenumber(int framenumber) {this->m_framenumber = framenumber;}
void setAxis(int value) {this->m_axis = value;}
- void setRelative(bool value) {this->m_relative = value;}
+ void setPosition(int value) {this->m_position = value;}
+ void setRelativeFrame(int value) {this->m_relativeFrame = value;}
void initExecution();
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index b3ae8d3e939..6aec69ca61a 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -2577,7 +2577,11 @@ static void node_composit_buts_trackpos(uiLayout *layout, bContext *C, PointerRN
uiItemR(layout, ptr, "track_name", 0, "", ICON_ANIM_DATA);
}
- uiItemR(layout, ptr, "use_relative", 0, NULL, ICON_NONE);
+ uiItemR(layout, ptr, "position", 0, NULL, ICON_NONE);
+
+ if (node->custom1 == 2) {
+ uiItemR(layout, ptr, "relative_frame", 0, NULL, ICON_NONE);
+ }
}
}
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c
index 4f259e80f25..6b380886e28 100644
--- a/source/blender/makesrna/intern/rna_nodetree.c
+++ b/source/blender/makesrna/intern/rna_nodetree.c
@@ -3730,6 +3730,13 @@ static void def_cmp_trackpos(StructRNA *srna)
{
PropertyRNA *prop;
+ static EnumPropertyItem position_items[] = {
+ {0, "ABSOLUTE", 0, "Absolute", "Output absolute position of a marker"},
+ {1, "RELATIVE_START", 0, "Relative Start", "Output position of a marker relative to first marker of a track"},
+ {2, "RELATIVE_FRAME", 0, "Relative Frame", "Output position of a marker relative to marker at given frame number"},
+ {0, NULL, 0, NULL, NULL}
+ };
+
prop = RNA_def_property(srna, "clip", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "id");
RNA_def_property_struct_type(prop, "MovieClip");
@@ -3737,9 +3744,15 @@ static void def_cmp_trackpos(StructRNA *srna)
RNA_def_property_ui_text(prop, "Movie Clip", "");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
- prop = RNA_def_property(srna, "use_relative", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "custom1", 1);
- RNA_def_property_ui_text(prop, "Relative", "Return relative position to first track's marker");
+ prop = RNA_def_property(srna, "position", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_sdna(prop, NULL, "custom1");
+ RNA_def_property_enum_items(prop, position_items);
+ RNA_def_property_ui_text(prop, "Position", "Which marker position to use for output");
+ RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
+
+ prop = RNA_def_property(srna, "relative_frame", PROP_INT, PROP_NONE);
+ RNA_def_property_int_sdna(prop, NULL, "custom2");
+ RNA_def_property_ui_text(prop, "Frame", "Frame to be used for relative position");
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
RNA_def_struct_sdna_from(srna, "NodeTrackPosData", "storage");