//--------------------------------------------------------- bool CSG_Grid::Assign(double Value) { if( is_Valid() ) { if( Value == 0.0 && m_Memory_Type == GRID_MEMORY_Normal ) { for(int n=0, m=_Get_nLineBytes(); n<Get_NY(); n++) { memset(m_Values[n], 0, m); } } else { for(int n=0; n<Get_NCells(); n++) { Set_Value(n, Value); } } //------------------------------------------------- Get_History().Destroy(); Get_History().Add_Child(SG_T("GRID_OPERATION"), Value)->Add_Property(SG_T("NAME"), LNG("Assign")); //------------------------------------------------- m_zStats.Invalidate(); Set_Update_Flag(false); return( true ); } return( false ); }
//--------------------------------------------------------- bool CSG_PointCloud::Del_Point(int iPoint) { if( iPoint >= 0 && iPoint < Get_Count() ) { if( is_Selected(iPoint) ) { Select(iPoint, true); } m_Cursor = m_Points[iPoint]; for(int i=iPoint, j=iPoint+1; j<Get_Count(); i++, j++) { m_Points[i] = m_Points[j]; } m_Points[Get_Count() - 1] = m_Cursor; m_Cursor = NULL; _Dec_Array(); Set_Modified(); Set_Update_Flag(); _Stats_Invalidate(); return( true ); } return( false ); }
//--------------------------------------------------------- void CSG_PointCloud::_On_Construction(void) { m_Type = SHAPE_TYPE_Point; m_Vertex_Type = SG_VERTEX_TYPE_XYZ; m_nFields = 0; m_Field_Name = NULL; m_Field_Type = NULL; m_Field_Stats = NULL; m_Field_Offset = NULL; m_Points = NULL; m_nRecords = 0; m_nPointBytes = 0; m_Cursor = NULL; m_bXYZPrecDbl = true; Set_NoData_Value(-999999); Set_Update_Flag(); m_Shapes.Create(SHAPE_TYPE_Point, NULL, NULL, SG_VERTEX_TYPE_XYZ); m_Shapes.Add_Shape(); m_Shapes_Index = -1; m_Array_Points.Create(sizeof(char *), 0, SG_ARRAY_GROWTH_3); }
//--------------------------------------------------------- bool CSG_Grid::_Load(const CSG_String &File_Name, TSG_Data_Type Type, TSG_Grid_Memory_Type Memory_Type) { bool bResult; //----------------------------------------------------- Destroy(); m_Type = Type; //----------------------------------------------------- SG_UI_Msg_Add(CSG_String::Format(SG_T("%s: %s..."), LNG("[MSG] Load grid"), File_Name.c_str()), true); if( SG_File_Cmp_Extension(File_Name, SG_T("grd")) ) { bResult = _Load_Surfer(File_Name, Memory_Type); } else { bResult = _Load_Native(File_Name, Memory_Type); } //----------------------------------------------------- if( bResult ) { Set_Update_Flag(); Set_File_Name(File_Name); Load_MetaData(File_Name); m_bCreated = true; SG_UI_Msg_Add(LNG("[MSG] okay"), false, SG_UI_MSG_STYLE_SUCCESS); } else { Destroy(); SG_UI_Msg_Add(LNG("[MSG] failed"), false, SG_UI_MSG_STYLE_FAILURE); SG_UI_Msg_Add_Error(LNG("[ERR] Grid file could not be opened.")); } //----------------------------------------------------- return( bResult ); }
//--------------------------------------------------------- bool CSG_PointCloud::Add_Point(double x, double y, double z) { if( _Inc_Array() ) { _Set_Field_Value(m_Cursor, 0, x); _Set_Field_Value(m_Cursor, 1, y); _Set_Field_Value(m_Cursor, 2, z); Set_Modified(); Set_Update_Flag(); _Stats_Invalidate(); return( true ); } return( false ); }
//--------------------------------------------------------- bool CSG_Shapes::Create(const CSG_String &File_Name) { Destroy(); SG_UI_Msg_Add(CSG_String::Format("%s: %s...", _TL("Load shapes"), File_Name.c_str()), true); //----------------------------------------------------- bool bResult = File_Name.BeforeFirst(':').Cmp("PGSQL") && SG_File_Exists(File_Name) && _Load_ESRI(File_Name); if( bResult ) { Set_File_Name(File_Name, true); } //----------------------------------------------------- else if( File_Name.BeforeFirst(':').Cmp("PGSQL") == 0 ) // database source { CSG_String s(File_Name); s = s.AfterFirst(':'); CSG_String Host (s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String Port (s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String DBName(s.BeforeFirst(':')); s = s.AfterFirst(':'); CSG_String Table (s.BeforeFirst(':')); CSG_Tool *pTool = SG_Get_Tool_Library_Manager().Get_Tool("db_pgsql", 0); // CGet_Connections if( pTool != NULL ) { SG_UI_ProgressAndMsg_Lock(true); //--------------------------------------------- CSG_Table Connections; CSG_String Connection = DBName + " [" + Host + ":" + Port + "]"; pTool->Settings_Push(); if( pTool->On_Before_Execution() && SG_TOOL_PARAMETER_SET("CONNECTIONS", &Connections) && pTool->Execute() ) // CGet_Connections { for(int i=0; !bResult && i<Connections.Get_Count(); i++) { if( !Connection.Cmp(Connections[i].asString(0)) ) { bResult = true; } } } pTool->Settings_Pop(); //--------------------------------------------- if( bResult && (bResult = (pTool = SG_Get_Tool_Library_Manager().Get_Tool("db_pgsql", 20)) != NULL) == true ) // CPGIS_Shapes_Load { pTool->Settings_Push(); bResult = pTool->On_Before_Execution() && SG_TOOL_PARAMETER_SET("CONNECTION", Connection) && SG_TOOL_PARAMETER_SET("TABLES" , Table) && SG_TOOL_PARAMETER_SET("SHAPES" , this) && pTool->Execute(); pTool->Settings_Pop(); } SG_UI_ProgressAndMsg_Lock(false); } } //----------------------------------------------------- if( bResult ) { Set_Modified(false); Set_Update_Flag(); SG_UI_Process_Set_Ready(); SG_UI_Msg_Add(_TL("okay"), false, SG_UI_MSG_STYLE_SUCCESS); return( true ); } for(int iShape=Get_Count()-1; iShape>=0; iShape--) // be kind, keep at least those shapes that have been loaded successfully { if( !Get_Shape(iShape)->is_Valid() ) { Del_Shape(iShape); } } if( Get_Count() <= 0 ) { Destroy(); } SG_UI_Process_Set_Ready(); SG_UI_Msg_Add(_TL("failed"), false, SG_UI_MSG_STYLE_FAILURE); return( false ); }
//--------------------------------------------------------- bool CSG_Table::_Load(const CSG_String &File_Name, TSG_Table_File_Type Format, const SG_Char *Separator) { if( !::SG_File_Exists(File_Name) ) { return( false ); } bool bResult; CSG_String fName, sSeparator(Separator); _Destroy(); SG_UI_Msg_Add(CSG_String::Format(SG_T("%s: %s..."), LNG("[MSG] Load table"), File_Name.c_str()), true); //----------------------------------------------------- if( Format == TABLE_FILETYPE_Undefined ) { if( SG_File_Cmp_Extension(File_Name, SG_T("dbf")) ) { Format = TABLE_FILETYPE_DBase; } else if( SG_File_Cmp_Extension(File_Name, SG_T("csv")) ) { Format = TABLE_FILETYPE_Text; sSeparator = ";"; } else //if( SG_File_Cmp_Extension(File_Name, SG_T("txt")) ) { Format = TABLE_FILETYPE_Text; } } //----------------------------------------------------- switch( Format ) { case TABLE_FILETYPE_Text: bResult = _Load_Text (File_Name, true , sSeparator); break; case TABLE_FILETYPE_Text_NoHeadLine: bResult = _Load_Text (File_Name, false, sSeparator); break; case TABLE_FILETYPE_DBase: bResult = _Load_DBase(File_Name); break; default: bResult = false; } //----------------------------------------------------- if( bResult ) { Set_Modified(false); Set_Update_Flag(); Set_File_Name(File_Name); Load_MetaData(File_Name); SG_UI_Msg_Add(LNG("[MSG] okay"), false, SG_UI_MSG_STYLE_SUCCESS); return( true ); } SG_UI_Msg_Add(LNG("[MSG] failed"), false, SG_UI_MSG_STYLE_FAILURE); return( false ); }
//--------------------------------------------------------- bool CSG_Table::_Load_DBase(const CSG_String &File_Name) { int iField; CSG_Table_DBase dbf; CSG_Table_Record *pRecord; //----------------------------------------------------- if( dbf.Open(File_Name) ) { Destroy(); for(iField=0; iField<dbf.Get_FieldCount(); iField++) { TSG_Data_Type Type; switch( dbf.Get_FieldType(iField) ) { case DBF_FT_LOGICAL: Type = SG_DATATYPE_Char; break; case DBF_FT_CHARACTER: default: Type = SG_DATATYPE_String; break; case DBF_FT_DATE: Type = SG_DATATYPE_Date; break; case DBF_FT_NUMERIC: Type = dbf.Get_FieldDecimals(iField) > 0 ? SG_DATATYPE_Double : SG_DATATYPE_Long; break; } Add_Field(SG_STR_MBTOSG(dbf.Get_FieldName(iField)), Type); } //------------------------------------------------- if( dbf.Move_First() && dbf.Get_Record_Count() > 0 ) { m_nRecords = m_nBuffer = dbf.Get_Record_Count(); m_Records = (CSG_Table_Record **)SG_Malloc(m_nRecords * sizeof(CSG_Table_Record *)); for(int iRecord=0; iRecord<m_nRecords && SG_UI_Process_Set_Progress(iRecord, m_nRecords); iRecord++) { m_Records[iRecord] = pRecord = _Get_New_Record(iRecord); for(iField=0; iField<Get_Field_Count(); iField++) { switch( Get_Field_Type(iField) ) { case SG_DATATYPE_Char: pRecord->Set_Value(iField, SG_STR_MBTOSG(dbf.asString(iField)) ); break; case SG_DATATYPE_String: default: pRecord->Set_Value(iField, SG_STR_MBTOSG(dbf.asString(iField)) ); break; case SG_DATATYPE_Date: pRecord->Set_Value(iField, dbf.asDouble(iField) ); break; case SG_DATATYPE_Long: pRecord->Set_Value(iField, dbf.asInt(iField) ); break; case SG_DATATYPE_Double: pRecord->Set_Value(iField, dbf.asDouble(iField) ); break; } } dbf.Move_Next(); } SG_UI_Process_Set_Ready(); Set_Modified(false); Set_Update_Flag(); _Stats_Invalidate(); } return( true ); } return( false ); }
//--------------------------------------------------------- bool CSG_Table::Save(const CSG_String &File_Name, int Format, const SG_Char *Separator) { bool bResult; CSG_String sSeparator(Separator); SG_UI_Msg_Add(CSG_String::Format(SG_T("%s: %s..."), LNG("[MSG] Save table"), File_Name.c_str()), true); //----------------------------------------------------- if( Format <= TABLE_FILETYPE_Undefined || Format > TABLE_FILETYPE_DBase ) { if( SG_File_Cmp_Extension(File_Name, SG_T("dbf")) ) { Format = TABLE_FILETYPE_DBase; } else if( SG_File_Cmp_Extension(File_Name, SG_T("csv")) ) { Format = TABLE_FILETYPE_Text; sSeparator = ';'; } else //if( SG_File_Cmp_Extension(File_Name, SG_T("txt")) ) { Format = TABLE_FILETYPE_Text; } } switch( Format ) { case TABLE_FILETYPE_Text: bResult = _Save_Text (File_Name, true , Separator); break; case TABLE_FILETYPE_Text_NoHeadLine: bResult = _Save_Text (File_Name, false, Separator); break; case TABLE_FILETYPE_DBase: bResult = _Save_DBase(File_Name); break; } //----------------------------------------------------- if( bResult ) { Set_Modified(false); Set_Update_Flag(); Set_File_Type(Format); Set_File_Name(File_Name); Save_MetaData(File_Name); SG_UI_Msg_Add(LNG("[MSG] okay"), false, SG_UI_MSG_STYLE_SUCCESS); return( true ); } SG_UI_Msg_Add(LNG("[MSG] failed"), false, SG_UI_MSG_STYLE_FAILURE); return( false ); }