std::vector<Plane_3> correctPlanes(const std::vector<Plane_3> &planes,
		const std::vector<EdgeInfo> &data)
{
	bool doEdgeScaling = (getenv("DISABLE_EDGE_SCALING") == nullptr);
	EdgeCorrector *EC = new EdgeCorrector(doEdgeScaling, planes, data);
	Ipopt::IpoptApplication *app = IpoptApplicationFactory();

	/* Intialize the IpoptApplication and process the options */
	if (app->Initialize() != Ipopt::Solve_Succeeded)
	{
		MAIN_PRINT("*** Error during initialization!");
		exit(EXIT_FAILURE);
	}

	setParameters(app->Options());
	/* Ask Ipopt to solve the problem */
	auto status = app->OptimizeTNLP(EC);
	if (status != Ipopt::Solve_Succeeded
		&& status != Ipopt::Solved_To_Acceptable_Level)
	{
		MAIN_PRINT("** The problem FAILED!");
		exit(EXIT_FAILURE);
	}

	MAIN_PRINT("*** The problem solved!");
	return EC->getResultingPlanes();
}
SContour *SContour::convexify()
{
	DEBUG_START;
	
	ASSERT(!!plane.norm && "nu is null vector");

	/*
	 * TODO: This is a temporal workaround. In future we need to perform
	 * convexification so that to remember what points are vertices of
	 * convex hull.
	 */
	auto points = getPoints();
	auto pointsMapped = mapPointsToOXYplane(points, plane.norm);
	
	std::vector<Point_2> hull;
	convex_hull_2(pointsMapped.begin(), pointsMapped.end(),
		std::back_inserter(hull));
	
	if ((int) hull.size() != (int) points.size())
	{
		ASSERT(hull.size() < points.size());
			MAIN_PRINT(COLOUR_RED
			"Warning: contour #%d is non-convex, its hull "
				"contains %d of %d of its points"
			COLOUR_NORM, id, (int) hull.size(),
			(int) points.size());
	}

	/* TODO: Add automatic conversion from Vector3d to Vector_3 !!! */
	auto extremePoints = mapPointsFromOXYplane(hull,
				Vector_3(plane.norm.x, plane.norm.y,
					plane.norm.z));

	SContour *contour = new SContour(extremePoints, plane);
	contour->id = id;
	contour->poly = poly;
#ifndef NDEBUG
	for (int iSide = 0; iSide < contour->ns; ++iSide)
	{
		SideOfContour *side = &contour->sides[iSide];
		ASSERT(qmod(side->A1 - side->A2) > 0);
	}
#endif /* NDEBUG */
	DEBUG_END;
	return contour;
}
Пример #3
0
Error Main::setup2() {


	OS::get_singleton()->initialize(video_mode,video_driver_idx,audio_driver_idx);
	if (init_use_custom_pos) {
		OS::get_singleton()->set_window_position(init_custom_pos);
	}


	register_core_singletons();

	MAIN_PRINT("Main: Setup Logo");

	bool show_logo=true;
#ifdef JAVASCRIPT_ENABLED
	show_logo=false;
#endif

	if (init_screen!=-1) {
		OS::get_singleton()->set_current_screen(init_screen);
	}
	if (init_windowed) {
		//do none..
	} else if (init_maximized) {
		OS::get_singleton()->set_window_maximized(true);
	} else if (init_fullscreen) {
		OS::get_singleton()->set_window_fullscreen(true);
	}
	MAIN_PRINT("Main: Load Remaps");

	path_remap->load_remaps();

	if (show_logo) { //boot logo!
		String boot_logo_path=GLOBAL_DEF("application/boot_splash",String());
		bool boot_logo_scale=GLOBAL_DEF("application/boot_splash_fullsize",true);
		Globals::get_singleton()->set_custom_property_info("application/boot_splash",PropertyInfo(Variant::STRING,"application/boot_splash",PROPERTY_HINT_FILE,"*.png"));

		Image boot_logo;

		boot_logo_path = boot_logo_path.strip_edges();

		if (boot_logo_path!=String() /*&& FileAccess::exists(boot_logo_path)*/) {
			print_line("Boot splash path: "+boot_logo_path);
			Error err = boot_logo.load(boot_logo_path);
		}

		if (!boot_logo.empty()) {
			OS::get_singleton()->_msec_splash=OS::get_singleton()->get_ticks_msec();
			Color clear = GLOBAL_DEF("render/default_clear_color",Color(0.3,0.3,0.3));
			VisualServer::get_singleton()->set_default_clear_color(clear);
			Color boot_bg = GLOBAL_DEF("application/boot_bg_color", clear);
			VisualServer::get_singleton()->set_boot_image(boot_logo, boot_bg,boot_logo_scale);
#ifndef TOOLS_ENABLED
			//no tools, so free the boot logo (no longer needed)
		//	Globals::get_singleton()->set("application/boot_logo",Image());
#endif

		} else {
#ifndef NO_DEFAULT_BOOT_LOGO

			MAIN_PRINT("Main: Create bootsplash");
			Image splash(boot_splash_png);

			MAIN_PRINT("Main: ClearColor");
			VisualServer::get_singleton()->set_default_clear_color(boot_splash_bg_color);
			MAIN_PRINT("Main: Image");
			VisualServer::get_singleton()->set_boot_image(splash, boot_splash_bg_color,false);
#endif
			MAIN_PRINT("Main: DCC");
			VisualServer::get_singleton()->set_default_clear_color(GLOBAL_DEF("render/default_clear_color",Color(0.3,0.3,0.3)));
			MAIN_PRINT("Main: END");
		}

		Image icon(app_icon_png);
		OS::get_singleton()->set_icon(icon);
	}
	GLOBAL_DEF("application/icon",String());
	Globals::get_singleton()->set_custom_property_info("application/icon",PropertyInfo(Variant::STRING,"application/icon",PROPERTY_HINT_FILE,"*.png,*.webp"));

	if (bool(GLOBAL_DEF("display/emulate_touchscreen",false))) {
		if (!OS::get_singleton()->has_touchscreen_ui_hint() && Input::get_singleton()) {
			//only if no touchscreen ui hint, set emulation
			InputDefault *id = Input::get_singleton()->cast_to<InputDefault>();
			if (id)
				id->set_emulate_touch(true);
		}
	}



	MAIN_PRINT("Main: Load Remaps");

	MAIN_PRINT("Main: Load Scene Types");

	register_scene_types();
	register_server_types();

	GLOBAL_DEF("display/custom_mouse_cursor",String());
	GLOBAL_DEF("display/custom_mouse_cursor_hotspot",Vector2());
	Globals::get_singleton()->set_custom_property_info("display/custom_mouse_cursor",PropertyInfo(Variant::STRING,"display/custom_mouse_cursor",PROPERTY_HINT_FILE,"*.png,*.webp"));

	if (String(Globals::get_singleton()->get("display/custom_mouse_cursor"))!=String()) {

		//print_line("use custom cursor");
		Ref<Texture> cursor=ResourceLoader::load(Globals::get_singleton()->get("display/custom_mouse_cursor"));
		if (cursor.is_valid()) {
		//	print_line("loaded ok");
			Vector2 hotspot = Globals::get_singleton()->get("display/custom_mouse_cursor_hotspot");
			Input::get_singleton()->set_custom_mouse_cursor(cursor,hotspot);
		}
	}
#ifdef TOOLS_ENABLED
	EditorNode::register_editor_types();
	ObjectTypeDB::register_type<PCKPacker>(); // todo: move somewhere else
#endif

	MAIN_PRINT("Main: Load Scripts, Modules, Drivers");

	register_module_types();
	register_driver_types();

	ScriptServer::init_languages();

	MAIN_PRINT("Main: Load Translations");

	translation_server->setup(); //register translations, load them, etc.
	if (locale!="") {

		translation_server->set_locale(locale);
	}
	translation_server->load_translations();



	_start_success=true;
	locale=String();

	MAIN_PRINT("Main: Done");

	return OK;

}
Пример #4
0
Error Main::setup(const char *execpath,int argc, char *argv[],bool p_second_phase) {

	RID_OwnerBase::init_rid();

	OS::get_singleton()->initialize_core();
	ObjectTypeDB::init();

	MAIN_PRINT("Main: Initialize CORE");

	register_core_types();
	register_core_driver_types();

	MAIN_PRINT("Main: Initialize Globals");


	Thread::_main_thread_id = Thread::get_caller_ID();

	globals = memnew( Globals );
	input_map = memnew( InputMap );


	path_remap = memnew( PathRemap );
	translation_server = memnew( TranslationServer );
	performance = memnew( Performance );
	globals->add_singleton(Globals::Singleton("Performance",performance));

	MAIN_PRINT("Main: Parse CMDLine");

	/* argument parsing and main creation */
	List<String> args;
	List<String> main_args;

	for(int i=0;i<argc;i++) {

		args.push_back(String::utf8(argv[i]));
	}

	List<String>::Element *I=args.front();

	I=args.front();

	while (I) {

		I->get()=unescape_cmdline(I->get().strip_escapes());
//		print_line("CMD: "+I->get());
		I=I->next();
	}

	I=args.front();

	video_mode = OS::get_singleton()->get_default_video_mode();

	String video_driver="";
	String audio_driver="";
	String game_path=".";
	String debug_mode;
	String debug_host;
	String main_pack;
	bool quiet_stdout=false;
	int rtm=-1;

	String remotefs;
	String remotefs_pass;

	String screen = "";

	List<String> pack_list;
	Vector<String> breakpoints;
	bool use_custom_res=true;
	bool force_res=false;

	I=args.front();

	packed_data = PackedData::get_singleton();
	if (!packed_data)
		packed_data = memnew(PackedData);

#ifdef MINIZIP_ENABLED

	//XXX: always get_singleton() == 0x0
	zip_packed_data = ZipArchive::get_singleton();
	//TODO: remove this temporary fix
	if (!zip_packed_data) {
		zip_packed_data = memnew(ZipArchive);
	}

	packed_data->add_pack_source(zip_packed_data);
#endif

	bool editor=false;

	while(I) {

		List<String>::Element *N=I->next();

		if (I->get() == "-noop") {

			// no op
		} else if (I->get()=="-h" || I->get()=="--help" || I->get()=="/?") { // resolution

			goto error;


		} else if (I->get()=="-r") { // resolution

			if (I->next()) {

				String vm=I->next()->get();

				if (vm.find("x")==-1) { // invalid parameter format

					OS::get_singleton()->print("Invalid -r argument: %s\n",vm.utf8().get_data());
					goto error;


				}

				int w=vm.get_slice("x",0).to_int();
				int h=vm.get_slice("x",1).to_int();

				if (w==0 || h==0) {

					OS::get_singleton()->print("Invalid -r resolution, x and y must be >0\n");
					goto error;

				}

				video_mode.width=w;
				video_mode.height=h;
				force_res=true;

				N=I->next()->next();
			} else {
				OS::get_singleton()->print("Invalid -p argument, needs resolution\n");
				goto error;


			}
		} else if (I->get()=="-p") { // position

			if (I->next()) {

				String vm=I->next()->get();

				if (vm.find("x")==-1) { // invalid parameter format

					OS::get_singleton()->print("Invalid -p argument: %s\n",vm.utf8().get_data());
					goto error;


				}

				int x=vm.get_slice("x",0).to_int();
				int y=vm.get_slice("x",1).to_int();

				init_custom_pos=Point2(x,y);
				init_use_custom_pos=true;

				N=I->next()->next();
			} else {
				OS::get_singleton()->print("Invalid -r argument, needs position\n");
				goto error;


			}


		} else if (I->get()=="-mx") { // video driver

			init_maximized=true;
		} else if (I->get()=="-w") { // video driver

			init_windowed=true;
		} else if (I->get()=="-vd") { // video driver

			if (I->next()) {

				video_driver=I->next()->get();
				N=I->next()->next();
			} else {
				OS::get_singleton()->print("Invalid -cd argument, needs driver name\n");
				goto error;

			}
		} else if (I->get()=="-lang") { // language

			if (I->next()) {

				locale=I->next()->get();
				N=I->next()->next();
			} else {
				OS::get_singleton()->print("Invalid -lang argument, needs language code\n");
				goto error;

			}
		} else if (I->get()=="-rfs") { // language

			if (I->next()) {

				remotefs=I->next()->get();
				N=I->next()->next();
			} else {
				goto error;

			}
		} else if (I->get()=="-rfs_pass") { // language

			if (I->next()) {

				remotefs_pass=I->next()->get();
				N=I->next()->next();
			} else {
				goto error;

			}
		} else if (I->get()=="-rthread") { // language

			if (I->next()) {

				if (I->next()->get()=="safe")
					rtm=OS::RENDER_THREAD_SAFE;
				else if (I->next()->get()=="unsafe")
					rtm=OS::RENDER_THREAD_UNSAFE;
				else if (I->next()->get()=="separate")
					rtm=OS::RENDER_SEPARATE_THREAD;


				N=I->next()->next();
			} else {
				goto error;

			}

		} else if (I->get()=="-ad") { // video driver

			if (I->next()) {

				audio_driver=I->next()->get();
				N=I->next()->next();
			} else {
				goto error;

			}

		} else if (I->get()=="-f") { // fullscreen

			//video_mode.fullscreen=false;
			init_fullscreen=true;
		} else if (I->get()=="-e" || I->get()=="-editor") { // fonud editor

			editor=true;
		} else if (I->get()=="-nowindow") { // fullscreen

			OS::get_singleton()->set_no_window_mode(true);
		} else if (I->get()=="-quiet") { // fullscreen

			quiet_stdout=true;
		} else if (I->get()=="-v") { // fullscreen
			OS::get_singleton()->_verbose_stdout=true;
		} else if (I->get()=="-path") { // resolution

			if (I->next()) {

				String p = I->next()->get();
				if (OS::get_singleton()->set_cwd(p)==OK) {
					//nothing
				} else {
					game_path=I->next()->get(); //use game_path instead
				}
				N=I->next()->next();
			} else {
				goto error;

			}
		} else if (I->get()=="-bp") { // /breakpoints

			if (I->next()) {

				String bplist = I->next()->get();
				breakpoints= bplist.split(",");
				N=I->next()->next();
			} else {
				goto error;

			}


		} else if (I->get()=="-fdelay") { // resolution

			if (I->next()) {

				OS::get_singleton()->set_frame_delay(I->next()->get().to_int());
				N=I->next()->next();
			} else {
				goto error;

			}

		} else if (I->get()=="-timescale") { // resolution

			if (I->next()) {

				OS::get_singleton()->set_time_scale(I->next()->get().to_double());
				N=I->next()->next();
			} else {
				goto error;

			}


		} else if (I->get() == "-pack") {

			if (I->next()) {

				pack_list.push_back(I->next()->get());
				N = I->next()->next();
			} else {

				goto error;
			};

		} else if (I->get() == "-main_pack") {

			if (I->next()) {

				main_pack=I->next()->get();
				N = I->next()->next();
			} else {

				goto error;
			};

		} else if (I->get()=="-debug" || I->get()=="-d") {
			debug_mode="local";
		} else if (I->get()=="-debugcol" || I->get()=="-dc") {
			debug_collisions=true;
		} else if (I->get()=="-debugnav" || I->get()=="-dn") {
			debug_navigation=true;
		} else if (I->get()=="-editor_scene") {

			if (I->next()) {

				Globals::get_singleton()->set("editor_scene",game_path=I->next()->get());
			} else {
				goto error;

			}

		} else if (I->get()=="-rdebug") {
			if (I->next()) {

				debug_mode="remote";
				debug_host=I->next()->get();
				if (debug_host.find(":")==-1) { //wrong host
					OS::get_singleton()->print("Invalid debug host string\n");
					goto error;
				}
				N=I->next()->next();
			} else {
				goto error;

			}
		} else {

			//test for game path
			bool gpfound=false;

			if (!I->get().begins_with("-") && game_path=="") {
				DirAccess* da = DirAccess::open(I->get());
				if (da!=NULL) {
					game_path=I->get();
					gpfound=true;
					memdelete(da);
				}

			}

			if (!gpfound) {
				main_args.push_back(I->get());
			}
		}

		I=N;
	}


	GLOBAL_DEF("debug/max_remote_stdout_chars_per_second",2048);
	if (debug_mode == "remote") {

		ScriptDebuggerRemote *sdr = memnew( ScriptDebuggerRemote );
		uint16_t debug_port = GLOBAL_DEF("debug/remote_port",6007);
		if (debug_host.find(":")!=-1) {
		    debug_port=debug_host.get_slicec(':',1).to_int();
		    debug_host=debug_host.get_slicec(':',0);
		}
		Error derr = sdr->connect_to_host(debug_host,debug_port);

		if (derr!=OK) {
			memdelete(sdr);
		} else {
			script_debugger=sdr;

		}
	} else if (debug_mode=="local") {

		script_debugger = memnew( ScriptDebuggerLocal );
	}


	if (remotefs!="") {

		file_access_network_client=memnew(FileAccessNetworkClient);
		int port;
		if (remotefs.find(":")!=-1) {
			port=remotefs.get_slicec(':',1).to_int();
			remotefs=remotefs.get_slicec(':',0);
		} else {
			port=6010;
		}

		Error err = file_access_network_client->connect(remotefs,port,remotefs_pass);
		if (err) {
			OS::get_singleton()->printerr("Could not connect to remotefs: %s:%i\n",remotefs.utf8().get_data(),port);
			goto error;
		}

		FileAccess::make_default<FileAccessNetwork>(FileAccess::ACCESS_RESOURCES);
	}
	if (script_debugger) {
		//there is a debugger, parse breakpoints

		for(int i=0;i<breakpoints.size();i++) {

			String bp = breakpoints[i];
			int sp=bp.find_last(":");
			if (sp==-1) {
				ERR_EXPLAIN("Invalid breakpoint: '"+bp+"', expected file:line format.");
				ERR_CONTINUE(sp==-1);
			}

			script_debugger->insert_breakpoint(bp.substr(sp+1,bp.length()).to_int(),bp.substr(0,sp));
		}
	}


#ifdef TOOLS_ENABLED
	if (editor) {
		packed_data->set_disabled(true);
		globals->set_disable_platform_override(true);
		StreamPeerSSL::initialize_certs=false; //will be initialized by editor
	}

#endif


	if (globals->setup(game_path,main_pack)!=OK) {

#ifdef TOOLS_ENABLED
		editor=false;
#else
		OS::get_singleton()->print("error: Couldn't load game path '%s'\n",game_path.ascii().get_data());

		goto error;
#endif
	}

	if (editor) {
		main_args.push_back("-editor");
		init_maximized=true;
		use_custom_res=false;
	}

	if (bool(Globals::get_singleton()->get("application/disable_stdout"))) {
		quiet_stdout=true;
	}
	if (bool(Globals::get_singleton()->get("application/disable_stderr"))) {
		_print_error_enabled = false;
	};

	if (quiet_stdout)
		_print_line_enabled=false;

	OS::get_singleton()->set_cmdline(execpath, main_args);

#ifdef TOOLS_ENABLED

	if (main_args.size()==0 && (!Globals::get_singleton()->has("application/main_loop_type")) && (!Globals::get_singleton()->has("application/main_scene") || String(Globals::get_singleton()->get("application/main_scene"))==""))
		use_custom_res=false; //project manager (run without arguments)

#endif

	input_map->load_from_globals();

	if (video_driver=="") // specified in engine.cfg
		video_driver=_GLOBAL_DEF("display/driver",Variant((const char*)OS::get_singleton()->get_video_driver_name(0)));

	if (!force_res && use_custom_res && globals->has("display/width"))
		video_mode.width=globals->get("display/width");
	if (!force_res &&use_custom_res && globals->has("display/height"))
		video_mode.height=globals->get("display/height");
	if (use_custom_res && globals->has("display/fullscreen"))
		video_mode.fullscreen=globals->get("display/fullscreen");
	if (use_custom_res && globals->has("display/resizable"))
		video_mode.resizable=globals->get("display/resizable");
	if (use_custom_res && globals->has("display/borderless_window"))
		video_mode.borderless_window = globals->get("display/borderless_window");

	if (!force_res && use_custom_res && globals->has("display/test_width") && globals->has("display/test_height")) {
		int tw = globals->get("display/test_width");
		int th = globals->get("display/test_height");
		if (tw>0 && th>0) {
			video_mode.width=tw;
			video_mode.height=th;
		}
	}


	GLOBAL_DEF("display/width",video_mode.width);
	GLOBAL_DEF("display/height",video_mode.height);
	GLOBAL_DEF("display/fullscreen",video_mode.fullscreen);
	GLOBAL_DEF("display/resizable",video_mode.resizable);
	GLOBAL_DEF("display/borderless_window", video_mode.borderless_window);
	GLOBAL_DEF("display/test_width",0);
	GLOBAL_DEF("display/test_height",0);
	OS::get_singleton()->_pixel_snap=GLOBAL_DEF("display/use_2d_pixel_snap",false);
	OS::get_singleton()->_keep_screen_on=GLOBAL_DEF("display/keep_screen_on",true);
	if (rtm==-1) {
		rtm=GLOBAL_DEF("render/thread_model",OS::RENDER_THREAD_SAFE);
		if (rtm>=1) //hack for now
			rtm=1;

	}

	if (rtm>=0 && rtm<3) {
		if (editor) {
			rtm=OS::RENDER_THREAD_SAFE;
		}
		OS::get_singleton()->_render_thread_mode=OS::RenderThreadMode(rtm);
	}



	/* Determine Video Driver */

	if (audio_driver=="") { // specified in engine.cfg
		audio_driver=GLOBAL_DEF("audio/driver",OS::get_singleton()->get_audio_driver_name(0));
	}


	for (int i=0;i<OS::get_singleton()->get_video_driver_count();i++) {

		if (video_driver==OS::get_singleton()->get_video_driver_name(i)) {

			video_driver_idx=i;
			break;
		}
	}

	if (video_driver_idx<0) {

		OS::get_singleton()->alert( "Invalid Video Driver: "+video_driver );
		video_driver_idx = 0;
		//goto error;
	}

	for (int i=0;i<OS::get_singleton()->get_audio_driver_count();i++) {

		if (audio_driver==OS::get_singleton()->get_audio_driver_name(i)) {

			audio_driver_idx=i;
			break;
		}
	}

	if (audio_driver_idx<0) {

		OS::get_singleton()->alert( "Invalid Audio Driver: "+audio_driver );
		audio_driver_idx = 0;
		//goto error;
	}

	{
		String orientation = GLOBAL_DEF("display/orientation","landscape");

		if (orientation=="portrait")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_PORTRAIT);
		else if (orientation=="reverse_landscape")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_REVERSE_LANDSCAPE);
		else if (orientation=="reverse_portrait")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_REVERSE_PORTRAIT);
		else if (orientation=="sensor_landscape")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_SENSOR_LANDSCAPE);
		else if (orientation=="sensor_portrait")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_SENSOR_PORTRAIT);
		else if (orientation=="sensor")
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_SENSOR);
		else
			OS::get_singleton()->set_screen_orientation(OS::SCREEN_LANDSCAPE);
	}

	OS::get_singleton()->set_iterations_per_second(GLOBAL_DEF("physics/fixed_fps",60));
	OS::get_singleton()->set_target_fps(GLOBAL_DEF("application/target_fps",0));

	if (!OS::get_singleton()->_verbose_stdout) //overrided
		OS::get_singleton()->_verbose_stdout=GLOBAL_DEF("debug/verbose_stdout",false);

	message_queue = memnew( MessageQueue );

	Globals::get_singleton()->register_global_defaults();

	if (p_second_phase)
		return setup2();


	return OK;

	error:

	video_driver="";
	audio_driver="";
	game_path="";

	args.clear();
	main_args.clear();

	print_help(execpath);

	if (performance)
		memdelete(performance);
	if (input_map)
		memdelete(input_map);
	if (translation_server)
		memdelete( translation_server );
	if (globals)
		memdelete(globals);
	if (script_debugger)
		memdelete(script_debugger);
	if (packed_data)
		memdelete(packed_data);
	if (file_access_network_client)
		memdelete(file_access_network_client);
	if(path_remap)
		memdelete(path_remap);

// Note 1: *zip_packed_data live into *packed_data
// Note 2: PackedData::~PackedData destroy this.
//#ifdef MINIZIP_ENABLED
//	if (zip_packed_data)
//		memdelete( zip_packed_data );
//#endif

	unregister_core_driver_types();
	unregister_core_types();

	OS::get_singleton()->_cmdline.clear();

	if (message_queue)
		memdelete( message_queue);
	OS::get_singleton()->finalize_core();
	locale=String();

	return ERR_INVALID_PARAMETER;
}
Polyhedron_3 EdgeCorrector::run()
{
	DEBUG_START;
	std::map<int, int> halfedgesMap;
	std::vector<SimpleEdge_3> edges = getEdges(initialP, halfedgesMap);
	associateEdges(edges, SData);

	printAssociatedEdges(initialP, edges, halfedgesMap);

	std::vector<SimpleEdge_3> mainEdges = extractEdges(edges);
	std::cout << "Number of extracted edges: " << mainEdges.size()
		<< std::endl;
	if (mainEdges.size() == 0)
	{
		DEBUG_END;
		return initialP;
	}

	printColouredExtractedPolyhedron(initialP, mainEdges);

	std::vector<Vector_3> u, U, points;
	std::vector<double> h, H;
	std::map<int, int> map;
	FixedTopology *FT = buildTopology(initialP, mainEdges, u, U, points, h,
			H, map);
	IpoptTopologicalCorrector *FTNLP = new IpoptTopologicalCorrector(
			u, h, U, H, points, FT);
	FTNLP->enableModeZfixed();

	IpoptApplication *app = IpoptApplicationFactory();

	/* Intialize the IpoptApplication and process the options */
	if (app->Initialize() != Solve_Succeeded)
	{
		MAIN_PRINT("*** Error during initialization!");
		return initialP;
	}

	app->Options()->SetStringValue("linear_solver", "ma57");
	if (getenv("DERIVATIVE_TEST_FIRST"))
		app->Options()->SetStringValue("derivative_test", "first-order");
	else if (getenv("DERIVATIVE_TEST_SECOND"))
		app->Options()->SetStringValue("derivative_test", "second-order");
	else if (getenv("DERIVATIVE_TEST_ONLY_SECOND"))
		app->Options()->SetStringValue("derivative_test", "only-second-order");
	if (getenv("HESSIAN_APPROX"))
		app->Options()->SetStringValue("hessian_approximation", "limited-memory");

	/* Ask Ipopt to solve the problem */
	auto status = app->OptimizeTNLP(FTNLP);
	if (status != Solve_Succeeded && status != Solved_To_Acceptable_Level)
	{
		MAIN_PRINT("** The problem FAILED!");
		DEBUG_END;
		return initialP;
	}

	MAIN_PRINT("*** The problem solved!");
	globalPCLDumper(PCL_DUMPER_LEVEL_DEBUG, "INSIDE_FT_NLP-initial.ply") << initialP;
	Polyhedron_3 correctedP = obtainPolyhedron(initialP, map, FTNLP);
	globalPCLDumper(PCL_DUMPER_LEVEL_DEBUG, "INSIDE_FT_NLP-from-planes.ply") << correctedP;

	delete FTNLP;
	DEBUG_END;
	return correctedP;
}
Пример #6
0
Error Main::setup2() {


    OS::get_singleton()->initialize(video_mode,video_driver_idx,audio_driver_idx);

    register_core_singletons();

    MAIN_PRINT("Main: Setup Logo");

    bool show_logo=true;
#ifdef JAVASCRIPT_ENABLED
    show_logo=false;
#endif

    if (show_logo) { //boot logo!
        Image boot_logo=GLOBAL_DEF("application/boot_logo",Image());

        if (!boot_logo.empty()) {
            Color clear = GLOBAL_DEF("render/default_clear_color",Color(0.3,0.3,0.3));
            VisualServer::get_singleton()->set_default_clear_color(clear);
            Color boot_bg = GLOBAL_DEF("application/boot_bg_color", clear);
            VisualServer::get_singleton()->set_boot_image(boot_logo, boot_bg);
#ifndef TOOLS_ENABLED
            //no tools, so free the boot logo (no longer needed)
            Globals::get_singleton()->set("application/boot_logo",Image());
#endif

        } else {
#ifndef NO_DEFAULT_BOOT_LOGO

            MAIN_PRINT("Main: Create botsplash");
            Image splash(boot_splash_png);

            MAIN_PRINT("Main: ClearColor");
            VisualServer::get_singleton()->set_default_clear_color(boot_splash_bg_color);
            MAIN_PRINT("Main: Image");
            VisualServer::get_singleton()->set_boot_image(splash, boot_splash_bg_color);
#endif
            MAIN_PRINT("Main: DCC");
            VisualServer::get_singleton()->set_default_clear_color(GLOBAL_DEF("render/default_clear_color",Color(0.3,0.3,0.3)));
            MAIN_PRINT("Main: END");
        }

        Image icon(app_icon_png);
        OS::get_singleton()->set_icon(icon);
    }
    GLOBAL_DEF("application/icon",String());
    Globals::get_singleton()->set_custom_property_info("application/icon",PropertyInfo(Variant::STRING,"application/icon",PROPERTY_HINT_FILE,"*.png,*.webp"));

    MAIN_PRINT("Main: Load Remaps");

    path_remap->load_remaps();

    MAIN_PRINT("Main: Load Scene Types");

    register_scene_types();
    register_server_types();

#ifdef TOOLS_ENABLED
    EditorNode::register_editor_types();
    ObjectTypeDB::register_type<PCKPacker>(); // todo: move somewhere else
#endif

    MAIN_PRINT("Main: Load Scripts, Modules, Drivers");

    register_module_types();
    register_driver_types();

    MAIN_PRINT("Main: Load Translations");

    translation_server->setup(); //register translations, load them, etc.
    if (locale!="") {

        translation_server->set_locale(locale);
    }
    translation_server->load_translations();



    _start_success=true;
    locale=String();

    MAIN_PRINT("Main: Done");

    return OK;

}