001 /*
002 * Copyright (c) 2009 The openGion Project.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
013 * either express or implied. See the License for the specific language
014 * governing permissions and limitations under the License.
015 */
016 package org.opengion.hayabusa.io;
017
018 import java.awt.Shape;
019 import java.awt.Polygon;
020 import java.awt.geom.Ellipse2D;
021 import java.awt.geom.Rectangle2D;
022
023 /**
024 * ShapeList は、LineRenderer で使用されã‚?Shape(line間ã?ドッãƒ?の形状ã‚?
025 * 管ç�?�—てã�?‚‹クラスですã?
026 * å†?ƒ¨çš?�«は、●、▲、■、◆、縦●ã?▼、縦â–??横●ã?右三角ã?横â–??左三è§?
027 * とã�?�†繰返しになりますã?
028 *
029 * @og.rev 4.1.1.0 (2008/02/18) 新規作æ?
030 *
031 * @version 0.9.0 2008/02/04
032 * @author Kazuhiko Hasegawa
033 * @since JDK1.6,
034 */
035 public class ShapeList {
036
037 /** The shape sequence. */
038 private static final Shape[] SHAPES = createStandardSeriesShapes();
039 private static final int SIZE = SHAPES.length;
040
041 /**
042 * シェープリストã?サイズを返しますã?
043 *
044 * @return サイズ
045 */
046 public int size() {
047 return SIZE;
048 }
049
050 /**
051 * インãƒ?ƒƒクスに基づã�?�Ÿ、シェーãƒ?を返しますã?
052 *
053 * @param index インãƒ?ƒƒクス
054 *
055 * @return æŒ?®šã?シェーãƒ?
056 */
057 public Shape getShape( final int index ) {
058 return SHAPES[index % SIZE];
059 }
060
061 /**
062 * å†?ƒ¨で管ç�?�™るシェープリストを初期作æ?しますã?
063 *
064 * @return シェープリスãƒ?
065 */
066 private static Shape[] createStandardSeriesShapes() {
067
068 Shape[] result = new Shape[11];
069
070 double size = 6.0;
071 double delta = size / 2.0;
072 int[] xpoints = null;
073 int[] ypoints = null;
074
075 // circle、●
076 result[0] = new Ellipse2D.Double(-delta, -delta, size, size);
077
078 // up-pointing triangle、▲
079 xpoints = intArray(0.0, delta, -delta);
080 ypoints = intArray(-delta, delta, delta);
081 result[1] = new Polygon(xpoints, ypoints, 3);
082
083 // square、■
084 result[2] = new Rectangle2D.Double(-delta, -delta, size, size);
085
086 // diamond、◆
087 xpoints = intArray(0.0, delta, 0.0, -delta);
088 ypoints = intArray(-delta, 0.0, delta, 0.0);
089 result[3] = new Polygon(xpoints, ypoints, 4);
090
091 // vertical ellipse、縦â—?
092 result[4] = new Ellipse2D.Double(-delta / 2, -delta, size / 2, size);
093
094 // down-pointing triangle、▼
095 xpoints = intArray(-delta, +delta, 0.0);
096 ypoints = intArray(-delta, -delta, delta);
097 result[5] = new Polygon(xpoints, ypoints, 3);
098
099 // vertical rectangle、縦â–?
100 result[6] = new Rectangle2D.Double(-delta / 2, -delta, size / 2, size);
101
102 // horizontal ellipse、横â—?
103 result[7] = new Ellipse2D.Double(-delta, -delta / 2, size, size / 2);
104
105 // right-pointing triangle、右三è§?
106 xpoints = intArray(-delta, delta, -delta);
107 ypoints = intArray(-delta, 0.0, delta);
108 result[8] = new Polygon(xpoints, ypoints, 3);
109
110 // horizontal rectangle、横â–?
111 result[9] = new Rectangle2D.Double(-delta, -delta / 2, size, size / 2);
112
113 // left-pointing triangle、左三è§?
114 xpoints = intArray(-delta, delta, delta);
115 ypoints = intArray(0.0, -delta, +delta);
116 result[10] = new Polygon(xpoints, ypoints, 3);
117
118 return result;
119 }
120
121 /**
122 * 引数の double 配å?(またã?、ç¾??)をã?int に変換しますã?
123 * 変換は、å?り捨てで、int のç¯?›²をè¶?�ˆるå?合ã?、動作ã?保証されませんã€?
124 *
125 * @param val double配å?(またã?、ç¾??)
126 *
127 * @return intに変換した結果の配å?
128 */
129 private static int[] intArray( double ... val ) {
130 int[] rtn = new int[val.length] ;
131 for( int i=0;i<val.length; i++ ) {
132 rtn[i] = (int)val[i];
133 }
134
135 return rtn;
136 }
137 }