summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NT/src/graph.cpp5
-rw-r--r--NT/src/rendercontext.h28
-rw-r--r--NT/src/rotor.cpp7
-rw-r--r--NT/src/rotor.h22
-rw-r--r--rotord/src/cvimage.h6
-rw-r--r--rotord/src/nodes_drawing.h39
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(){}