//--------------------------------------------------------- bool CWKSP_Shapes::_Edit_Split(void) { if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon || Get_Shapes()->Get_Type() == SHAPE_TYPE_Line ) { switch( m_Edit_Mode ) { default: break; //------------------------------------------------- case EDIT_SHAPE_MODE_Normal: m_Edit_Mode = EDIT_SHAPE_MODE_Split; if( m_Edit_Shapes.Get_Count() == 0 ) { m_Edit_Shapes.Add_Shape(Get_Shapes()->Get_Selection()); } if( m_Edit_Shapes.Get_Count() > 1 ) { m_Edit_Shapes.Get_Shape(1)->Del_Parts(); } else { m_Edit_Shapes.Add_Shape(); } return( true ); //------------------------------------------------- case EDIT_SHAPE_MODE_Split: m_Edit_Mode = EDIT_SHAPE_MODE_Normal; CSG_Tool *pTool = Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon ? SG_Get_Tool_Library_Manager().Get_Tool(SG_T("shapes_polygons"), 8) // Polygon-Line Intersection : SG_Get_Tool_Library_Manager().Get_Tool(SG_T("shapes_lines" ), 6); // Split Lines with Lines if( pTool ) { CSG_Shapes Line(SHAPE_TYPE_Line), Split(Get_Shapes()->Get_Type()); Line.Add_Shape(); for(int i=0; i<m_Edit_Shapes.Get_Shape(1)->Get_Point_Count(); i++) { Line.Get_Shape(0)->Add_Point(m_Edit_Shapes.Get_Shape(1)->Get_Point(i)); } m_Edit_Shapes.Del_Shape(1); //----------------------------------------- bool bResult; CSG_Parameters P; P.Assign(pTool->Get_Parameters()); pTool->Set_Manager(NULL); if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Polygon ) { bResult = pTool->Get_Parameters()->Set_Parameter("POLYGONS" , &m_Edit_Shapes) && pTool->Get_Parameters()->Set_Parameter("LINES" , &Line) && pTool->Get_Parameters()->Set_Parameter("INTERSECT", &Split) && pTool->Execute(); } else // if( Get_Shapes()->Get_Type() == SHAPE_TYPE_Line ) { bResult = pTool->Get_Parameters()->Set_Parameter("LINES" , &m_Edit_Shapes) && pTool->Get_Parameters()->Set_Parameter("SPLIT" , &Line) && pTool->Get_Parameters()->Set_Parameter("INTERSECT", &Split) && pTool->Execute(); } //----------------------------------------- if( bResult ) { if( m_Edit_pShape ) { m_Edit_pShape->Assign(Split.Get_Shape(0), false); for(int iSplit=1; iSplit<Split.Get_Count(); iSplit++) { CSG_Shape *pSplit = Split.Get_Shape(iSplit); for(int iPart=0; iPart<pSplit->Get_Part_Count(); iPart++) { for(int iPoint=0, jPart=m_Edit_pShape->Get_Part_Count(); iPoint<pSplit->Get_Point_Count(iPart); iPoint++) { m_Edit_pShape->Add_Point(pSplit->Get_Point(iPoint, iPart), jPart); } } } } else if( Get_Shapes()->Get_Selection_Count() == 1 ) // if( !m_Edit_pShape ) { CSG_Shape *pSelection = Get_Shapes()->Get_Selection(); pSelection->Assign(Split.Get_Shape(0), false); for(int iSplit=1; iSplit<Split.Get_Count(); iSplit++) { CSG_Shape *pSplit = Get_Shapes()->Add_Shape(Split.Get_Shape(iSplit)); ((CSG_Table_Record *)pSplit)->Assign(pSelection); Get_Shapes()->Select(pSplit, true); } m_Edit_Shapes.Del_Shapes(); } } pTool->Get_Parameters()->Assign_Values(&P); pTool->Set_Manager(P.Get_Manager()); } Update_Views(false); return( true ); } } return( false ); }
//--------------------------------------------------------- bool CKriging_Regression::On_Execute(void) { //----------------------------------------------------- CSG_Shapes Points(SHAPE_TYPE_Point); CSG_Grid *pPrediction = Parameters("PREDICTION")->asGrid(); CSG_Grid *pRegression = Parameters("REGRESSION")->asGrid(); CSG_Grid *pResiduals = Parameters("RESIDUALS" )->asGrid(); CSG_Grid *pVariance = Parameters("VARIANCE" )->asGrid(); //----------------------------------------------------- if( !pResiduals ) { pResiduals = pPrediction; } //----------------------------------------------------- SG_RUN_TOOL_ExitOnError("statistics_regression", 1, // Multiple Regression Analysis (Points and Predictor Grids) SG_TOOL_PARAMETER_SET("PREDICTORS", Parameters("PREDICTORS")) && SG_TOOL_PARAMETER_SET("POINTS" , Parameters("POINTS" )) && SG_TOOL_PARAMETER_SET("ATTRIBUTE" , Parameters("FIELD" )) && SG_TOOL_PARAMETER_SET("INFO_COEFF", Parameters("INFO_COEFF")) && SG_TOOL_PARAMETER_SET("INFO_MODEL", Parameters("INFO_MODEL")) && SG_TOOL_PARAMETER_SET("INFO_STEPS", Parameters("INFO_STEPS")) && SG_TOOL_PARAMETER_SET("RESAMPLING", Parameters("RESAMPLING")) && SG_TOOL_PARAMETER_SET("COORD_X" , Parameters("COORD_X" )) && SG_TOOL_PARAMETER_SET("COORD_Y" , Parameters("COORD_Y" )) && SG_TOOL_PARAMETER_SET("INTERCEPT" , Parameters("INTERCEPT" )) && SG_TOOL_PARAMETER_SET("METHOD" , Parameters("METHOD" )) && SG_TOOL_PARAMETER_SET("P_VALUE" , Parameters("P_VALUE" )) && SG_TOOL_PARAMETER_SET("REGRESSION", pRegression) && SG_TOOL_PARAMETER_SET("RESIDUALS" , &Points ) ); //----------------------------------------------------- CSG_Tool *pK = Parameters("KRIGING")->asInt() == 0 ? (CSG_Tool *)&m_SK : (CSG_Tool *)&m_OK; Process_Set_Text(pK->Get_Name()); pK->Set_Manager(NULL); if( !pK->Set_Parameter("POINTS" , &Points) || !pK->Set_Parameter("FIELD" , 2) // residual || !pK->Set_Parameter("LOG" , Parameters("LOG" )) || !pK->Set_Parameter("BLOCK" , Parameters("BLOCK" )) || !pK->Set_Parameter("DBLOCK" , Parameters("DBLOCK" )) || !pK->Set_Parameter("SEARCH_RANGE" , Parameters("SEARCH_RANGE" )) || !pK->Set_Parameter("SEARCH_RADIUS" , Parameters("SEARCH_RADIUS" )) || !pK->Set_Parameter("SEARCH_POINTS_ALL", Parameters("SEARCH_POINTS_ALL")) || !pK->Set_Parameter("SEARCH_POINTS_MIN", Parameters("SEARCH_POINTS_MIN")) || !pK->Set_Parameter("SEARCH_POINTS_MAX", Parameters("SEARCH_POINTS_MAX")) || !pK->Set_Parameter("SEARCH_DIRECTION" , Parameters("SEARCH_DIRECTION" )) || !pK->Set_Parameter("TARGET_DEFINITION", 1) // grid or grid system || !pK->Set_Parameter("PREDICTION" , pResiduals) || !pK->Set_Parameter("VARIANCE" , pVariance ) || (!SG_UI_Get_Window_Main() && ( // saga_cmd !pK->Set_Parameter("VAR_MAXDIST" , Parameters("VAR_MAXDIST" )) || !pK->Set_Parameter("VAR_NCLASSES" , Parameters("VAR_NCLASSES" )) || !pK->Set_Parameter("VAR_NSKIP" , Parameters("VAR_NSKIP" )) || !pK->Set_Parameter("VAR_MODEL" , Parameters("VAR_MODEL" )))) ) { Error_Set(CSG_String::Format("%s [%s].[%s]", _TL("could not initialize tool"), _TL("statistics_regression"), pK->Get_Name().c_str())); return( false ); } if( !pK->Execute() ) { Error_Set(CSG_String::Format("%s [%s].[%s]", _TL("could not execute tool" ), _TL("statistics_regression"), pK->Get_Name().c_str())); return( false ); } //----------------------------------------------------- #pragma omp parallel for for(int y=0; y<Get_NY(); y++) { for(int x=0; x<Get_NX(); x++) { if( pRegression->is_NoData(x, y) || pResiduals->is_NoData(x, y) ) { pPrediction->Set_NoData(x, y); } else { pPrediction->Set_Value(x, y, pRegression->asDouble(x, y) + pResiduals->asDouble(x, y)); } } } //----------------------------------------------------- pRegression->Fmt_Name("%s.%s [%s]", Parameters("POINTS")->asShapes()->Get_Name(), Parameters("FIELD")->asString(), _TL("Regression")); pPrediction->Fmt_Name("%s.%s [%s]", Parameters("POINTS")->asShapes()->Get_Name(), Parameters("FIELD")->asString(), _TL("Prediction")); if( Parameters("RESIDUALS")->asGrid() ) { pResiduals->Fmt_Name("%s.%s [%s]", Parameters("POINTS")->asShapes()->Get_Name(), Parameters("FIELD")->asString(), _TL("Residuals")); } if( pVariance ) { pVariance ->Fmt_Name("%s.%s [%s]", Parameters("POINTS")->asShapes()->Get_Name(), Parameters("FIELD")->asString(), _TL("Quality")); } //----------------------------------------------------- return( true ); }