示例#1
0
////////////////////////////////////////////////////////////////////////////////
/// Load Earth and Moon simulation scene
////////////////////////////////////////////////////////////////////////////////
void FWAS_LoadScene_EarthMoon(FWAS* simulator) {
	EVDS_OBJECT* root;
	EVDS_OBJECT* solar_system;
	simulator->log(FWAS_INFO,"FWAS_SetScene_EarthMoon: loading default scene");

	EVDS_System_GetRootInertialSpace(simulator->system,&root);
	EVDS_Object_LoadFromString(root,
"<EVDS version=\"35\">"
"	<object name=\"Earth_Inertial_Space\" type=\"propagator_rk4\">"
"		<object name=\"Earth\" type=\"planet\">"
"			<parameter name=\"gravity.mu\">3.9860044e14</parameter>"		//m3 sec-2
"			<parameter name=\"geometry.radius\">6378.145e3</parameter>"		//m
"			<parameter name=\"information.period\">86164.10</parameter>"	//sec
"			<parameter name=\"is_static\">1</parameter>"
"		</object>"
"	</object>"
"</EVDS>",&solar_system);
	EVDS_Object_Initialize(solar_system,1);
}
示例#2
0
文件: evds_system.c 项目: shevav/EVDS
////////////////////////////////////////////////////////////////////////////////
/// @brief Initialize the system and return pointer to a new EVDS_SYSTEM structure.
///
/// EVDS threading system will be initialized with the first EVDS_System_Create call. At
/// least one system must be created to make use of threading functions.
///
/// Example
/// ~~~{.c}
///		EVDS_SYSTEM* system;
///		EVDS_System_Create(&system);
/// ~~~
///
/// @param[out] p_system A pointer to new data structure will be written here
///
/// @returns Error code, pointer to system object
/// @retval EVDS_OK Everything created successfully
/// @retval EVDS_ERROR_BAD_PARAMETER "p_system" is null
/// @retval EVDS_ERROR_MEMORY Error while allocating a data structure
////////////////////////////////////////////////////////////////////////////////
int EVDS_System_Create(EVDS_SYSTEM** p_system)
{
	EVDS_OBJECT* inertial_space;
	EVDS_SYSTEM* system;
	if (!p_system) return EVDS_ERROR_BAD_PARAMETER;

	//Create new system
	system = (EVDS_SYSTEM*)malloc(sizeof(EVDS_SYSTEM));
	*p_system = system;
	if (!system) return EVDS_ERROR_MEMORY;
	memset(system,0,sizeof(EVDS_SYSTEM));

	//Initialize threading and locks
#ifndef EVDS_SINGLETHREADED
	SIMC_Thread_Initialize();
	SIMC_List_Create(&system->deleted_objects,1);
	system->cleanup_working = SIMC_Lock_Create();
#endif

	//Set system to realtime by default
	system->time = EVDS_REALTIME;

	//Data structures
	SIMC_List_Create(&system->object_types,1);
	SIMC_List_Create(&system->objects,1);
	SIMC_List_Create(&system->solvers,1); //FIXME
	SIMC_List_Create(&system->databases,1);

	//Create root inertial space
	EVDS_Object_Create(system,0,&inertial_space);
	EVDS_Object_Initialize(inertial_space,1);
	system->inertial_space = inertial_space;

	//Load built-in databases
	EVDS_System_DatabaseFromString(system,EVDS_Internal_Database); //FIXME
	return EVDS_OK;
}