1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#include "rotor.h"
using namespace Rotor;
const string Graph::toString(){
string xmlgraph;
if (loaded) {
xml.copyXmlToString(xmlgraph);
return xmlgraph;
}
else return "";
}
bool Graph::load(string &filename){
loaded=false;
printf("loading graph: %s\n",filename.c_str());
if(xml.loadFile(filename) ){
init(xml.getAttribute("patchbay","ID","",0),xml.getValue("patchbay","",0));
if(xml.pushTag("patchbay")) {
int n1=xml.getNumTags("node");
for (int i1=0;i1<n1;i1++){
map<string,string> settings;
vector<string> attrs;
xml.getAttributeNames("node",attrs,i1);
for (auto& attr: attrs) {
settings[attr]=xml.getAttribute("node",attr,"",i1);
//cerr << "Got attribute: " << attr << ":" << xml.getAttribute("node",attr,"",i1) << endl;
}
settings["description"]=xml.getValue("node","",i1);
Node* node=factory.create(settings);
if (node) {
cerr << "Rotor: created '" << xml.getAttribute("node","type","",i1) << "'" << endl;
string nodeID=xml.getAttribute("node","ID","",i1);
nodes[nodeID]=node;
if(xml.pushTag("node",i1)) {
int n2=xml.getNumTags("signal_input");
for (int i2=0;i2<n2;i2++){
nodes[nodeID]->create_signal_input(xml.getValue("signal_input","",i2));
string fromID=xml.getAttribute("signal_input","from","",i2);
if (nodes.find(fromID)!=nodes.end()) {
if (!nodes[nodeID]->inputs[i2]->connect((Signal_node*)nodes[fromID])){
cerr << "Rotor: graph loader cannot connect input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
return false;
}
else cerr << "Rotor: linked input " << i2 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
}
else cerr << "Rotor: linking input " << i2 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl;
}
int n3=xml.getNumTags("image_input");
for (int i3=0;i3<n3;i3++){
((Image_node*)nodes[nodeID])->create_image_input(xml.getValue("image_input","",i3));
string fromID=xml.getAttribute("image_input","from","",i3);
if (nodes.find(fromID)!=nodes.end()) {
if (!(((Image_node*)nodes[nodeID])->image_inputs[i3]->connect((Image_node*)nodes[fromID]))){
cerr << "Rotor: graph loader cannot connect image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
return false;
}
else cerr << "Rotor: linked image input " << i3 << " of node '" << nodeID << "' to node '" << fromID << "'" << endl;
}
else cerr << "Rotor: linking image input " << i3 << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl;
}
xml.popTag();
}
}
else {
cerr << "Rotor: graph loader cannot find node '" << xml.getAttribute("node","type","",i1) << "'" << endl;
return false;
}
}
xml.popTag();
}
loaded=true;
return true;
}
else return false;
}
|