我尝试为字体实现切割工具。我在paper.js中获得了字体路径,并制作了一个剪切工具,该工具使用paper.js的相交方法来切出字母的片段。
现在,我想在three.js中使用这些新片段。我找到了此链接(https://github.com/brianxu/PaperjsToThreejs),并尝试将代码复制到我的项目中。
这似乎适用于简单的形状。但是以某种方式,它不能与相交功能一起使用。
我试图调试问题。据我发现,getBezierPath()函数存在问题。片段的路径似乎有点不干净。因此,我认为问题在于缺少某些路径数据(请参见图像;第三个路径与其他路径不同)。
调试图像:(https://kajetansom.ch/opentype/fragments/error.png)
如果我在Fragments-Paths上使用了simple()函数,它会完美地工作。而且,这条路已经不再与其他不同了。但是随着简化更改形状,就不能选择使用它。
我在这里上传了该项目: (https://kajetansom.ch/opentype/fragments/)
我用来生成片段路径的剪切代码是
view.onMouseDown = function(event) {
var newGroup = new Group();
for (var i = 0; i < word.children.length; i++) {
var hasIntersections = word.children[i].getIntersections(square);
if(hasIntersections.length>0) {
var path = word.children[i].intersect(square);
// path.simplify(0.1); // if I use this it works, but path gets too smooth
newGroup.addChild(path);
}
}
newGroup.fillColor = "blue";
if (newGroup.children.length==0) {
newGroup.remove(); // remove group if empty
}
for(var i=0; i<newGroup.children.length; i++) {
if (compoundPath !== null) {
var temp = compoundPath.unite(newGroup.children[i]);
compoundPath.remove();
compoundPath = temp;
}
else {
compoundPath = newGroup.children[i].clone();
}
updateGeometry(compoundPath);
}
}