Example #1
0
//---------------------------------------------------------
bool CGrid_Profile::On_Execute_Position(CSG_Point ptWorld, TSG_Module_Interactive_Mode Mode)
{
	switch( Mode )
	{
	default:
		break;

	case MODULE_INTERACTIVE_LDOWN:
		if( !m_bAdd )
		{
			m_bAdd	= true;
			m_pLine->Create(SHAPE_TYPE_Line, CSG_String::Format(SG_T("Profile [%s]"), m_pDEM->Get_Name()));
			m_pLine->Add_Field("ID"	, SG_DATATYPE_Int);
			m_pLine->Add_Shape()->Set_Value(0, 1);
		}

		m_pLine->Get_Shape(0)->Add_Point(Get_System()->Fit_to_Grid_System(ptWorld));

		DataObject_Update(m_pLine);
		break;

	case MODULE_INTERACTIVE_RDOWN:
		Set_Profile();
		m_bAdd	= false;
		break;
	}

	return( true );
}
Example #2
0
//---------------------------------------------------------
bool CGrid_Profile::On_Execute_Finish(void)
{
	if( m_bAdd )
	{
		Set_Profile();
	}

	return( true );
}
Example #3
0
//---------------------------------------------------------
bool CGrid_Flow_Profile::On_Execute_Position(CSG_Point ptWorld, TSG_Tool_Interactive_Mode Mode)
{
	switch( Mode )
	{
	case TOOL_INTERACTIVE_LDOWN:
	case TOOL_INTERACTIVE_MOVE_LDOWN:
		return( Set_Profile(Get_System()->Fit_to_Grid_System(ptWorld)) );

	default:
		return( false );
	}
}
Example #4
0
//---------------------------------------------------------
bool CGrid_Profile::Set_Profile(void)
{
	int			i;
	TSG_Point	A, B;
	CSG_Shape	*pLine;

	//-----------------------------------------------------
	m_pPoints->Create(SHAPE_TYPE_Point, CSG_String::Format(_TL("Profile [%s]"), m_pDEM->Get_Name()));

	m_pPoints->Add_Field("ID"						, SG_DATATYPE_Int);
	m_pPoints->Add_Field(_TL("Distance")			, SG_DATATYPE_Double);
	m_pPoints->Add_Field(_TL("Distance Overland")	, SG_DATATYPE_Double);
	m_pPoints->Add_Field("X"						, SG_DATATYPE_Double);
	m_pPoints->Add_Field("Y"						, SG_DATATYPE_Double);
	m_pPoints->Add_Field("Z"						, SG_DATATYPE_Double);

	for(i=0; i<m_pValues->Get_Count(); i++)
	{
		m_pPoints->Add_Field(m_pValues->asGrid(i)->Get_Name(), SG_DATATYPE_Double);
	}

	//-----------------------------------------------------
	if( (pLine = m_pLine->Get_Shape(0)) != NULL && pLine->Get_Point_Count(0) > 1 )
	{
		B	= pLine->Get_Point(0);

		for(i=1; i<pLine->Get_Point_Count(0); i++)
		{
			A	= B;
			B	= pLine->Get_Point(i);

			Set_Profile(A, B);
		}
	}

	//-----------------------------------------------------
	DataObject_Update(m_pLine);
	DataObject_Update(m_pPoints);

	return( m_pPoints->Get_Count() > 0 );
}
//---------------------------------------------------------
bool CLeastCostPathProfile_Points::On_Execute(void)
{
	int							x, y;
	CSG_Shape					*pShape;
	CSG_Shapes					*pSources;
	CSG_Shapes					*pPoints, *pLine;
	CSG_Parameter_Shapes_List	*pShapesPoints, *pShapesLine;

	pSources		= Parameters("SOURCE")	->asShapes();
	m_pDEM			= Parameters("DEM")		->asGrid();
	m_pValues		= Parameters("VALUES")	->asGridList();
	pShapesPoints	= Parameters("POINTS")	->asShapesList();
	pShapesLine		= Parameters("LINE")	->asShapesList();

	//-----------------------------------------------------
	pShapesPoints	->Del_Items();
	pShapesLine		->Del_Items();


	//-----------------------------------------------------
	for( int i=0; i<pSources->Get_Count(); i++ )
	{
		pShape		= pSources->Get_Shape(i);

		if( Get_System()->Get_World_to_Grid(x, y, pShape->Get_Point(0)) && m_pDEM->is_InGrid(x, y) )
		{

			//-----------------------------------------------------
			pPoints			= SG_Create_Shapes(SHAPE_TYPE_Point, CSG_String::Format(_TL("Profile_Points_[%s]_%d"), m_pDEM->Get_Name(), i+1));
			pPoints			->Add_Field("ID"	, SG_DATATYPE_Int);
			pPoints			->Add_Field("D"		, SG_DATATYPE_Double);
			pPoints			->Add_Field("X"		, SG_DATATYPE_Double);
			pPoints			->Add_Field("Y"		, SG_DATATYPE_Double);
			pPoints			->Add_Field("Z"		, SG_DATATYPE_Double);

			for( int j=0; j<m_pValues->Get_Count(); j++)
			{
				pPoints->Add_Field(m_pValues->asGrid(j)->Get_Name(), SG_DATATYPE_Double);
			}

			//-----------------------------------------------------
			pLine			= SG_Create_Shapes(SHAPE_TYPE_Line, CSG_String::Format(_TL("Profile_Line_[%s]_%d"), m_pDEM->Get_Name(), i+1));
			pLine			->Add_Field("ID", SG_DATATYPE_Int);
			pLine			->Add_Shape()->Set_Value(0, 1);


			Set_Profile(x, y, pPoints, pLine);

			//-----------------------------------------------------
			if( pPoints->Get_Count() > 0 )
			{
				pShapesPoints->Add_Item(pPoints);
				pShapesLine->Add_Item(pLine);
			}
			else
			{
				delete(pPoints);
				delete(pLine);
			}
		}
	}

	return( pShapesPoints->Get_Count() > 0 );
}