G
gegenpol
Gast
Hallo
Ich möchte mehrere Strings um einen Kreis (Tortendiagramm) herum zeichnen. Wobei die Strings jeweils zentriert zu einem Teilstück stehen sollen. Das Tortendiagramm habe ich, aber mit der Beschriftung komme ich nicht weiter.
Ich also gegoogelt und das gefunden:
Aufruf der Methode:
Wobei ich den Wert 6.3 einfach durch ausprobieren heraus gefunden habe. Bei 0 beginnt der Text bei 12 Uhr. Mit dem Wert 6.3 ist der Textanfang wieder auf seinem Ausgangspunkt.
Und das ist die Methode:
Das ganze stammt von hier: http://users.erols.com/ziring/java-src/CircleTextDemo.java
Grob verstehe ich die Methoden. Aber was die Methoden von FontMetric und AffineTransform detailliert machen - nicht ganz. Ich weiß, dass ich mit dem Parameterwert a1 (= 6.3) den Start beeinflussen kann. Was ich möchte ist, die Strings ab einer bestimmten Koordinate auf dem Kreis zu zeichnen. Diese Koordinaten habe ich im bestehenden Programm errechnet. Also ich weiß wo ein Tortenstück anfängt und wo es aufhört von den Koordinaten her. Und in diesen Bereich möchte ich dann die Bezeichnung des Tortenstücks zeichnen.
Vielleicht kann mir wer helfen.
Und vielleicht weiß auch jemand, wo man sich in diese Materie mal einarbeiten kann.. Ich bin da grad ratlos. So Codebeispiele bringen mich nur bedingt weiter. FontMetric und AffineTransform sind mir auch unbekannt.
Ich wollte auch mal die FAQs durchsuchen aber die gehen nicht:
Danke
PS ich bin eher Anfänger und probiere mich nun mit dem Zeichnen
Ich möchte mehrere Strings um einen Kreis (Tortendiagramm) herum zeichnen. Wobei die Strings jeweils zentriert zu einem Teilstück stehen sollen. Das Tortendiagramm habe ich, aber mit der Beschriftung komme ich nicht weiter.
Ich also gegoogelt und das gefunden:
Aufruf der Methode:
Java:
drawCircleText((Graphics2D)g, st, pt, radius, 6.3, 1.0);
Wobei ich den Wert 6.3 einfach durch ausprobieren heraus gefunden habe. Bei 0 beginnt der Text bei 12 Uhr. Mit dem Wert 6.3 ist der Textanfang wieder auf seinem Ausgangspunkt.
Und das ist die Methode:
Java:
static void drawCircleText(Graphics2D g, String st, Point center, double r, double a1, double af)
{
double curangle = a1;
Point2D c = new Point2D.Double(center.x, center.y);
char ch[] = st.toCharArray();
FontMetrics fm = g.getFontMetrics();
AffineTransform xform1, cxform;
xform1 = AffineTransform.getTranslateInstance(c.getX(),c.getY());
for(int i = 0; i < ch.length; i++)
{
double cwid = (double)(getCharWidth(ch[i],fm));
if (!(ch[i] == ' ' || Character.isSpaceChar(ch[i])))
{
cwid = (double)(fm.charWidth(ch[i]));
cxform = new AffineTransform(xform1);
cxform.rotate(curangle, 0.0, 0.0);
String chstr = new String(ch, i, 1);
g.setTransform(cxform);
g.drawString(chstr, (float)(-cwid/2), (float)(-r));
}
if (i < (ch.length - 1))
{
double adv = cwid/2.0 + fm.getLeading() + getCharWidth(ch[i + 1],fm)/2.0;
curangle += Math.sin(adv / r);
}
}
}
static int getCharWidth(char c, FontMetrics fm)
{
if (c == ' ' || Character.isSpaceChar(c))
return fm.charWidth('n');
else
return fm.charWidth(c);
}
Das ganze stammt von hier: http://users.erols.com/ziring/java-src/CircleTextDemo.java
Grob verstehe ich die Methoden. Aber was die Methoden von FontMetric und AffineTransform detailliert machen - nicht ganz. Ich weiß, dass ich mit dem Parameterwert a1 (= 6.3) den Start beeinflussen kann. Was ich möchte ist, die Strings ab einer bestimmten Koordinate auf dem Kreis zu zeichnen. Diese Koordinaten habe ich im bestehenden Programm errechnet. Also ich weiß wo ein Tortenstück anfängt und wo es aufhört von den Koordinaten her. Und in diesen Bereich möchte ich dann die Bezeichnung des Tortenstücks zeichnen.
Vielleicht kann mir wer helfen.
Und vielleicht weiß auch jemand, wo man sich in diese Materie mal einarbeiten kann.. Ich bin da grad ratlos. So Codebeispiele bringen mich nur bedingt weiter. FontMetric und AffineTransform sind mir auch unbekannt.
Ich wollte auch mal die FAQs durchsuchen aber die gehen nicht:
gegenpol, Sie haben keine Rechte, um auf diese Seite zuzugreifen. Folgende Gründe könnten z.B. dafür verantwortlich sein:
Sie versuchen, den Beitrag eines anderen Benutzers zu ändern oder auf administrative Funktionen zuzugreifen. Überprüfen Sie bitte in den Forenregeln, ob Sie diese Aktion ausführen dürfen.
Wenn Sie versucht haben, einen Beitrag zu schreiben, kann es sein, dass Ihr Benutzerkonto deaktiviert wurde oder noch aktiviert werden muss.
Danke
PS ich bin eher Anfänger und probiere mich nun mit dem Zeichnen