// // ofxHelios.cpp // // // Created by Tim Redfern Nov 2017 // // #include "ofxHelios.h" /* 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 &lines,ofColor colour,int intensity){ vector output; for (auto& line:lines){ output.push_back(colourPolyline(line,colour)); } return draw(output,intensity); } int ofxHelios::draw(ofPolyline &line,ofColor colour,int intensity){ colourPolyline col=colourPolyline(line,colour); return draw(col,intensity); } int ofxHelios::draw(colourPolyline &line, int intensity){ vector lines; lines.push_back(line); return draw(lines,intensity); } int ofxHelios::draw(vector &lines, int intensity){ //todo: move to a thread //todo: add a transform //POC 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? //assemble data vector points; for (auto& line:lines){ float dist=abs(prev_point.distance(line[0])); if (dist>SUBDIVIDE){ //draw blanking points if required (only between shapes) for (float j=0;jMAX_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+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+1]; prev_colour=line.getColourAt(i+1); } for (int k=0;k