OSDN Git Service

テストセット整備
[mikutoga/Pmd2XML.git] / src / main / java / jp / sourceforge / mikutoga / pmd / model / Surface.java
1 /*
2  * triangle surface
3  *
4  * License : The MIT License
5  * Copyright(c) 2010 MikuToga Partners
6  */
7
8 package jp.sourceforge.mikutoga.pmd.model;
9
10 import java.util.ArrayList;
11 import java.util.Iterator;
12 import java.util.List;
13
14 /**
15  * 3頂点の三角形からなる面情報。
16  */
17 public class Surface implements SerialNumbered, Iterable<Vertex> {
18
19     private Vertex vertex1;
20     private Vertex vertex2;
21     private Vertex vertex3;
22
23     private int serialNo = -1;
24
25     /**
26      * コンストラクタ。
27      * 3頂点がnullの状態で生成される。
28      */
29     public Surface(){
30         super();
31         return;
32     }
33
34     /**
35      * 3頂点を設定する。
36      * @param vertex1 頂点1
37      * @param vertex2 頂点2
38      * @param vertex3 頂点3
39      * @throws  IllegalArgumentException 重複する頂点が引数に含まれた
40      */
41     public void setTriangle(Vertex vertex1, Vertex vertex2, Vertex vertex3)
42             throws IllegalArgumentException{
43         if(vertex1 != null && (vertex1 == vertex2 || vertex1 == vertex3)){
44             throw new IllegalArgumentException();
45         }
46         if(vertex2 != null && vertex2 == vertex3){
47             throw new IllegalArgumentException();
48         }
49
50         this.vertex1 = vertex1;
51         this.vertex2 = vertex2;
52         this.vertex3 = vertex3;
53
54         return;
55     }
56
57     /**
58      * 3頂点を返す。
59      * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
60      * 新規に格納用配列が生成される。
61      * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
62      * 引数が長さ3以上の配列であれば引数と同じ配列が返る。
63      */
64     public Vertex[] getTriangle(Vertex[] store){
65         Vertex[] result;
66         if(store == null || store.length < 3){
67             result = new Vertex[3];
68         }else{
69             result = store;
70         }
71
72         result[0] = this.vertex1;
73         result[1] = this.vertex2;
74         result[2] = this.vertex3;
75
76         return result;
77     }
78
79     /**
80      * 頂点その1を返す。
81      * @return 頂点その1
82      */
83     public Vertex getVertex1(){
84         return this.vertex1;
85     }
86
87     /**
88      * 頂点その2を返す。
89      * @return 頂点その2
90      */
91     public Vertex getVertex2(){
92         return this.vertex2;
93     }
94
95     /**
96      * 頂点その3を返す。
97      * @return 頂点その3
98      */
99     public Vertex getVertex3(){
100         return this.vertex3;
101     }
102
103     /**
104      * {@inheritDoc}
105      * 頂点を返す反復子を生成する。
106      * 反復子がnullを返す可能性もありうる。
107      * @return {@inheritDoc}
108      */
109     @Override
110     public Iterator<Vertex> iterator(){
111         List<Vertex> list = new ArrayList<Vertex>(3);
112
113         list.add(this.vertex1);
114         list.add(this.vertex2);
115         list.add(this.vertex3);
116
117         return list.iterator();
118     }
119
120     /**
121      * 3頂点全てが設定されているか判定する。
122      * @return 3頂点とも非nullが設定されていればtrue
123      */
124     public boolean isCompleted(){
125         if(   this.vertex1 != null
126            && this.vertex2 != null
127            && this.vertex3 != null ){
128             return true;
129         }
130         return false;
131     }
132
133     /**
134      * {@inheritDoc}
135      * @param num {@inheritDoc}
136      */
137     @Override
138     public void setSerialNumber(int num){
139         this.serialNo = num;
140         return;
141     }
142
143     /**
144      * {@inheritDoc}
145      * @return {@inheritDoc}
146      */
147     @Override
148     public int getSerialNumber(){
149         return this.serialNo;
150     }
151
152     /**
153      * {@inheritDoc}
154      * @return {@inheritDoc}
155      */
156     @Override
157     public String toString(){
158         StringBuilder result = new StringBuilder();
159
160         result.append("Surface(")
161               .append(getSerialNumber())
162               .append(")");
163
164         if(isCompleted()){
165             result.append(" VID=[")
166                   .append(this.vertex1.getSerialNumber())
167                   .append(',')
168                   .append(this.vertex2.getSerialNumber())
169                   .append(',')
170                   .append(this.vertex3.getSerialNumber())
171                   .append(']');
172         }
173
174         return result.toString();
175     }
176
177 }