2017-10-05 3 views
0

fabric.js(1.7.11)を使用して、1つのオブジェクトをグループ化せずに別のオブジェクトの回転に追従させようとしています。子オブジェクトの親への位置。だから私は、(1) "子"オブジェクトの回転中心を "親"の回転中心に設定し、次に(2)親オブジェクトが回転しているので、その回転デルタを子に適用します回転した状態で)。ここで fabric.js - Parent w/oを基にした "Child"オブジェクトの回転グループ化

は擬似コード

canvas.on('object:rotating', canvasEvent_ObjectRotating); 

function canvasEvent_ObjectRotating(e) 
{ 
    // set r2'2 center of rotation = r1's center of rotation 

    // r2.angle += (delta of rotation of r1 angle) 

} 
で最終的な結果は、子が親に「スタック」と表示されていることなどである(ゲームボード上のスティッキーノートのように、そしてあなたは、ゲームボードを回転させます)ここで

フィドルです:

https://jsfiddle.net/emaybert/bkb5awj6/

1または2で任意の助けいただければ幸いです。オブジェクトの角度デルタの取得方法:コールバックの回転、および/またはオブジェクトを任意の点でピボットする方法。私はfabric.util.rotatePointへの参照とそれを使って行を回転させる方法の例を見ましたが、オブジェクトではなく、その精神変換を行うことができませんでした。

答えて

0

これはあなたがやろうとしていることですか? https://jsfiddle.net/logie17/ofr8e6qd/1/

function canvasEvent_ObjectRotating(e) 
{ 
    origX = r2.getCenterPoint().x; 
    origY = r2.getCenterPoint().y; 
    let topLeftPoint = new fabric.Point(origX, origY); 

    if (!previousAngle) { 
    previousAngle = r1.getAngle(); 
    } 
    let angle = fabric.util.degreesToRadians(r1.getAngle() - previousAngle); 
    previousAngle = r1.getAngle(); 
    let center = r1.getCenterPoint(); 
    let origin = new fabric.Point(r1.left, r1.top); 
    let newCoords = fabric.util.rotatePoint(topLeftPoint,origin,angle); 

    r2.set({ left: newCoords.x, top: newCoords.y }).setCoords(); 
} 
+0

ありがとうLogan。それは素晴らしいです、そして私が探していたものは90%ありました。究極の解決策は、青い四角形を(現在のように)外側の正方形で「一緒に」回転させることですが、回転させることはありません。 – emaybert

+0

それは、青い正方形の隅から始まり、外側の赤い正方形に触れるときに注意してください。回転中、この構成は一定のままでなければなりません。赤い正方形がどのように回転しているかにかかわらず、青い四角のその点は、赤い四角の同じ点に常に触れています。 – emaybert

+0

私が考えることができる最も良いアナロジーは、床に座っているゲームボードを描くことです。次に、ゲームボードに付箋を添付します。次に、ボードを回転させます。 (付箋はボードの回転に従いますが、独立して回転しません) – emaybert

関連する問題