4 * License : The MIT License
\r
5 * Copyright(c) 2010 MikuToga Partners
\r
8 package jp.sourceforge.mikutoga.pmd;
\r
10 import java.util.ArrayList;
\r
11 import java.util.Iterator;
\r
12 import java.util.List;
\r
13 import jp.sourceforge.mikutoga.corelib.SerialNumbered;
\r
18 public class Surface implements SerialNumbered, Iterable<Vertex> {
\r
20 private Vertex vertex1;
\r
21 private Vertex vertex2;
\r
22 private Vertex vertex3;
\r
24 private int serialNo = -1;
\r
28 * 3頂点がnullの状態で生成される。
\r
37 * @param vertex1 頂点1
\r
38 * @param vertex2 頂点2
\r
39 * @param vertex3 頂点3
\r
40 * @throws IllegalArgumentException 重複する頂点が引数に含まれた
\r
42 public void setTriangle(Vertex vertex1, Vertex vertex2, Vertex vertex3)
\r
43 throws IllegalArgumentException{
\r
44 if(vertex1 != null && (vertex1 == vertex2 || vertex1 == vertex3)){
\r
45 throw new IllegalArgumentException();
\r
47 if(vertex2 != null && vertex2 == vertex3){
\r
48 throw new IllegalArgumentException();
\r
51 this.vertex1 = vertex1;
\r
52 this.vertex2 = vertex2;
\r
53 this.vertex3 = vertex3;
\r
60 * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
\r
62 * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
\r
63 * 引数が長さ3以上の配列であれば引数と同じ配列が返る。
\r
65 public Vertex[] getTriangle(Vertex[] store){
\r
67 if(store == null || store.length < 3){
\r
68 result = new Vertex[3];
\r
73 result[0] = this.vertex1;
\r
74 result[1] = this.vertex2;
\r
75 result[2] = this.vertex3;
\r
84 public Vertex getVertex1(){
\r
85 return this.vertex1;
\r
92 public Vertex getVertex2(){
\r
93 return this.vertex2;
\r
100 public Vertex getVertex3(){
\r
101 return this.vertex3;
\r
107 * 反復子がnullを返す可能性もありうる。
\r
108 * @return {@inheritDoc}
\r
111 public Iterator<Vertex> iterator(){
\r
112 List<Vertex> list = new ArrayList<Vertex>(3);
\r
114 list.add(this.vertex1);
\r
115 list.add(this.vertex2);
\r
116 list.add(this.vertex3);
\r
118 return list.iterator();
\r
122 * 3頂点全てが設定されているか判定する。
\r
123 * @return 3頂点とも非nullが設定されていればtrue
\r
125 public boolean isCompleted(){
\r
126 if( this.vertex1 != null
\r
127 && this.vertex2 != null
\r
128 && this.vertex3 != null ){
\r
136 * @param num {@inheritDoc}
\r
139 public void setSerialNumber(int num){
\r
140 this.serialNo = num;
\r
146 * @return {@inheritDoc}
\r
149 public int getSerialNumber(){
\r
150 return this.serialNo;
\r
155 * @return {@inheritDoc}
\r
158 public String toString(){
\r
159 StringBuilder result = new StringBuilder();
\r
161 result.append("Surface(")
\r
162 .append(getSerialNumber())
\r
166 result.append(" VID=[")
\r
167 .append(this.vertex1.getSerialNumber())
\r
169 .append(this.vertex2.getSerialNumber())
\r
171 .append(this.vertex3.getSerialNumber())
\r
175 return result.toString();
\r