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));我对Filltype使用相同的配置,使用相同的缩放比例等等。即使是你,它也会给出不同的结果。
演示程序在数学上是正确的,但库在我的编程代码中却不是。
ctDifference操作应该产生一个包含6个顶点的2D多边形的解决方案,但是jsclipper库生成一个三角形。
现在评论说,与演示相比,所有其他操作也给出了错误的结果。
我如何让它以与演示相同的方式运行?
//向Jan-Olof Janson致以最好的问候
发布于 2017-01-30 20:42:57
我发现我犯了什么错误。
我应该用
cpr.AddPaths(Clip, ClipperLib.PolyType.ptClip, true); // add the paths而不是
cpr.AddPath(Clip, ClipperLib.PolyType.ptClip, true); // add the paths复数s很重要,即使你我只加了一条路。
如果使用path,AddPath也应该可以工作,但由于某些原因,我只有在数组中使用[Paths],数组时才能让JSClipper工作。
https://stackoverflow.com/questions/41899051
复制相似问题