首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Jsclipper库的行为与Jsclipper主演示不一样?

为什么Jsclipper库的行为与Jsclipper主演示不一样?
EN

Stack Overflow用户
提问于 2017-01-28 00:51:29
回答 1查看 114关注 0票数 0

jsclipper.js中的布尔运算给出的结果与jsclipper的主要演示应用程序不同。

奇怪的是,我使用与演示完全相同的jsclipper代码,因为我从演示网页下载了jsclipper.js的源代码。

代码语言:javascript
复制
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致以最好的问候

EN

回答 1

Stack Overflow用户

发布于 2017-01-30 20:42:57

我发现我犯了什么错误。

我应该用

代码语言:javascript
复制
cpr.AddPaths(Clip, ClipperLib.PolyType.ptClip, true);     // add the paths

而不是

代码语言:javascript
复制
cpr.AddPath(Clip, ClipperLib.PolyType.ptClip, true);      // add the paths

复数s很重要,即使你我只加了一条路。

如果使用path,AddPath也应该可以工作,但由于某些原因,我只有在数组中使用[Paths],数组时才能让JSClipper工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41899051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档