diff options
| -rw-r--r-- | NT/src/graph.cpp | 5 | ||||
| -rw-r--r-- | NT/src/rendercontext.h | 28 | ||||
| -rw-r--r-- | NT/src/rotor.cpp | 7 | ||||
| -rw-r--r-- | NT/src/rotor.h | 22 | ||||
| -rw-r--r-- | rotord/src/cvimage.h | 6 | ||||
| -rw-r--r-- | rotord/src/nodes_drawing.h | 39 |
6 files changed, 99 insertions, 8 deletions
diff --git a/NT/src/graph.cpp b/NT/src/graph.cpp index ef638cc..e671238 100644 --- a/NT/src/graph.cpp +++ b/NT/src/graph.cpp @@ -4,16 +4,17 @@ using namespace Rotor; using namespace std; bool Graph::check_audio(string audio,string path){ + Logger& logger = Logger::get(id); if (audio!="") { audio_filename=path+audio; Poco::File f=Poco::File(audio_filename); if (f.exists()) { //here we should check the audio is actually valid audio_loaded=true; - cerr<<"Rotor: loading "<<audio_filename<<" from graph"<<endl; + logger.information("Loading "+audio_filename+" from graph"); return true; } - cerr<<"Rotor: audio file "<<audio_filename<<" not found"<<endl; + logger.error("Audio file "+audio_filename+" not found"); } return false; } diff --git a/NT/src/rendercontext.h b/NT/src/rendercontext.h index ea7a8c1..10332df 100644 --- a/NT/src/rendercontext.h +++ b/NT/src/rendercontext.h @@ -15,15 +15,37 @@ TJR Jan 2014 #include "rotor.h" #include "graph.h" - namespace Rotor { class Render_context: public Poco::Task { public: - Render_context(const std::string& id): Task(id) { + Render_context(const std::string& _id): Task(_id) { + id=_id; graph.init(id); + //set up log + AutoPtr<SplitterChannel> splitterChannel(new SplitterChannel()); + AutoPtr<Channel> consoleChannel(new ConsoleChannel()); + AutoPtr<Channel> fileChannel(new FileChannel("Rotord_"+id+".log")); + splitterChannel->addChannel(consoleChannel); + splitterChannel->addChannel(fileChannel); + AutoPtr<Formatter> formatter(new PatternFormatter("%d-%m-%Y %H:%M:%S %s: %t")); + AutoPtr<Channel> formattingChannel(new FormattingChannel(formatter, splitterChannel)); + Logger& logger = Logger::create(id, formattingChannel, Message::PRIO_TRACE); + logger.information("started thread"); + } + ~Render_context(){ + Logger& logger = Logger::get(id); + cancel(); + logger.information("stopped thread"); + } + void runTask() { + Logger& logger = Logger::get(id); + while (!isCancelled()) { + sleep(100); + } } - private: Graph graph; + private: + std::string id; }; }; diff --git a/NT/src/rotor.cpp b/NT/src/rotor.cpp index bf0c26a..f600c7f 100644 --- a/NT/src/rotor.cpp +++ b/NT/src/rotor.cpp @@ -4,6 +4,7 @@ #include "factory.h" #include "nodes.h" #include "graph.h" +#include "rendercontext.h" using namespace std; using namespace Rotor; @@ -82,8 +83,8 @@ int main(){ delete m; delete p; */ - Rotor::Graph g; - cerr<<(g.load_file("testgraph.json","./")?"loaded ":"could not load ")<<"testgraph.json"<<endl; + Rotor::Render_context r("dbbbb4ba-8430-11e3-9774-74d02b29f6a6"); + cerr<<(r.graph.load_file("testgraph.json","./")?"loaded ":"could not load ")<<"testgraph.json"<<endl; /* Json::Value js; f.list_node("time",js); @@ -97,7 +98,7 @@ int main(){ //now need a way to grab output - Node* p=g.find_node("print"); + Node* p=r.graph.find_node("print"); if (p){ for (double t=0;t<10.0;t+=0.765){ diff --git a/NT/src/rotor.h b/NT/src/rotor.h index 68473af..5023a95 100644 --- a/NT/src/rotor.h +++ b/NT/src/rotor.h @@ -20,6 +20,28 @@ NB when plugging in to framework - convert all cerr messages to logged #include <json/json.h> #include <typeinfo> +#include "Poco/Logger.h" +#include "Poco/Channel.h" +#include "Poco/SplitterChannel.h" +#include "Poco/ConsoleChannel.h" +#include "Poco/FormattingChannel.h" +#include "Poco/FileChannel.h" +#include "Poco/Message.h" +#include "Poco/Formatter.h" +#include "Poco/PatternFormatter.h" +#include "Poco/AutoPtr.h" + +using Poco::Logger; +using Poco::Channel; +using Poco::SplitterChannel; +using Poco::ConsoleChannel; +using Poco::FormattingChannel; +using Poco::Formatter; +using Poco::PatternFormatter; +using Poco::FileChannel; +using Poco::Message; +using Poco::AutoPtr; + template <typename T> struct TypeName { diff --git a/rotord/src/cvimage.h b/rotord/src/cvimage.h index 2374e5b..b356f82 100644 --- a/rotord/src/cvimage.h +++ b/rotord/src/cvimage.h @@ -82,6 +82,7 @@ namespace Rotor { }; static pixeltables pixels; class Image{ + //transform should be a method of image public: Image(){ zero(); @@ -217,6 +218,11 @@ namespace Rotor { */ return t; } + void crop(int _w,int _h){ //change borders, crop/ extend + if ( _w<w||_h<h){ + + } + } Image & operator=(const Image &other); //believe these still work, don't know if these optimisations are better than opencvs.. Image & operator+=(const Image &other); diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h index 5a8937f..f4ddbf7 100644 --- a/rotord/src/nodes_drawing.h +++ b/rotord/src/nodes_drawing.h @@ -198,6 +198,45 @@ namespace Rotor { } private: }; + class Mosaic: public Draw_node { + //the difficulty here is in keeping the pixels centred + //the center of the screen should remain in between pixels + //this implies that the + public: + Mosaic(){ + title="Mosaic"; + description="Increases size of pixels"; + create_image_input("Image to mosaic","Image input"); + create_parameter("pixels","number","Height of scrren in pixels","Pixels",20.0,0.0,1.0); + NODEID="a33a1a6a-8420-11e3-831b-74d02b29f6a6"; + }; + Mosaic(map<string,string> &settings):Shape() { + base_settings(settings); + }; + ~Mosaic(){}; + Mosaic* clone(map<string,string> &_settings) { return new Mosaic(_settings);}; + void vector_output(cairo_t * cr,const Frame_spec &frame){ + colour=Colour(attributes["colour"]->value); + cairo_set_source_rgb(cr, colour.Rdouble(),colour.Gdouble(),colour.Bdouble()); + switch(attributes["shape"]->intVal) { + case SHAPE_square: + cairo_rectangle(cr,-frame.w/2,-frame.w/2,frame.w,frame.w); + break; + case SHAPE_circle: + cairo_arc(cr,0,0,frame.w/2,0.0, 2 * M_PI); + break; + case SHAPE_triangle: + //subtracting PI/2 =(1.5*PI)/3 so the triangle is pointing up + cairo_line_to(cr,0,-frame.w/2); + cairo_line_to(cr,cos((0.5 * M_PI)/3)*frame.w/2,sin((0.5 * M_PI)/3)*frame.w/2); + cairo_line_to(cr,cos((2.5 * M_PI)/3)*frame.w/2,sin((2.5 * M_PI)/3)*frame.w/2); + cairo_close_path(cr); + break; + } + cairo_fill(cr); + } + private: + }; class Audio_viz: public Draw_node { public: Audio_viz(){} |
