本文整理汇总了C++中clipperlib::Clipper::AddPolygons方法的典型用法代码示例。如果您正苦于以下问题:C++ Clipper::AddPolygons方法的具体用法?C++ Clipper::AddPolygons怎么用?C++ Clipper::AddPolygons使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类clipperlib::Clipper
的用法示例。
在下文中一共展示了Clipper::AddPolygons方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _clipper_do
void _clipper_do(const ClipperLib::ClipType clipType, Slic3r::Polygons &subject,
Slic3r::Polygons &clip, T &retval, const ClipperLib::PolyFillType fillType, const bool safety_offset_)
{
// read input
ClipperLib::Polygons* input_subject = new ClipperLib::Polygons();
ClipperLib::Polygons* input_clip = new ClipperLib::Polygons();
Slic3rPolygons_to_ClipperPolygons(subject, *input_subject);
Slic3rPolygons_to_ClipperPolygons(clip, *input_clip);
// perform safety offset
if (safety_offset_) {
if (clipType == ClipperLib::ctUnion) {
safety_offset(input_subject);
} else {
safety_offset(input_clip);
}
}
// init Clipper
ClipperLib::Clipper clipper;
clipper.Clear();
// add polygons
clipper.AddPolygons(*input_subject, ClipperLib::ptSubject);
delete input_subject;
clipper.AddPolygons(*input_clip, ClipperLib::ptClip);
delete input_clip;
// perform operation
clipper.Execute(clipType, retval, fillType, fillType);
}
示例2: _processWalkableObstacleRegions
ClipperLib::Polygons NavMesh::_processWalkableObstacleRegions(const ClipperLib::Polygons& walkable, const ClipperLib::Polygons& obstacles)
{
ClipperLib::Clipper clipper;
ClipperLib::Polygons solution;
clipper.AddPolygons(walkable, ClipperLib::ptSubject );
clipper.AddPolygons(obstacles, ClipperLib::ptClip);
clipper.Execute(ClipperLib::ctDifference, solution, ClipperLib::PolyFillType::pftNonZero, ClipperLib::PolyFillType::pftNonZero );
return solution;
}
示例3: addInfill
// clip infill pattern polys against polys
void Infill::addInfill(double z, const vector<Poly> polys,
const ClipperLib::Polygons patterncpolys,
double offsetDistance)
{
ClipperLib::Polygons cpolys;
// ClipperLib::OffsetPolygons(Clipping::getClipperPolygons(polys), cpolys, 100,
// ClipperLib::jtMiter,1);
// else
cpolys = Clipping::getClipperPolygons(polys);
ClipperLib::Clipper clpr;
clpr.AddPolygons(patterncpolys,ClipperLib::ptSubject);
clpr.AddPolygons(cpolys,ClipperLib::ptClip);
ClipperLib::Polygons result;
clpr.Execute(ClipperLib::ctIntersection, result,
ClipperLib::pftEvenOdd, ClipperLib::pftNonZero);
if (type==PolyInfill) { // reversal from evenodd clipping
for (uint i = 0; i<result.size(); i+=2)
std::reverse(result[i].begin(),result[i].end());
}
addInfillPolys(Clipping::getPolys(result, z, extrusionfactor));
}
示例4:
EaglePolygon::EaglePolygon(QPolygonF _vertices, qreal _width, int _layer, qreal _spacing) {
width = _width; layer = _layer; spacing = _spacing;
sourcePoly.resize(_vertices.count());
for (int i = 0; i < _vertices.count(); i++) {
ClipperLib::long64 x = (ClipperLib::long64)(_vertices.at(i).x()*RES);
ClipperLib::long64 y = (ClipperLib::long64)(_vertices.at(i).y()*RES);
sourcePoly[0].push_back(ClipperLib::IntPoint(x,y));
}
ClipperLib::Clipper c;
c.AddPolygons(sourcePoly, ClipperLib::ptSubject);
c.Execute(ClipperLib::ctUnion,sourcePoly); // only makes sure polys orientation is correct
ClipperLib::OffsetPolygons(sourcePoly,buffedPoly, width*RES/2, ClipperLib::jtRound); // offset
for (unsigned int i = 0; i < buffedPoly[0].size(); i++) {
vertices.append(QPointF(buffedPoly[0].at(i).X/RES, buffedPoly[0].at(i).Y/RES));
}
}
示例5: PolyTreeToExPolygons
void
ClipperPolygons_to_Slic3rExPolygons(const ClipperLib::Polygons &input, Slic3r::ExPolygons &output)
{
// init Clipper
ClipperLib::Clipper clipper;
clipper.Clear();
// perform union
clipper.AddPolygons(input, ClipperLib::ptSubject);
ClipperLib::PolyTree* polytree = new ClipperLib::PolyTree();
clipper.Execute(ClipperLib::ctUnion, *polytree, ClipperLib::pftEvenOdd, ClipperLib::pftEvenOdd); // offset results work with both EvenOdd and NonZero
// write to ExPolygons object
output.clear();
PolyTreeToExPolygons(*polytree, output);
delete polytree;
}
示例6: processFile
//.........这里部分代码省略.........
int fillAngle = 45;
if (layerNr & 1) fillAngle += 90;
//int sparseSteps[1] = {config.extrusionWidth};
//generateConcentricInfill(part->skinOutline, fillPolygons, sparseSteps, 1);
generateLineInfill(part->skinOutline, fillPolygons, config.extrusionWidth, config.extrusionWidth, config.infillOverlap, (part->bridgeAngle > -1) ? part->bridgeAngle : fillAngle);
//int sparseSteps[2] = {config.extrusionWidth*5, config.extrusionWidth * 0.8};
//generateConcentricInfill(part->sparseOutline, fillPolygons, sparseSteps, 2);
if (config.sparseInfillLineDistance > 0)
{
if (config.sparseInfillLineDistance > config.extrusionWidth * 4)
{
generateLineInfill(part->sparseOutline, fillPolygons, config.extrusionWidth, config.sparseInfillLineDistance * 2, config.infillOverlap, 45);
generateLineInfill(part->sparseOutline, fillPolygons, config.extrusionWidth, config.sparseInfillLineDistance * 2, config.infillOverlap, 45 + 90);
}
else
{
generateLineInfill(part->sparseOutline, fillPolygons, config.extrusionWidth, config.sparseInfillLineDistance, config.infillOverlap, fillAngle);
}
}
gcodeLayer.addPolygonsByOptimizer(fillPolygons, &fillConfig);
//After a layer part, make sure the nozzle is inside the comb boundary, so we do not retract on the perimeter.
gcodeLayer.moveInsideCombBoundary();
}
gcodeLayer.setCombBoundary(NULL);
}
if (config.supportAngle > -1)
{
if (config.supportExtruder > -1)
gcodeLayer.setExtruder(config.supportExtruder);
SupportPolyGenerator supportGenerator(storage.support, z, config.supportAngle, config.supportEverywhere > 0, config.supportXYDistance, config.supportZDistance);
ClipperLib::Clipper supportClipper;
supportClipper.AddPolygons(supportGenerator.polygons, ClipperLib::ptSubject);
for(unsigned int volumeCnt = 0; volumeCnt < storage.volumes.size(); volumeCnt++)
{
SliceLayer* layer = &storage.volumes[volumeIdx].layers[layerNr];
Polygons polys;
for(unsigned int n=0; n<layer->parts.size(); n++)
for(unsigned int m=0; m<layer->parts[n].outline.size(); m++)
polys.push_back(layer->parts[n].outline[m]);
ClipperLib::OffsetPolygons(polys, polys, config.supportXYDistance, ClipperLib::jtSquare, 2, false);
supportClipper.AddPolygons(polys, ClipperLib::ptClip);
}
supportClipper.Execute(ClipperLib::ctDifference, supportGenerator.polygons);
Polygons supportLines;
if (config.supportLineDistance > 0)
{
if (config.supportLineDistance > config.extrusionWidth * 4)
{
generateLineInfill(supportGenerator.polygons, supportLines, config.extrusionWidth, config.supportLineDistance*2, config.infillOverlap, 0);
generateLineInfill(supportGenerator.polygons, supportLines, config.extrusionWidth, config.supportLineDistance*2, config.infillOverlap, 90);
}else{
generateLineInfill(supportGenerator.polygons, supportLines, config.extrusionWidth, config.supportLineDistance, config.infillOverlap, (layerNr & 1) ? 0 : 90);
}
}
gcodeLayer.addPolygonsByOptimizer(supportGenerator.polygons, &supportConfig);
gcodeLayer.addPolygonsByOptimizer(supportLines, &supportConfig);
}
//Finish the layer by applying speed corrections for minimal layer times and slowdown for the initial layer.
if (int(layerNr) < config.initialSpeedupLayers)
{
int n = config.initialSpeedupLayers;