private void btn_testTin_Click(object sender, EventArgs e) { _paramTin = FLabServices.createCalculMedium().GetParametresDuTinParDefaut(); // _paramTin.p11_initialisation_determinationFrontieres = enumModeDelimitationFrontiere.pointsProchesDuMbo; _paramTin.p11_initialisation_determinationFrontieres = enumModeDelimitationFrontiere.pointsProchesDuMbo; //_paramTin.p12_extensionSupplementaireMboEnM = 1000; _paramTin.p12_extensionSupplementaireMboEnM = 0; _paramTin.p13_modeCalculZParDefaut = enumModeCalculZ.alti_0; _paramTin.p14_altitudeParDefaut = -200; _paramTin.p15_nbrePointsSupplMultiples4 = 0; _paramTin.p16_initialisation_modeChoixDuPointCentral.p01_excentrationMinimum = 0; _paramTin.p21_enrichissement_modeChoixDuPointCentral.p01_excentrationMinimum = Convert.ToDouble(tb_precisionEnM.Text); // _topolFacettes = FLabServices.createCalculMedium().GetInitialisationTin(_dataPointsTests, _paramTin); FLabServices.createCalculMedium().AugmenteDetailsTinByRef(ref _topolFacettes, _paramTin); // bool v_visuSpatialTrace_vf = false; if (v_visuSpatialTrace_vf) { FVisualisationServices.createVisualisationSpatialTraceServices().GetVisuTopologieFacettes(_topolFacettes, false, false); FVisualisationServices.createVisualisationSpatialTraceServices().AfficheVisu(); } MessageBox.Show("Traitement terminé."); }
public void GetVisuCreteEtTalweg(BeanTopologieFacettes p_topologieFacettes, HashSet <enum_qualificationMorpho_arc> p_nePasAfficher = null) { Color v_couleur; //SpatialTrace.Enable(); // GetVisuTopologieFacettes(p_topologieFacettes, false, false); //On actualise les arcs, pour contrôle foreach (string v_cleArc in p_topologieFacettes.p12_arcsByCode.Keys) { p_topologieFacettes.p12_arcsByCode[v_cleArc].getQualifMorphoDeLArc(); //FLabServices.createGeomorphoServices().SetLignesCretesEtTalwegByRefByArc(p_topologieFacettes, v_cleArc); } // if (!p_nePasAfficher.Contains(enum_qualificationMorpho_arc.crete)) { //SpatialTrace.Indent("Cretes"); List <BeanArc_internal> v_arcsCretes; v_arcsCretes = p_topologieFacettes.p12_arcsByCode.Values.Where(c => c.getQualifMorphoDeLArc() == enum_qualificationMorpho_arc.crete).ToList(); v_couleur = Color.Red; foreach (BeanArc_internal v_arc in v_arcsCretes) { GetVisuArc2D(v_arc, "Crete", v_couleur); } } if (!p_nePasAfficher.Contains(enum_qualificationMorpho_arc.talweg)) { //SpatialTrace.Unindent(); //SpatialTrace.Indent("Talwegs"); List <BeanArc_internal> v_arcsTalweg; v_arcsTalweg = p_topologieFacettes.p12_arcsByCode.Values.Where(c => c.getQualifMorphoDeLArc() == enum_qualificationMorpho_arc.talweg).ToList(); v_couleur = Color.Blue; foreach (BeanArc_internal v_arc in v_arcsTalweg) { GetVisuArc2D(v_arc, "Talweg", v_couleur); } } if (!p_nePasAfficher.Contains(enum_qualificationMorpho_arc.autre)) { //SpatialTrace.Unindent(); //SpatialTrace.Indent("Autres"); List <BeanArc_internal> v_arcsAutres; v_arcsAutres = p_topologieFacettes.p12_arcsByCode.Values.Where(c => c.getQualifMorphoDeLArc() == enum_qualificationMorpho_arc.autre).ToList(); v_couleur = Color.LightGray; foreach (BeanArc_internal v_arc in v_arcsAutres) { GetVisuArc2D(v_arc, "Autre", v_couleur); } } //SpatialTrace.Unindent(); //SpatialTrace.Disable(); }
// public void GetVisuTopologieFacettes(BeanTopologieFacettes p_topologieFacettes, bool p_visupointsInclus_vf, bool p_afficherMemeSiInvalide_vf) { Color v_couleur; Random v_randomisateur = new Random(2); foreach (BeanFacette_internal v_facette in p_topologieFacettes.p13_facettesById.Values) { v_couleur = Color.FromArgb(v_randomisateur.Next(1, 254), v_randomisateur.Next(1, 254), v_randomisateur.Next(1, 254)); GetVisuFacette(v_facette, "", v_couleur, p_visupointsInclus_vf, p_afficherMemeSiInvalide_vf); } }
public BeanTopologieFacettes GetTopologieVoronoiByDicoPoints(Dictionary <int, Point> p_dicoPointsAvecId, int p_srid, enumVoronoiStrategiePointsDupliques p_strategieSiDuplication = enumVoronoiStrategiePointsDupliques.arretTraitement) { BeanTopologieFacettes v_topol = new BeanTopologieFacettes(); try { BeanAlimentationVoronoi v_BeanDAlimentation = GetBeanAlimentationVoronoiByDicoPoints(p_dicoPointsAvecId, p_srid); v_BeanDAlimentation.p12_parametrage.gestionPointsDupliques = p_strategieSiDuplication; if (!v_BeanDAlimentation.p22_contientObjetsInvalidesVf) { VoronoiGraph v_voronoiGraph = GetVoronoiGraph(v_BeanDAlimentation); v_topol = GetBeanTopologieByVoronoiGraph(v_voronoiGraph, v_BeanDAlimentation); } } catch (Exception v_ex) { throw v_ex; } return(v_topol); }
public BeanTopologieFacettes GetTopologieVoronoiByDicoPointsEtMbo(Dictionary <int, Point> p_dicoPointsAvecId, double[] p_coodMinMaxXy, int p_srid) { BeanTopologieFacettes v_topol = new BeanTopologieFacettes(); try { BeanAlimentationVoronoi v_BeanDAlimentation = GetBeanAlimentationVoronoiByDicoPointsEtMbo(p_dicoPointsAvecId, p_coodMinMaxXy, p_srid); if (!v_BeanDAlimentation.p22_contientObjetsInvalidesVf) { VoronoiGraph v_voronoiGraph = GetVoronoiGraph(v_BeanDAlimentation); v_topol = GetBeanTopologieByVoronoiGraph(v_voronoiGraph, v_BeanDAlimentation); } } catch (Exception) { throw; } return(v_topol); }
public void GetVisuArcsTopologie(BeanTopologieFacettes p_topologie, Color p_couleur, string p_prefixeLabel) { if (p_topologie.p12_arcsByCode == null || p_topologie.p12_arcsByCode.Count == 0) { return; } Geometry v_arcGeom; string v_label; int v_srid = p_topologie.p11_pointsFacettesByIdPoint.First().Value.p11_srid; //SpatialTrace.Enable(); //SpatialTrace.SetLineColor(p_couleur); foreach (KeyValuePair <string, BeanArc_internal> v_arc in p_topologie.p12_arcsByCode) { v_label = p_prefixeLabel + " " + v_arc.Value.p00_idArc + "\\" + v_arc.Value.p01_hcodeArc; v_arcGeom = FLabServices.createUtilitaires().GetGeometryLine(v_arc.Value.p11_pointDbt.p10_coord, v_arc.Value.p12_pointFin.p10_coord, v_srid, false); //SpatialTrace.TraceGeometry(v_arcGeom, v_label, v_label); } //SpatialTrace.Disable(); }
public void GetVisuIlots(BeanTopologieFacettes p_topologie, Color p_couleur, string p_prefixeLabel) { //SpatialTrace.Enable(); //SpatialTrace.SetFillColor(p_couleur); //SpatialTrace.SetLineColor(Color.Blue); //SpatialTrace.SetLineWidth(1); string v_label; foreach (KeyValuePair <int, BeanFacette_internal> v_facette in p_topologie.p13_facettesById) { if (v_facette.Value.p04_geomFacette != null) { v_label = p_prefixeLabel + " Fac " + v_facette.Key; //SpatialTrace.TraceGeometry(v_facette.Value.p04_geomFacette, v_label, v_label); } else { if (v_facette.Value.p02_arcs != null && v_facette.Value.p02_arcs.Count > 0) { //SpatialTrace.SetLineColor(Color.Red); //SpatialTrace.SetLineWidth(3); Geometry v_arcGeom; foreach (BeanArc_internal v_arcPolyg in v_facette.Value.p02_arcs) { v_label = "PB FAC " + v_facette.Key + "_" + p_prefixeLabel + "=> Arc: " + v_arcPolyg.p00_idArc + "\\" + v_arcPolyg.p01_hcodeArc; int v_srid = v_arcPolyg.p11_pointDbt.p11_srid; v_arcGeom = FLabServices.createUtilitaires().GetGeometryLine(v_arcPolyg.p11_pointDbt.p10_coord, v_arcPolyg.p12_pointFin.p10_coord, v_srid, false); //SpatialTrace.TraceGeometry(v_arcGeom, v_label, v_label); } //SpatialTrace.SetLineWidth(1); //SpatialTrace.SetLineColor(Color.Blue); } } } //SpatialTrace.Disable(); }
public BeanTopologieFacettes GetBeanTopologieByVoronoiGraph(VoronoiGraph p_voronoiGraph, BeanAlimentationVoronoi p_beanAlimentationVoronoi) { BeanTopologieFacettes v_topologie = new BeanTopologieFacettes(); try { List <BeanArc_internal> v_arcsVoronoi = new List <BeanArc_internal>(); Dictionary <string, BeanArc_internal> v_arcsParHCode = new Dictionary <string, BeanArc_internal>(); int v_srid = p_beanAlimentationVoronoi.p11_srid; // Dictionary <string, BeanPoint_internal> v_pointsDesArcsByCode = new Dictionary <string, BeanPoint_internal>(); Dictionary <int, BeanArc_internal> v_arcs = new Dictionary <int, BeanArc_internal>(); Dictionary <int, int> v_DicoPointSourceGaucheParArc = new Dictionary <int, int>(); Dictionary <int, int> v_DicoPointSourceDroitParArc = new Dictionary <int, int>(); // //Création du réseau double v_vorX_Left; double v_vorY_Left; double v_vorX_Right; double v_vorY_Right; double v_OrigX_Left; double v_OrigY_Left; double v_OrigX_Right; double v_OrigY_Right; double v_CorrectionX = 0; double v_CorrectionY = 0; ITopologieService v_topologieService = new TopologieService(); int v_KeyArc = 0; HashSet <string> v_testDoublesLignes = new HashSet <string>(); if (p_beanAlimentationVoronoi.p12_parametrage.reductionCoordonneesVf) { v_CorrectionX = (double)p_beanAlimentationVoronoi.p55_origineXCorrigee; v_CorrectionY = (double)p_beanAlimentationVoronoi.p56_origineYCorrigee; } BeanPoint_internal v_pt1; BeanPoint_internal v_pt2; BeanArc_internal v_arc; //On créé une facette/ilot pour chaque point; BeanFacette_internal v_facette; Dictionary <int, BeanFacette_internal> v_toutesFacettes; v_toutesFacettes = p_beanAlimentationVoronoi.p10_dicoDesPointsSources.ToDictionary(c => c.Key, c => new BeanFacette_internal()); //[ATTENTION! On doit mettre à jour l'id foreach (KeyValuePair <int, BeanFacette_internal> v_fac in v_toutesFacettes) { v_fac.Value.p00_idFacette = v_fac.Key; } //On parcourt les arcs: string v_hcodePt1; string v_hcodePt2; string v_hcodeGraineVoronoiAGauche; string v_hcodeGraineVoronoiADroite; int v_idIlotAGauche; int v_idIlotADroite; foreach (VoronoiEdge v_Edges in p_voronoiGraph.Edges) { if (!v_Edges.IsInfinite && !v_Edges.IsPartlyInfinite) { v_KeyArc++; //L'arc voronoi v_vorX_Left = v_Edges.VVertexA[0] + v_CorrectionX; v_vorY_Left = v_Edges.VVertexA[1] + v_CorrectionY; v_vorX_Right = v_Edges.VVertexB[0] + v_CorrectionX; v_vorY_Right = v_Edges.VVertexB[1] + v_CorrectionY; // v_hcodePt1 = FLabServices.createUtilitaires().GetHCodeGeogPoint(new double[2] { v_vorX_Left, v_vorY_Left }); if (v_pointsDesArcsByCode.ContainsKey(v_hcodePt1)) { v_pt1 = v_pointsDesArcsByCode[v_hcodePt1]; } else { v_pt1 = new BeanPoint_internal(v_vorX_Left, v_vorY_Left, 0, v_srid); v_pointsDesArcsByCode.Add(v_hcodePt1, v_pt1); } // v_hcodePt2 = FLabServices.createUtilitaires().GetHCodeGeogPoint(new double[2] { v_vorX_Right, v_vorY_Right }); if (v_pointsDesArcsByCode.ContainsKey(v_hcodePt2)) { v_pt2 = v_pointsDesArcsByCode[v_hcodePt2]; } else { v_pt2 = new BeanPoint_internal(v_vorX_Right, v_vorY_Right, 0, v_srid); v_pointsDesArcsByCode.Add(v_hcodePt2, v_pt2); } // v_arc = new BeanArc_internal(v_pt1, v_pt2); // if (!v_arcsParHCode.ContainsKey(v_arc.p01_hcodeArc)) { v_arcsParHCode.Add(v_arc.p01_hcodeArc, v_arc); } //On référence les points 'graines' voronoi à droite et à gauche v_OrigX_Left = v_Edges.LeftData[0] + v_CorrectionX; v_OrigY_Left = v_Edges.LeftData[1] + v_CorrectionY; v_OrigX_Right = v_Edges.RightData[0] + v_CorrectionX; v_OrigY_Right = v_Edges.RightData[1] + v_CorrectionY; // v_hcodeGraineVoronoiAGauche = FLabServices.createUtilitaires().GetHCodeGeogPoint(new double[2] { v_OrigX_Left, v_OrigY_Left }); v_hcodeGraineVoronoiADroite = FLabServices.createUtilitaires().GetHCodeGeogPoint(new double[2] { v_OrigX_Right, v_OrigY_Right }); // v_facette = null; if (p_beanAlimentationVoronoi.p31_correspondanceHCodePointvsIdPoint.ContainsKey(v_hcodeGraineVoronoiAGauche)) { v_idIlotAGauche = p_beanAlimentationVoronoi.p31_correspondanceHCodePointvsIdPoint[v_hcodeGraineVoronoiAGauche]; v_facette = v_toutesFacettes[v_idIlotAGauche]; v_facette.p02_arcs.Add(v_arc); v_arc.p21_facetteGauche = v_facette; } else { v_arc.p20_statutArc = enumStatutArc.arcExterne; } v_facette = null; if (p_beanAlimentationVoronoi.p31_correspondanceHCodePointvsIdPoint.ContainsKey(v_hcodeGraineVoronoiADroite)) { v_idIlotADroite = p_beanAlimentationVoronoi.p31_correspondanceHCodePointvsIdPoint[v_hcodeGraineVoronoiADroite]; v_facette = v_toutesFacettes[v_idIlotADroite]; v_facette.p02_arcs.Add(v_arc); v_arc.p21_facetteGauche = v_facette; } else { v_arc.p20_statutArc = enumStatutArc.arcExterne; } } //Fin if (!v_Edges.IsInfinite && !v_Edges.IsPartlyInfinite) } //Fin foreach //Création de la topologie v_arcsVoronoi = v_arcsParHCode.Values.OrderBy(c => c.p01_hcodeArc).ToList(); //On actualise les points des facettes: foreach (KeyValuePair <int, BeanFacette_internal> v_fac in v_toutesFacettes) { List <BeanPoint_internal> v_points = v_fac.Value.p02_arcs.Select(c => c.p11_pointDbt).ToList(); v_points.AddRange(v_fac.Value.p02_arcs.Select(c => c.p12_pointFin).ToList()); HashSet <string> v_pointsDeja = new HashSet <string>(); foreach (BeanPoint_internal v_pt in v_points) { if (!v_pointsDeja.Contains(v_pt.p01_hCodeGeog)) { v_fac.Value.p01_pointsDeFacette.Add(v_pt); v_pointsDeja.Add(v_pt.p01_hCodeGeog); } } } // v_topologie = new BeanTopologieFacettes(v_arcsVoronoi); v_topologie.p13_facettesById = v_toutesFacettes; //On supprime les éventuelles facettes sans dimension List <int> v_idFacettesASupprimer; v_idFacettesASupprimer = v_toutesFacettes.Where(c => c.Value.p02_arcs.Count < 3).Select(c => c.Key).ToList(); BeanFacette_internal v_facetteASupprimer; foreach (int v_idFacASuppr in v_idFacettesASupprimer) { v_facetteASupprimer = v_topologie.p13_facettesById[v_idFacASuppr]; v_topologie.FacetteSupprimer(v_facetteASupprimer); } //Géométrie: List <int> v_idFacettes = v_topologie.p13_facettesById.Keys.ToList(); IGeometry v_geomFacette; BeanFacette_internal v_facettePourGeom; foreach (int v_idFac in v_idFacettes) { v_facettePourGeom = v_topologie.p13_facettesById[v_idFac]; v_geomFacette = FLabServices.createCalculMedium().GetGeometryPolygoneFacetteEtOrdonnePointsFacette(ref v_facettePourGeom, ref v_topologie); v_facettePourGeom.p04_geomFacette = v_geomFacette; } } catch (Exception v_ex) { throw v_ex; } return(v_topologie); }
public void GetVisuPentesFacettes(BeanTopologieFacettes p_topologieFacettes, int p_nbreClasses) { bool param_sensCouleursCroissant = true; bool param_visupointsInclus_vf = false; bool param_afficherMemeSiInvalide_vf = false; Dictionary <int, double> v_penteDesfacettes = p_topologieFacettes.p13_facettesById.ToDictionary(c => c.Key, c => c.Value.getPente()); Dictionary <string, List <int> > v_facettesParClasse; //v_facettesParClasse = FVisualisationServices.createSeuillageServices().GetIdParClassesOrdonnees_parIsoQuantite(v_penteDesfacettes, p_nbreClasses); //Pentes suspectes? double param_seuilMaxi = (Math.PI / 2) - 0.01; double v_min = v_penteDesfacettes.Values.Min(); double v_max = v_penteDesfacettes.Values.Max(); double v_minRecale = Math.Max(v_min, 0); double v_maxRecale = Math.Min(v_max, param_seuilMaxi); int param_alpha = 120; Dictionary <int, double> v_seuilsBas; //On effectue une classification d'abord de la zone 'vraisemblable' (0 à approx 90) //v_seuilsBas=FVisualisationServices.createSeuillageServices().GetSeuilBasClasses_memeEspaceInterclasse(p_nbreClasses, v_minRecale, v_maxRecale); v_seuilsBas = FVisualisationServices.createSeuillageServices().GetSeuilBasClasses_parIsoQuantite(v_penteDesfacettes, p_nbreClasses); //On identifie les éventuels cas à PB if (v_min < 0) { v_seuilsBas.Add(0, v_min); } if (v_max > param_seuilMaxi) { v_seuilsBas.Add(p_nbreClasses + 1, v_maxRecale); } v_seuilsBas = v_seuilsBas.OrderBy(c => c.Key).ToDictionary(c => c.Key, c => c.Value); // v_facettesParClasse = FVisualisationServices.createSeuillageServices().GetClassesOrdonnees_parSeuilsDeValeur(v_penteDesfacettes, v_seuilsBas); Dictionary <string, Color> v_tableCouleurs; v_tableCouleurs = GetTableCouleursDegradees(v_facettesParClasse.Keys.ToList(), enumProgressionCouleurs.greenVersRed, param_alpha, param_sensCouleursCroissant); if (v_min < 0) { v_tableCouleurs[v_tableCouleurs.First().Key] = Color.Yellow; } if (v_max > param_seuilMaxi) { v_tableCouleurs[v_tableCouleurs.Last().Key] = Color.Purple; } Color v_couleur; string v_label; double v_convertToDegree = 180 / Math.PI; foreach (KeyValuePair <string, List <int> > v_classe in v_facettesParClasse) { v_couleur = v_tableCouleurs[v_classe.Key]; foreach (int v_idFacette in v_classe.Value) { v_label = v_classe.Key + " (" + Math.Round(v_penteDesfacettes[v_idFacette] * v_convertToDegree, 3) + " deg)"; GetVisuFacette(p_topologieFacettes.p13_facettesById[v_idFacette], v_label, v_couleur, param_visupointsInclus_vf, param_afficherMemeSiInvalide_vf); } } }