[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [49286] trunk/blender/source/blender: Track input node: more control on over output value

Sergey Sharybin sergey.vfx at gmail.com
Fri Jul 27 13:07:12 CEST 2012


Revision: 49286
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49286
Author:   nazgul
Date:     2012-07-27 11:07:12 +0000 (Fri, 27 Jul 2012)
Log Message:
-----------
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

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
    trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c

Modified: trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp	2012-07-27 11:07:09 UTC (rev 49285)
+++ trunk/blender/source/blender/compositor/nodes/COM_TrackPositionNode.cpp	2012-07-27 11:07:12 UTC (rev 49286)
@@ -52,14 +52,16 @@
 	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());

Modified: trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp	2012-07-27 11:07:09 UTC (rev 49285)
+++ trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.cpp	2012-07-27 11:07:12 UTC (rev 49286)
@@ -44,7 +44,8 @@
 	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 @@
 
 		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 @@
 					}
 				}
 			}
+			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);
+			}
 		}
 	}
 }

Modified: trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h	2012-07-27 11:07:09 UTC (rev 49285)
+++ trunk/blender/source/blender/compositor/operations/COM_TrackPositionOperation.h	2012-07-27 11:07:12 UTC (rev 49286)
@@ -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 @@
 	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();
 

Modified: trunk/blender/source/blender/editors/space_node/drawnode.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/drawnode.c	2012-07-27 11:07:09 UTC (rev 49285)
+++ trunk/blender/source/blender/editors/space_node/drawnode.c	2012-07-27 11:07:12 UTC (rev 49286)
@@ -2577,7 +2577,11 @@
 			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);
+		}
 	}
 }
 

Modified: trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-07-27 11:07:09 UTC (rev 49285)
+++ trunk/blender/source/blender/makesrna/intern/rna_nodetree.c	2012-07-27 11:07:12 UTC (rev 49286)
@@ -3730,6 +3730,13 @@
 {
 	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,11 +3744,17 @@
 	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");
 
 	prop = RNA_def_property(srna, "tracking_object", PROP_STRING, PROP_NONE);




More information about the Bf-blender-cvs mailing list