将相交的路径从Paper.js转换为Three.js

时间:2019-05-10 04:38:48

标签: javascript three.js paperjs

我尝试为字体实现切割工具。我在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);
    }
}

0 个答案:

没有答案