diff options
Diffstat (limited to 'ofxHelios/src')
| -rw-r--r-- | ofxHelios/src/colourPolyline.h | 2 | ||||
| -rw-r--r-- | ofxHelios/src/ofxHelios.cpp | 49 | ||||
| -rw-r--r-- | ofxHelios/src/ofxHelios.h | 9 |
3 files changed, 48 insertions, 12 deletions
diff --git a/ofxHelios/src/colourPolyline.h b/ofxHelios/src/colourPolyline.h index 93cefee..b6bf749 100644 --- a/ofxHelios/src/colourPolyline.h +++ b/ofxHelios/src/colourPolyline.h @@ -7,7 +7,7 @@ class colourPolyline: public ofPolyline { colourPolyline(){} - colourPolyline(const ofPolyline line,const ofColor colour){ + colourPolyline(const ofPolyline line,const ofColor colour=ofColor(255,255,255)){ for (auto& point:line){ addVertex(point, colour); } diff --git a/ofxHelios/src/ofxHelios.cpp b/ofxHelios/src/ofxHelios.cpp index 7c934b5..0eb8e8a 100644 --- a/ofxHelios/src/ofxHelios.cpp +++ b/ofxHelios/src/ofxHelios.cpp @@ -51,21 +51,42 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){ vector <HeliosPoint> points; ofPoint prev_point=lines[0][0]; + ofColor prev_colour=lines[0].getColourAt(0); for (auto& line:lines){ - float joindist=prev_point.distance(line[0]); - if (joindist>SUBDIVIDE){ + float dist=prev_point.distance(line[0]); + if (dist>SUBDIVIDE){ //printf("ofxHelios: creating %i join points\n",(int)joindist/SUBDIVIDE); + //dac.SetShutter(device,false); //doesn't do anything } - for (float j=0;j<joindist;j+=SUBDIVIDE){ - float amt=j/joindist; + for (float j=0;j<dist;j+=SUBDIVIDE){ + float amt=j/dist; 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,255)); //blank point + } + //dac.SetShutter(device,true); //doesn't do anything + for (int k=0;k<BLANK_NUM;k++){ + points.push_back(HeliosPoint( + (uint16_t)(line[0].x+xoffs), + (uint16_t)(line[0].y+yoffs), 0,0,0,0)); //blank point } int i; - for (i=0;i<line.size();i++){ + for (i=0;i<line.size()-1;i++){ + float dist=prev_point.distance(line[i]); + for (float j=0;j<dist;j+=SUBDIVIDE){ + float amt=j/dist; + points.push_back(HeliosPoint( + (uint16_t)((prev_point.x*(1.0-amt))+(line[i].x*amt)+xoffs), + (uint16_t)((prev_point.y*(1.0-amt))+(line[i].y*amt)+xoffs), + (uint8_t)((((prev_colour.r*(1.0-amt))+(line.getColourAt(i).r*amt))*laserintensity)/255.0), + (uint8_t)((((prev_colour.g*(1.0-amt))+(line.getColourAt(i).g*amt))*laserintensity)/255.0), + (uint8_t)((((prev_colour.b*(1.0-amt))+(line.getColourAt(i).b*amt))*laserintensity)/255.0), + (uint8_t)intensity) + ); + } points.push_back(HeliosPoint( (uint16_t)(line[i].x+xoffs), (uint16_t)(line[i].y+yoffs), @@ -74,13 +95,27 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){ (uint8_t)(((line.getColourAt(i).b)*laserintensity)>>8), (uint8_t)intensity )); + float angle=line.getDegreesAtIndex(i); + if (angle>MAX_ANGLE){ + for (int l=0;l<((angle/180)*BLANK_NUM);l++){ + points.push_back(HeliosPoint( + (uint16_t)(line[i].x+xoffs), + (uint16_t)(line[i].y+yoffs), + 0,0,0,0)); //blank point + } + } + prev_point=line[i]; + prev_colour=line.getColourAt(i); } + + //dac.SetShutter(device,false); //doesn't do anything 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), + (uint16_t)(prev_point.x+xoffs), + (uint16_t)(prev_point.y+yoffs), 0,0,0,0)); //blank point } + } diff --git a/ofxHelios/src/ofxHelios.h b/ofxHelios/src/ofxHelios.h index 4dfe5ec..80044c3 100644 --- a/ofxHelios/src/ofxHelios.h +++ b/ofxHelios/src/ofxHelios.h @@ -4,7 +4,8 @@ // // Created by Tim Redfern Nov 2017 // -// it would be good if ofxHelios could inherit the current transform +// it would be good if ofxHelios could inherit the current transform +// #ifndef ofxHelios_h #define ofxHelios_h @@ -13,9 +14,9 @@ #include "ofMain.h" #include "colourPolyline.h" -#define BUFFER_POINTS 2048 -#define SUBDIVIDE 10 -#define BLANK_NUM 10 +#define SUBDIVIDE 20 +#define BLANK_NUM 20 +#define MAX_ANGLE 20.0f #include <HeliosDac.h> |
