📄 module_library.cpp
字号:
//---------------------------------------------------------
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 + -