63#define GET_XML_CONTENT(XML, ID, DEFAULT, TRANSLATE) (!XML(ID) ? CSG_String(DEFAULT) : !TRANSLATE ? XML[ID].Get_Content() : CSG_String(SG_Translate(XML[ID].Get_Content())))
65#define IS_TRUE_STRING(String) (!String.CmpNoCase("true") || !String.CmpNoCase("1"))
66#define IS_TRUE_PROPERTY(Item, Property) (Item.Cmp_Property(Property, "true", true) || Item.Cmp_Property(Property, "1"))
84 Create(Tool, bWithGUI, bWithCMD);
106void CSG_Tool_Chain::Reset(
void)
120 m_Library_Menu = Menu;
131 if( !
Create(Tool.m_Chain) )
137 m_Library = Tool.m_Library;
138 m_Library_Menu = Tool.m_Library_Menu;
139 m_File_Name = Tool.m_File_Name;
140 m_bGUI = bWithGUI && m_bGUI;
141 m_bCMD = bWithCMD && m_bCMD;
161 if( !
Chain.Load(File) )
168 if(
Chain.Cmp_Name(
"toolchains") )
173 if( !
Chain.Cmp_Name(
"toolchain") || !
Chain(
"identifier") || !
Chain(
"parameters") )
192 m_File_Name.Clear(); Reset();
202 if( !
Chain.Cmp_Name(
"toolchain") || !
Chain(
"identifier") || !
Chain(
"parameters") || !
Chain(
"tools") )
209 Error_Fmt(
"%s %s: %s",
_TL(
"Warning"),
_TL(
"unsupported tool chain version"),
Chain.Get_Property(
"saga-version"));
224 if( m_Library.is_Empty() )
226 m_Library =
"toolchains";
232 Description.
Replace(
"[[",
"<");
233 Description.
Replace(
"]]",
">");
236 if( !m_Menu.is_Empty() && (m_Menu.Length() < 2 || m_Menu[1] !=
':') )
239 m_Menu.Prepend(
"A:");
241 m_Menu.Prepend(
"R:");
247 for(
int i=0; i<m_Chain[
"parameters"].Get_Children_Count(); i++)
249 const CSG_MetaData &Parameter = m_Chain[
"parameters"][i];
269 CSG_String Value;
int Constraint = 0;
bool bMin =
false, bMax =
false;
double Min = 0., Max = 0.;
275 else if( Parameter.
Cmp_Name(
"output") )
279 else if( Parameter.
Cmp_Name(
"option") && Parameter(
"value") )
288 if( Parameter(
"condition") )
294 if( Parameter[j].Cmp_Name(
"condition") )
345 ?
Parameters.Add_Grid_Output (
"", ID, Name, Desc)
346 :
Parameters.Add_Grid (ParentID, ID, Name, Desc, Constraint);
break;
349 ?
Parameters.Add_Grids_Output (
"", ID, Name, Desc)
350 :
Parameters.Add_Grids (ParentID, ID, Name, Desc, Constraint);
break;
390 return( !m_Chain(
"CRS_SYNC") ||
IS_TRUE_STRING(m_Chain[
"CRS_SYNC"].Get_Content()) );
394void CSG_Tool_Chain::Add_References(
void)
398 if( !m_Chain[i].
Get_Name().CmpNoCase(
"REFERENCE") )
400 CSG_String Authors, Year, Title, Where, Link, Link_Text, DOI;
402 if( m_Chain[i](
"AUTHORS" ) ) Authors = m_Chain[i].
Get_Content(
"AUTHORS" );
403 if( m_Chain[i](
"YEAR" ) ) Year = m_Chain[i].
Get_Content(
"YEAR" );
404 if( m_Chain[i](
"TITLE" ) ) Title = m_Chain[i].
Get_Content(
"TITLE" );
405 if( m_Chain[i](
"WHERE" ) ) Where = m_Chain[i].
Get_Content(
"WHERE" );
406 if( m_Chain[i](
"LINK" ) ) Link = m_Chain[i].
Get_Content(
"LINK" );
407 if( m_Chain[i](
"LINK_TEXT") ) Link_Text = m_Chain[i].
Get_Content(
"LINK_TEXT");
408 if( m_Chain[i](
"DOI" ) ) DOI = m_Chain[i].
Get_Content(
"DOI" );
412 Link =
"https://doi.org/" + DOI; Link_Text =
"doi:" + DOI;
435 for(
int iParameter=0; iParameter<m_Conditions.Get_Children_Count(); iParameter++)
437 const CSG_MetaData &Conditions = m_Conditions[iParameter];
439 if( (*pParameters)(Conditions.
Get_Name()) )
443 for(
int iCondition=0; bEnable && iCondition<Conditions.
Get_Children_Count(); iCondition++)
445 bEnable = Check_Condition(Conditions[iCondition], pParameters);
448 (*pParameters)(Conditions.
Get_Name())->Set_Enabled(bEnable);
463 bool bResult = Data_Initialize();
470 for(
int i=0; bResult && i<m_Chain[
"tools"].Get_Children_Count(); i++)
472 bResult = Tool_Run(m_Chain[
"tools"][i]);
493 CSG_Parameter *pParameter = m_Data(ID);
499 Error_Fmt(
"%s\n[%s] %s <> %s",
_TL(
"Tool chain uses same variable name for different data object types."),
558 for(
int i=0; i<pData->
asList()->Get_Item_Count(); i++)
593bool CSG_Tool_Chain::Data_Del_Temp(
const CSG_String &ID,
bool bData)
595 CSG_Parameter *pData = m_Data(ID);
607 for(
int i=0; i<pData->
asList()->Get_Item_Count(); i++)
614 m_Data.Del_Parameter(ID);
621bool CSG_Tool_Chain::Data_Update(
const CSG_String &ID,
bool bShow)
623 CSG_Parameter *pData = m_Data(ID);
641 for(
int i=0; i<m_Data.Get_Count(); i++)
643 if( m_Data[i].is_DataObject() )
645 if( pData == m_Data[i].asDataObject() )
650 else if( m_Data[i].is_DataObject_List() )
652 for(
int j=0; j<m_Data[i].asList()->Get_Item_Count(); j++)
654 if( pData == m_Data[i].asList()->Get_Item(j) )
666bool CSG_Tool_Chain::Data_Initialize(
void)
668 m_Data.Set_Manager(NULL);
687bool CSG_Tool_Chain::Data_Finalize(
void)
711 for(
int j=0; j<pData->
asList()->Get_Item_Count(); j++)
717 for(
int j=0; j<P.
asList()->Get_Item_Count(); j++)
724 m_Data_Manager.Delete();
729 for(
int i=0; i<m_Chain[
"parameters"].Get_Children_Count(); i++)
731 const CSG_MetaData &Parameter = m_Chain[
"parameters"][i];
739 if( Parameter(
"colours") )
744 if( Parameter(
"copy_settings") )
746 CSG_Parameter *pInput =
Parameters(Parameter[
"copy_settings"].Get_Content());
754 if( Parameter(
"output_name") )
758 CSG_Parameter *pInput =
Parameters(Parameter[
"output_name"].Get_Content());
764 if( Parameter[
"output_name"].Get_Property(
"suffix", Suffix) && !Suffix.
is_Empty() )
766 Suffix =
" [" + Suffix +
"]";
772 else if( !Parameter[
"output_name"].Get_Content().is_Empty() )
819bool CSG_Tool_Chain::Message(
const CSG_MetaData &Message)
821 if( Message.Cmp_Name(
"message") )
828 Message_Fmt(
"\n%s", Message.Get_Content().c_str());
866 CSG_Parameter *pParameter = (*pData)(Variable);
873 return( (*pData)(Variable) == NULL || (*pData)(Variable)->asDataObject() == NULL );
877 CSG_Parameter *pOption = (*pData)(Variable);
879 if( pOption == NULL )
909 if( !Type.
CmpNoCase(
"=") || !Type.
CmpNoCase(
"equal" ) ) {
if( Value != pOption->
asInt() ) {
return(
false ); } }
910 else if( !Type.
CmpNoCase(
"!") || !Type.
CmpNoCase(
"not_equal") ) {
if( Value == pOption->
asInt() ) {
return(
false ); } }
911 else if( !Type.
CmpNoCase(
"<") || !Type.
CmpNoCase(
"less" ) ) {
if( Value >= pOption->
asInt() ) {
return(
false ); } }
912 else if( !Type.
CmpNoCase(
">") || !Type.
CmpNoCase(
"greater" ) ) {
if( Value <= pOption->asInt() ) {
return(
false ); } }
928 else if( !Type.
CmpNoCase(
">") || !Type.
CmpNoCase(
"greater" ) ) {
if( Value <= pOption->asDouble() ) {
return(
false ); } }
981bool CSG_Tool_Chain::ForEach(
const CSG_MetaData &Commands)
985 if( Commands[i].Cmp_Name(
"output") || Commands[i].Cmp_Name(
"datalist") )
987 Data_Add_TempList(Commands[i].Get_Content(), Commands[i].Get_Property(
"type"));
998 return( ForEach_Iterator(Commands, VarName, bIgnoreErrors) );
1003 return( ForEach_Object (Commands, VarName, bIgnoreErrors)
1004 || ForEach_File (Commands, VarName, bIgnoreErrors) );
1007 Error_Set(
"foreach statement misses iterator or input list definition");
1013bool CSG_Tool_Chain::ForEach_Iterator(
const CSG_MetaData &Commands,
const CSG_String &VarName,
bool bIgnoreErrors)
1015 CSG_Parameter *pIterator =
Parameters(VarName);
1019 Error_Set(
"foreach statement iterator variable name is already in use");
1032 Error_Set(
"foreach iterator statement with invalid range (define begin < end)");
1045 step = (end - begin) / steps;
1055 Error_Set(
"foreach iterator statement with invalid step size (define step > 0 or steps > 0)");
1060 Message_Fmt(
"\nfor i = %f to %f step %f (%d steps)", begin, end, step, (
int)((end - begin) / step));
1063 bool bResult =
true;
1065 pIterator =
Parameters.Add_Double(
"", VarName,
"Iterator",
"");
1067 for(
double i=begin; bResult && i<=end; i+=step)
1075 const CSG_MetaData &Tool = Commands[iTool];
1079 bResult = Tool_Run(Tool, bIgnoreErrors);
1081 if( !bResult && bIgnoreErrors )
1095bool CSG_Tool_Chain::ForEach_Object(
const CSG_MetaData &Commands,
const CSG_String &ListVarName,
bool bIgnoreErrors)
1097 CSG_Parameter *pList = m_Data(ListVarName);
1105 bool bResult =
true;
1109 for(
int iObject=0; bResult && iObject<pList->
asList()->Get_Item_Count(); iObject++)
1113 const CSG_MetaData &Tool = Commands[iTool];
1119 if( Tool[j].Cmp_Name(
"input") && Tool[j].Get_Content().Find(ListVarName) == 0 )
1126 bResult = Tool_Run(Tool, bIgnoreErrors);
1129 if( !bResult && bIgnoreErrors )
1139 for(
int iObject=0; bResult && iObject<pList->
asGrids()->Get_Grid_Count(); iObject++)
1143 const CSG_MetaData &Tool = Commands[iTool];
1149 if( Tool[j].Cmp_Name(
"input") && Tool[j].Get_Content().Find(ListVarName) == 0 )
1156 bResult = Tool_Run(Tool, bIgnoreErrors);
1159 if( !bResult && bIgnoreErrors )
1170bool CSG_Tool_Chain::ForEach_File(
const CSG_MetaData &Commands,
const CSG_String &ListVarName,
bool bIgnoreErrors)
1172 CSG_Parameter *pList =
Parameters(ListVarName);
1184 bool bResult =
true;
1186 for(
int iFile=0; bResult && iFile<Files.
Get_Count(); iFile++)
1190 const CSG_MetaData &Tool = Commands[iTool];
1194 CSG_Array_Int Input;
1198 if( Tool[j].Cmp_Name(
"option") && Tool[j].Get_Content().Find(ListVarName) == 0 &&
IS_TRUE_PROPERTY(Tool[j],
"varname") )
1207 bResult = Tool_Run(Tool, bIgnoreErrors);
1209 for(
size_t i=0; i<Input.
Get_uSize(); i++)
1217 bResult = Tool_Run(Tool, bIgnoreErrors);
1220 if( !bResult && bIgnoreErrors )
1236bool CSG_Tool_Chain::Tool_Run(
const CSG_MetaData &Tool,
bool bShowError)
1270 const CSG_MetaData *pTools = (!Check_Condition(Tool, &m_Data) || !Check_Condition(Tool, &
Parameters))
1271 ? Tool(
"else") : (Tool(
"if") ? Tool(
"if") : &Tool);
1275 if( !Tool_Run((*pTools)[i]) )
1287 return( ForEach(Tool) );
1298 if( bShowError )
Error_Set(
_TL(
"invalid tool definition"));
1322 bool bResult =
false;
1328 else if( !Tool_Initialize(Tool, pTool) )
1332 else if( !(bResult = pTool->
Execute(m_bAddHistory)) )
1342 Tool_Finalize(Tool, pTool);
1357bool CSG_Tool_Chain::Tool_Check_Condition(
const CSG_MetaData &Tool)
1359 if( Tool(
"condition") )
1363 if( !Check_Condition(Tool[i], &m_Data) )
1381 CSG_Parameter *pParameter = (*pParameters)(ID.
BeforeFirst(
'.'));
1388 *ppParameter = pParameter;
1393 *ppOwner = pParameter;
1401 *ppOwner = pParameter;
1406 *ppOwner = pParameter;
1410 *ppParameter = pParameter;
1433 CSG_Parameter *pOwner;
if( !ppOwner ) { ppOwner = &pOwner; } *ppOwner = NULL;
1446 return( Tool_Get_Parameter(ID, pParameters, ppParameter, ppOwner) );
1455 const CSG_MetaData &Parameter = Tool[i];
if( Parameter.
Cmp_Name(
"comment") ) {
continue; }
1457 if( Parameter.
Cmp_Name(
"message") )
1464 CSG_Parameter *pParameter, *pOwner;
1466 if( !Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner) )
1483 Message_Fmt(
"\n%s: %s\n",
_TL(
"Warning"),
_TL(
"failed to set tool's grid system"));
1491 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"option") ) {
continue; }
1493 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1497 CSG_Parameter *pData = m_Data(Parameter.
Get_Content());
1518 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"input") ) {
continue; }
1520 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1529 bool bResult =
false;
1543 bResult = pParameter->
Set_Value(pObject);
1556 for(
int i=0; bResult && i<pData->
asList()->Get_Item_Count(); i++)
1563 bResult = pParameter->
Assign(pData);
1570 else if( Parameter_isCompatible(pParameter->
Get_Type(), pData->
Get_Type()) )
1591 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"option") ) {
continue; }
1593 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1616 if( Parameter(
"OPTION") )
1618 pParameter->
Serialize(*Parameter(
"OPTION"),
false);
1625 if( Value.
Find(
"$(") >= 0 )
1631 if( Value.
Find(Var) >= 0 )
1653 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"output") ) {
continue; }
1655 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1667 else if( pParameter->
asGrids() )
1683 const CSG_MetaData &Parameter = Tool[i];
1694 if( !pParameter || !Data_Add(Parameter.
Get_Content(), pParameter) )
1706 for(
int j=0; j<pParameters->
Get_Count(); j++)
1708 CSG_Parameter *pParameter = (*pParameters)(j);
1721 for(
int k=0; k<pParameter->
asList()->Get_Item_Count(); k++)
1753 _Get_Script_Tool(Tool, pTool->
Get_Parameters(), bAllParameters,
"", bHeader);
1762 return( Tool.
asText(1) );
1781 Tools.
Add_Child(
"identifier" ,
"define-a-unique-tool-identifier-here");
1791 return( Tools.
asText(1) );
1797 for(
int iParameter=0; iParameter<pParameters->
Get_Count(); iParameter++)
1806 CSG_MetaData *pChild = NULL;
1885 for(
int i=0; i<pParameters->
Get_Count(); i++)
1896 CSG_MetaData &Parameter = *
Parameters.Add_Child(
1957 switch( ((CSG_Parameter_Data_Object_Output *)&P)->Get_DataObject_Type() )
1976 switch( ((CSG_Parameter_Shapes *)&P)->Get_Shape_Type() )
1987 && !((CSG_Parameter_Grid_List *)&P)->Get_System() )
1993 && !((CSG_Parameter_Grid_List *)&P)->Get_System() )
2019 m_Name =
_TL(
"Uncategorized Tool Chains");
2020 m_Description =
_TL(
"Uncategorized Tool Chains");
2021 m_Menu =
_TL(
"Uncategorized Tool Chains");
2038 m_Description.Replace(
"[[",
"<");
2039 m_Description.Replace(
"]]",
">");
2044 if( !XML[i].
Get_Name().CmpNoCase(
"REFERENCE") )
2046 CSG_String Authors, Year, Title, Where, Link, Link_Text, DOI;
2048 if( XML[i](
"AUTHORS" ) ) Authors = XML[i].
Get_Content(
"AUTHORS" );
2049 if( XML[i](
"YEAR" ) ) Year = XML[i].
Get_Content(
"YEAR" );
2050 if( XML[i](
"TITLE" ) ) Title = XML[i].
Get_Content(
"TITLE" );
2051 if( XML[i](
"WHERE" ) ) Where = XML[i].
Get_Content(
"WHERE" );
2052 if( XML[i](
"LINK" ) ) Link = XML[i].
Get_Content(
"LINK" );
2053 if( XML[i](
"LINK_TEXT") ) Link_Text = XML[i].
Get_Content(
"LINK_TEXT");
2054 if( XML[i](
"DOI" ) ) DOI = XML[i].
Get_Content(
"DOI" );
2058 Link =
"https://doi.org/" + DOI; Link_Text =
"doi:" + DOI;
2079 for(
size_t i=0; i<m_Tools.Get_uSize(); i++)
2147 if( m_xTools.Del(pTool) || m_Tools.Del(pTool) )
2160 for(
size_t i=0; i<m_xTools.Get_uSize(); i++)
2185 const CSG_MetaData &Tool(History(
"TOOL") ? History[
"TOOL"] : History[
"MODULE"]);
2187 if( !Tool(
"OUTPUT") )
2195 Chain.Set_Name (
"toolchain" );
2198 Chain.Add_Child (
"group" ,
"toolchains");
2201 Chain.Add_Child (
"description",
_TL(
"created from history"));
2203 Chain.Add_Child (
"parameters" );
2204 Chain.Add_Child (
"tools" );
2206 _Save_History_Add_Tool(Tool, *
Chain(
"parameters"), *
Chain(
"tools"),
true);
2208 for(
int i=0; i<
Chain[
"tools"].Get_Children_Count(); i++)
2210 Chain[
"tools"](i)->Del_Property(
"id");
2213 return(
Chain.Save(File) );
2219 if( !History(
"OUTPUT") || !History[
"OUTPUT"].Get_Property(
"id") )
2225 CSG_MetaData *pParameter, &Tool = *Tools.
Ins_Child(
"tool", 0);
2235 const CSG_MetaData &Output = History[
"OUTPUT"];
2239 pParameter = Tool.
Add_Child(
"output", VarName);
2256 CSG_MetaData *pChild = History.
Get_Child(i);
2302 _Save_History_Add_Input(*pChild, Parms, Tool);
2308 _Save_History_Add_Input(*pChild->
Get_Child(j), Parms, Tool);
2319 CSG_MetaData *pInput = Tool.
Add_Child(
"input");
2324 if( History(
"TOOL") || History(
"MODULE") )
2326 const CSG_MetaData &History_Tool(History(
"TOOL") ? History[
"TOOL"] : History[
"MODULE"]);
2328 if( History_Tool(
"OUTPUT") && History_Tool[
"OUTPUT"].Get_Property(
"id") )
2332 return( _Save_History_Add_Tool(History_Tool, Parms, *Tool.
Get_Parent()) );
2340 CSG_MetaData *pParameter = Parms.
Ins_Child(
"input", 0);
void SG_UI_Msg_Add(const char *Message, bool bNewLine, TSG_UI_MSG_STYLE Style)
bool SG_UI_DataObject_Add(CSG_Data_Object *pDataObject, int Show)
@ SG_UI_MSG_STYLE_FAILURE
@ SG_UI_MSG_STYLE_SUCCESS
SAGA_API_DLL_EXPORT bool SG_File_Cmp_Extension(const CSG_String &File, const CSG_String &Extension)
SAGA_API_DLL_EXPORT const SG_Char * SG_Translate(const CSG_String &Text)
SAGA_API_DLL_EXPORT CSG_String SG_File_Make_Path(const CSG_String &Directory, const CSG_String &Name)
SAGA_API_DLL_EXPORT CSG_String SG_File_Get_Name(const CSG_String &full_Path, bool bExtension)
@ SG_UI_DATAOBJECT_SHOW_MAP
@ SG_UI_DATAOBJECT_UPDATE
size_t Get_uSize(void) const
const SG_Char * Get_Name(void) const
void Set_Name(const CSG_String &Name)
virtual bool is_Valid(void) const =0
class CSG_Grid * asGrid(bool bPolymorph=false) const
bool Create(const CSG_Grid_System &System, int Precision=-1)
bool is_Valid(void) const
const CSG_Grid_System & Get_System(void) const
bool Del_Grids(bool bDetach=false)
CSG_Grid * Get_Grid_Ptr(int i) const
CSG_String Get_Items(bool bIncludeData=false) const
CSG_String Get_Items(void) const
virtual TSG_Parameter_Type Get_Type(void) const
bool is_Directory(void) const
bool is_Multiple(void) const
bool Get_FilePaths(CSG_Strings &FilePaths) const
const SG_Char * Get_Filter(void) const
virtual TSG_Parameter_Type Get_Type(void) const
virtual bool Del_Items(void)
CSG_Data_Object * Get_Item(int Index) const
virtual bool Add_Item(CSG_Data_Object *pItem)
int Get_Item_Count(void) const
CSG_Parameter_Double * Get_Min_Parameter(void) const
CSG_Parameter_Double * Get_Max_Parameter(void) const
virtual TSG_Parameter_Type Get_Type(void) const
double Get_Minimum(void) const
double Get_Maximum(void) const
bool has_Maximum(void) const
bool has_Minimum(void) const
const SG_Char * Get_Identifier(void) const
bool is_DataObject(void) const
class CSG_Parameters * asParameters(void) const
bool Assign(CSG_Parameter *pSource)
CSG_Grids * asGrids(void) const
CSG_String Get_Type_Identifier(void) const
bool is_Optional(void) const
TSG_Data_Object_Type Get_DataObject_Type(void) const
bool Serialize(CSG_MetaData &MetaData, bool bSave)
int Get_Children_Count(void) const
class CSG_Parameter_Choice * asChoice(void) const
class CSG_Parameter_Value * asValue(void) const
double asDouble(void) const
CSG_Parameter * Get_Parent(void) const
virtual TSG_Parameter_Type Get_Type(void) const =0
bool is_Input(void) const
const SG_Char * Get_Name(void) const
class CSG_Parameter_Choices * asChoices(void) const
bool is_Enabled(bool bCheckEnv=true) const
bool is_Option(void) const
virtual bool Set_Value(int Value)
class CSG_Parameter_List * asList(void) const
CSG_Grid_System * asGrid_System(void) const
CSG_Data_Object * asDataObject(void) const
class CSG_Parameter_Range * asRange(void) const
bool is_Output(void) const
bool has_Changed(int Check_Flags=PARAMETER_CHECK_ALL)
class CSG_Parameter_File_Name * asFilePath(void) const
bool is_Information(void) const
const SG_Char * asString(void) const
CSG_Table * asTable(void) const
const SG_Char * Get_Description(void) const
bool is_DataObject_List(void) const
const CSG_String & Get_Identifier(void) const
int Get_Count(void) const
bool Del_Parameters(void)
CSG_Parameter * Get_Parameter(int i) const
CSG_String AfterFirst(char Character) const
int CmpNoCase(const CSG_String &String) const
int Cmp(const CSG_String &String) const
CSG_String BeforeFirst(char Character) const
size_t Replace(const CSG_String &Old, const CSG_String &New, bool bReplaceAll=true)
static CSG_String Format(const char *Format,...)
int Find(char Character, bool fromEnd=false) const
CSG_String Right(size_t count) const
const SG_Char * c_str(void) const
CSG_String & Make_Lower(void)
int Printf(const char *Format,...)
bool is_Empty(void) const
double asDouble(void) const
int Get_Count(void) const
bool Assign_Values(const CSG_Table &Table)
@ SG_DATAOBJECT_TYPE_PointCloud
@ SG_DATAOBJECT_TYPE_Grids
@ SG_DATAOBJECT_TYPE_Shapes
@ SG_DATAOBJECT_TYPE_Grid
@ SG_DATAOBJECT_TYPE_Table
#define DATAOBJECT_CREATE
TSG_Parameter_Type SG_Parameter_Type_Get_Type(const CSG_String &Identifier)
CSG_String SG_Parameter_Type_Get_Identifier(TSG_Parameter_Type Type)
#define PARAMETER_INPUT_OPTIONAL
#define PARAMETER_OUTPUT_OPTIONAL
@ PARAMETER_TYPE_FixedTable
@ PARAMETER_TYPE_Grid_List
@ PARAMETER_TYPE_Table_Fields
@ PARAMETER_TYPE_DataObject_Output
@ PARAMETER_TYPE_Table_List
@ PARAMETER_TYPE_TIN_List
@ PARAMETER_TYPE_Grid_System
@ PARAMETER_TYPE_PointCloud_List
@ PARAMETER_TYPE_Data_Type
@ PARAMETER_TYPE_Shapes_List
@ PARAMETER_TYPE_PointCloud
@ PARAMETER_TYPE_Table_Field
@ PARAMETER_TYPE_Parameters
@ PARAMETER_TYPE_FilePath
@ PARAMETER_TYPE_Grids_List
int SG_Compare_Version(const CSG_String &Version, int Major, int Minor, int Release)