diff options
Diffstat (limited to 'ofxHelios/src/ofxHelios.cpp')
| -rw-r--r-- | ofxHelios/src/ofxHelios.cpp | 49 |
1 files changed, 42 insertions, 7 deletions
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 } + } |
