Vuo  2.4.0
VuoNodeClass.cc
Go to the documentation of this file.
1
10#include "VuoNodeClass.hh"
11
12#include "VuoNode.hh"
13
14#include "VuoPort.hh"
15
16#include "VuoStringUtilities.hh"
17
19const int VuoNodeClass::unreservedInputPortStartIndex = 1; // 0 is refresh port
23const string VuoNodeClass::publishedInputNodeClassName = "vuo.in";
25const string VuoNodeClass::publishedOutputNodeClassName = "vuo.out";
27const string VuoNodeClass::publishedInputNodeIdentifier = "PublishedInputs";
29const string VuoNodeClass::publishedOutputNodeIdentifier = "PublishedOutputs";
30
38VuoNodeClass::VuoNodeClass(string className, vector<string> inputPortClassNames, vector<string> outputPortClassNames)
39 : VuoBase<VuoCompilerNodeClass,void>("VuoNodeClass with string ports"),
40 VuoModule(className)
41{
42 updateTypecastNodeClassStatus();
43
44 this->refreshPortClass = new VuoPortClass("refresh", VuoPortClass::eventOnlyPort);
45 inputPortClasses.push_back(this->refreshPortClass);
46 this->deprecated = false;
47
48 for (vector<string>::iterator i = inputPortClassNames.begin(); i != inputPortClassNames.end(); ++i)
49 {
51 inputPortClasses.push_back(portClass);
52 }
53 for (vector<string>::iterator i = outputPortClassNames.begin(); i != outputPortClassNames.end(); ++i)
54 {
56 outputPortClasses.push_back(portClass);
57 }
58}
59
68VuoNodeClass::VuoNodeClass(string className, VuoPortClass * refreshPortClass, vector<VuoPortClass *> inputPortClasses, vector<VuoPortClass *> outputPortClasses)
69 : VuoBase<VuoCompilerNodeClass,void>("VuoNodeClass with actual ports"),
70 VuoModule(className)
71{
72 updateTypecastNodeClassStatus();
73
74 this->refreshPortClass = refreshPortClass;
75 this->inputPortClasses = inputPortClasses;
76 this->outputPortClasses = outputPortClasses;
77}
78
83{
84 for (vector<VuoPortClass *>::iterator i = inputPortClasses.begin(); i != inputPortClasses.end(); ++i)
85 delete *i;
86
87 for (vector<VuoPortClass *>::iterator i = outputPortClasses.begin(); i != outputPortClasses.end(); ++i)
88 delete *i;
89}
90
96VuoNode * VuoNodeClass::newNode(string title, double x, double y)
97{
98 string nodeTitle = title.empty() ? getDefaultTitle() : title;
99
100 vector<VuoPort *> inputPorts;
101 VuoPort * refreshPort = NULL;
102 for (vector<VuoPortClass *>::iterator it = inputPortClasses.begin(); it != inputPortClasses.end(); ++it)
103 {
104 VuoPort * p = new VuoPort(*it);
105 inputPorts.push_back(p);
106 if (*it == refreshPortClass)
107 refreshPort = p;
108 }
109
110 vector<VuoPort *> outputPorts;
111 for (vector<VuoPortClass *>::iterator it = outputPortClasses.begin(); it != outputPortClasses.end(); ++it)
112 {
113 VuoPort * p = new VuoPort(*it);
114 outputPorts.push_back(p);
115 }
116
117 return new VuoNode(this, nodeTitle, refreshPort, inputPorts, outputPorts, x, y);
118}
119
125VuoNode * VuoNodeClass::newNode(VuoNode *nodeToCopyMetadataFrom)
126{
127 VuoNode *clonedNode = newNode();
128
129 clonedNode->setTitle(nodeToCopyMetadataFrom->getTitle());
130 clonedNode->setX(nodeToCopyMetadataFrom->getX());
131 clonedNode->setY(nodeToCopyMetadataFrom->getY());
132 clonedNode->setTintColor(nodeToCopyMetadataFrom->getTintColor());
133
134 return clonedNode;
135}
136
145{
146 return getModuleKey();
147}
148
155{
156 return _isTypecastNodeClass;
157}
158
159void VuoNodeClass::updateTypecastNodeClassStatus()
160{
162 string nodeClassName = getClassName();
163 _isTypecastNodeClass = (VuoStringUtilities::beginsWith(nodeClassName, "vuo.type")
164 || (VuoStringUtilities::beginsWith(nodeClassName, "vuo.data.summarize") && nodeClassName != "vuo.data.summarize.VuoData")
165 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.math.round")
166 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.count.")
167 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.first.")
168 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.last.")
169 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.populated.")
170 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.random.")
171 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.summarize.")
172 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.point.length")
173 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.scene.frameRequest.get")
174 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.transform.get.")
175 || nodeClassName == "vuo.audio.mix"
176 || nodeClassName == "vuo.audio.populated"
177 || nodeClassName == "vuo.image.get.height"
178 || nodeClassName == "vuo.image.get.width"
179 || nodeClassName == "vuo.image.populated"
180 || nodeClassName == "vuo.layer.combine.group"
181 || nodeClassName == "vuo.layer.get.child"
182 || nodeClassName == "vuo.layer.populated"
183 || nodeClassName == "vuo.mesh.populated"
184 || nodeClassName == "vuo.scene.combine.group"
185 || nodeClassName == "vuo.scene.get.child"
186 || nodeClassName == "vuo.scene.populated"
187 || nodeClassName == "vuo.text.populated"
188 || nodeClassName == "vuo.window.cursor.populated");
189
190#if 0
191 if (inputPortClasses.size() != VuoNodeClass::unreservedInputPortStartIndex+1)
192 return false;
194 return false;
195
196 if (outputPortClasses.size() != VuoNodeClass::unreservedOutputPortStartIndex+1)
197 return false;
198 VuoPortClass::PortType outputPortType = outputPortClasses[VuoNodeClass::unreservedOutputPortStartIndex]->getPortType();
199 if ( !(outputPortType == VuoPortClass::dataAndEventPort || outputPortType == VuoPortClass::eventOnlyPort) )
200 return false;
201
202 return true;
203#endif
204}
205
210{
211 string nodeClassName = getClassName();
212 return (VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.make.") ||
213 VuoStringUtilities::beginsWith(nodeClassName, "vuo.dictionary.make."));
214}
215
222{
223 return exampleCompositionFileNames;
224}
225
233void VuoNodeClass::setExampleCompositionFileNames(vector<string> exampleCompositionFileNames)
234{
235 this->exampleCompositionFileNames = exampleCompositionFileNames;
236}
237
244{
245 return deprecated;
246}
247
253void VuoNodeClass::setDeprecated(bool deprecated)
254{
255 this->deprecated = deprecated;
256}
257
262{
263 return refreshPortClass;
264}
265
270{
271 this->refreshPortClass = refreshPortClass;
272}
273
281vector<VuoPortClass *> &VuoNodeClass::getInputPortClasses(void)
282{
283 return inputPortClasses;
284}
285
289void VuoNodeClass::setInputPortClasses(vector<VuoPortClass *> inputPortClasses)
290{
291 this->inputPortClasses = inputPortClasses;
292}
293
299vector<VuoPortClass *> &VuoNodeClass::getOutputPortClasses(void)
300{
301 return outputPortClasses;
302}
303
307void VuoNodeClass::setOutputPortClasses(vector<VuoPortClass *> outputPortClasses)
308{
309 this->outputPortClasses = outputPortClasses;
310}
311
316{
317 printf("VuoNodeClass(%p,\"%s\")",this,getModuleKey().c_str());
318 if (hasCompiler())
319 printf(" VuoCompilerNodeClass(%p)",getCompiler());
320 if (hasRenderer())
321 printf(" VuoRendererNodeClass(%p)",getRenderer());
322 printf("\n");
323
324 for (vector<VuoPortClass *>::iterator it = inputPortClasses.begin(); it != inputPortClasses.end(); ++it)
325 {
326 printf("\tinput ");
327 (*it)->print();
328 }
329
330 for (vector<VuoPortClass *>::iterator it = outputPortClasses.begin(); it != outputPortClasses.end(); ++it)
331 {
332 printf("\toutput ");
333 (*it)->print();
334 }
335
336 fflush(stdout);
337}