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 }