Swing/PathIterator のバックアップの現在との差分(No.3)
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
ファイルを生成しています。