// add full fill and subtract them from normal fill polys void Layer::addFullPolygons(const vector<Poly> &newpolys, bool decor) { if (newpolys.size()==0) return; Clipping clipp; clipp.clear(); // full fill only where already normal fill clipp.addPolys(fillPolygons,subject); if (decor) clipp.addPolys(fullFillPolygons,subject); clipp.addPolys(newpolys,clip); clipp.setZ(Z); vector<Poly> inter = clipp.intersect(); vector<Poly> normals = clipp.subtractMerged(thickness/2.); if (decor) {// && LayerNo != 0) // no decor on base layers decorPolygons.insert(decorPolygons.end(), inter.begin(), inter.end()); Clipping clipp; clipp.addPolys(fullFillPolygons,subject); clipp.addPolys(inter,clip); clipp.setZ(Z); setFullFillPolygons(clipp.subtract()); } else { fullFillPolygons.insert(fullFillPolygons.end(),inter.begin(),inter.end()); } setNormalFillPolygons(normals); // mergeFullPolygons(false); // done separately }
// find polys in subjlayer that are not covered by shell of cliplayer vector<Poly> Model::GetUncoveredPolygons(const Layer * subjlayer, const Layer * cliplayer) { Clipping clipp; clipp.clear(); clipp.addPolys(subjlayer->GetFillPolygons(), subject); clipp.addPolys(subjlayer->GetFullFillPolygons(), subject); clipp.addPolys(subjlayer->GetBridgePolygons(), subject); clipp.addPolys(subjlayer->GetDecorPolygons(), subject); //clipp.addPolys(cliplayer->GetOuterShell(), clip); // have some overlap clipp.addPolys(cliplayer->GetInnerShell(), clip); // have some more overlap vector<Poly> uncovered = clipp.subtractMerged(); return uncovered; }
void Layer::mergeFullPolygons(bool bridge) { // if (bridge) { // // setBridgePolygons(Clipping::getMerged(bridgePolygons, thickness)); // // clipp.addPolys(bridgePolygons,clip); // } else { //subtract decor from full Clipping clipp; // clipp.addPolys(fullFillPolygons,subject); // clipp.addPolys(decorPolygons,clip); // setFullFillPolygons(clipp.subtract()); setFullFillPolygons(Clipping::getMerged(fullFillPolygons, thickness)); cleanup(fullFillPolygons, thickness/CLEANFACTOR); //subtract from normal fills clipp.clear(); cleanup(fillPolygons, thickness/CLEANFACTOR); clipp.addPolys(fillPolygons,subject); clipp.addPolys(fullFillPolygons,clip); clipp.addPolys(decorPolygons,clip); vector<Poly> normals = clipp.subtractMerged(); setNormalFillPolygons(normals); // } }