Пример #1
0
        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é.");
        }
Пример #2
0
        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();
        }
Пример #3
0
        //
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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();
        }
Пример #7
0
        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();
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
                }
            }
        }