コード例 #1
0
ファイル: main.cpp プロジェクト: medoherty60/minidog
int main(int argc, char** argv) {
	
	//QApplication* app = new QApplication(argc, argv);
	Configurations& conf = CONF;
	FileManager fm;
	Matrix3D<float> dataPointsObj;
	Matrix3D<float> originalDensityVolObj;
	Matrix3D<float> binaryVolObj;
	MarchingCubes* mcs = new MarchingCubes;
	char* fileName = (char*)"dataFile/DFORMAT_MeristemSmooth.txt";
	float start_time=0.0;
	float end_time=0.0;
	
	//-- Step 1: Read Data --
	//Output: Matrix3D m3D_imageData holding density values
	if (fm.readDataFormat(fileName, conf)) {
		
		if(!fm.readVolumeData(dataPointsObj, conf, 1))
		 { cout<<"read data file 1 error"; return 0; } 
		
		if(conf.cf_numFiles==2 && !fm.readVolumeData(originalDensityVolObj, conf, 2))
		 { cout<<"read data file 2 error"; return 0; } 
		
		if(conf.cf_numFiles==3){
			
			bool rf2 = fm.readVolumeData(originalDensityVolObj, conf, 2);
			bool rf3 = fm.readVolumeData(binaryVolObj, conf, 3);
			
			if(!rf2) { cout<<"Reading Error: data file 2"; return 0; } 
			if(!rf3) { cout<<"Reading Error: data file 3"; return 0; } 
		}
				
	}else { cout<<"read format file error"; return 0; }	

	//-- Step 2: Create Active Cubes --
	cout<<"Make Cubes begins... "<<endl;
	start_time = getTime();
	mcs->set_resolution(conf.cf_xdim, conf.cf_ydim, conf.cf_zdim);
	mcs->init_all();
	mcs->set_ext_data(dataPointsObj.getPointer());
	
	if(conf.cf_numFiles==1)
		mcs->run( conf, conf.cf_isoVal );
	else if(conf.cf_numFiles==2){
		mcs->run( conf,  conf.cf_isoVal, &originalDensityVolObj, &binaryVolObj );		//Gradients on original density volume
		originalDensityVolObj.resize(1,81, 1);
		binaryVolObj.resize(1, 1, 1); 
	}
	else if(conf.cf_numFiles==3){
		mcs->run( conf,  conf.cf_isoVal, &originalDensityVolObj, &binaryVolObj );		//Gradients on original density volume
		originalDensityVolObj.resize(1, 1, 1); 
		binaryVolObj.resize(1, 1, 1); 
	}
	end_time = getTime();
	cout<<"## Time for running Marching Cubes: "<<end_time-start_time<<" seconds"<<endl;
	cout<<"num of triangles="<<mcs->ntrigs()<<", number of vertices="<<mcs->nverts()<<endl;
	
	mcs->clean_temps();
		//mcs->writePLY("test.ply");
	mcs->clean_all();
	
	//sliderWindow *sw = new sliderWindow(app); 
	
	//-- Step 7: Rendering --
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(width, height);
	glutInitWindowPosition(100, 50);
	main_window = glutCreateWindow("Volume Visualization using - Marina Doherty ( TL:MC July, 2013)");
	
	//Register callback routines for main window
	glutDisplayFunc(displayFaces);
	glutReshapeFunc(reshape);
	glutIdleFunc(idle);
	
	object_window = glutCreateSubWindow(main_window, 0, 0, 700, 700);
	glutDisplayFunc(renderSceneow);
	init();
	
	controlPanel_window = glutCreateSubWindow(main_window, 700, 0, 300, 750);
	glutDisplayFunc(renderScenecpw);
	
	text_window = glutCreateSubWindow(main_window, 0, 700, 700, 50);
	glutDisplayFunc(renderScenetw);

	glutMainLoop();
	//app->exec();
	return 0;
}