diff options
Diffstat (limited to 'ofxHelios/src/ofxHelios.cpp')
| -rw-r--r-- | ofxHelios/src/ofxHelios.cpp | 64 |
1 files changed, 47 insertions, 17 deletions
diff --git a/ofxHelios/src/ofxHelios.cpp b/ofxHelios/src/ofxHelios.cpp index d05e062..7c934b5 100644 --- a/ofxHelios/src/ofxHelios.cpp +++ b/ofxHelios/src/ofxHelios.cpp @@ -19,18 +19,24 @@ put in dwell points */ -int ofxHelios::draw(vector <ofPolyline> &points,ofColor colour,int intensity){ +int ofxHelios::draw(vector <ofPolyline> &lines,ofColor colour,int intensity){ return 0; } int ofxHelios::draw(ofPolyline &line,ofColor colour,int intensity){ colourPolyline col=colourPolyline(line,colour); - return draw(col); + return draw(col,intensity); } int ofxHelios::draw(colourPolyline &line, int intensity){ + vector <colourPolyline> lines; + lines.push_back(line); + return draw(lines,intensity); +} + +int ofxHelios::draw(vector <colourPolyline> &lines, int intensity){ //todo: move to a thread //todo: add a transform //POC @@ -42,28 +48,52 @@ int ofxHelios::draw(colourPolyline &line, int intensity){ while (!dac.GetStatus(device)); //timeout for this? //assemble data - HeliosPoint points[line.size()]; - - for (int i=0;i<line.size();i++){ - points[i]=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 - }); + vector <HeliosPoint> points; + + ofPoint prev_point=lines[0][0]; + + for (auto& line:lines){ + float joindist=prev_point.distance(line[0]); + if (joindist>SUBDIVIDE){ + //printf("ofxHelios: creating %i join points\n",(int)joindist/SUBDIVIDE); + } + for (float j=0;j<joindist;j+=SUBDIVIDE){ + float amt=j/joindist; + 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,0)); //blank point + } + int i; + for (i=0;i<line.size();i++){ + 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 + )); + } + 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), + 0,0,0,0)); //blank point + } + } - if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, points, line.size())){ - printf("ofxHelios: write error (%i,%i,%i,%i)\n",device, pps, HELIOS_FLAGS_DEFAULT, (int)line.size()); + if (HELIOS_ERROR==dac.WriteFrame(device, pps, HELIOS_FLAGS_DEFAULT, &points[0], points.size())){ + printf("ofxHelios: write error (%i,%i,%i,%i)\n",device, pps, HELIOS_FLAGS_DEFAULT, (int)points.size()); return -1; } + + return points.size(); } - return 0; + return -2; } |
