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 }