diff options
Diffstat (limited to 'ofxHelios')
| -rwxr-xr-x | ofxHelios/example/bin/example.app/Contents/MacOS/example | bin | 11690516 -> 11696052 bytes | |||
| -rw-r--r-- | ofxHelios/example/obj/osx/Release/src/ofApp.o | bin | 33912 -> 49548 bytes | |||
| -rw-r--r-- | ofxHelios/example/src/ofApp.cpp | 46 | ||||
| -rw-r--r-- | ofxHelios/libs/libheliosdac/includes/HeliosDac.h | 12 | ||||
| -rw-r--r-- | ofxHelios/src/ofxHelios.cpp | 64 | ||||
| -rw-r--r-- | ofxHelios/src/ofxHelios.h | 9 |
6 files changed, 94 insertions, 37 deletions
diff --git a/ofxHelios/example/bin/example.app/Contents/MacOS/example b/ofxHelios/example/bin/example.app/Contents/MacOS/example Binary files differindex a4f6d56..a6be470 100755 --- a/ofxHelios/example/bin/example.app/Contents/MacOS/example +++ b/ofxHelios/example/bin/example.app/Contents/MacOS/example diff --git a/ofxHelios/example/obj/osx/Release/src/ofApp.o b/ofxHelios/example/obj/osx/Release/src/ofApp.o Binary files differindex 1dc0536..b1b70cf 100644 --- a/ofxHelios/example/obj/osx/Release/src/ofApp.o +++ b/ofxHelios/example/obj/osx/Release/src/ofApp.o diff --git a/ofxHelios/example/src/ofApp.cpp b/ofxHelios/example/src/ofApp.cpp index e629ae0..671529b 100644 --- a/ofxHelios/example/src/ofApp.cpp +++ b/ofxHelios/example/src/ofApp.cpp @@ -1,8 +1,9 @@ #include "ofApp.h" -int MAX_POINTS=30000; -int NUM_POINTS=1024; +int MAX_POINTS=20000; +int NUM_POINTS=128; int LASER_INTENSITY=37; +int CIRCLE_RADIUS=256; //-------------------------------------------------------------- void testApp::setup(){ @@ -12,7 +13,7 @@ void testApp::setup(){ //-------------------------------------------------------------- void testApp::update(){ - ofSetWindowTitle(ofToString(ofGetFrameRate(), 2)); + } @@ -47,22 +48,37 @@ void testApp::draw(){ float pfactor=(PI*2)/NUM_POINTS; - colourPolyline line; + vector <colourPolyline> lines; + + for (int k=0;k<2;k++){ + for (int j=0;j<2;j++){ + + colourPolyline line; + + for (int i=0;i<NUM_POINTS+1;i++){ + line.addVertex( + ((cos(float(i)*pfactor)+1)*CIRCLE_RADIUS)+(ofGetWidth()/2)+(-(CIRCLE_RADIUS+200)+(k*400)), + ((sin(float(i)*pfactor)+1)*CIRCLE_RADIUS)+(ofGetHeight()/2)+(-(CIRCLE_RADIUS+200)+(j*400)), + (sin(float(i+(ofGetElapsedTimef()*30*j))*pfactor)+1)*128, + (sin(float(i+(ofGetElapsedTimef()*57*k))*pfactor)+1)*128, + (sin(float(i+(ofGetElapsedTimef()*101*(j+k)))*pfactor)+1)*128 + ); + } + lines.push_back(line); + line.draw(); + } + } + int num = laser.draw(lines); - for (int i=0;i<NUM_POINTS;i++){ - line.addVertex( - ((cos(float(i)*pfactor)+1)*512), - ((sin(float(i)*pfactor)+1)*512), - (sin(float(i+(ofGetElapsedTimef()*30))*pfactor)+1)*128, - (sin(float(i+(ofGetElapsedTimef()*57))*pfactor)+1)*128, - (sin(float(i+(ofGetElapsedTimef()*101))*pfactor)+1)*128 - ); + if (num>0){ + ofSetWindowTitle(ofToString(ofGetFrameRate(), 2)+" fps laser points: "+ofToString(num)); + } + else { + ofSetWindowTitle("laser error "); } - line.draw(); - - laser.draw(line); + } diff --git a/ofxHelios/libs/libheliosdac/includes/HeliosDac.h b/ofxHelios/libs/libheliosdac/includes/HeliosDac.h index ed1c5fc..333789d 100644 --- a/ofxHelios/libs/libheliosdac/includes/HeliosDac.h +++ b/ofxHelios/libs/libheliosdac/includes/HeliosDac.h @@ -66,7 +66,7 @@ cannot receive a new frame until the currently playing frame finishes, freeing u #endif //point data structure -typedef struct +struct HeliosPoint { std::uint16_t x; //12 bit (from 0 to 0xFFF) std::uint16_t y; //12 bit (from 0 to 0xFFF) @@ -74,7 +74,15 @@ typedef struct std::uint8_t g; //8 bit (from 0 to 0xFF) std::uint8_t b; //8 bit (from 0 to 0xFF) std::uint8_t i; //8 bit (from 0 to 0xFF) -} HeliosPoint; + HeliosPoint( + std::uint16_t _x, + std::uint16_t _y, + std::uint8_t _r, + std::uint8_t _g, + std::uint8_t _b, + std::uint8_t _i + ) : x(_x),y(_y),r(_r),g(_g),b(_b),i(_i) { } +}; class HeliosDac { diff --git a/ofxHelios/src/ofxHelios.cpp b/ofxHelios/src/ofxHelios.cpp index d05e062..7c934b5 100644 --- a/ofxHelios/src/ofxHelios.cpp +++ b/ofxHelios/src/ofxHelios.cpp @@ -19,18 +19,24 @@ put in dwell points */ -int ofxHelios::draw(vector <ofPolyline> &points,ofColor colour,int intensity){ +int ofxHelios::draw(vector <ofPolyline> &lines,ofColor colour,int intensity){ return 0; } int ofxHelios::draw(ofPolyline &line,ofColor colour,int intensity){ colourPolyline col=colourPolyline(line,colour); - return draw(col); + return draw(col,intensity); } int ofxHelios::draw(colourPolyline &line, int intensity){ + vector <colourPolyline> lines; + lines.push_back(line); + return draw(lines,intensity); +} + +int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){ //todo: move to a thread //todo: add a transform //POC @@ -42,28 +48,52 @@ int ofxHelios::draw(colourPolyline &line, int intensity){ while (!dac.GetStatus(device)); //timeout for this? //assemble data - HeliosPoint points[line.size()]; - - for (int i=0;i<line.size();i++){ - points[i]=HeliosPoint( - { - (uint16_t)(line[i].x+xoffs), - (uint16_t)(line[i].y+yoffs), - (uint8_t)(((line.getColourAt(i).r)*laserintensity)>>8), - (uint8_t)(((line.getColourAt(i).g)*laserintensity)>>8), - (uint8_t)(((line.getColourAt(i).b)*laserintensity)>>8), - (uint8_t)intensity - }); + vector <HeliosPoint> points; + + ofPoint prev_point=lines[0][0]; + + for (auto& line:lines){ + float joindist=prev_point.distance(line[0]); + if (joindist>SUBDIVIDE){ + //printf("ofxHelios: creating %i join points\n",(int)joindist/SUBDIVIDE); + } + for (float j=0;j<joindist;j+=SUBDIVIDE){ + float amt=j/joindist; + points.push_back(HeliosPoint( + (uint16_t)((prev_point.x*(1.0-amt))+(line[0].x*amt)+xoffs), + (uint16_t)((prev_point.y*(1.0-amt))+(line[0].y*amt)+xoffs), + 0,0,0,0)); //blank point + } + int i; + for (i=0;i<line.size();i++){ + points.push_back(HeliosPoint( + (uint16_t)(line[i].x+xoffs), + (uint16_t)(line[i].y+yoffs), + (uint8_t)(((line.getColourAt(i).r)*laserintensity)>>8), + (uint8_t)(((line.getColourAt(i).g)*laserintensity)>>8), + (uint8_t)(((line.getColourAt(i).b)*laserintensity)>>8), + (uint8_t)intensity + )); + } + for (int k=0;k<BLANK_NUM;k++){ + points.push_back(HeliosPoint( + (uint16_t)(line[line.size()-1].x+xoffs), + (uint16_t)(line[line.size()-1].y+yoffs), + 0,0,0,0)); //blank point + } + } - if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, points, line.size())){ - printf("ofxHelios: write error (%i,%i,%i,%i)\n",device, pps, HELIOS_FLAGS_DEFAULT, (int)line.size()); + if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, &points[0], points.size())){ + printf("ofxHelios: write error (%i,%i,%i,%i)\n",device, pps, HELIOS_FLAGS_DEFAULT, (int)points.size()); return -1; } + + return points.size(); } - return 0; + return -2; } diff --git a/ofxHelios/src/ofxHelios.h b/ofxHelios/src/ofxHelios.h index d873706..4dfe5ec 100644 --- a/ofxHelios/src/ofxHelios.h +++ b/ofxHelios/src/ofxHelios.h @@ -14,6 +14,8 @@ #include "colourPolyline.h" #define BUFFER_POINTS 2048 +#define SUBDIVIDE 10 +#define BLANK_NUM 10 #include <HeliosDac.h> @@ -59,9 +61,10 @@ public: return pps; } int draw(colourPolyline &line, int intensity=255); - int draw(ofPolyline &points,ofColor colour=ofColor(255,255,255),int intensity=255); - int draw(vector <ofPolyline> &points,ofColor colour=ofColor(255,255,255),int intensity=255); - + int draw(ofPolyline &line,ofColor colour=ofColor(255,255,255),int intensity=255); + int draw(vector <ofPolyline> &lines,ofColor colour=ofColor(255,255,255),int intensity=255); + int draw(vector <colourPolyline> &lines, int intensity=255); + void threadedFunction(); //isReady() |
