Я пытаюсь реализовать режущий инструмент для шрифтов.Я получил путь к шрифту в 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);
}
}