// List of Model3D.java

import java.awt.*;
import java.util.*;


/** Model3Dクラス
 * 
 * @author  Satoshi Kitade
 * @version 1.1, 04/08/20
 */
public class Model3D extends Object implements GeomDefs {

	/** 中心位置 */
	private Vector3D m_vecCenter;
	/** 描画要素のArrayList */
	private ArrayList m_primList;

	/** コンストラクタ */
	public Model3D(Vector3D vecCenter) {
		m_vecCenter = new Vector3D(vecCenter);
		m_primList = new ArrayList();
	}

	/** 三角形の追加 */
	public void addTriangle3D(int nTriNum, Triangle3D tri3D[]) {
		for ( int i = 0; i < nTriNum; i++ ) {
			m_primList.add( new Triangle3D(this, i, tri3D[i].m_vec3DOrg[0], tri3D[i].m_vec3DOrg[1], tri3D[i].m_vec3DOrg[2]) );
		}
	}

	/** 三角形の追加 */
	public void addTriangle3D(int nTriNum, Vector3D vec3D[]) {
		for ( int i = 0; i < nTriNum; i++ ) {
			m_primList.add( new Triangle3D(this, i, vec3D[3*i + 0], vec3D[3*i + 1], vec3D[3*i + 2]) );
		}
	}

	/** 三角形の追加 */
	public void addTriangle3D(int nTriNum, float fVert[]) {
		for ( int i = 0; i < nTriNum; i++ ) {
			m_primList.add( new Triangle3D(this, i,
										fVert[9*i + 0], fVert[9*i + 1], fVert[9*i + 2],
										fVert[9*i + 3], fVert[9*i + 4], fVert[9*i + 5],
										fVert[9*i + 6], fVert[9*i + 7], fVert[9*i + 8] ) );
		}
	}

	/** 中心位置を設定 */
	public final void setCenter(Vector3D vecCenter) {
		m_vecCenter.set(vecCenter);
	}

	/** 中心位置ベクトルを設定 */
	public final void setVecCenter(Vector3D vecCenter) {
		m_vecCenter = vecCenter;
	}
	/** 中心位置ベクトルを返す */
	public final Vector3D getVecCenter() {
		return m_vecCenter;
	}

	/** 表示座標を計算 */
	public final void update(SceneManager3D sceneManager3D) {
		for ( int i = 0; i < m_primList.size(); i++ ) {	// 要素の数だけループ
			Primitive3D prim = (Primitive3D)(m_primList.get(i));
			prim.update(sceneManager3D);
		}
	}

}
// End of Model3D.java
