Vuo 2.4.4
Loading...
Searching...
No Matches
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
157{
158 return _isTypecastNodeClass;
159}
160
164void VuoNodeClass::updateTypecastNodeClassStatus()
165{
166 string nodeClassName = getClassName();
167 _isTypecastNodeClass = (VuoStringUtilities::beginsWith(nodeClassName, "vuo.type")
168 || (VuoStringUtilities::beginsWith(nodeClassName, "vuo.data.summarize") && nodeClassName != "vuo.data.summarize.VuoData")
169 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.math.round")
170 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.count")
171 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.first")
172 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.last")
173 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.populated")
174 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.get.random")
175 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.summarize")
176 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.point.length")
177 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.scene.frameRequest.get")
178 || VuoStringUtilities::beginsWith(nodeClassName, "vuo.transform.get")
179 || nodeClassName == "vuo.audio.mix"
180 || nodeClassName == "vuo.audio.populated"
181 || nodeClassName == "vuo.image.get.height"
182 || nodeClassName == "vuo.image.get.width"
183 || nodeClassName == "vuo.image.populated"
184 || nodeClassName == "vuo.layer.combine.group"
185 || nodeClassName == "vuo.layer.get.child"
186 || nodeClassName == "vuo.layer.populated"
187 || nodeClassName == "vuo.mesh.populated"
188 || nodeClassName == "vuo.scene.combine.group"
189 || nodeClassName == "vuo.scene.get.child"
190 || nodeClassName == "vuo.scene.populated"
191 || nodeClassName == "vuo.text.populated"
192 || nodeClassName == "vuo.window.cursor.populated");
193}
194
199{
200 string nodeClassName = getClassName();
201 return (VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.make.") ||
202 VuoStringUtilities::beginsWith(nodeClassName, "vuo.dictionary.make."));
203}
204
211{
212 return exampleCompositionFileNames;
213}
214
222void VuoNodeClass::setExampleCompositionFileNames(vector<string> exampleCompositionFileNames)
223{
224 this->exampleCompositionFileNames = exampleCompositionFileNames;
225}
226
233{
234 return deprecated;
235}
236
242void VuoNodeClass::setDeprecated(bool deprecated)
243{
244 this->deprecated = deprecated;
245}
246
251{
252 return refreshPortClass;
253}
254
259{
260 this->refreshPortClass = refreshPortClass;
261}
262
270vector<VuoPortClass *> &VuoNodeClass::getInputPortClasses(void)
271{
272 return inputPortClasses;
273}
274
278void VuoNodeClass::setInputPortClasses(vector<VuoPortClass *> inputPortClasses)
279{
280 this->inputPortClasses = inputPortClasses;
281}
282
288vector<VuoPortClass *> &VuoNodeClass::getOutputPortClasses(void)
289{
290 return outputPortClasses;
291}
292
296void VuoNodeClass::setOutputPortClasses(vector<VuoPortClass *> outputPortClasses)
297{
298 this->outputPortClasses = outputPortClasses;
299}
300
305{
306 printf("VuoNodeClass(%p,\"%s\")",this,getModuleKey().c_str());
307 if (hasCompiler())
308 printf(" VuoCompilerNodeClass(%p)",getCompiler());
309 if (hasRenderer())
310 printf(" VuoRendererNodeClass(%p)",getRenderer());
311 printf("\n");
312
313 for (vector<VuoPortClass *>::iterator it = inputPortClasses.begin(); it != inputPortClasses.end(); ++it)
314 {
315 printf("\tinput ");
316 (*it)->print();
317 }
318
319 for (vector<VuoPortClass *>::iterator it = outputPortClasses.begin(); it != outputPortClasses.end(); ++it)
320 {
321 printf("\toutput ");
322 (*it)->print();
323 }
324
325 fflush(stdout);
326}
327
332bool VuoNodeClass::isNodeClassName(const string &potentialNodeClassName)
333{
334 size_t dotPos = potentialNodeClassName.rfind(".");
335 if (dotPos == string::npos)
336 return false;
337
338 string lastPart = potentialNodeClassName.substr(dotPos + 1);
339 if (lastPart == "framework" || lastPart == "dylib")
340 return false;
341
342 return true;
343}