Wrap text in Kreis
Ich bin mit d3 zu zeichnen Sie ein UML-Diagramm und möchte Zeilenumbruch innerhalb der Formen gezeichnet mit d3. Ich habe soweit den code unten und kann nicht eine Lösung finden, um den text " fit " innerhalb meiner Form (siehe Bild unten).
var svg = d3.select('#svg')
.append('svg')
.attr('width', 500)
.attr('height', 200);
var global = svg.append('g');
global.append('circle')
.attr('cx', 150)
.attr('cy', 100)
.attr('r', 50);
global.append('text')
.attr('x', 150)
.attr('y', 100)
.attr('height', 'auto')
.attr('text-anchor', 'middle')
.text('Text meant to fit within circle')
.attr('fill', 'red');
- Ich Stand vor diesem problem noch. D3 nicht, meines Wissens wenigstens, über eine Möglichkeit, dies zu tun, müssen Sie ein Programm brechen Ihre Worte, die in separaten Zeilen in Ihre eigenen tspan ist, die Anpassung Ihrer dy-Attribut für jede Zeile. Dann, zentrieren Sie es über den Kreis, berechnen Sie den radius, und nach unten skalieren, um zu passen, wenn nötig. Ich habe nicht funktionierenden code für diese, wie ich war in der Lage zu entkommen, brechen jedes Wort auf eigene Linie, aber das ist die grundlegende Idee.
- Ich habe das Gefühl, dass dies eine verdammt gute Frage, eine verdammt gute Antwort.
- Hier ist eine ähnliche Frage: (stackoverflow.com/questions/17709485/...) ... aber Nein, Nein, es war keine zufriedenstellende Antwort!
Du musst angemeldet sein, um einen Kommentar abzugeben.
SVG nicht Textumbruch, aber mit
foreignObject
können Sie einen ähnlichen Effekt erzielen. Unter der Annahme, dassradius
ist der radius des Kreises, können wir berechnen, die Abmessungen einer box, die passen in den Kreis:Sollte die Gruppe verdrängt werden, eine kleine Menge, damit der text zentriert. Ich weiß, dass dies nicht genau das, was gefragt ist, es kann aber hilfreich sein. Ich schrieb ein kleines fiddle. Das Ergebnis wird wie folgt Aussehen:
foreignObject
element kann nicht vertikal zentriert. Wenn der text zu kurz ist, wird es ausgerichtet, um die Oberseite der box.foreignObject
funktioniert nicht mit IE.Hier ist das beste was ich tun konnte.
Möchte ich center und wrap einen text in einem Kreis oder rect im SVG.
Der text sollte zentriert bleiben (horizontal/vertikal) unabhängig von der Textlänge.
CSS:
HTML:
Des transform-Attributs ist nicht zwingend, ich bin mit translate(-r, -r), so dass (x,y) des foreignObject ist wie der (cx, cy) des SVG-Kreis, und Breite, Hoehe = 2*r, mit r der radius ist.
Ich Tat dies, um die Verwendung als Knoten in einem D3-force-layout. Lasse ich als übung übersetzen dieses javascript-snippet in D3 ist Stil.
Wenn Sie fügen Ihren Inhalt in eine
<text>
element unmittelbar unterhalb des SVG-Form sind, dann können Sie D3plus'.textwrap()
Funktion, genau das zu tun. Ich zitiere aus dem Dokumentation:Habe ich einen codepen zur besseren Veranschaulichung dieses, da die Beispiele in der Dokumentation kann ein wenig verwirrend sein: http://codepen.io/thdoan/pen/rOPYxE
Es ist nicht ideal, aber @Pablo.Navarro Antwort führte mich zum folgenden.
Ergebnis