summaryrefslogtreecommitdiff
path: root/ofxHelios/src
diff options
context:
space:
mode:
authorTim Redfern <tim@getdrop.com>2018-02-04 03:53:59 +0000
committerTim Redfern <tim@getdrop.com>2018-02-04 03:53:59 +0000
commit60e218550dd4f584da2f6f74ffc755f5f34c20a7 (patch)
tree170421cbaa6047a8e57ecd3a176fe8b91807e50f /ofxHelios/src
parent25dfa55d4574ad70f62b2c536b024741a4a37b0b (diff)
lorenzo show
Diffstat (limited to 'ofxHelios/src')
-rw-r--r--ofxHelios/src/colourPolyline.cpp2
-rw-r--r--ofxHelios/src/colourPolyline.h2
-rw-r--r--ofxHelios/src/ofxHelios.cpp14
-rw-r--r--ofxHelios/src/ofxHelios.h27
4 files changed, 32 insertions, 13 deletions
diff --git a/ofxHelios/src/colourPolyline.cpp b/ofxHelios/src/colourPolyline.cpp
index 24b1e00..66b63d5 100644
--- a/ofxHelios/src/colourPolyline.cpp
+++ b/ofxHelios/src/colourPolyline.cpp
@@ -24,7 +24,7 @@ void colourPolyline::addVertex( const ofPoint& p , const ofColor& c){
-ofColor colourPolyline::getColourAt(int i){
+const ofColor colourPolyline::getColourAt(const int i){
return pointColours[i];
}
diff --git a/ofxHelios/src/colourPolyline.h b/ofxHelios/src/colourPolyline.h
index b6bf749..29f9951 100644
--- a/ofxHelios/src/colourPolyline.h
+++ b/ofxHelios/src/colourPolyline.h
@@ -30,7 +30,7 @@ class colourPolyline: public ofPolyline {
void draw();
- ofColor getColourAt(int i);
+ const ofColor getColourAt(const int i);
private:
diff --git a/ofxHelios/src/ofxHelios.cpp b/ofxHelios/src/ofxHelios.cpp
index d5bf812..9521ec2 100644
--- a/ofxHelios/src/ofxHelios.cpp
+++ b/ofxHelios/src/ofxHelios.cpp
@@ -17,7 +17,7 @@ we see curved on both edges betwen shapes, but not on corners
int ofxHelios::draw(vector <ofPolyline> &lines,ofColor colour,int intensity){
vector <colourPolyline> output;
for (auto& line:lines){
- output.push_back(line);
+ output.push_back(colourPolyline(line,colour));
}
return draw(output,intensity);
}
@@ -40,8 +40,8 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){
//todo: add a transform
//POC
- int xoffs=0x800-(ofGetWidth()/2);
- int yoffs=0x800-(ofGetHeight()/2);
+ int xoffs=output_centre.x-(ofGetWidth()/2);
+ int yoffs=output_centre.y-(ofGetHeight()/2);
if (device!=OFXHELIOS_NODEVICE){
while (!dac.GetStatus(device)); //timeout for this?
@@ -50,6 +50,7 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){
vector <HeliosPoint> points;
for (auto& line:lines){
+
float dist=abs(prev_point.distance(line[0]));
if (dist>SUBDIVIDE){
//draw blanking points if required (only between shapes)
@@ -113,7 +114,12 @@ int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){
}
- if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, &points[0], points.size())){
+ for (auto& p:points){ //hopefully avoid problems with excessive scale
+ p.x=min((uint16_t)0xfff,p.x);
+ p.y=min((uint16_t)0xfff,p.y);
+ }
+
+ if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, &points[0], min(HELIOS_MAX_POINTS,(int)points.size()))){
printf("ofxHelios: write error (%i,%i,%i,%i)\n",device, pps, HELIOS_FLAGS_DEFAULT, (int)points.size());
return -1;
}
diff --git a/ofxHelios/src/ofxHelios.h b/ofxHelios/src/ofxHelios.h
index e55e99d..280906f 100644
--- a/ofxHelios/src/ofxHelios.h
+++ b/ofxHelios/src/ofxHelios.h
@@ -14,8 +14,8 @@
#include "ofMain.h"
#include "colourPolyline.h"
-#define SUBDIVIDE 20
-#define BLANK_NUM 4
+#define SUBDIVIDE 15
+#define BLANK_NUM 8
#define MAX_ANGLE 15.0f
#include <HeliosDac.h>
@@ -43,7 +43,8 @@ public:
pps=_pps;
//dac.SetShutter(device,true);
}
- prev_point=ofPoint(0x7ff,0x7ff);
+ output_centre=ofPoint(0x7ff,0x7ff);
+ prev_point=output_centre;
}
~ofxHelios()
@@ -51,13 +52,24 @@ public:
//stopThread();
}
+ void set_centre(ofPoint c){
+ ofPoint cp=c+ofPoint(0x7ff,0x7ff);
+ if (cp!=output_centre){
+ output_centre=cp;
+ ofLogNotice() << "ofxHelios v "<<OFXHELIOS_VERSION<<": set output centre to "<<output_centre.x<<","<<output_centre.y;
+ }
+ }
void set_pts(int n){
- pps=n;
- ofLogNotice() << "ofxHelios v "<<OFXHELIOS_VERSION<<": set point output to "<<pps;
+ if (n!=pps){
+ pps=n;
+ ofLogNotice() << "ofxHelios v "<<OFXHELIOS_VERSION<<": set point output to "<<pps;
+ }
}
void set_intensity(int i){
- laserintensity=i;
- ofLogNotice() << "ofxHelios v "<<OFXHELIOS_VERSION<<": set intensity to "<<laserintensity;
+ if (i!=laserintensity){
+ laserintensity=i;
+ ofLogNotice() << "ofxHelios v "<<OFXHELIOS_VERSION<<": set intensity to "<<laserintensity;
+ }
}
int get_pts(){
return pps;
@@ -78,6 +90,7 @@ public:
int pps;
int laserintensity;
+ ofPoint output_centre;
ofPoint prev_point;
ofColor prev_colour;