void Layer::setFullFillPolygons(const vector<Poly> polys) { clearpolys(fullFillPolygons); fullFillPolygons = polys; for (uint i=0; i<fullFillPolygons.size();i++) fullFillPolygons[i].setZ(Z); }
void Layer::setBridgePolygons(const vector<Poly> polys) { clearpolys(bridgePolygons); bridgePolygons = polys; for (uint i=0; i<bridgePolygons.size();i++) bridgePolygons[i].setZ(Z); }
void Layer::setBridgePolygons(const vector<ExPoly> &expolys) { uint count = expolys.size(); // vector<Poly> polygroups; // vector<bool> done; done.resize(count); // for (uint i=0; i<count;i++) done[i] = false; // for (uint i=0; i<count;i++) { // if (!done[i]){ // vector<Poly> group; // group.push_back(polys[i]); // done[i] = true; // } // for (uint j=i+1; j<polys.size();j++){ // if (!done[j]){ // if (polys[.polyInside(polys[j]){ // done[j] = true; // g // } // } clearpolys(bridgePolygons); bridgePolygons = expolys; for (uint i=0; i<count; i++) { bridgePolygons[i].outer.setZ(Z); for (uint h = 0; h < bridgePolygons[i].holes.size(); h++) bridgePolygons[i].holes[h].setZ(Z); } }
void Layer::setNormalFillPolygons(const vector<Poly> &polys) { clearpolys(fillPolygons); fillPolygons = polys; for (uint i=0; i<fillPolygons.size();i++) fillPolygons[i].setZ(Z); }
void Layer::setSkirtPolygons(const vector<Poly> &poly) { clearpolys(skirtPolygons); skirtPolygons = poly; for (uint i=0; i<skirtPolygons.size(); i++) { skirtPolygons[i].cleanup(thickness); skirtPolygons[i].setZ(Z); } }
void Layer::setSupportPolygons(const vector<Poly> polys) { clearpolys(supportPolygons); supportPolygons = polys; for (uint i=0; i<supportPolygons.size(); i++) { supportPolygons[i].cleanup(thickness/4.); vector<Vector2d> minmax = supportPolygons[i].getMinMax(); Min.x = min(minmax[0].x,Min.x); Min.y = min(minmax[0].y,Min.y); Max.x = max(minmax[1].x,Max.x); Max.y = max(minmax[1].y,Max.y); } }
void Layer::MakeShells(uint shellcount, double extrudedWidth, double shelloffset, bool makeskirt, double infilloverlap) { double distance = 0.5 * extrudedWidth; double cleandist = min(extrudedWidth/4., thickness/3.); vector<Poly> shrinked = Clipping::getOffset(polygons,-distance-shelloffset); for (uint i = 0; i<shrinked.size(); i++) shrinked[i].cleanup(cleandist); //vector<Poly> shrinked = Clipping::getShrinkedCapped(polygons,distance); // outmost shells if (shellcount > 0) { if (skins>1) { // either skins for (uint i = 0; i<shrinked.size(); i++) { shrinked[i].setExtrusionFactor(1./skins); } skinPolygons = shrinked; } else { // or normal shell clearpolys(shellPolygons); shellPolygons.push_back(shrinked); } // inner shells distance = extrudedWidth; for (uint i = 1; i<shellcount; i++) // shrink from shell to shell { shrinked = Clipping::getOffset(shrinked,-distance); for (uint i = 0; i<shrinked.size(); i++) shrinked[i].cleanup(cleandist); //shrinked = Clipping::getShrinkedCapped(shrinked,distance); shellPolygons.push_back(shrinked); } } // the filling polygon fillPolygons = Clipping::getOffset(shrinked,-(1.-infilloverlap)*distance); for (uint i = 0; i<fillPolygons.size(); i++) fillPolygons[i].cleanup(cleandist); //fillPolygons = Clipping::getShrinkedCapped(shrinked,distance); //cerr << LayerNo << " > " << fillPolygons.size()<< endl; calcConvexHull(); if (makeskirt) { MakeSkirt(3*distance); // skirt distance = 3 * shell distance } //cerr << " .. made " << fillPolygons.size() << " offsetpolys " << endl; // for (uint i =0; i<shellPolygons.size(); i++) { // cout << "shell " << i << endl; // for (uint j =1; j<shellPolygons[i].size(); j++) { // shellPolygons[i][j].printinfo(); // } // } }
void Layer::Clear() { delete normalInfill;//->clear(); delete fullInfill;//->clear(); delete bridgeInfill;//->clear(); delete supportInfill;//->clear(); delete decorInfill;//->clear(); skinFullInfills.clear(); clearpolys(polygons); clearpolys(shellPolygons); clearpolys(fillPolygons); clearpolys(fullFillPolygons); clearpolys(bridgePolygons); clearpolys(decorPolygons); bridge_angles.clear(); clearpolys(supportPolygons); clearpolys(skinPolygons); clearpolys(skinFullFillPolygons); hullPolygon.clear(); skirtPolygon.clear(); }
void Layer::MakeSkirt(double distance, bool single) { clearpolys(skirtPolygons); vector<Poly> all; if (single) { // single skirt all.push_back(hullPolygon); all.insert(all.end(),supportPolygons.begin(),supportPolygons.end()); Poly hull = convexHull2D(all); vector<Poly> skp = Clipping::getOffset(hull, distance, jround); if (skp.size()>0){ skirtPolygons.push_back(skp.front()); skirtPolygons[0].setZ(Z); skirtPolygons[0].cleanup(thickness); } } else { // skirt for each shape skirtPolygons = Clipping::getOffset(*GetOuterShell(), distance, jround); } }
void Layer::setSupportPolygons(const vector<Poly> &polys) { clearpolys(supportPolygons); supportPolygons = polys; const double minarea = 10*thickness*thickness; for (int i = supportPolygons.size()-1; i >= 0; i--) { supportPolygons[i].cleanup(thickness/CLEANFACTOR); if (abs(Clipping::Area(supportPolygons[i])) < minarea) { supportPolygons.erase(supportPolygons.begin() + i); continue; } vector<Vector2d> minmax = supportPolygons[i].getMinMax(); Min.x() = min(minmax[0].x(),Min.x()); Min.y() = min(minmax[0].y(),Min.y()); Max.x() = max(minmax[1].x(),Max.x()); Max.y() = max(minmax[1].y(),Max.y()); } }
void clearpolys(vector< vector<Poly> > &polys){ for (uint i=0; i<polys.size();i++) clearpolys(polys[i]); polys.clear(); }
void Layer::MakeShells(const Settings &settings) { double extrudedWidth = settings.GetExtrudedMaterialWidth(thickness); double roundline_extrfactor = settings.RoundedLinewidthCorrection(extrudedWidth,thickness); double distance = 0.5 * extrudedWidth; double cleandist = min(distance/CLEANFACTOR, thickness/CLEANFACTOR); double shelloffset = settings.get_double("Slicing","ShellOffset"); uint shellcount = settings.get_integer("Slicing","ShellCount"); double infilloverlap = settings.get_double("Slicing","InfillOverlap"); // first shrink with global offset vector<Poly> shrinked = Clipping::getOffset(polygons, -2.0/M_PI*extrudedWidth-shelloffset); vector<Poly> thickPolygons; FindThinpolys(shrinked, extrudedWidth, thickPolygons, thinPolygons); shrinked = thickPolygons; for (uint i = 0; i<thinPolygons.size(); i++) thinPolygons[i].cleanup(cleandist); // // expand shrinked to get to the outer shell again // shrinked = Clipping::getOffset(shrinked, 2*distance); for (uint i = 0; i<shrinked.size(); i++) shrinked[i].cleanup(cleandist); //vector<Poly> shrinked = Clipping::getShrinkedCapped(polygons,distance); // outmost shells if (shellcount > 0) { if (skins>1) { // either skins for (uint i = 0; i<shrinked.size(); i++) { shrinked[i].setExtrusionFactor(1./skins*roundline_extrfactor); } skinPolygons = shrinked; } else { // or normal shell clearpolys(shellPolygons); for (uint i = 0; i<shrinked.size(); i++) { shrinked[i].setExtrusionFactor(roundline_extrfactor); } shellPolygons.push_back(shrinked); } // inner shells for (uint i = 1; i<shellcount; i++) // shrink from shell to shell { shrinked = Clipping::getOffset(shrinked,-extrudedWidth); vector<Poly> thinpolys; FindThinpolys(shrinked, extrudedWidth, thickPolygons, thinpolys); shrinked = thickPolygons; thinPolygons.insert(thinPolygons.end(), thinpolys.begin(),thinpolys.end()); for (uint j = 0; j<shrinked.size(); j++) shrinked[j].cleanup(cleandist); //shrinked = Clipping::getShrinkedCapped(shrinked,extrudedWidth); shellPolygons.push_back(shrinked); } } // the filling polygon if (settings.get_boolean("Slicing","DoInfill")) { fillPolygons = Clipping::getOffset(shrinked,-(1.-infilloverlap)*extrudedWidth); for (uint i = 0; i<fillPolygons.size(); i++) fillPolygons[i].cleanup(cleandist); //fillPolygons = Clipping::getShrinkedCapped(shrinked,extrudedWidth); //cerr << LayerNo << " > " << fillPolygons.size()<< endl; } calcConvexHull(); //cerr << " .. made " << fillPolygons.size() << " offsetpolys " << endl; // for (uint i =0; i<shellPolygons.size(); i++) { // cout << "shell " << i << endl; // for (uint j =1; j<shellPolygons[i].size(); j++) { // shellPolygons[i][j].printinfo(); // } // } }
void Layer::Clear() { delete normalInfill; normalInfill = NULL; delete fullInfill; fullInfill = NULL; delete skirtInfill; skirtInfill = NULL; delete supportInfill; supportInfill = NULL; delete decorInfill; decorInfill = NULL; delete thinInfill; thinInfill = NULL; skinFullInfills.clear(); clearpolys(polygons); clearpolys(shellPolygons); clearpolys(fillPolygons); clearpolys(thinPolygons); clearpolys(fullFillPolygons); clearpolys(bridgePolygons); clearpolys(bridgePillars); bridge_angles.clear(); bridgeInfills.clear(); clearpolys(decorPolygons); clearpolys(supportPolygons); clearpolys(toSupportPolygons); clearpolys(skinPolygons); clearpolys(skinFullFillPolygons); hullPolygon.clear(); clearpolys(skirtPolygons); }