Vuo  2.2.1
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.point.length")
172  || VuoStringUtilities::beginsWith(nodeClassName, "vuo.scene.frameRequest.get")
173  || VuoStringUtilities::beginsWith(nodeClassName, "vuo.transform.get.")
174  || nodeClassName == "vuo.audio.mix"
175  || nodeClassName == "vuo.audio.populated"
176  || nodeClassName == "vuo.image.get.height"
177  || nodeClassName == "vuo.image.get.width"
178  || nodeClassName == "vuo.image.populated"
179  || nodeClassName == "vuo.layer.combine.group"
180  || nodeClassName == "vuo.layer.get.child"
181  || nodeClassName == "vuo.layer.populated"
182  || nodeClassName == "vuo.mesh.populated"
183  || nodeClassName == "vuo.scene.combine.group"
184  || nodeClassName == "vuo.scene.get.child"
185  || nodeClassName == "vuo.scene.populated"
186  || nodeClassName == "vuo.text.populated"
187  || nodeClassName == "vuo.window.cursor.populated");
188 
189 #if 0
190  if (inputPortClasses.size() != VuoNodeClass::unreservedInputPortStartIndex+1)
191  return false;
192  if (inputPortClasses[VuoNodeClass::unreservedInputPortStartIndex]->getPortType() != VuoPortClass::dataAndEventPort)
193  return false;
194 
195  if (outputPortClasses.size() != VuoNodeClass::unreservedOutputPortStartIndex+1)
196  return false;
197  VuoPortClass::PortType outputPortType = outputPortClasses[VuoNodeClass::unreservedOutputPortStartIndex]->getPortType();
198  if ( !(outputPortType == VuoPortClass::dataAndEventPort || outputPortType == VuoPortClass::eventOnlyPort) )
199  return false;
200 
201  return true;
202 #endif
203 }
204 
209 {
210  string nodeClassName = getClassName();
211  return (VuoStringUtilities::beginsWith(nodeClassName, "vuo.list.make.") ||
212  VuoStringUtilities::beginsWith(nodeClassName, "vuo.dictionary.make."));
213 }
214 
221 {
222  return exampleCompositionFileNames;
223 }
224 
232 void VuoNodeClass::setExampleCompositionFileNames(vector<string> exampleCompositionFileNames)
233 {
234  this->exampleCompositionFileNames = exampleCompositionFileNames;
235 }
236 
243 {
244  return deprecated;
245 }
246 
252 void VuoNodeClass::setDeprecated(bool deprecated)
253 {
254  this->deprecated = deprecated;
255 }
256 
261 {
262  return refreshPortClass;
263 }
264 
269 {
270  this->refreshPortClass = refreshPortClass;
271 }
272 
280 vector<VuoPortClass *> &VuoNodeClass::getInputPortClasses(void)
281 {
282  return inputPortClasses;
283 }
284 
288 void VuoNodeClass::setInputPortClasses(vector<VuoPortClass *> inputPortClasses)
289 {
290  this->inputPortClasses = inputPortClasses;
291 }
292 
298 vector<VuoPortClass *> &VuoNodeClass::getOutputPortClasses(void)
299 {
300  return outputPortClasses;
301 }
302 
306 void VuoNodeClass::setOutputPortClasses(vector<VuoPortClass *> outputPortClasses)
307 {
308  this->outputPortClasses = outputPortClasses;
309 }
310 
315 {
316  printf("VuoNodeClass(%p,\"%s\")",this,getModuleKey().c_str());
317  if (hasCompiler())
318  printf(" VuoCompilerNodeClass(%p)",getCompiler());
319  if (hasRenderer())
320  printf(" VuoRendererNodeClass(%p)",getRenderer());
321  printf("\n");
322 
323  for (vector<VuoPortClass *>::iterator it = inputPortClasses.begin(); it != inputPortClasses.end(); ++it)
324  {
325  printf("\tinput ");
326  (*it)->print();
327  }
328 
329  for (vector<VuoPortClass *>::iterator it = outputPortClasses.begin(); it != outputPortClasses.end(); ++it)
330  {
331  printf("\toutput ");
332  (*it)->print();
333  }
334 
335  fflush(stdout);
336 }