Преобразование пересеченного пути из Paper.js в Three.js - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь реализовать режущий инструмент для шрифтов.Я получил путь к шрифту в paper.js и создал инструмент обрезки, который использует метод пересечения paper.js для вырезания фрагментов букв.

Теперь я хотел использовать эти новые фрагменты в three.js,Я нашел эту ссылку (https://github.com/brianxu/PaperjsToThreejs) и попытался скопировать код в мой проект.

Кажется, это работает для простых фигур. Но почему-то это не работает вместе с функцией пересечения.

Я пытался отладить проблему. Насколько я обнаружил, есть проблема с функцией getBezierPath (). Кажется, что путь из фрагментов не совсем чистый. Поэтому я думаю, что проблема в том, что есть некоторыеданные пути отсутствуют (см. изображение в качестве образца; третий путь отличается от других).

Отладочное изображение: (https://kajetansom.ch/opentype/fragments/error.png)

Если я использую функцию упрощения () в Fragment-Пути, которые он работает идеально. И также этот путь больше не отличается от других. Но так как упрощение меняет форму, его нельзя использовать.

Я загрузил проект здесь: (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);
    }
}

...