From b7992bab3a5087bdfb1d2c25b1b3e0bad339b588 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Thu, 22 Aug 2013 17:41:10 +0100 Subject: building json loader --- rotord/src/graph.cpp | 124 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 115 insertions(+), 9 deletions(-) (limited to 'rotord/src/graph.cpp') diff --git a/rotord/src/graph.cpp b/rotord/src/graph.cpp index b799a59..139873f 100644 --- a/rotord/src/graph.cpp +++ b/rotord/src/graph.cpp @@ -62,23 +62,31 @@ bool Graph::load(string data,string media_path){ if (xml.loadFromBuffer(data)){ return parseXml(media_path); } - cerr<<"Rotor: failed to load graph from string"< settings; + vector attrs; + //iterate members + settings["type"]=jnodes[i]["type"].asString(); + settings["title"]=jnodes[i]["title"].asString(); + settings["description"]=jnodes[i]["description"].asString(); + Node* node=factory.create(settings); + if (node) { + string nodeID=jnodes[i]["id"].asString(); + if (nodes.find(nodeID)==nodes.end()){ + cerr << "Rotor: creating node '"<inputs.size()>j) { + string fromID=jnodes[i]["signal_inputs"][j]["from"].asString(); + if (fromID!=""){ + if (nodes.find(fromID)!=nodes.end()) { + if (!nodes[nodeID]->inputs[j]->connect((Signal_node*)nodes[fromID])){ + cerr << "Rotor: graph loader cannot connect input " << j << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked input " << j << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + } + else cerr << "Rotor: linking input " << j << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; + } + } + else cerr << "Rotor: input " << j << " of node: '" << nodeID << "' does not exist" << endl; + } + //image inputs + if (dynamic_cast(nodes[nodeID])!=nullptr) { + for (int k=0;kimage_inputs.size()<=k) { + if (nodes[nodeID]->duplicate_inputs) { + while(((Image_node*)nodes[nodeID])->image_inputs.size()<=k){ + ((Image_node*)nodes[nodeID])->create_image_input(settings["description"],settings["title"]); + } + } + } + if (((Image_node*)nodes[nodeID])->image_inputs.size()>k) { + string fromID=jnodes[i]["image_inputs"][k]["from"].asString(); + if (fromID!=""){ + if (nodes.find(fromID)!=nodes.end()) { + if (dynamic_cast(nodes[fromID])!=nullptr) { + if (!dynamic_cast(nodes[nodeID])->image_inputs[k]->connect((Image_node*)nodes[fromID])){ + cerr << "Rotor: graph loader cannot connect image input " << k << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked image input " << k << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + } + else cerr << "Rotor: cannot link image input "<< k << " of node '" << nodeID << "' to node '" << fromID << "' : not an image node" << endl; + } + else cerr << "Rotor: linking image input " << k << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; + } + } + else cerr << "Rotor: image input number " << k << " of node: '" << nodeID << "' does not exist" << endl; + } + } + //parameters + for (int l=0;lparameters.find(parameter)!=nodes[nodeID]->parameters.end()) { + string val=jnodes[i]["parameters"][l]["value"].asString(); + if (val!="") nodes[nodeID]->parameters.find(parameter)->second->value=ofToFloat(val); + string fromID=jnodes[i]["parameters"][l]["from"].asString(); + if (nodes.find(fromID)!=nodes.end()) { + if (!nodes[nodeID]->parameters[parameter]->connect(nodes[fromID])){ + cerr << "Rotor: graph loader cannot connect parameter " << parameter << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + return false; + } + else cerr << "Rotor: linked parameter " << parameter << " of node '" << nodeID << "' to node '" << fromID << "'" << endl; + } + else if (fromID!="") cerr << "Rotor: linking parameter " << parameter << " of node: '" << nodeID << "', cannot find target '" << fromID << "'" << endl; + } + else cerr << "Rotor: cannot find parameter input '" << parameter << "' of "<