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.cpp49
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
}
+
}