//---------------------------------------------------------
bool CCMD_Module::_Save_Output(CSG_Parameters *pParameters)
{
	for(int j=0; j<pParameters->Get_Count(); j++)
	{
		wxString		FileName;

		CSG_Parameter	*pParameter	= pParameters->Get_Parameter(j);

		//-------------------------------------------------
		if( pParameter->is_Input() )
		{
			if( pParameter->is_DataObject() )
			{
				CSG_Data_Object	*pObject	= pParameter->asDataObject();

				if( pObject && pObject->is_Modified() && SG_File_Exists(pObject->Get_File_Name()) )
				{
					pObject->Save(pObject->Get_File_Name());
				}
			}

			else if( pParameter->is_DataObject_List() )
			{
				for(int i=0; i<pParameter->asList()->Get_Count(); i++)
				{
					CSG_Data_Object	*pObject	= pParameter->asList()->asDataObject(i);

					if( pObject->is_Modified() && SG_File_Exists(pObject->Get_File_Name()) )
					{
						pObject->Save(pObject->Get_File_Name());
					}
				}
			}
		}

		//-------------------------------------------------
		else if( pParameter->is_Output() &&  m_CMD.Found(_Get_ID(pParameter), &FileName) && FileName.Length() > 0 )
		{
			if( pParameter->is_DataObject() )
			{
				if( pParameter->asDataObject() )
				{
					pParameter->asDataObject()->Save(&FileName);
				}
			}

			else if( pParameter->is_DataObject_List() )
			{
				CSG_Strings	FileNames;

				while( !FileName.IsEmpty() && FileNames.Get_Count() < pParameter->asList()->Get_Count() )
				{
					wxString	s = FileName.BeforeFirst(';'); s.Trim(true); s.Trim(false);

					if( !s.IsEmpty() )
					{
						FileNames	+= &s;
					}

					FileName = FileName.AfterFirst(';');
				}

				if( FileNames.Get_Count() > 0 )	// e.g.: GRIDS=" ;;"
				{
					int	nFileNames	= pParameter->asList()->Get_Count() <= FileNames.Get_Count() ? FileNames.Get_Count() : FileNames.Get_Count() - 1;

					for(int i=0; i<pParameter->asList()->Get_Count(); i++)
					{
						if( i < nFileNames )
						{
							pParameter->asList()->asDataObject(i)->Save(FileNames[i]);
						}
						else
						{
							pParameter->asList()->asDataObject(i)->Save(CSG_String::Format(SG_T("%s_%0*d"),
								FileNames[nFileNames].c_str(),
								SG_Get_Digit_Count(pParameter->asList()->Get_Count()),
								1 + i - nFileNames
							));
						}
					}
				}
			}
		}
	}

	return( true );
}
Esempio n. 2
0
//---------------------------------------------------------
bool			SG_File_Delete(const SG_Char *FileName)
{
	return( SG_File_Exists(FileName) && wxRemoveFile(FileName) );
}
Esempio n. 3
0
//---------------------------------------------------------
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);
		Load_MetaData(File_Name);
	}

	//-----------------------------------------------------
	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_Module	*pModule	= SG_Get_Module_Library_Manager().Get_Module("db_pgsql", 0);	// CGet_Connections

		if(	pModule != NULL )
		{
			SG_UI_ProgressAndMsg_Lock(true);

			//---------------------------------------------
			CSG_Table	Connections;
			CSG_String	Connection	= DBName + " [" + Host + ":" + Port + "]";

			pModule->Settings_Push();

			if( pModule->On_Before_Execution() && SG_MODULE_PARAMETER_SET("CONNECTIONS", &Connections) && pModule->Execute() )	// CGet_Connections
			{
				for(int i=0; !bResult && i<Connections.Get_Count(); i++)
				{
					if( !Connection.Cmp(Connections[i].asString(0)) )
					{
						bResult	= true;
					}
				}
			}

			pModule->Settings_Pop();

			//---------------------------------------------
			if( bResult && (bResult = (pModule = SG_Get_Module_Library_Manager().Get_Module("db_pgsql", 20)) != NULL) == true )	// CPGIS_Shapes_Load
			{
				pModule->Settings_Push();

				bResult	= pModule->On_Before_Execution()
					&& SG_MODULE_PARAMETER_SET("CONNECTION", Connection)
					&& SG_MODULE_PARAMETER_SET("TABLES"    , Table)
					&& SG_MODULE_PARAMETER_SET("SHAPES"    , this)
					&& pModule->Execute();

				pModule->Settings_Pop();
			}

			SG_UI_ProgressAndMsg_Lock(false);
		}
	}

	//-----------------------------------------------------
	if( bResult )
	{
		Set_Modified(false);
		Set_Update_Flag();

		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_Msg_Add(_TL("failed"), false, SG_UI_MSG_STYLE_FAILURE);

	return( false );
}
//---------------------------------------------------------
bool CDXF_Import::On_Execute(void)
{
	CSG_String	fName	= Parameters("FILE")->asString();

	Parameters("TABLES")->asTableList() ->Del_Items();
	Parameters("SHAPES")->asShapesList()->Del_Items();

	m_Filter	= Parameters("FILTER")	->asInt();
	m_dArc		= Parameters("DCIRCLE")	->asDouble() * M_DEG_TO_RAD;

	//-----------------------------------------------------
	if( SG_File_Exists(fName) )
	{
		m_pLayers		= SG_Create_Table();
		m_pLayers		->Fmt_Name("%s [%s]", SG_File_Get_Name(fName, false).c_str(), _TL("Layers"));
		m_pLayers		->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pLayers		->Add_Field("FLAGS"	, SG_DATATYPE_Int);

		m_pBlocks		= SG_Create_Table();
		m_pBlocks		->Fmt_Name("%s [%s]", SG_File_Get_Name(fName, false).c_str(), _TL("Blocks"));
		m_pBlocks		->Add_Field("BLOCK"	, SG_DATATYPE_String);
		m_pBlocks		->Add_Field("FLAGS"	, SG_DATATYPE_Int);
		m_pBlocks		->Add_Field("X"		, SG_DATATYPE_Double);
		m_pBlocks		->Add_Field("Y"		, SG_DATATYPE_Double);
		m_pBlocks		->Add_Field("Z"		, SG_DATATYPE_Double);

		m_pPoints		= SG_Create_Shapes(SHAPE_TYPE_Point		, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Points")));
		m_pPoints		->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pPoints		->Add_Field("Z"		, SG_DATATYPE_Double);

		m_pLines		= SG_Create_Shapes(SHAPE_TYPE_Line		, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Lines")));
		m_pLines		->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pLines		->Add_Field("Z1"	, SG_DATATYPE_Double);
		m_pLines		->Add_Field("Z2"	, SG_DATATYPE_Double);

		m_pPolyLines	= SG_Create_Shapes(SHAPE_TYPE_Line		, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Polylines")));
		m_pPolyLines	->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pPolyLines	->Add_Field("FLAGS"	, SG_DATATYPE_Int);

		m_pPolygons		= SG_Create_Shapes(SHAPE_TYPE_Polygon	, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Polygons")));
		m_pPolygons		->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pPolygons		->Add_Field("FLAGS"	, SG_DATATYPE_Int);

		m_pCircles		= SG_Create_Shapes(SHAPE_TYPE_Line		, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Circles")));
		m_pCircles		->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pCircles		->Add_Field("FLAGS"	, SG_DATATYPE_Int);

		m_pTriangles	= SG_Create_Shapes(SHAPE_TYPE_Polygon	, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Triangles")));
		m_pTriangles	->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pTriangles	->Add_Field("THICK"	, SG_DATATYPE_Int);
		m_pTriangles	->Add_Field("Z1"	, SG_DATATYPE_Double);
		m_pTriangles	->Add_Field("Z2"	, SG_DATATYPE_Double);
		m_pTriangles	->Add_Field("Z3"	, SG_DATATYPE_Double);

		m_pText			= SG_Create_Shapes(SHAPE_TYPE_Point		, CSG_String::Format(SG_T("%s [%s]"), SG_File_Get_Name(fName, false).c_str(), _TL("Text")));
		m_pText			->Add_Field("LAYER"	, SG_DATATYPE_String);
		m_pText			->Add_Field("Z"		, SG_DATATYPE_Double);
		m_pText			->Add_Field("TEXT"	, SG_DATATYPE_String);
		m_pText			->Add_Field("HEIGHT", SG_DATATYPE_Int);
		m_pText			->Add_Field("ANGLE"	, SG_DATATYPE_Double);
		m_pText			->Add_Field("APX"	, SG_DATATYPE_Double);
		m_pText			->Add_Field("APY"	, SG_DATATYPE_Double);
		m_pText			->Add_Field("APZ"	, SG_DATATYPE_Double);
		m_pText			->Add_Field("SCALE"	, SG_DATATYPE_Double);
		m_pText			->Add_Field("HJUST"	, SG_DATATYPE_Int);
		m_pText			->Add_Field("VJUST"	, SG_DATATYPE_Int);
		m_pText			->Add_Field("STYLE"	, SG_DATATYPE_String);
		m_pText			->Add_Field("FLAGS"	, SG_DATATYPE_Int);

		//-------------------------------------------------
		m_Offset.x		= 0.0;
		m_Offset.y		= 0.0;
		m_Offset.z		= 0.0;

		m_pPolyLine		= NULL;

		DL_Dxf	*pDXF	= new DL_Dxf();

		pDXF->in(fName.b_str(), this);

		delete(pDXF);

		//-------------------------------------------------
		ADD_RESULT("TABLES", m_pLayers);
		ADD_RESULT("TABLES", m_pBlocks);
		ADD_RESULT("SHAPES", m_pPoints);
		ADD_RESULT("SHAPES", m_pLines);
		ADD_RESULT("SHAPES", m_pPolyLines);
		ADD_RESULT("SHAPES", m_pPolygons);
		ADD_RESULT("SHAPES", m_pCircles);
		ADD_RESULT("SHAPES", m_pTriangles);
		ADD_RESULT("SHAPES", m_pText);
	}

	//-----------------------------------------------------
	return( Parameters("SHAPES")->asShapesList()->Get_Item_Count() > 0 );
}