#include #include "rotor.h" #include "nodes.h" #include "factory.h" using namespace std; using namespace Rotor; Json::Value Node::list_json(){ Json::Value node; node["node_type"]=node_type; node["title"]=title; node["output_type"]=output_type(); node["description"]=description; node["node_id"]=node_id; node["ui_type"]=ui_type; if (vars.size()){ node["vars"]=Json::arrayValue; for (auto& var: vars) { string type=var.second->get_type(); Json::Value newvar; newvar["type"]=type; newvar["connectable"]=var.second->connectable?"yes":"no"; if (dynamic_cast(var.second)){ newvar["input"]=Json::arrayValue; for (auto& element: dynamic_cast(var.second)->values) { Json::Value newvalue; newvar["input"].append(newvalue); } } else { newvar["input"]=Json::Value(); } node["vars"].append(newvar); } } /* if (_node->inputs.size()){ node["signal_inputs"]=Json::arrayValue; for (auto& input: _node->inputs) { Json::Value signal_input; signal_input["title"]=input->title; signal_input["description"]=input->description; node["signal_inputs"].append(signal_input); } } if (dynamic_cast (_node)!=nullptr) { if ((dynamic_cast(_node))->image_inputs.size()){ node["image_inputs"]=Json::arrayValue; for (auto& input: (dynamic_cast(_node))->image_inputs) { Json::Value image_input; image_input["title"]=input->title; image_input["description"]=input->description; node["image_inputs"].append(image_input); } } } if (_node->parameters.size()){ node["parameters"]=Json::arrayValue; for (auto& param: _node->parameters) { Json::Value parameter; parameter["name"]=param.first; parameter["type"]=param.second->type; parameter["title"]=param.second->title; parameter["description"]=param.second->description; parameter["value"]=param.second->value; parameter["min"]=param.second->min; parameter["max"]=param.second->max; parameter["step"]=param.second->step; node["parameters"].append(parameter); } } if (_node->attributes.size()){ node["attributes"]=Json::arrayValue; for (auto& attr: _node->attributes) { Json::Value attribute; attribute["name"]=attr.first; attribute["title"]=attr.second->title; attribute["description"]=attr.second->description; if (attr.second->vals.size()){ //document attribute enumeration attribute["value"]=attr.second->value; attribute["type"]="enum"; attribute["options"]=Json::arrayValue; for (auto val: attr.second->vals){ attribute["options"].append(val); } } else { attribute["type"]=attr.second->type; if (attr.second->type=="array"){ attribute["value"]=Json::arrayValue; } else attribute["value"]=attr.second->value; } node["attributes"].append(attribute); } } */ return node; } //factory generates linker errors if rotor.h implementation is seperated: why? int main(){ Node_factory f; /* map settings={{"node_type","time"}}; Node *t=f.create(settings); settings={{"value","2"},{"node_type","multiply"}}; Node *m=f.create(settings); if (!m->connect("inlet",t)) printf("not connected...\n"); settings={{"node_type","print"}}; Node *p=f.create(settings); if (!p->connect("inlet",m)) printf("not connected...\n"); for (double t=0;t<10.0;t+=0.765){ Frame_parameters f=Frame_parameters(t,25.0,10.0,640,360); printf("%04f %s\n",t,(dynamic_cast*>(p))->get_output(f).c_str()); } delete t; delete m; delete p; */ Json::Value js; f.list_node("multiply",js); Json::StyledWriter writer; cerr<