From beaeeb0a47d1e4a0b62264263dd319dc49d6a2f9 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Wed, 19 Apr 2023 09:46:58 +0100 Subject: add vectorplugins unit --- nextus/src/vectorPlugin.cpp | 192 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 nextus/src/vectorPlugin.cpp (limited to 'nextus/src/vectorPlugin.cpp') diff --git a/nextus/src/vectorPlugin.cpp b/nextus/src/vectorPlugin.cpp new file mode 100644 index 0000000..03b7eaa --- /dev/null +++ b/nextus/src/vectorPlugin.cpp @@ -0,0 +1,192 @@ +#include "vectorPlugin.h" + +void svgPanel::load(string filename){ + + ofxSVG svg; + svg.load(filename); + + //normalise the SVG paths to a square format + + float dimension=max(svg.getWidth(),svg.getHeight()); + + glm::vec2 src[]={ + glm::vec2(0,0), + glm::vec2(dimension,0), + glm::vec2(dimension,dimension), + glm::vec2(0,dimension) + }; + + glm::vec2 dst[]={ //PONK coords + glm::vec2(-1,-1), + glm::vec2(1,-1), + glm::vec2(1,1), + glm::vec2(-1,1) + }; + + ofMatrix4x4 xform=lineTransformer::getPerspectiveTransformMatrix(src,dst); + + vector imagepaths= svg.getPaths(); + + std::stringstream strm; + + if (imagepaths.size()){ + segmenters.clear(); + //shape_selection_durations.clear(); + for (auto& path:imagepaths){ + path.setPolyWindingMode(OF_POLY_WINDING_ODD); + + vector outlines= path.getOutline(); + for (auto& outline:outlines){ + //strm << outline.size() << "->"; + //outline.simplify(contour_simplify); //?necessary + //strm << outline.size() << " "; + ofPolyline xformed=lineTransformer::polyLineTransform(xform,outline); + ofColor c1=path.getStrokeColor(); + ofColor colour=path.getFillColor(); + if (colour.r==colour.g&&colour.g==colour.b){ + colour=c1; + } + + segmenters.push_back( + colourLineSegmenter( + xformed, + path.getStrokeColor() + ) + ); + //shape_selection_durations.push_back(0.0f); + } + + //strm << " , "; + } + + //std::stringstream strom; + + //shape_selection.clear(); + //while (shape_selection.size()<(segmenters.size()*shapes_amount)){ + // int selection=(int)ofRandom(0,segmenters.size()); + // shape_selection.insert(selection); + //} + //for (auto s:shape_selection){ + // float spawn=(ofRandom(0,(float)shapes_duration)); + // shape_selection_durations[s]=spawn; + // strom << s << ":"<0.0f){ + shape_selection_durations[i]=shape_selection_durations[i]-timedelta; + } + } + + shape_selection.clear(); + + for (int i=0;i0.0f){ + shape_selection.insert(i); + } + } + std::stringstream strom; + for (auto& s:shape_selection){ + strom << s <<":"< svgPanel::getAllLines(){ + vector output; + for (auto& shape:segmenters){ + output.push_back(shape.getPoly()); + } + return output; +} + +vector svgPanel::getLines(){ + vector output; + return output; + //if (!use_onset||onset_framegetSegments(segmenter_number,segmenter_length,phase); + for (auto segment=segments.begin();segment!=segments.end();segment++){ + //output.push_back(colourPolyline(*segment,ofColor(laser_R,laser_G,laser_B))); + output.push_back(*segment); + } + } + else { + //output.push_back(colourPolyline(shape->getPoly(),ofColor(laser_R,laser_G,laser_B))); + output.push_back(shape->getPoly()); + } + } + } + /* + this should happen at output stage? + + if (contour_useColour){ + vector newPolys; + for (auto p: output){ + newPolys.push_back(colourPolyline((ofPolyline)p,ofColor(laser_R,laser_G,laser_B))) ; + } + output=newPolys; + } + */ + //} + +} \ No newline at end of file -- cgit v1.2.3