Swing/PathIterator のバックアップの現在との差分(No.4)
TITLE:PathIteratorからSVGを生成
Posted by aterai at 2009-03-30
PathIteratorからSVGを生成
ShapeからPathIteratorを取得し、このPathをSVGに変換します。-
category: swing
folder: PathIterator
title: PathIteratorからSVGを生成
tags: [Icon, Shape, PathIterator]
author: aterai
pubdate: 2009-03-30T14:13:46+09:00
description: ShapeからPathIteratorを取得し、このPathをSVGに変換します。
image:
hreflang:
href: https://java-swing-tips.blogspot.com/2013/02/get-svg-from-pathiterator.html lang: en
概要
Shape
からPathIterator
を取得し、このPath
をSVG
に変換します。
- &jnlp;
- &jar;
- &zip;
Screenshot
Advertisement
サンプルコード
#spanend
#spandel
private StringBuilder makeStarburstSvg(PathIterator pi, int sz, String style, String desc) {
#spanend
#spanadd
* サンプルコード [#sourcecode]
#spanend
#spanadd
#code(link){{
#spanend
#spanadd
private StringBuilder makeStarburstSvg(
#spanend
PathIterator pi, int sz, String style, String desc) {
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
//...
sb.append(String.format("<svg width=\"%d\" height=\"%d\" xmlns=\"%s\">\n", sz, sz, w3));
sb.append(String.format(" <desc>%s</desc>\n", desc));
// ...
sb.append(String.format(
"<svg width=\"%d\" height=\"%d\" xmlns=\"%s\">%n", sz, sz, w3));
sb.append(String.format(" <desc>%s</desc>%n", desc));
sb.append(" <path d=\"");
double[] c = new double[6];
while(!pi.isDone()) {
switch(pi.currentSegment(c)) {
while (!pi.isDone()) {
switch (pi.currentSegment(c)) {
case PathIterator.SEG_MOVETO:
sb.append(String.format("M%.2f,%.2f ", c[0], c[1])); break;
sb.append(String.format("M%.2f,%.2f ", c[0], c[1]));
break;
case PathIterator.SEG_LINETO:
sb.append(String.format("L%.2f,%.2f ", c[0], c[1])); break;
sb.append(String.format("L%.2f,%.2f ", c[0], c[1]));
break;
case PathIterator.SEG_QUADTO:
sb.append(String.format("Q%.2f,%.2f,%.2f,%.2f ",c[0],c[1],c[2],c[3]));
sb.append(String.format("Q%.2f,%.2f,%.2f,%.2f ",
c[0], c[1], c[2], c[3]));
break;
case PathIterator.SEG_CUBICTO:
sb.append(String.format("C%.2f,%.2f,%.2f,%.2f,%.2f,%.2f ",c[0],c[1],c[2],c[3],c[4],c[5]));
sb.append(String.format("C%.2f,%.2f,%.2f,%.2f,%.2f,%.2f ",
c[0], c[1], c[2], c[3], c[4], c[5]));
break;
case PathIterator.SEG_CLOSE:
sb.append("Z"); break;
sb.append("Z");
break;
}
pi.next();
}
sb.append(String.format("\" style=\"%s\" />\n</svg>\n", style));
sb.append(String.format("\" style=\"%s\" />%n</svg>%n", style));
return sb;
}
解説
上記のサンプルでは、ShapeからPathIteratorを取得し、そのパスを辿ってSVGファイルを生成しています。対応しているのは、PathIterator.SEG_MOVETO、PathIterator.SEG_LINETOのみ
解説
上記のサンプルでは、Shape
からPathIterator
を取得しそのパスを辿ってSVG
ファイルを生成しています。
参考リンク
参考リンク
コメント
コメント
- サンプルコードにはコードすべて表示(記入)した方がいいと思います。 -- 名無し
- 追記:そうじゃなくてはわかりにくいので。例えばJavaDriveさんのように -- 名無し
- ご指摘ありがとうございます。現状、大きめのサンプルではコードを丸ごと貼り付けるとページが長くなる、小さいサンプルでもあまり意味のないコードが毎回でてくる…、などの理由でコードの一部(
Tips for the Code Snippets
)だけ表示するようにしています。コード全部を見たい場合は、src.zip
を展開して好みのエディタで開くか、リポジトリ(svn repository
)をたどってくださいという姿勢なんですが、自分でもたまにリポジトリをクリックしていくのが面倒なことがあるので、一気に*.java
にジャンプできるようなリンクでも追加できないか検討してみます。 -- aterai
- ご指摘ありがとうございます。現状、大きめのサンプルではコードを丸ごと貼り付けるとページが長くなる、小さいサンプルでもあまり意味のないコードが毎回でてくる…、などの理由でコードの一部(
-
<pre>
の右上のview plain
リンクをクリックするとsvn
リポジトリのソースコードを表示するようにしてみました。MainPanel.java
固定で、HogeHogeUI.java
などにはリンクしていませんが、面倒なので多分このままです。 -- aterai - 現状のままで良いかと。主要な部分だけ見えれば参考になりますしおすし --
- おすし。もうすこし工夫すれば、多少見やすく(使いやすく)なりそうな気はするのですが、上にも書いたようにしばらくはこのままです。 -- aterai