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 */ 016package org.opengion.hayabusa.io; 017 018import java.awt.Shape; 019import java.awt.Polygon; 020import java.awt.geom.Ellipse2D; 021import 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 */ 035public class ShapeList { 036 037 /** The shape sequence. */ 038 private static final Shape[] SHAPES = createStandardSeriesShapes(); 039 private static final int SLEN = SHAPES.length; // 6.4.1.1 (2016/01/16) PMD refactoring. Field hashcode has the same name as a method 040 041 /** 042 * シェープリストのサイズを返します。 043 * 044 * @return サイズ 045 */ 046 public int size() { 047 return SLEN; 048 } 049 050 /** 051 * インデックスに基づいた、シェープ を返します。 052 * 053 * @param index インデックス 054 * 055 * @return 指定のシェープ 056 */ 057 public Shape getShape( final int index ) { 058 return SHAPES[index % SLEN]; 059 } 060 061 /** 062 * 内部で管理するシェープリストを初期作成します。 063 * 064 * @return シェープリスト 065 */ 066 private static Shape[] createStandardSeriesShapes() { 067 068 Shape[] result = new Shape[11]; 069 070 final double size = 6.0; 071 final 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( final 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}