2016-11-30 7 views
3

loadFromJSON cliptoパラメータで作業しても、デモとして与えられたhttp://fabricjs.com/kitchensinkを試しました。loadFromJSONはcliptoで動作しません

キャンバス上に丸みを帯びたオブジェクトが表示されますが、JSONファイルとしてエクスポートすると、JSONファイルが正しく読み込まれないため、fabricJSが間違った書き出しをエクスポートします。

エクスポートJSON:

{"objects":[{"type":"rect","originX":"left","originY":"top","left":241,"top":253,"width":50,"height":50,"fill":"#06980e","stroke":null,"strokeWidth":1,"strokeDashArray":null,"strokeLineCap":"butt","strokeLineJoin":"miter","strokeMiterLimit":10,"scaleX":5.59,"scaleY":5.59,"angle":0,"flipX":false,"flipY":false,"opacity":0.8,"shadow":null,"visible":true,"clipTo":"function (ctx) {\n ctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n }","backgroundColor":"","fillRule":"nonzero","globalCompositeOperation":"source-over","transformMatrix":null,"skewX":0,"skewY":0,"rx":0,"ry":0}],"background":""} 

どのように私はこの問題を解決することができますか?おそらくこの部分のコードについての問題です。

この問題を解決するために、私はちょうどでき
$scope.clip = function() { 
     var obj = canvas.getActiveObject(); 
     if (!obj) return; 

     if (obj.clipTo) { 
      obj.clipTo = null; 
     } 
     else { 
      var radius = obj.width < obj.height ? (obj.width/2) : (obj.height/2); 
      obj.clipTo = function (ctx) { 
       ctx.arc(0, 0, radius, 0, Math.PI * 2, true); 
      }; 
     } 
     canvas.renderAll(); 
    }; 
+0

あなたは '話しています/ n'は 'json'に入っていますか? –

+0

いいえ、私は ctx.arc(0、0、半径、0、数学的PI * 2、真)を意味します 半径は数値でなければなりません。 – kemalatila

答えて

0

object.cLeft = -(eWidth/2) + left; 
object.cTop = -(eHeight/2) + top; 
object.cWidth = parseInt(width * eScaleX); 
object.cHeight = parseInt(eScaleY * height); 

object.clipTo = function (ctx) { 
    ctx.rect(this.cLeft, this.cTop, this.cWidth, this.cHeight); 
} 

JSON形式でキャンバスを保存:

var json = JSON.stringify(canvas.toObject(['cLeft','cTop','cWidth','cHeight'])); 

を例作業: https://jsfiddle.net/Shahbaz/k8ewrvsc/3/

+0

これは良い解決策です。しかし、これは変数にではなくオブジェクトを整数にクリップし、何らかの形で柔軟性のないクリップになります。 オブジェクトをドラッグすると、固定クリップ領域が表示されることを意味します。 変数にクリップする場合、オブジェクトをドラッグすると、クリップされた領域が変化することがわかります(クリッピングするオブジェクトの境界に沿って変化します) – JDrake

関連する問題