diff options
| author | Tim Redfern <tim@getdrop.com> | 2018-01-31 01:30:24 +0000 |
|---|---|---|
| committer | Tim Redfern <tim@getdrop.com> | 2018-01-31 01:30:24 +0000 |
| commit | 2b6c19dd192b07fe5980f667e26015da51c3106d (patch) | |
| tree | 0677f035268f251ba15a46ba36548ac073ac8c15 /ofxHelios/src/ofxHelios.cpp | |
| parent | b7f80bdefd3c639307043787860ff1cbd01f4573 (diff) | |
much progress
Diffstat (limited to 'ofxHelios/src/ofxHelios.cpp')
| -rw-r--r-- | ofxHelios/src/ofxHelios.cpp | 86 |
1 files changed, 40 insertions, 46 deletions
diff --git a/ofxHelios/src/ofxHelios.cpp b/ofxHelios/src/ofxHelios.cpp index 0eb8e8a..d5bf812 100644 --- a/ofxHelios/src/ofxHelios.cpp +++ b/ofxHelios/src/ofxHelios.cpp @@ -9,18 +9,17 @@ #include "ofxHelios.h" /* -draw a colourpolyline - -put in mid points - -draw a vector of lines - -put in dwell points - +rounding +how long does a laser take to turn off? +we see curved on both edges betwen shapes, but not on corners */ int ofxHelios::draw(vector <ofPolyline> &lines,ofColor colour,int intensity){ - return 0; + vector <colourPolyline> output; + for (auto& line:lines){ + output.push_back(line); + } + return draw(output,intensity); } int ofxHelios::draw(ofPolyline &line,ofColor colour,int intensity){ @@ -50,23 +49,18 @@ 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 dist=prev_point.distance(line[0]); + float dist=abs(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<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 + //draw blanking points if required (only between shapes) + 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)+yoffs)), + 0,0,0,0)); //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), @@ -75,47 +69,47 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){ } int i; for (i=0;i<line.size()-1;i++){ - float dist=prev_point.distance(line[i]); + float dist=abs(ofPoint(line[i]).distance(ofPoint(line[i+1]))); for (float j=0;j<dist;j+=SUBDIVIDE){ + //draw way points 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), + (uint16_t)((line[i].x*(1.0-amt))+(line[i+1].x*amt)+xoffs), + (uint16_t)((line[i].y*(1.0-amt))+(line[i+1].y*amt)+yoffs), + (uint8_t)((((line.getColourAt(i).r*(1.0-amt))+(line.getColourAt(i+1).r*amt))*laserintensity)/255.0), + (uint8_t)((((line.getColourAt(i).g*(1.0-amt))+(line.getColourAt(i+1).g*amt))*laserintensity)/255.0), + (uint8_t)((((line.getColourAt(i).b*(1.0-amt))+(line.getColourAt(i+1).b*amt))*laserintensity)/255.0), (uint8_t)intensity) ); } - 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 - )); float angle=line.getDegreesAtIndex(i); - if (angle>MAX_ANGLE){ + if (angle>MAX_ANGLE||(i==line.size()-2)){ + //dwell points to wait on a corner for laser to catch up 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 + (uint16_t)(line[i+1].x+xoffs), + (uint16_t)(line[i+1].y+yoffs), + (uint8_t)(line.getColourAt(i+1).r*laserintensity/255.0), + (uint8_t)(line.getColourAt(i+1).g*laserintensity/255.0), + (uint8_t)(line.getColourAt(i+1).b*laserintensity/255.0), + (uint8_t)intensity) + ); } } - prev_point=line[i]; - prev_colour=line.getColourAt(i); + prev_point=line[i+1]; + prev_colour=line.getColourAt(i+1); } - //dac.SetShutter(device,false); //doesn't do anything for (int k=0;k<BLANK_NUM;k++){ points.push_back(HeliosPoint( (uint16_t)(prev_point.x+xoffs), (uint16_t)(prev_point.y+yoffs), - 0,0,0,0)); //blank point + (uint8_t)((prev_colour.r*laserintensity)/255.0), + (uint8_t)((prev_colour.g*laserintensity)/255.0), + (uint8_t)((prev_colour.b*laserintensity)/255.0), + (uint8_t)intensity) + ); } - } |
