Vuo  2.3.2
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 
19 const int VuoNodeClass::unreservedInputPortStartIndex = 1; // 0 is refresh port
23 const string VuoNodeClass::publishedInputNodeClassName = "vuo.in";
25 const string VuoNodeClass::publishedOutputNodeClassName = "vuo.out";
27 const string VuoNodeClass::publishedInputNodeIdentifier = "PublishedInputs";
29 const string VuoNodeClass::publishedOutputNodeIdentifier = "PublishedOutputs";
30 
38 VuoNodeClass::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 
68 VuoNodeClass::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 
96 VuoNode * 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 
125 VuoNode * 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 
159 void 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;
193  if (inputPortClasses[VuoNodeClass::unreservedInputPortStartIndex]->getPortType() != VuoPortClass::dataAndEventPort)
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 
233 void VuoNodeClass::setExampleCompositionFileNames(vector<string> exampleCompositionFileNames)
234 {
235  this->exampleCompositionFileNames = exampleCompositionFileNames;
236 }
237 
244 {
245  return deprecated;
246 }
247 
253 void VuoNodeClass::setDeprecated(bool deprecated)
254 {
255  this->deprecated = deprecated;
256 }
257 
262 {
263  return refreshPortClass;
264 }
265 
270 {
271  this->refreshPortClass = refreshPortClass;
272 }
273 
281 vector<VuoPortClass *> &VuoNodeClass::getInputPortClasses(void)
282 {
283  return inputPortClasses;
284 }
285 
289 void VuoNodeClass::setInputPortClasses(vector<VuoPortClass *> inputPortClasses)
290 {
291  this->inputPortClasses = inputPortClasses;
292 }
293 
299 vector<VuoPortClass *> &VuoNodeClass::getOutputPortClasses(void)
300 {
301  return outputPortClasses;
302 }
303 
307 void 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 }