本文整理汇总了C++中Poly::getVertexCircular方法的典型用法代码示例。如果您正苦于以下问题:C++ Poly::getVertexCircular方法的具体用法?C++ Poly::getVertexCircular怎么用?C++ Poly::getVertexCircular使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Poly
的用法示例。
在下文中一共展示了Poly::getVertexCircular方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addInfillPoly
void Infill::addInfillPoly(Poly p)
{
// Poly *zigzagpoly = NULL;
switch (type) {
// case ZigzagInfill: // take parallel lines and connect ends
// zigzagpoly = new Poly(p.getZ(),extrusionfactor);
case BridgeInfill:
case ParallelInfill:
{ // make lines instead of closed polygons
Vector2d l,rotl;
double sina = sin(-angle);
double cosa = cos(-angle);
// use the lines that have the angle of this Infill
for (uint i=0; i < p.size() ; i+=1 )
{
l = (p.getVertexCircular(i+1) - p.getVertexCircular(i));
// rotate with neg. infill angle and see whether it's 90° as infill lines
rotl = Vector2d(l.x*cosa-l.y*sina,
l.y*cosa+l.x*sina);
if (abs(rotl.x) < 0.1 && abs(rotl.y) > 0.1)
{
// if (zigzagpoly) {
// zigzagpoly->addVertex(p.getVertexCircular(i+i%2));
// zigzagpoly->addVertex(p.getVertexCircular(i+1+i%2));
// } else
{
Poly newpoly(p.getZ(), extrusionfactor);
newpoly.vertices.push_back(p.getVertexCircular(i));
newpoly.vertices.push_back(p.getVertexCircular(i+1));
infillpolys.push_back(newpoly);
}
}
// else
// if (zigzagpoly) {
// zigzagpoly->addVertex(p.getVertexCircular(i));
// }
}
// if (zigzagpoly) {
// cerr << zigzagpoly->size()<< endl;
// if (zigzagpoly->size()>0)
// infillpolys.push_back(*zigzagpoly);
// else delete zigzagpoly;
// cerr << infillpolys.size()<< endl;
// }
}
break;
default:
{
p.setExtrusionFactor(extrusionfactor);
infillpolys.push_back(p);
}
}
}
示例2: shortestConnectionSq
// returns length and two points
double Poly::shortestConnectionSq(const Poly &p2, Vector2d &start, Vector2d &end) const
{
double min1 = 100000000, min2 = 100000000;
int minindex1=0, minindex2=0;
Vector2d onpoint1, onpoint2;
// test this vertices
for (uint i = 0; i < vertices.size(); i++) {
for (uint j = 0; j < p2.vertices.size(); j++) {
Vector2d onpoint; // on p2
// dist from point i to lines on p2
const double mindist =
point_segment_distance_Sq(p2.vertices[j], p2.getVertexCircular(j+1),
vertices[i], onpoint);
if (mindist < min1) {
min1 = mindist;
onpoint1 = onpoint;
minindex1 = i;
}
}
}
// test p2 vertices
for (uint i = 0; i < p2.vertices.size(); i++) {
for (uint j = 0; j < vertices.size(); j++) {
Vector2d onpoint; // on this
// dist from p2 point i to lines on this
const double mindist =
point_segment_distance_Sq(vertices[j], getVertexCircular(j+1),
p2.vertices[i], onpoint);
if (mindist < min2) {
min2 = mindist;
onpoint2 = onpoint;
minindex2 = i;
}
}
}
if (min1 < min2) { // this vertex, some point on p2 lines
start = getVertexCircular(minindex1);
end = onpoint1;
} else { // p2 vertex, some point of this lines
start = p2.getVertexCircular(minindex2);
end = onpoint2;
}
return (end-start).squared_length();
}
示例3: getClipperPolygon
CL::Polygon Clipping::getClipperPolygon(const Poly &poly)
{
CL::Polygon cpoly(poly.vertices.size());
for(size_t i=0; i<poly.vertices.size();i++){
Vector2d P1;
// if (reverse)
P1 = poly.getVertexCircular(-i); // have to reverse from/to clipper
// else
// P1 = poly.getVertexCircular(i);
cpoly[i]=(ClipperPoint(P1));
}
// doesn't work...:
// cerr<< "poly is hole? "<< hole;
// cerr<< " -- orient=" <<ClipperLib::Orientation(cpoly) << endl;
// if (ClipperLib::Orientation(cpoly) == hole)
// std::reverse(cpoly.begin(),cpoly.end());
return cpoly;
}