Swing/PathIterator のバックアップの現在との差分(No.1)
TITLE:PathIteratorからSVGを生成
Posted by terai 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
#screenshot
サンプルコード
#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[] coords = new double[6];
while(!pi.isDone()) {
int ret = pi.currentSegment(coords);
if(ret==PathIterator.SEG_MOVETO) {
sb.append(String.format("%s%.2f,%.2f ", "M", coords[0], coords[1]));
}else if(ret==PathIterator.SEG_LINETO) {
sb.append(String.format("%s%.2f,%.2f ", "L", coords[0], coords[1]));
double[] c = new double[6];
while (!pi.isDone()) {
switch (pi.currentSegment(c)) {
case PathIterator.SEG_MOVETO:
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;
case PathIterator.SEG_QUADTO:
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]));
break;
case PathIterator.SEG_CLOSE:
sb.append("Z");
break;
}
pi.next();
}
sb.append(String.format("Z\" 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
ファイルを生成しています。