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"))
68#define Get_List_Count(p) (p->asGridList() ? p->asGridList()->Get_Grid_Count() : p->asList() ? p->asList()->Get_Item_Count() : 0)
69#define Get_List_Item(p, i) (p->asGridList() ? p->asGridList()->Get_Grid (i) : p->asList() ? p->asList()->Get_Item (i) : NULL)
87 Create(Tool, bWithGUI, bWithCMD);
109void CSG_Tool_Chain::Reset(
void)
124 m_Library_Menu = Menu;
135 if( !
Create(Tool.m_Chain) )
141 m_Library = Tool.m_Library;
142 m_Library_Menu = Tool.m_Library_Menu;
143 m_File_Name = Tool.m_File_Name;
144 m_bGUI = bWithGUI && m_bGUI;
145 m_bCMD = bWithCMD && m_bCMD;
165 if( !
Chain.Load(File) )
172 if(
Chain.Cmp_Name(
"toolchains") )
177 if( !
Chain.Cmp_Name(
"toolchain") || !
Chain(
"identifier") || !
Chain(
"parameters") )
196 m_File_Name.Clear(); Reset();
206 if( !
Chain.Cmp_Name(
"toolchain") || !
Chain(
"identifier") || !
Chain(
"parameters") || !
Chain(
"tools") )
213 Error_Fmt(
"%s %s: %s",
_TL(
"Warning"),
_TL(
"unsupported tool chain version"),
Chain.Get_Property(
"saga-version"));
227 if( m_Library.is_Empty() )
229 m_Library =
"toolchains";
235 Description.
Replace(
"[[",
"<");
236 Description.
Replace(
"]]",
">");
239 if( !m_Menu.is_Empty() && (m_Menu.Length() < 2 || m_Menu[1] !=
':') )
242 m_Menu.Prepend(
"A:");
244 m_Menu.Prepend(
"R:");
250 for(
int i=0; i<m_Chain[
"parameters"].Get_Children_Count(); i++)
252 const CSG_MetaData &Parameter = m_Chain[
"parameters"][i];
274 bool bMin =
false, bMax =
false;
275 double Min = 0. , Max = 0.;
281 else if( Parameter.
Cmp_Name(
"output") )
285 else if( Parameter.
Cmp_Name(
"option") && Parameter(
"value") )
294 if( Parameter(
"condition") )
300 if( Parameter[j].Cmp_Name(
"condition") )
351 ?
Parameters.Add_Grid_Output (
"", ID, Name, Desc)
352 :
Parameters.Add_Grid (ParentID, ID, Name, Desc, Constraint);
break;
355 ?
Parameters.Add_Grids_Output (
"", ID, Name, Desc)
356 :
Parameters.Add_Grids (ParentID, ID, Name, Desc, Constraint);
break;
396 return( !m_Chain(
"CRS_SYNC") ||
IS_TRUE_STRING(m_Chain[
"CRS_SYNC"].Get_Content()) );
400void CSG_Tool_Chain::Add_References(
void)
404 if( !m_Chain[i].
Get_Name().CmpNoCase(
"REFERENCE") )
406 CSG_String Authors, Year, Title, Where, Link, Link_Text, DOI;
408 if( m_Chain[i](
"AUTHORS" ) ) Authors = m_Chain[i].
Get_Content(
"AUTHORS" );
409 if( m_Chain[i](
"YEAR" ) ) Year = m_Chain[i].
Get_Content(
"YEAR" );
410 if( m_Chain[i](
"TITLE" ) ) Title = m_Chain[i].
Get_Content(
"TITLE" );
411 if( m_Chain[i](
"WHERE" ) ) Where = m_Chain[i].
Get_Content(
"WHERE" );
412 if( m_Chain[i](
"LINK" ) ) Link = m_Chain[i].
Get_Content(
"LINK" );
413 if( m_Chain[i](
"LINK_TEXT") ) Link_Text = m_Chain[i].
Get_Content(
"LINK_TEXT");
414 if( m_Chain[i](
"DOI" ) ) DOI = m_Chain[i].
Get_Content(
"DOI" );
418 Link =
"https://doi.org/" + DOI; Link_Text =
"doi:" + DOI;
441 for(
int iParameter=0; iParameter<m_Conditions.Get_Children_Count(); iParameter++)
443 const CSG_MetaData &Conditions = m_Conditions[iParameter];
445 if( (*pParameters)(Conditions.
Get_Name()) )
449 for(
int iCondition=0; bEnable && iCondition<Conditions.
Get_Children_Count(); iCondition++)
451 bEnable = Check_Condition(Conditions[iCondition], pParameters);
454 (*pParameters)(Conditions.
Get_Name())->Set_Enabled(bEnable);
469 bool bResult = Data_Initialize();
476 for(
int i=0; bResult && i<m_Chain[
"tools"].Get_Children_Count(); i++)
478 bResult = Tool_Run(m_Chain[
"tools"][i]);
499 CSG_Parameter *pParameter = m_Data(ID);
505 Error_Fmt(
"%s\n[%s] %s <> %s",
_TL(
"Tool chain uses same variable name for different data object types."),
599bool CSG_Tool_Chain::Data_Del_Temp(
const CSG_String &ID,
bool bData)
601 CSG_Parameter *pData = m_Data(ID);
620 m_Data.Del_Parameter(ID);
627bool CSG_Tool_Chain::Data_Update(
const CSG_String &ID,
bool bShow)
629 CSG_Parameter *pData = m_Data(ID);
647 for(
int i=0; i<m_Data.Get_Count(); i++)
649 if( m_Data(i)->is_DataObject() )
651 if( pData == m_Data(i)->asDataObject() )
656 else if( m_Data(i)->is_DataObject_List() )
672bool CSG_Tool_Chain::Data_Initialize(
void)
674 m_Data.Set_Manager(NULL);
693bool CSG_Tool_Chain::Data_Finalize(
void)
730 m_Data_Manager.Delete();
735 for(
int i=0; i<m_Chain[
"parameters"].Get_Children_Count(); i++)
737 const CSG_MetaData &Parameter = m_Chain[
"parameters"][i];
745 if( Parameter(
"colours") )
750 if( Parameter(
"output_name") )
754 CSG_Parameter *pInput =
Parameters(Parameter[
"output_name"].Get_Content());
760 if( Parameter[
"output_name"].Get_Property(
"suffix", Suffix) && !Suffix.
is_Empty() )
762 Suffix =
" [" + Suffix +
"]";
768 else if( !Parameter[
"output_name"].Get_Content().is_Empty() )
815bool CSG_Tool_Chain::Message(
const CSG_MetaData &Message)
817 if( Message.Cmp_Name(
"message") )
824 Message_Fmt(
"\n%s", Message.Get_Content().c_str());
862 CSG_Parameter *pParameter = (*pData)(Variable);
869 return( (*pData)(Variable) == NULL || (*pData)(Variable)->asDataObject() == NULL );
873 CSG_Parameter *pOption = (*pData)(Variable);
875 if( pOption == NULL )
905 if( !Type.
CmpNoCase(
"=") || !Type.
CmpNoCase(
"equal" ) ) {
if( Value != pOption->
asInt() ) {
return(
false ); } }
906 else if( !Type.
CmpNoCase(
"!") || !Type.
CmpNoCase(
"not_equal") ) {
if( Value == pOption->
asInt() ) {
return(
false ); } }
907 else if( !Type.
CmpNoCase(
"<") || !Type.
CmpNoCase(
"less" ) ) {
if( Value >= pOption->
asInt() ) {
return(
false ); } }
908 else if( !Type.
CmpNoCase(
">") || !Type.
CmpNoCase(
"greater" ) ) {
if( Value <= pOption->asInt() ) {
return(
false ); } }
924 else if( !Type.
CmpNoCase(
">") || !Type.
CmpNoCase(
"greater" ) ) {
if( Value <= pOption->asDouble() ) {
return(
false ); } }
977bool CSG_Tool_Chain::ForEach(
const CSG_MetaData &Commands)
981 if( Commands[i].Cmp_Name(
"output") || Commands[i].Cmp_Name(
"datalist") )
983 Data_Add_TempList(Commands[i].Get_Content(), Commands[i].Get_Property(
"type"));
994 return( ForEach_Iterator(Commands, VarName, bIgnoreErrors) );
999 return( ForEach_Object (Commands, VarName, bIgnoreErrors)
1000 || ForEach_File (Commands, VarName, bIgnoreErrors) );
1003 Error_Set(
"foreach statement misses iterator or input list definition");
1009bool CSG_Tool_Chain::ForEach_Iterator(
const CSG_MetaData &Commands,
const CSG_String &VarName,
bool bIgnoreErrors)
1011 CSG_Parameter *pIterator =
Parameters(VarName);
1015 Error_Set(
"foreach statement iterator variable name is already in use");
1028 Error_Set(
"foreach iterator statement with invalid range (define begin < end)");
1041 step = (end - begin) / steps;
1051 Error_Set(
"foreach iterator statement with invalid step size (define step > 0 or steps > 0)");
1056 Message_Fmt(
"\nfor i = %f to %f step %f (%d steps)", begin, end, step, (
int)((end - begin) / step));
1059 bool bResult =
true;
1061 pIterator =
Parameters.Add_Double(
"", VarName,
"Iterator",
"");
1063 for(
double i=begin; bResult && i<=end; i+=step)
1071 const CSG_MetaData &Tool = Commands[iTool];
1075 bResult = Tool_Run(Tool, bIgnoreErrors);
1077 if( !bResult && bIgnoreErrors )
1091bool CSG_Tool_Chain::ForEach_Object(
const CSG_MetaData &Commands,
const CSG_String &ListVarName,
bool bIgnoreErrors)
1093 CSG_Parameter *pList = m_Data(ListVarName);
1101 bool bResult =
true;
1109 const CSG_MetaData &Tool = Commands[iTool];
1115 if( Tool[j].Cmp_Name(
"input") && Tool[j].Get_Content().Find(ListVarName) == 0 )
1122 bResult = Tool_Run(Tool, bIgnoreErrors);
1125 if( !bResult && bIgnoreErrors )
1135 for(
int iObject=0; bResult && iObject<pList->
asGrids()->Get_Grid_Count(); iObject++)
1139 const CSG_MetaData &Tool = Commands[iTool];
1145 if( Tool[j].Cmp_Name(
"input") && Tool[j].Get_Content().Find(ListVarName) == 0 )
1152 bResult = Tool_Run(Tool, bIgnoreErrors);
1155 if( !bResult && bIgnoreErrors )
1166bool CSG_Tool_Chain::ForEach_File(
const CSG_MetaData &Commands,
const CSG_String &ListVarName,
bool bIgnoreErrors)
1168 CSG_Parameter *pList =
Parameters(ListVarName);
1180 bool bResult =
true;
1182 for(
int iFile=0; bResult && iFile<Files.
Get_Count(); iFile++)
1186 const CSG_MetaData &Tool = Commands[iTool];
1190 CSG_Array_Int Input;
1194 if( Tool[j].Cmp_Name(
"option") && Tool[j].Get_Content().Find(ListVarName) == 0 &&
IS_TRUE_PROPERTY(Tool[j],
"varname") )
1203 bResult = Tool_Run(Tool, bIgnoreErrors);
1205 for(
size_t i=0; i<Input.
Get_uSize(); i++)
1213 bResult = Tool_Run(Tool, bIgnoreErrors);
1216 if( !bResult && bIgnoreErrors )
1232bool CSG_Tool_Chain::Tool_Run(
const CSG_MetaData &Tool,
bool bShowError)
1266 const CSG_MetaData *pTools = (!Check_Condition(Tool, &m_Data) || !Check_Condition(Tool, &
Parameters))
1267 ? Tool(
"else") : (Tool(
"if") ? Tool(
"if") : &Tool);
1271 if( !Tool_Run((*pTools)[i]) )
1283 return( ForEach(Tool) );
1294 if( bShowError )
Error_Set(
_TL(
"invalid tool definition"));
1318 bool bResult =
false;
1324 else if( !Tool_Initialize(Tool, pTool) )
1328 else if( !(bResult = pTool->
Execute(m_bAddHistory)) )
1338 Tool_Finalize(Tool, pTool);
1353bool CSG_Tool_Chain::Tool_Check_Condition(
const CSG_MetaData &Tool)
1355 if( Tool(
"condition") )
1359 if( !Check_Condition(Tool[i], &m_Data) )
1377 CSG_Parameter *pParameter = (*pParameters)(ID.
BeforeFirst(
'.'));
1384 *ppParameter = pParameter;
1389 *ppOwner = pParameter;
1397 *ppOwner = pParameter;
1402 *ppOwner = pParameter;
1406 *ppParameter = pParameter;
1429 CSG_Parameter *pOwner;
if( !ppOwner ) { ppOwner = &pOwner; } *ppOwner = NULL;
1442 return( Tool_Get_Parameter(ID, pParameters, ppParameter, ppOwner) );
1451 const CSG_MetaData &Parameter = Tool[i];
if( Parameter.
Cmp_Name(
"comment") ) {
continue; }
1453 if( Parameter.
Cmp_Name(
"message") )
1460 CSG_Parameter *pParameter, *pOwner;
1462 if( !Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner) )
1479 Message_Fmt(
"\n%s: %s\n",
_TL(
"Warning"),
_TL(
"failed to set tool's grid system"));
1487 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"option") ) {
continue; }
1489 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1493 CSG_Parameter *pData = m_Data(Parameter.
Get_Content());
1514 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"input") ) {
continue; }
1516 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1525 bool bResult =
false;
1539 bResult = pParameter->
Set_Value(pObject);
1552 for(
int i=0; bResult && i<pData->
asList()->Get_Item_Count(); i++)
1559 bResult = pParameter->
Assign(pData);
1566 else if( Parameter_isCompatible(pParameter->
Get_Type(), pData->
Get_Type()) )
1587 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"option") ) {
continue; }
1589 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1612 if( Parameter(
"OPTION") )
1614 pParameter->
Serialize(*Parameter(
"OPTION"),
false);
1621 if( Value.
Find(
"$(") >= 0 )
1627 if( Value.
Find(Var) >= 0 )
1649 const CSG_MetaData &Parameter = Tool[i];
if( !Parameter.
Cmp_Name(
"output") ) {
continue; }
1651 CSG_Parameter *pParameter, *pOwner; Tool_Get_Parameter(Parameter, pTool, &pParameter, &pOwner);
1663 else if( pParameter->
asGrids() )
1679 const CSG_MetaData &Parameter = Tool[i];
1690 if( !pParameter || !Data_Add(Parameter.
Get_Content(), pParameter) )
1702 for(
int j=0; j<pParameters->
Get_Count(); j++)
1704 CSG_Parameter *pParameter = (*pParameters)(j);
1749 _Get_Script_Tool(Tool, pTool->
Get_Parameters(), bAllParameters,
"", bHeader);
1758 return( Tool.
asText(1) );
1777 Tools.
Add_Child(
"identifier" ,
"define-a-unique-tool-identifier-here");
1787 return( Tools.
asText(1) );
1793 for(
int iParameter=0; iParameter<pParameters->
Get_Count(); iParameter++)
1802 CSG_MetaData *pChild = NULL;
1881 for(
int i=0; i<pParameters->
Get_Count(); i++)
1892 CSG_MetaData &Parameter = *
Parameters.Add_Child(
1953 switch( ((CSG_Parameter_Data_Object_Output *)&P)->Get_DataObject_Type() )
1972 switch( ((CSG_Parameter_Shapes *)&P)->Get_Shape_Type() )
1983 && !((CSG_Parameter_Grid_List *)&P)->Get_System() )
1989 && !((CSG_Parameter_Grid_List *)&P)->Get_System() )
2015 m_Name =
_TL(
"Uncategorized Tool Chains");
2016 m_Description =
_TL(
"Uncategorized Tool Chains");
2017 m_Menu =
_TL(
"Uncategorized Tool Chains");
2034 m_Description.Replace(
"[[",
"<");
2035 m_Description.Replace(
"]]",
">");
2040 if( !XML[i].
Get_Name().CmpNoCase(
"REFERENCE") )
2042 CSG_String Authors, Year, Title, Where, Link, Link_Text, DOI;
2044 if( XML[i](
"AUTHORS" ) ) Authors = XML[i].
Get_Content(
"AUTHORS" );
2045 if( XML[i](
"YEAR" ) ) Year = XML[i].
Get_Content(
"YEAR" );
2046 if( XML[i](
"TITLE" ) ) Title = XML[i].
Get_Content(
"TITLE" );
2047 if( XML[i](
"WHERE" ) ) Where = XML[i].
Get_Content(
"WHERE" );
2048 if( XML[i](
"LINK" ) ) Link = XML[i].
Get_Content(
"LINK" );
2049 if( XML[i](
"LINK_TEXT") ) Link_Text = XML[i].
Get_Content(
"LINK_TEXT");
2050 if( XML[i](
"DOI" ) ) DOI = XML[i].
Get_Content(
"DOI" );
2054 Link =
"https://doi.org/" + DOI; Link_Text =
"doi:" + DOI;
2075 for(
size_t i=0; i<m_Tools.Get_uSize(); i++)
2141 if( m_xTools.Del(pTool) || m_Tools.Del(pTool) )
2154 for(
size_t i=0; i<m_xTools.Get_uSize(); i++)
2179 const CSG_MetaData &Tool(History(
"TOOL") ? History[
"TOOL"] : History[
"MODULE"]);
2181 if( !Tool(
"OUTPUT") )
2189 Chain.Set_Name (
"toolchain" );
2192 Chain.Add_Child (
"group" ,
"toolchains");
2195 Chain.Add_Child (
"description",
_TL(
"created from history"));
2197 Chain.Add_Child (
"parameters" );
2198 Chain.Add_Child (
"tools" );
2200 _Save_History_Add_Tool(Tool, *
Chain(
"parameters"), *
Chain(
"tools"),
true);
2202 for(
int i=0; i<
Chain[
"tools"].Get_Children_Count(); i++)
2204 Chain[
"tools"](i)->Del_Property(
"id");
2207 return(
Chain.Save(File) );
2213 if( !History(
"OUTPUT") || !History[
"OUTPUT"].Get_Property(
"id") )
2219 CSG_MetaData *pParameter, &Tool = *Tools.
Ins_Child(
"tool", 0);
2229 const CSG_MetaData &Output = History[
"OUTPUT"];
2233 pParameter = Tool.
Add_Child(
"output", VarName);
2250 CSG_MetaData *pChild = History.
Get_Child(i);
2296 _Save_History_Add_Input(*pChild, Parms, Tool);
2302 _Save_History_Add_Input(*pChild->
Get_Child(j), Parms, Tool);
2313 CSG_MetaData *pInput = Tool.
Add_Child(
"input");
2318 if( History(
"TOOL") || History(
"MODULE") )
2320 const CSG_MetaData &History_Tool(History(
"TOOL") ? History[
"TOOL"] : History[
"MODULE"]);
2322 if( History_Tool(
"OUTPUT") && History_Tool[
"OUTPUT"].Get_Property(
"id") )
2326 return( _Save_History_Add_Tool(History_Tool, Parms, *Tool.
Get_Parent()) );
2334 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)
void Del_References(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)