-1

私は GIS タイプの 2D マップ ジェネレーターに取り組んでおり、クリッパー ライブラリを使用しています。構築中にいくつかのエラーに気づき、何か間違ったことをしていると思ったので、例を実行しました。問題は、穴であるはずの内側の三角形が考慮されておらず、完全なポリゴンとして追加されていることですソリューション。ライブラリの関数を使用してポリゴンを反転すると、三角形が完全に消えます。昨日からこの問題に取り組んでいますが、何が間違っているのかわかりません。このライブラリで問題が発生したことはありますか? これはよくあるバグですか?


Youtサイト​​から直接取得したこのコードスニペットを使用しました

「clipper.hpp」を含める

//from clipper.hpp ...
//typedef signed long long long64;
//struct IntPoint {long64 X; long64 Y;};
//typedef std::vector<IntPoint> Polygon;
//typedef std::vector<Polygon> Polygons;
...
using namespace ClipperLib;

Polygons subj(2), clip(1), solution;

//define outer blue 'subject' polygon
subj[0].push_back(IntPoint(180,200));
subj[0].push_back(IntPoint(260,200));
subj[0].push_back(IntPoint(260,150));
subj[0].push_back(IntPoint(180,150));

//define subject's inner triangular 'hole' (with reverse orientation)
subj[1].push_back(IntPoint(215,160));
subj[1].push_back(IntPoint(230,190));
subj[1].push_back(IntPoint(200,190));

//define orange 'clipping' polygon
clip[0].push_back(IntPoint(190,210));
clip[0].push_back(IntPoint(240,210));
clip[0].push_back(IntPoint(240,130));
clip[0].push_back(IntPoint(190,130));

DrawPolygons(subj, 0x160000FF, 0x600000FF); //blue
DrawPolygons(clip, 0x20FFFF00, 0x30FF0000); //orange

//perform intersection ...
Clipper c;
c.AddPolygons(subj, ptSubject);
c.AddPolygons(clip, ptClip);
c.Execute(ctIntersection, solution, pftNonZero, pftNonZero);
DrawPolygons(solution, 0x3000FF00, 0xFF006600); //solution shaded green

三角形に彫られた穴から見えるはずですよね?私はより単純なシナリオ、単一の正方形とその内部の三角形を試し、減算 xor や差分などのさまざまな操作を実行しました。常に 2 つのポリゴンが得られますが、操作がまったく実行されていないように見えます。

4

1 に答える 1

0

Clipper ライブラリは広範囲にテストされており、かなり多くのユーザーも使用しているため、問題がコードにあることが判明すると確信しています。また、どのサンプル コードを試したかはわかりませんが、提供されているサンプルはすべて (C++、C#、および Delphi で) 完全にテストされています。

Angus - Clipper ライブラリの作者

于 2013-10-01T21:09:43.890 に答える