2015-10-20 8 views
15

リンクについて - JointJSダイアグラムで - このチュートリアル(http://jointjs.com/tutorial/constraint-move-to-circle)を実装してリンク上のラベルを移動しようとしましたが、ConstraintElementViewJointJS:リンクのラベルをリンク上で動かす

  1. リンクのラベルをリンク上で移動可能にしたいと考えています。では、リンクを移動可能なラベルの「パス」としてどのように定義できますか?

ConstraintElementView

var constraint = label; // ??? 

var ConstraintElementView = joint.dia.ElementView.extend({ 

    pointerdown: function(evt, x, y) { 
     var position = this.model.get('position'); 
     var size = this.model.get('size'); 
     var center = g.rect(position.x, position.y, size.width, size.height).center(); 
     var intersection = constraint.intersectionWithLineFromCenterToPoint(center); 
     joint.dia.ElementView.prototype.pointerdown.apply(this, [evt, intersection.x, intersection.y]); 
    }, 
    pointermove: function(evt, x, y) { 
     var intersection = constraint.intersectionWithLineFromCenterToPoint(g.point(x, y)); 
     joint.dia.ElementView.prototype.pointermove.apply(this, [evt, intersection.x, intersection.y]); 
    } 
}); 

リンクラベル

paper.on({ 
    /** 
    * Doubleclick on link: Add label for link 
    */ 
    'cell:pointerdblclick': function(cellView, event, x, y){    
     if (cellView.model.isLink()) { 
      cellView.model.label(0, { 
       position: .5, 
       attrs: { 
        rect: { fill: '#eeeeee' }, 
        text: { text: 'text', 'font-size': 12, ref: 'rect' } 
       } 
      }); 
     } 
    } 
}); 

var paper = new joint.dia.Paper({ 
    el: $('#canvas'), 
    width: 801, 
    height: 496, 
    model: graph, 
    gridSize: 10, 
    elementView: ConstraintElementView, 
    defaultLink: new joint.dia.Link({ 
     router: { name: 'manhattan' }, 
     connector: { name: 'rounded' }, 
     attrs: { 
      '.marker-target': { d: 'M 10 0 L 0 5 L 10 10 z', fill: '#6a6c8a', stroke: '#6a6c8a' }, 
      '.connection': { stroke: '#6a6c8a', 'stroke-width': 2 } 
     } 
    }) 
}); 
  • それがリンクを介して移動可能であるように、それはマンハッタンスタイルのリンクの各セグメントの中心にスナップしなければなりません。しかし、私は各セグメントの中心の価値を得る機会はありません。
  • 答えて

    5

    あなたは、任意のパスを作成する必要はありません。相対値を計算してラベルの位置を変更するだけで、もちろん絶対値を使用することもできます。

    リンクに沿って移動可能にラベルを有効
    'cell:pointermove': function(event, x, y) { 
        if (event.model.isLink()) { 
          var clickPoint = { x: event._dx, y: event._dy }, 
           lengthTotal = event.sourcePoint.manhattanDistance(event.targetPoint), 
           length  = event.sourcePoint.manhattanDistance(clickPoint), 
           position = round(length/lengthTotal, 2); 
    
          event.model.label(0, { position: position }); 
    
        } 
    } 
    
    +0

    しかし、これは直接の距離を計算します。私はマンハッタンラインが必要です。 – user3142695

    +0

    はその後、「manhattanDistance」を使用 – user3848987

    +0

    それはマンハッタン距離の各セグメントのサイズを取得することは可能ですか? – user3142695

    1

    は紙上interactiveオブジェクトのlabelMoveオプションを介して行うことができる。

    var paper = new joint.dia.Paper({ // ... interactive: { labelMove: true } // ... })

    このフラグのデフォルト値はfalseします。

    +0

    ああ、私はドキュメントでそれを見ていない。しかし、ラベルをセグメントの中央にスナップしたいと思います。各セグメントのサイズを取得できるかどうかはわかりません。だから、私は 'user3848987'によって与えられた解決策に似た何かを使わなければならないと思う。ところで – user3142695

    +0

    :矢印とアイコンを削除するには、ラベルの移動を妨げています。クリックしてリンクを表示するのではなく、リンクを表示することは可能ですか? – user3142695

    +0

    '対話型:function(cellView){return {labelMove:true、vertexAdd:false}}'効果がありません:頂点は追加されませんが、ラベルはまだ移動できません... – user3142695

    関連する問題