jsclipper.js中的布尔操作给出了与jsclipper的主演示应用程序不同的结果。
我非常奇怪地使用与演示完全相同的jsclipper代码,因为我从演示网页下载了jsclipper.js的源代码,可以肯定。
var Subj=[[{"X":96.05815724969098,"Y":71.97971581634867},{"X":94.25101018863032,"Y":67.24637680924984},{"X":9.47273973638874,"Y":173.9797390387333}]];
var Clip=[[{"X":83.63036218081739,"Y":85.33308330559052},{"X":85.90175311733567,"Y":87.02908473311615},{"X":88.10438777004464,"Y":82.62343977750248}]];
//var Subj=[[{"x":-60.5122976050557,"y":31.98101279452465},{"x":-57.58064453087991,"y":28.623207223419882},{"x":-60.08743386861926,"y":29.44356552836135}]]
//var Clip=[{"x":-48.23331458158315,"y":-25.82931462303448},{"x":-50.91186400494968,"y":-25.356415428690656},{"x":-60.08743386861926,"y":29.44356552836135}]
var cpr = new ClipperLib.Clipper();
var clipType = ClipperLib.ClipType.ctDifference;
//var clipType = ClipperLib.ClipType.ctIntersection;
//var clipType = ClipperLib.ClipType.ctUnion;
ClipperLib.JS.ScaleUpPaths(Subj, 1000);
ClipperLib.JS.ScaleUpPaths(Clip, 1000);
cpr.AddPaths(Subj, ClipperLib.PolyType.ptSubject, true);
cpr.AddPath(Clip, ClipperLib.PolyType.ptClip, true); // add the paths
var solution_paths=[];
var subject_fillType = ClipperLib.PolyFillType.pftNonZero;
var clip_fillType = ClipperLib.PolyFillType.pftNonZero;
var success = cpr.Execute(clipType, solution_paths, subject_fillType, clip_fillType);
ClipperLib.JS.ScaleDownPaths(solution_paths, 1000);
console.log('solution_paths '+JSON.stringify(solution_paths));
我对Filltypes和相同的缩放等使用相同的配置。即使你,它也会产生不同的结果。
演示在数学上是正确的,但是库不在我的编程代码中。
ctDifference操作应该会产生一个包含6个顶点的2D多边形的解决方案,但jsclipper库会生成一个三角形。
现在评论的所有其他操作与演示相比也给出了错误的结果。
如何让它以与演示相同的方式运作?
//最诚挚的问候Jan-Olof Janson
答案 0 :(得分:0)
我发现了我犯的错误。
我应该用
cpr.AddPaths(Clip, ClipperLib.PolyType.ptClip, true); // add the paths
而不是
cpr.AddPath(Clip, ClipperLib.PolyType.ptClip, true); // add the paths
复数是重要的,即使你只添加一条路径。
如果使用[path],AddPath也应该可以工作,但出于某种原因,如果我使用[[Paths]],数组中的数组,我只能使JSClipper工作。