summaryrefslogtreecommitdiff
path: root/ofxHelios/src/ofxHelios.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ofxHelios/src/ofxHelios.cpp')
-rw-r--r--ofxHelios/src/ofxHelios.cpp86
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)
+ );
}
-
}