// List of Model3D.java

import java.awt.*;


/** Model3Dクラス
 * 
 * @author  Satoshi Kitade
 * @version 1.0, 04/06/20
 */
public class Model3D extends Object implements GeomDefs {

	/** 中心位置 */
	Vector3D m_vecCenter;
	/** 三角形の数 */
	private int m_nTriNum = 0;
	/** 三角形の配列 */
	public Triangle3D m_tri3D[];

	/** コンストラクタ */
	public Model3D() {
		m_vecCenter = new Vector3D();
	}

	/** コンストラクタ */
	public Model3D(Vector3D vecCenter, int nTriNum, Triangle3D tri3D[]) {
		m_vecCenter = new Vector3D(vecCenter);
		m_nTriNum = nTriNum;
		m_tri3D = new Triangle3D[m_nTriNum];
		for ( int i = 0; i < m_nTriNum; i++ ) {
			m_tri3D[i] = new Triangle3D(this, i, tri3D[i].m_vec3DOrg[0], tri3D[i].m_vec3DOrg[1], tri3D[i].m_vec3DOrg[2]);
		}
	}

	/** コンストラクタ */
	public Model3D(Vector3D vecCenter, int nTriNum, Vector3D vec3D[]) {
		m_vecCenter = new Vector3D(vecCenter);
		m_nTriNum = nTriNum;
		m_tri3D = new Triangle3D[m_nTriNum];
		for ( int i = 0; i < m_nTriNum; i++ ) {
			m_tri3D[i] = new Triangle3D(this, i, vec3D[3*i + 0], vec3D[3*i + 1], vec3D[3*i + 2]);
		}
	}

	/** コンストラクタ */
	public Model3D(Vector3D vecCenter, int nTriNum, float fVert[]) {
		m_vecCenter = new Vector3D(vecCenter);
		m_nTriNum = nTriNum;
		m_tri3D = new Triangle3D[m_nTriNum];
		for ( int i = 0; i < m_nTriNum; i++ ) {
			m_tri3D[i] = 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 void calcPos(Camera3D cam) {
		for ( int i = 0; i < m_nTriNum; i++ ) {
			m_tri3D[i].calcPos(cam);
		}
	}

	/** 描画 */
	public void draw(Graphics g) {
		for ( int i = 0; i < m_nTriNum; i++ ) {
			m_tri3D[i].draw(g);
		}
	}

}
// End of Model3D.java
