概要

ShapeからPathIteratorを取得し、このPathSVGに変換します。

サンプルコード

private StringBuilder makeStarburstSvg(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("  <path d=\"");
  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("\" style=\"%s\" />%n</svg>%n", style));
  return sb;
}
view all

解説

上記のサンプルでは、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