⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 module_library.cpp

📁 这是一个GPS相关的程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:

//---------------------------------------------------------
bool CModule_Library::_Get_CMD(CSG_Parameters *pParameters)
{
	int			i;
	long		l;
	double		d;
	CSG_Parameter	*pParameter;
	wxString	s;

	//-----------------------------------------------------
	if( m_pCMD && pParameters && !m_pCMD->Parse() && _Create_DataObjects(pParameters) )
	{
		for(i=0; i<pParameters->Get_Count(); i++)
		{
			pParameter	= pParameters->Get_Parameter(i);

			switch( pParameter->Get_Type() )
			{
			default:
				break;

			case PARAMETER_TYPE_Bool:
				pParameter->Set_Value(m_pCMD->Found(GET_ID1(pParameter)) ? 1 : 0);
				break;

			case PARAMETER_TYPE_Int:
			case PARAMETER_TYPE_Choice:
			case PARAMETER_TYPE_Table_Field:
				if( m_pCMD->Found(GET_ID1(pParameter), &l) )
				{
					pParameter->Set_Value((int)l);
				}
				break;

			case PARAMETER_TYPE_Double:
			case PARAMETER_TYPE_Degree:
				if( m_pCMD->Found(GET_ID1(pParameter), &s) && s.ToDouble(&d) )
				{
					pParameter->Set_Value(d);
				}
				break;

			case PARAMETER_TYPE_Range:
				if( m_pCMD->Found(GET_ID2(pParameter, "MIN"), &s) && s.ToDouble(&d) )
				{
					pParameter->asRange()->Set_LoVal(d);
				}

				if( m_pCMD->Found(GET_ID2(pParameter, "MIN"), &s) && s.ToDouble(&d) )
				{
					pParameter->asRange()->Set_HiVal(d);
				}
				break;

			case PARAMETER_TYPE_String:
			case PARAMETER_TYPE_Text:
			case PARAMETER_TYPE_FilePath:
				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
				{
					pParameter->Set_Value(s.c_str());
				}
				break;

			case PARAMETER_TYPE_FixedTable:
				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
				{
					CSG_Table	Table(s.c_str());
					pParameter->asTable()->Assign_Values(&Table);
				}
				break;

			case PARAMETER_TYPE_Grid_System:
				if( pParameter->Get_Children_Count() == 0 )
				{
					int		nx, ny;
					double	d, x, y;

					if( !m_pCMD->Found(GET_ID2(pParameter, "NX"), &l) )	nx	= 1;	else	nx	= (int)l;
					if( !m_pCMD->Found(GET_ID2(pParameter, "NY"), &l) )	ny	= nx;	else	ny	= (int)l;
					if( !m_pCMD->Found(GET_ID2(pParameter,  "X"), &s) || !s.ToDouble(&x) )	x	= 0.0;
					if( !m_pCMD->Found(GET_ID2(pParameter,  "Y"), &s) || !s.ToDouble(&y) )	y	= 0.0;
					if( !m_pCMD->Found(GET_ID2(pParameter,  "D"), &s) || !s.ToDouble(&d) )	d	= 1.0;

					pParameter->asGrid_System()->Assign(d, x, y, nx, ny);
				}
				break;
			}
		}

		return( true );
	}

	return( false );
}


///////////////////////////////////////////////////////////
//                                                       //
//                                                       //
//                                                       //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CModule_Library::_Create_DataObjects(CSG_Parameters *pParameters)
{
	int			j;
	CSG_Data_Object	*pObject;
	CSG_Parameter	*pParameter;
	wxString	s;

	if( pParameters && m_pCMD )
	{
		for(j=0; j<pParameters->Get_Count(); j++)
		{
			pParameter	= pParameters->Get_Parameter(j);

			if(	pParameter->is_DataObject() || pParameter->is_DataObject_List() )
			{
				if( m_pCMD->Found(GET_ID1(pParameter), &s) )
				{
					if( pParameter->is_Input() )
					{
						if( pParameter->is_DataObject() )
						{
							switch( pParameter->Get_Type() )
							{
							default:
								pObject	= NULL;
								break;

							case PARAMETER_TYPE_Grid:
								pObject	= new CSG_Grid  (s.c_str());
								if( pObject && pObject->is_Valid() )
								{
									pParameter->Get_Parent()->asGrid_System()->Assign(((CSG_Grid *)pObject)->Get_System());
									pParameter->Set_Value(pObject);
								}
								break;

							case PARAMETER_TYPE_TIN:
								pParameter->Set_Value(pObject = new CSG_TIN   (s.c_str()));
								break;

							case PARAMETER_TYPE_Shapes:
								pParameter->Set_Value(pObject = new CSG_Shapes(s.c_str()));
								break;

							case PARAMETER_TYPE_Table:
								pParameter->Set_Value(pObject = new CSG_Table (s.c_str()));
								break;
							}

							if( !pObject || !pObject->is_Valid() )
							{
								Print_Error(LNG("input file"), s);

								return( false );
							}
						}
						else if( pParameter->is_DataObject_List() )
						{
							if( !_Create_DataObject_List(pParameter, s) && !pParameter->is_Optional() )
							{
								Print_Error(LNG("empty input list"), GET_ID1(pParameter));

								return( false );
							}
						}
					}
					else if( pParameter->is_Output() )
					{
						switch( pParameter->Get_Type() )
						{
						default:
							pObject	= NULL;
							break;

						case PARAMETER_TYPE_Grid:
							pParameter->Set_Value(pObject = new CSG_Grid  (*pParameter->Get_Parent()->asGrid_System(), GRID_TYPE_Float));
							break;

						case PARAMETER_TYPE_TIN:
							pParameter->Set_Value(pObject = new CSG_TIN   ());
							break;

						case PARAMETER_TYPE_Shapes:
							pParameter->Set_Value(pObject = new CSG_Shapes());
							break;

						case PARAMETER_TYPE_Table:
							pParameter->Set_Value(pObject = new CSG_Table ());
							break;
						}
					}
				}
				else if( !pParameter->is_Optional() )
				{
					return( false );
				}
			}
		}

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
bool CModule_Library::_Create_DataObject_List(CSG_Parameter *pParameter, wxString sList)
{
	CSG_Data_Object		*pObject;
	wxString		s;

	if( pParameter && pParameter->is_DataObject_List() )
	{
		do
		{
			s		= sList.BeforeFirst	(';');
			sList	= sList.AfterFirst	(';');

			switch( pParameter->Get_Type() )
			{
			default:							pObject	= NULL;						break;
			case PARAMETER_TYPE_Grid_List:		pObject	= new CSG_Grid  (s.c_str());	break;
			case PARAMETER_TYPE_TIN_List:		pObject	= new CSG_TIN   ( (const SG_Char*)s.c_str() );	break;
			case PARAMETER_TYPE_Shapes_List:	pObject	= new CSG_Shapes(s.c_str());	break;
			case PARAMETER_TYPE_Table_List:		pObject	= new CSG_Table (s.c_str());	break;
			}

			if( pObject && pObject->is_Valid() )
			{
				if( pParameter->Get_Type() == PARAMETER_TYPE_Grid_List && pParameter->Get_Parent()->Get_Type() == PARAMETER_TYPE_Grid_System )
				{
					pParameter->Get_Parent()->asGrid_System()->Assign(((CSG_Grid *)pObject)->Get_System());
				}

				pParameter->asList()->Add_Item(pObject);
			}
			else if( pObject )
			{
				delete(pObject);

				Print_Error(LNG("input file"), s);
			}
		}
		while( sList.Length() > 0 );

		return( pParameter->asList()->Get_Count() > 0 );
	}

	return( false );
}

//---------------------------------------------------------
bool CModule_Library::Add_DataObject(CSG_Data_Object *pObject)
{
	// leaves unsaved data and a memory leak, if <pObject> is not kept in parameters list either !!!
	// to be done...

	return( true );
}


///////////////////////////////////////////////////////////
//                                                       //
//                                                       //
//                                                       //
///////////////////////////////////////////////////////////

//---------------------------------------------------------
bool CModule_Library::_Destroy_DataObjects(bool bSave)
{
	if( m_pSelected && m_pCMD )
	{
		_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters());

		for(int i=0; i<m_pSelected->Get_Parameters_Count(); i++)
		{
			// to be done...
			_Destroy_DataObjects(bSave, m_pSelected->Get_Parameters(i));
		}

		return( true );
	}

	return( false );
}

//---------------------------------------------------------
bool CModule_Library::_Destroy_DataObjects(bool bSave, CSG_Parameters *pParameters)
{
	int			i, j;
	CSG_Parameter	*pParameter;
	wxString	s;

	if( pParameters && m_pCMD )
	{
		for(j=0; j<pParameters->Get_Count(); j++)
		{
			pParameter	= pParameters->Get_Parameter(j);

			if( bSave && pParameter->is_Output() && m_pCMD->Found(GET_ID1(pParameter), &s) )
			{
				if( pParameter->is_DataObject() )
				{
					if( pParameter->asDataObject() )
					{
						pParameter->asDataObject()->Save(s);
					}
				}
				else if( pParameter->is_DataObject_List() )
				{
					if( pParameter->asList()->Get_Count() == 1 )
					{
						pParameter->asList()->asDataObject(0)->Save(s);
					}
					else
					{
						for(i=0; i<pParameter->asList()->Get_Count(); i++)
						{
							pParameter->asList()->asDataObject(i)->Save(CSG_String::Format(SG_T("%s_%02d"), s.c_str(), i + 1));
						}
					}
				}
			}

			if( pParameter->is_DataObject() )
			{
				if( pParameter->asDataObject() )
				{
					delete(pParameter->asDataObject());
					pParameter->Set_Value(DATAOBJECT_NOTSET);
				}
			}
			else if( pParameter->is_DataObject_List() )
			{
				for(i=pParameter->asList()->Get_Count()-1; i>=0; i--)
				{
					delete(pParameter->asList()->asDataObject(i));
				}

				pParameter->asList()->Del_Items();
			}
		}

		return( true );
	}

	return( false );
}


///////////////////////////////////////////////////////////
//                                                       //
//                                                       //
//                                                       //
///////////////////////////////////////////////////////////

//---------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -