为什么Jsclipper库的行为与Jsclipper主演示的行为方式相同?

时间:2017-01-27 16:51:29

标签: javascript svg vector

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

1 个答案:

答案 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工作。