//--------------------------------------------------------- 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 ); }
//--------------------------------------------------------- bool CGrid_Profile::On_Execute_Finish(void) { if( m_bAdd ) { Set_Profile(); } return( true ); }
//--------------------------------------------------------- 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 ); } }
//--------------------------------------------------------- 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 ); }