Esempio n. 1
0
void DoVisAnalyse(){
	char filename[1024];

	if ( g_FuncTable.m_pfnSelectedBrushCount() == 0 ) {
		if ( g_VisView ) {
			delete g_VisView;
			return;
		}
	}

	if ( g_FuncTable.m_pfnSelectedBrushCount() != 1 ) {
		DoMessageBox( "Invalid number of objects selected, select 1 only", "Error", MB_OK );
		return;
	}

	g_FuncTable.m_pfnAllocateSelectedBrushHandles();

	brush_t *brush = (brush_t*)g_FuncTable.m_pfnGetSelectedBrushHandle( 0 );

	DBrush orgBrush;
	orgBrush.LoadFromBrush_t( brush, false );

	g_FuncTable.m_pfnReleaseSelectedBrushHandles();

	orgBrush.BuildBounds();
	vec3_t origin;
	origin[0] = ( orgBrush.bbox_max[0] + orgBrush.bbox_min[0] ) / 2.f;
	origin[1] = ( orgBrush.bbox_max[1] + orgBrush.bbox_min[1] ) / 2.f;
	origin[2] = ( orgBrush.bbox_max[2] + orgBrush.bbox_min[2] ) / 2.f;


	char* rad_filename = g_FuncTable.m_pfnGetMapName();
	if ( !rad_filename ) {
		DoMessageBox( "An Error Occurred While Trying\n To Get The Map Filename", "Error", MB_OK );
		return;
	}

	strcpy( filename, rad_filename );

	char* ext = strrchr( filename, '.' ) + 1;
	strcpy( ext, "bsp" ); // rename the extension

	list<DWinding*> *pointList = BuildTrace( filename, origin );

	if ( !g_VisView ) {
		g_VisView = new DVisDrawer;
		g_VisView->Register();
	}

	g_VisView->SetList( pointList );
}