2017-05-11 34 views
0

fabric.jsでグループ化する行を追加するにはどうすればよいですか?あたかも各行のtopプロパティとleftプロパティが0に設定されているかのように見え、グリッドの最終サイズが0であるためです。fabric.jsの追加グループへの回線

グループへの追加のコード:以下の方法で達成することができる

let group = new fabric.Group(); 

for (let i = 0; i < canvas.getWidth()/gridSize; i++) { 

    let horizontalLine = new fabric.Line(
     [i * gridSize, 0, i * gridSize, canvas.getWidth()] 
    ); 

    let verticalLine = new fabric.Line(
     [0, i * gridSize, canvas.getWidth(), i * gridSize] 
    ); 

    group.add(horizontalLine, verticalLine); 
} 

canvas.add(group); 

Self-explaining fiddler

答えて

1

...

var canvas = new fabric.Canvas('c'); 
 
let gridSize = 15; 
 

 
$("#addAsGroup").click(() => { 
 
    canvas.clear(); 
 
    let separateLines = []; 
 
    for (let i = 0; i < canvas.getWidth()/gridSize; i++) { 
 
     let horizontalLine = new fabric.Line(
 
      [i * gridSize, 0, i * gridSize, canvas.getWidth()], { 
 
       stroke: '#000' 
 
      }); 
 
     let verticalLine = new fabric.Line(
 
      [0, i * gridSize, canvas.getWidth(), i * gridSize], { 
 
       stroke: '#000' 
 
      }); 
 
     separateLines.push(horizontalLine); 
 
     separateLines.push(verticalLine); 
 
    } 
 
    
 
    // add lines to group 
 
    let group = new fabric.Group(separateLines); 
 
    canvas.add(group); 
 
}); 
 

 
$("#addAsSeparateObjects").click(() => { 
 
    canvas.clear(); 
 
    let separateLines = []; 
 
    for (let i = 0; i < canvas.getWidth()/gridSize; i++) { 
 
     let horizontalLine = new fabric.Line(
 
      [i * gridSize, 0, i * gridSize, canvas.getWidth()], { 
 
       stroke: '#000' 
 
      }); 
 
     let verticalLine = new fabric.Line(
 
      [0, i * gridSize, canvas.getWidth(), i * gridSize], { 
 
       stroke: '#000' 
 
      }); 
 
     separateLines.push(horizontalLine); 
 
     separateLines.push(verticalLine); 
 
    } 
 
    separateLines.forEach((line) => { 
 
     canvas.add(line); 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script> 
 
<canvas id="c" width="300" height="300"></canvas> 
 
<button id="addAsGroup">AddAsGroup</button> 
 
<button id="addAsSeparateObjects">AddAsSeparateObjects</button>

+0

それは動作しますが、パフォーマンスが低すぎます。最初にオブジェクトを別々に追加し、グループに追加するよりも本当に必要ですか? –

+1

@ bartosz.baczekああ、私の悪い。私はあなたに非常に複雑な解決策を与えました。あなたは早くそう言いました。更新された回答を確認します。すべてがうまくいきたいと思っています:) –

+1

まあ、それはちょうど素晴らしいです!どうもありがとうございました。私はコンストラクタを介してグループを追加するときに、それはいくつかの余分な計算とグループサイズの変更を行うと思います。その間、私はaddWithUpdateメソッドを使ってグループにオブジェクトを追加しようとしましたが、運もありませんでした。 –

関連する問題