2015-10-20 6 views
15

Für die Links - in einem JointJS-Diagramm - habe ich versucht, dieses Tutorial (http://jointjs.com/tutorial/constraint-move-to-circle) zu implementieren, um die Etiketten auf den Link zu verschieben, aber ich verstehe nicht, wo die ConstraintElementView setzen .JointJS: Link-Label über den Link selbst beweglich machen

  1. Ich möchte das Etikett eines Links über den Link beweglich machen. Wie kann ich den Link als "Pfad" für das bewegliche Etikett definieren?

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]); 
    } 
}); 

Link-Kennung

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' } 
       } 
      }); 
     } 
    } 
}); 

Papier

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 } 
     } 
    }) 
}); 
  1. Da es über den Link verschoben werden kann, sollte es in der Mitte jedes Segments der Manhattan-Style-Verknüpfung einrasten. Aber ich sehe keine Chance, den Wert der Mitte jedes Segments zu erhalten.

Antwort

5

Sie müssen keinen Pfad erstellen. Ändern Sie einfach die Position der Beschriftung, indem Sie ihren relativen Wert berechnen - natürlich können Sie auch absolute Werte verwenden.

'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

Aber das berechnet die direkte Entfernung. Ich brauche die Manhattan-Linie. – user3142695

+0

Verwenden Sie dann 'Manhattan Distance' – user3848987

+0

Ist es möglich, die Größe jedes Segments einer Manhattan-Entfernung zu erhalten? – user3142695

1

Aktivieren Etiketten beweglich ist entlang Links können über die labelMove Option des interactive Objekt auf dem Papier erfolgen:

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

Dieses Flag standardmäßig false.

+0

Oh, das habe ich in der Dokumentation nicht gesehen. Aber ich möchte das Etikett auf die Mitte eines Segments ausrichten. Ich weiß nicht, ob es möglich ist, die Größe jedes Segments zu ermitteln. Also denke ich, dass ich etwas Ähnliches wie die Lösung von 'user3848987' verwenden muss. – user3142695

+0

Übrigens: Der Pfeil und das Entfernen-Symbol stören das Verschieben von Etiketten. Ist es möglich, diese durch Klicken und nicht durch Schweben des Links anzuzeigen? – user3142695

+0

interaktiv: function (cellView) {return {labelMove: true, vertexAdd: false}} hat keinen Effekt: Der Vertex wird nicht hinzugefügt, aber das Label ist immer noch nicht beweglich ... – user3142695