[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [55736] trunk/blender/source/blender/ compositor/nodes: Box and Ellipse mask nodes will now output shape

Sergey Sharybin sergey.vfx at gmail.com
Tue Apr 2 19:56:41 CEST 2013


Revision: 55736
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=55736
Author:   nazgul
Date:     2013-04-02 17:56:41 +0000 (Tue, 02 Apr 2013)
Log Message:
-----------
Box and Ellipse mask nodes will now output shape
even if nothing is attached to input.

They'll use black image with render resolution
as a background if nothing is attached to mask input.

Was a request from 4K ToS project.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
    trunk/blender/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp

Modified: trunk/blender/source/blender/compositor/nodes/COM_BoxMaskNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_BoxMaskNode.cpp	2013-04-02 17:49:31 UTC (rev 55735)
+++ trunk/blender/source/blender/compositor/nodes/COM_BoxMaskNode.cpp	2013-04-02 17:56:41 UTC (rev 55736)
@@ -24,6 +24,9 @@
 #include "COM_BoxMaskOperation.h"
 #include "COM_ExecutionSystem.h"
 
+#include "COM_SetValueOperation.h"
+#include "COM_ScaleOperation.h"
+
 BoxMaskNode::BoxMaskNode(bNode *editorNode) : Node(editorNode)
 {
 	/* pass */
@@ -34,9 +37,41 @@
 	BoxMaskOperation *operation;
 	operation = new BoxMaskOperation();
 	operation->setData((NodeBoxMask *)this->getbNode()->storage);
-	this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
+
+	InputSocket *inputSocket = this->getInputSocket(0);
+	OutputSocket *outputSocket = this->getOutputSocket(0);
+
+	if (inputSocket->isConnected()) {
+		inputSocket->relinkConnections(operation->getInputSocket(0), 0, graph);
+		outputSocket->relinkConnections(operation->getOutputSocket());
+	}
+	else {
+		/* Value operation to produce original transparent image */
+		SetValueOperation *valueOperation = new SetValueOperation();
+		valueOperation->setValue(0.0f);
+		graph->addOperation(valueOperation);
+
+		/* Scale that image up to render resolution */
+		const RenderData *rd = context->getRenderData();
+		ScaleFixedSizeOperation *scaleOperation = new ScaleFixedSizeOperation();
+
+		scaleOperation->setIsAspect(false);
+		scaleOperation->setIsCrop(false);
+		scaleOperation->setOffset(0.0f, 0.0f);
+
+		scaleOperation->setNewWidth(rd->xsch * rd->size / 100.0f);
+		scaleOperation->setNewHeight(rd->ysch * rd->size / 100.0f);
+
+		addLink(graph, valueOperation->getOutputSocket(0), scaleOperation->getInputSocket(0));
+		addLink(graph, scaleOperation->getOutputSocket(0), operation->getInputSocket(0));
+		outputSocket->relinkConnections(operation->getOutputSocket(0));
+
+		scaleOperation->getInputSocket(0)->getConnection()->setIgnoreResizeCheck(true);
+
+		graph->addOperation(scaleOperation);
+	}
+
 	this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
-	this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
 	operation->setMaskType(this->getbNode()->custom1);
 	
 	graph->addOperation(operation);

Modified: trunk/blender/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp
===================================================================
--- trunk/blender/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp	2013-04-02 17:49:31 UTC (rev 55735)
+++ trunk/blender/source/blender/compositor/nodes/COM_EllipseMaskNode.cpp	2013-04-02 17:56:41 UTC (rev 55736)
@@ -24,6 +24,9 @@
 #include "COM_EllipseMaskOperation.h"
 #include "COM_ExecutionSystem.h"
 
+#include "COM_SetValueOperation.h"
+#include "COM_ScaleOperation.h"
+
 EllipseMaskNode::EllipseMaskNode(bNode *editorNode) : Node(editorNode)
 {
 	/* pass */
@@ -32,11 +35,44 @@
 void EllipseMaskNode::convertToOperations(ExecutionSystem *graph, CompositorContext *context)
 {
 	EllipseMaskOperation *operation;
+
 	operation = new EllipseMaskOperation();
 	operation->setData((NodeEllipseMask *)this->getbNode()->storage);
-	this->getInputSocket(0)->relinkConnections(operation->getInputSocket(0), 0, graph);
+
+	InputSocket *inputSocket = this->getInputSocket(0);
+	OutputSocket *outputSocket = this->getOutputSocket(0);
+
+	if (inputSocket->isConnected()) {
+		inputSocket->relinkConnections(operation->getInputSocket(0), 0, graph);
+		outputSocket->relinkConnections(operation->getOutputSocket());
+	}
+	else {
+		/* Value operation to produce original transparent image */
+		SetValueOperation *valueOperation = new SetValueOperation();
+		valueOperation->setValue(0.0f);
+		graph->addOperation(valueOperation);
+
+		/* Scale that image up to render resolution */
+		const RenderData *rd = context->getRenderData();
+		ScaleFixedSizeOperation *scaleOperation = new ScaleFixedSizeOperation();
+
+		scaleOperation->setIsAspect(false);
+		scaleOperation->setIsCrop(false);
+		scaleOperation->setOffset(0.0f, 0.0f);
+
+		scaleOperation->setNewWidth(rd->xsch * rd->size / 100.0f);
+		scaleOperation->setNewHeight(rd->ysch * rd->size / 100.0f);
+
+		addLink(graph, valueOperation->getOutputSocket(0), scaleOperation->getInputSocket(0));
+		addLink(graph, scaleOperation->getOutputSocket(0), operation->getInputSocket(0));
+		outputSocket->relinkConnections(operation->getOutputSocket(0));
+
+		scaleOperation->getInputSocket(0)->getConnection()->setIgnoreResizeCheck(true);
+
+		graph->addOperation(scaleOperation);
+	}
+
 	this->getInputSocket(1)->relinkConnections(operation->getInputSocket(1), 1, graph);
-	this->getOutputSocket(0)->relinkConnections(operation->getOutputSocket(0));
 	operation->setMaskType(this->getbNode()->custom1);
 	
 	graph->addOperation(operation);




More information about the Bf-blender-cvs mailing list