summaryrefslogtreecommitdiff
path: root/ofxHelios/src
diff options
context:
space:
mode:
Diffstat (limited to 'ofxHelios/src')
-rw-r--r--ofxHelios/src/colourPolyline.h2
-rw-r--r--ofxHelios/src/ofxHelios.cpp49
-rw-r--r--ofxHelios/src/ofxHelios.h9
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>