改め Objective Technician

はぐれ技術者のやりたい放題

ソース後半

2007-11-01 16:25:17 | プログラミング

class Dpf{

	static Point3f dpf_1d_array[];

	static MyTransformGroup dpf_tg = null;

	Point3f vertex0;
	Point3f vertex1;
	Point3f vertex2;
	Point3f middle;

	float line_length;


	static void readDpf(Vector<Point3f> dpf){


		Parameters.depth_shift = Parameters.pm_radius*5.0f;
		Parameters.bottom = Parameters.pm_radius*5.0f;

		try{

			FileReader fr = new FileReader(Parameters.dpf_filename);
			BufferedReader br = new BufferedReader(fr);

			float v0[] = new float[3];
			float v1[] = new float[3];
			float v2[] = new float[3];
			float n[] = new float[3];

			String s;

			System.out.println("DPFデータ読み込み開始");

			while((s = br.readLine()) != null) {

				StringTokenizer st = new StringTokenizer(s, ", \t", false);

				if(Dpf.read("normal", n, st))
					continue;

				s = br.readLine();
				s = br.readLine();
				st = new StringTokenizer(s, ", \t", false);
				Dpf.read("vertex", v0, st);
				s = br.readLine();
				st = new StringTokenizer(s, ", \t", false);
				Dpf.read("vertex", v1, st);
				s = br.readLine();
				st = new StringTokenizer(s, ", \t", false);
				Dpf.read("vertex", v2, st);

				if(v0[0] <Parameters.border & v1[0] < Parameters.border & v2[0] < Parameters.border & v0[2] < Parameters.border & v1[2] < Parameters.border & v2[2] < Parameters.border) { Parameters.size_x)
						Parameters.size_x = max;
					if((max = Math.max(v0[1], Math.max(v1[1], v2[1]))) > Parameters.size_y)
						Parameters.size_y = max + Parameters.bottom;
					if((max = Math.max(v0[2], Math.max(v1[2], v2[2]))) > Parameters.size_z)
						Parameters.size_z = max;

					System.out.println(dpf.size());
				}

			}

		}
		catch(IOException e){}
		System.out.println("DPFデータ読み込み完了、サイズ:(" + Math.round(Parameters.size_x) + "," + Math.round(Parameters.size_y) + "," + Math.round(Parameters.size_z) + ")");

		Parameters.setbox_num(dpf);
	}


	static void init_dpf(){
		//質感(色)の設定   
		Material mat=new Material();

		//DPFポリゴン
		Vector<Point3f> dpf = new Vector<Point3f>(0);

		//ポリゴンデータ読み込み
		Dpf.readDpf(dpf);

		Dpf.dpf_1d_array = new Point3f[Parameters.dpf_poly_num*3];
		dpf.copyInto(Dpf.dpf_1d_array);
		dpf = null;

		mat.setDiffuseColor(new Color3f(0.0f,1.0f,0.0f));
//		DPFポリゴン集合体の生成
		MyTriPolygons polygon=new MyTriPolygons(Dpf.dpf_1d_array ,mat,null, MyTriPolygons.RENDERING_ALL);

		//基準座標系の設定(DPF基準)
		Dpf.dpf_tg = new MyTransformGroup();

//		ポリゴン集合体を基準座標に設定
		Dpf.dpf_tg.addChild(polygon);

	}

	public Dpf(Point3f v0, Point3f v1, Point3f v2) {

		this.vertex0 = v0;
		this.vertex1 = v1;
		this.vertex2 = v2;

		this.middle = new Point3f((v0.x + v1.x + v2.x)/3.0f, (v0.y + v1.y + v2.y)/3.0f, (v0.z + v1.z + v2.z)/3.0f);		
		this.line_length = vertex0.distance(middle) + vertex1.distance(middle) + vertex2.distance(middle) + Parameters.pm_radius;
	}

	static void set_dpf_array(Point3f vertex[]){
		PMSimulator.culcarray = new CulcBox[Parameters.xbox_num][Parameters.ybox_num][Parameters.zbox_num];

		for(int i = 0; i <Parameters.xbox_num; i++)