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;
44 * @throws IllegalArgumentException 重複する頂点が引数に含まれた
46 public void setTriangle(Vertex vtx1, Vertex vtx2, Vertex vtx3)
47 throws IllegalArgumentException{
48 if(vtx1 != null && (vtx1 == vtx2 || vtx1 == vtx3)){
49 throw new IllegalArgumentException();
51 if(vtx2 != null && vtx2 == vtx3){
52 throw new IllegalArgumentException();
64 * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
66 * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
67 * 引数が長さ3以上の配列であれば引数と同じ配列が返る。
69 public Vertex[] getTriangle(Vertex[] store){
71 if(store != null && store.length >= TRIANGLE){
74 result = new Vertex[TRIANGLE];
77 result[0] = this.vertex1;
78 result[1] = this.vertex2;
79 result[2] = this.vertex3;
88 public Vertex getVertex1(){
96 public Vertex getVertex2(){
104 public Vertex getVertex3(){
111 * 反復子がnullを返す可能性もありうる。
112 * @return {@inheritDoc}
115 public Iterator<Vertex> iterator(){
116 List<Vertex> list = new ArrayList<Vertex>(TRIANGLE);
118 list.add(this.vertex1);
119 list.add(this.vertex2);
120 list.add(this.vertex3);
122 return list.iterator();
126 * 3頂点全てが設定されているか判定する。
127 * @return 3頂点とも非nullが設定されていればtrue
129 public boolean isCompleted(){
131 result = this.vertex1 != null
132 && this.vertex2 != null
133 && this.vertex3 != null;
139 * @param num {@inheritDoc}
142 public void setSerialNumber(int num){
143 this.surfaceSerialNo = num;
149 * @return {@inheritDoc}
152 public int getSerialNumber(){
153 return this.surfaceSerialNo;
158 * @return {@inheritDoc}
161 public String toString(){
162 StringBuilder result = new StringBuilder();
164 result.append("Surface(")
165 .append(getSerialNumber())
169 result.append(" VID=[")
170 .append(this.vertex1.getSerialNumber())
172 .append(this.vertex2.getSerialNumber())
174 .append(this.vertex3.getSerialNumber())
178 return result.toString();