OSDN Git Service

modify javadoc paragraph.
[mikutoga/Pmd2XML.git] / src / main / java / jp / sfjp / 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.sfjp.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 static final int TRIANGLE = 3;
20
21
22     private Vertex vertex1;
23     private Vertex vertex2;
24     private Vertex vertex3;
25
26     private int surfaceSerialNo = -1;
27
28
29     /**
30      * コンストラクタ。
31      * 3頂点がnullの状態で生成される。
32      */
33     public Surface(){
34         super();
35         return;
36     }
37
38
39     /**
40      * 3頂点を設定する。
41      *
42      * @param vtx1 頂点1
43      * @param vtx2 頂点2
44      * @param vtx3 頂点3
45      * @throws  IllegalArgumentException 重複する頂点が引数に含まれた
46      */
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();
51         }
52         if(vtx2 != null && vtx2 == vtx3){
53             throw new IllegalArgumentException();
54         }
55
56         this.vertex1 = vtx1;
57         this.vertex2 = vtx2;
58         this.vertex3 = vtx3;
59
60         return;
61     }
62
63     /**
64      * 3頂点を返す。
65      *
66      * @param store 頂点格納用配列。nullもしくは3要素に満たない場合は無視され、
67      *     新規に格納用配列が生成される。
68      * @return 先頭3要素に3頂点が収められた配列。未設定要素にはnullが入る。
69      *     引数が長さ3以上の配列であれば引数と同じ配列が返る。
70      */
71     public Vertex[] getTriangle(Vertex[] store){
72         Vertex[] result;
73         if(store != null && store.length >= TRIANGLE){
74             result = store;
75         }else{
76             result = new Vertex[TRIANGLE];
77         }
78
79         result[0] = this.vertex1;
80         result[1] = this.vertex2;
81         result[2] = this.vertex3;
82
83         return result;
84     }
85
86     /**
87      * 頂点その1を返す。
88      *
89      * @return 頂点その1
90      */
91     public Vertex getVertex1(){
92         return this.vertex1;
93     }
94
95     /**
96      * 頂点その2を返す。
97      *
98      * @return 頂点その2
99      */
100     public Vertex getVertex2(){
101         return this.vertex2;
102     }
103
104     /**
105      * 頂点その3を返す。
106      *
107      * @return 頂点その3
108      */
109     public Vertex getVertex3(){
110         return this.vertex3;
111     }
112
113     /**
114      * {@inheritDoc}
115      * 頂点を返す反復子を生成する。
116      * 反復子がnullを返す可能性もありうる。
117      *
118      * @return {@inheritDoc}
119      */
120     @Override
121     public Iterator<Vertex> iterator(){
122         List<Vertex> list = new ArrayList<Vertex>(TRIANGLE);
123
124         list.add(this.vertex1);
125         list.add(this.vertex2);
126         list.add(this.vertex3);
127
128         return list.iterator();
129     }
130
131     /**
132      * 3頂点全てが設定されているか判定する。
133      *
134      * @return 3頂点とも非nullが設定されていればtrue
135      */
136     public boolean isCompleted(){
137         boolean result;
138         result =    this.vertex1 != null
139                  && this.vertex2 != null
140                  && this.vertex3 != null;
141         return result;
142     }
143
144     /**
145      * {@inheritDoc}
146      *
147      * @param num {@inheritDoc}
148      */
149     @Override
150     public void setSerialNumber(int num){
151         this.surfaceSerialNo = num;
152         return;
153     }
154
155     /**
156      * {@inheritDoc}
157      *
158      * @return {@inheritDoc}
159      */
160     @Override
161     public int getSerialNumber(){
162         return this.surfaceSerialNo;
163     }
164
165     /**
166      * {@inheritDoc}
167      *
168      * @return {@inheritDoc}
169      */
170     @Override
171     public String toString(){
172         StringBuilder result = new StringBuilder();
173
174         result.append("Surface(")
175               .append(getSerialNumber())
176               .append(")");
177
178         if(isCompleted()){
179             result.append(" VID=[")
180                   .append(this.vertex1.getSerialNumber())
181                   .append(',')
182                   .append(this.vertex2.getSerialNumber())
183                   .append(',')
184                   .append(this.vertex3.getSerialNumber())
185                   .append(']');
186         }
187
188         return result.toString();
189     }
190
191 }