4 * License : The MIT License
5 * Copyright(c) 2010 MikuToga Partners
8 package jp.sfjp.mikutoga.pmd.model;
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
17 public class Surface implements SerialNumbered, Iterable<Vertex> {
19 private static final int TRIANGLE = 3;
22 private Vertex vertex1;
23 private Vertex vertex2;
24 private Vertex vertex3;
26 private int surfaceSerialNo = -1;
45 * @throws IllegalArgumentException 重複する頂点が引数に含まれた
47 public void setTriangle(Vertex vtx1, Vertex vtx2, Vertex vtx3)
48 throws IllegalArgumentException{
49 if(vtx1 != null && (vtx1 == vtx2 || vtx1 == vtx3)){
50 throw new IllegalArgumentException();
52 if(vtx2 != null && vtx2 == vtx3){
53 throw new IllegalArgumentException();
66 * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
68 * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
69 * 引数が長さ3以上の配列であれば引数と同じ配列が返る。
71 public Vertex[] getTriangle(Vertex[] store){
73 if(store != null && store.length >= TRIANGLE){
76 result = new Vertex[TRIANGLE];
79 result[0] = this.vertex1;
80 result[1] = this.vertex2;
81 result[2] = this.vertex3;
91 public Vertex getVertex1(){
100 public Vertex getVertex2(){
109 public Vertex getVertex3(){
116 * 反復子がnullを返す可能性もありうる。
118 * @return {@inheritDoc}
121 public Iterator<Vertex> iterator(){
122 List<Vertex> list = new ArrayList<Vertex>(TRIANGLE);
124 list.add(this.vertex1);
125 list.add(this.vertex2);
126 list.add(this.vertex3);
128 return list.iterator();
132 * 3頂点全てが設定されているか判定する。
134 * @return 3頂点とも非nullが設定されていればtrue
136 public boolean isCompleted(){
138 result = this.vertex1 != null
139 && this.vertex2 != null
140 && this.vertex3 != null;
147 * @param num {@inheritDoc}
150 public void setSerialNumber(int num){
151 this.surfaceSerialNo = num;
158 * @return {@inheritDoc}
161 public int getSerialNumber(){
162 return this.surfaceSerialNo;
168 * @return {@inheritDoc}
171 public String toString(){
172 StringBuilder result = new StringBuilder();
174 result.append("Surface(")
175 .append(getSerialNumber())
179 result.append(" VID=[")
180 .append(this.vertex1.getSerialNumber())
182 .append(this.vertex2.getSerialNumber())
184 .append(this.vertex3.getSerialNumber())
188 return result.toString();