Ejemplo n.º 1
0
void Layer::setFullFillPolygons(const vector<Poly>  polys)
{
  clearpolys(fullFillPolygons);
  fullFillPolygons = polys;
  for (uint i=0; i<fullFillPolygons.size();i++)
    fullFillPolygons[i].setZ(Z);
}
Ejemplo n.º 2
0
void Layer::setBridgePolygons(const vector<Poly>  polys)
{
  clearpolys(bridgePolygons);
  bridgePolygons = polys;
  for (uint i=0; i<bridgePolygons.size();i++)
    bridgePolygons[i].setZ(Z);
}
Ejemplo n.º 3
0
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);
  }
}
Ejemplo n.º 4
0
void Layer::setNormalFillPolygons(const vector<Poly> &polys)
{
  clearpolys(fillPolygons);
  fillPolygons = polys;
  for (uint i=0; i<fillPolygons.size();i++)
    fillPolygons[i].setZ(Z);
}
Ejemplo n.º 5
0
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);
  }
}
Ejemplo n.º 6
0
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);
  }
}
Ejemplo n.º 7
0
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();
  //   }
  // }
}
Ejemplo n.º 8
0
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();
}
Ejemplo n.º 9
0
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);
  }
}
Ejemplo n.º 10
0
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());
  }
}
Ejemplo n.º 11
0
void clearpolys(vector< vector<Poly> > &polys){
  for (uint i=0; i<polys.size();i++)
    clearpolys(polys[i]);
  polys.clear();
}
Ejemplo n.º 12
0
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();
  //   }
  // }
}
Ejemplo n.º 13
0
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);
}