2014-04-21 23 views
1

我在paper.js中構建了一個工具,它允許插入新的控制點,這很好,我遇到的問題,是我還必須計算每個新控制點的手柄位置(除非我錯過了某些東西,它並不表示紙張會爲您做這件事),而這證明是非常重要的任務。下面的代碼是我目前正在工作的,該點已成功添加到句柄中,但它會使曲線變形。我想添加手柄,使曲線不變形。用Paper.js插入貝塞爾曲線中的新點的理想手柄位置

gEditor.MoveTool.onMouseDown = function (event) { 
    gEditor.HitResult = paper.project.hitTest(event.point, gEditor.HitOptions); 

    var location = gEditor.HitResult.location; 
    var newPoint = gEditor.HitResult.item.insert(location.index + 1, event.point); 
    var prevSegment, nextSegment; 

    if (location.index - 1 >= 0){ 
     prevSegment = gEditor.HitResult.item.segments[location.index - 1]; 
    } 

    if (location.index + 2 < gEditor.HitResult.item.length) { 
     nextSegment = gEditor.HitResult.item.segments[location.index + 2]; 
    } 

    if (prevSegment && nextSegment) { 
     newPoint.handleIn = { 
      x: prevSegment.point.x - ((prevSegment.point.x + newPoint.point.x)/2), 
      y: prevSegment.point.y - ((prevSegment.point.y + newPoint.point.y)/2), 
     }; 

     newPoint.handleOut = { 
      x: nextSegment.point.x - ((nextSegment.point.x + newPoint.point.x)/2), 
      y: nextSegment.point.y - ((nextSegment.point.y + newPoint.point.y)/2), 
     }; 
    } 
} 

我看過德Cateljau的算法,並假定我需要的是某種形式的,但我很茫然,以如何去實現它,因爲我每次看到例如基本平該曲線未找到手柄的X,Y位置。

回答

3

是的,paper.js已經有這個功能:curve.divide()。當你完成你的命中測試後:

path = HitResult.item; 
if (HitResult.type == 'stroke') { 
    var location = HitResult.location; 
    path.curves[location.index].divide(location); 
} 
+0

這樣做的伎倆,謝謝! – javram