Ejemplo n.º 1
0
        public void ArcAjouter(BeanArc_internal p_arcAAjouter)
        {
            //if (!p11_pointsFacettesByCode.ContainsKey(p_arcAAjouter.p11_pointDbt.p01_hCodeGeog))
            if (!p11_pointsFacettesByIdPoint.ContainsKey(p_arcAAjouter.p11_pointDbt.p00_id))
            {
                p11_pointsFacettesByIdPoint.Add(p_arcAAjouter.p11_pointDbt.p00_id, p_arcAAjouter.p11_pointDbt);
                p11_pointsFacettesByCode.Add(p_arcAAjouter.p11_pointDbt.p01_hCodeGeog, p_arcAAjouter.p11_pointDbt);
            }

            //if (!p11_pointsFacettesByCode.ContainsKey(p_arcAAjouter.p12_pointFin.p01_hCodeGeog))
            if (!p11_pointsFacettesByIdPoint.ContainsKey(p_arcAAjouter.p12_pointFin.p00_id))
            {
                p11_pointsFacettesByIdPoint.Add(p_arcAAjouter.p12_pointFin.p00_id, p_arcAAjouter.p12_pointFin);
                p11_pointsFacettesByCode.Add(p_arcAAjouter.p12_pointFin.p01_hCodeGeog, p_arcAAjouter.p11_pointDbt);
            }
            //
            if (!p_arcAAjouter.p11_pointDbt.p41_arcsAssocies.ContainsKey(p_arcAAjouter.p01_hcodeArc))
            {
                p_arcAAjouter.p11_pointDbt.p41_arcsAssocies.Add(p_arcAAjouter.p01_hcodeArc, p_arcAAjouter);
            }
            p_arcAAjouter.p11_pointDbt.p43_ordonnancementOK_vf = false;
            if (!p_arcAAjouter.p12_pointFin.p41_arcsAssocies.ContainsKey(p_arcAAjouter.p01_hcodeArc))
            {
                p_arcAAjouter.p12_pointFin.p41_arcsAssocies.Add(p_arcAAjouter.p01_hcodeArc, p_arcAAjouter);
            }
            p_arcAAjouter.p12_pointFin.p43_ordonnancementOK_vf = false;
            //
            if (!p12_arcsByCode.ContainsKey(p_arcAAjouter.p01_hcodeArc))
            {
                p12_arcsByCode.Add(p_arcAAjouter.p01_hcodeArc, p_arcAAjouter);
            }
        }
Ejemplo n.º 2
0
        public void ArcSupprimer(BeanArc_internal p_arcASupprimer)
        {
            p11_pointsFacettesByIdPoint[p_arcASupprimer.p11_pointDbt.p00_id].p41_arcsAssocies.Remove(p_arcASupprimer.p01_hcodeArc);
            p11_pointsFacettesByIdPoint[p_arcASupprimer.p12_pointFin.p00_id].p41_arcsAssocies.Remove(p_arcASupprimer.p01_hcodeArc);
            //

            //ATTENTION: services sur les facettes non implémentés à ce stade!!
            //La suppression doit amener la création d'une nouvelle facette.
            //La suppression d'un "arc base" devrait amener à passer les arcs de la facette correspondante en "base"

            //
            p12_arcsByCode.Remove(p_arcASupprimer.p01_hcodeArc);
        }
Ejemplo n.º 3
0
        public void ArcSupprimer(string p_codeArcASupprimer)
        {
            BeanArc_internal v_arcASupprimer = p12_arcsByCode[p_codeArcASupprimer];

            ArcSupprimer(v_arcASupprimer);
        }
Ejemplo n.º 4
0
 //
 public Geometry GetGeometryArc(BeanArc_internal p_arc, bool ifPt1AndPt2IqualReturnPointElseNull)
 {
     return(GetGeometryLine(p_arc.p11_pointDbt.p10_coord, p_arc.p12_pointFin.p10_coord, p_arc.p11_pointDbt.p11_srid, ifPt1AndPt2IqualReturnPointElseNull));
 }
Ejemplo n.º 5
0
        public enum_qualificationMorpho_arc GetQualificationMorphoDeLArc(BeanArc_internal p_arc)
        {
            enum_qualificationMorpho_arc v_result;

            try
            {
                //L'arc sépare 2 facettes (sauf en frontière)
                //On va exprimer les 2 points n'appartenant pas à l'arc dans le plan de plus forte pente
                //Si les 2 points sont 'au-dessus' alors on considère que l'arc est 'talweg'
                //Si les 2 points sont 'au-dessous' alors on considère que l'arc est 'ligne de crète'
                //Les autres cas correspondent, au plus, à des ruptures de pente

                //-On détermine le plan.
                //Ce plan doit être tel que:
                //-sa pente est celle de l'arc
                //-si on translate le vecteur correspondant selon un vecteur de même élévation (=selon la courbe de niveau),
                //alors ce vecteur doit être inclus dans ce plan.
                //Du coup, pour déterminer ce plan, on détermine on utilise le vecteur de l'arc et un vecteur normal en xy à ce vecteur
                double[] v_vecteurArc      = FLabServices.createCalculLow().GetVectorBrutFromTwoPoints(p_arc.p11_pointDbt.p10_coord, p_arc.p12_pointFin.p10_coord);
                double[] v_vecteurNormalXy = new double[3] {
                    -1 * v_vecteurArc[1], v_vecteurArc[0], 0
                };
                double[] v_pointNormal = new double[3] {
                    v_vecteurNormalXy[0] + p_arc.p11_pointDbt.p10_coord[0], v_vecteurNormalXy[1] + p_arc.p11_pointDbt.p10_coord[1], p_arc.p11_pointDbt.p10_coord[2]
                };

                double[] v_vecteurNormalAuPlanDePenteMaxi;
                bool     p_exceptionSiNotAPlanElseVecteur000_vf = false;
                v_vecteurNormalAuPlanDePenteMaxi = FLabServices.createCalculLow().GetNormaleDuPlan(p_arc.p11_pointDbt.p10_coord, p_arc.p12_pointFin.p10_coord, v_pointNormal, p_exceptionSiNotAPlanElseVecteur000_vf);

                //=>On calcule la matrice inverse...
                v_vecteurArc                  = FLabServices.createCalculLow().GetNormalisationVecteurXYZ(v_vecteurArc);
                v_vecteurNormalXy             = FLabServices.createCalculLow().GetNormalisationVecteurXYZ(v_vecteurNormalXy);
                double[,] v_matriceDeRotation = FLabServices.createCalculLow().GetMatriceInverse3x3(v_vecteurArc, v_vecteurNormalXy, v_vecteurNormalAuPlanDePenteMaxi);

                //...on l'applique sur les 2 points
                List <double[]>    v_coordonnees = new List <double[]>();
                double[]           v_coordDansLeRepereDuPlan;
                BeanPoint_internal v_pointATester;
                double[]           v_vectorATester;
                if (p_arc.p21_facetteGauche != null)
                {
                    v_pointATester            = p_arc.p21_facetteGauche.p01_pointsDeFacette.Where(c => c.p00_id != p_arc.p11_pointDbt.p00_id && c.p00_id != p_arc.p12_pointFin.p00_id).First();
                    v_vectorATester           = FLabServices.createCalculLow().GetVectorBrutFromTwoPoints(p_arc.p11_pointDbt.p10_coord, v_pointATester.p10_coord);
                    v_coordDansLeRepereDuPlan = FLabServices.createCalculLow().GetProduitMatriceParVector(v_matriceDeRotation, v_vectorATester);
                    v_coordonnees.Add(v_coordDansLeRepereDuPlan);
                }
                if (p_arc.p22_facetteDroite != null)
                {
                    v_pointATester            = p_arc.p22_facetteDroite.p01_pointsDeFacette.Where(c => c.p00_id != p_arc.p11_pointDbt.p00_id && c.p00_id != p_arc.p12_pointFin.p00_id).First();
                    v_vectorATester           = FLabServices.createCalculLow().GetVectorBrutFromTwoPoints(p_arc.p11_pointDbt.p10_coord, v_pointATester.p10_coord);
                    v_coordDansLeRepereDuPlan = FLabServices.createCalculLow().GetProduitMatriceParVector(v_matriceDeRotation, v_vectorATester);
                    v_coordonnees.Add(v_coordDansLeRepereDuPlan);
                }
                //On exploite l'info:
                //(pour l'instant, on ne traite pas les arcs frontières)

                if (v_coordonnees.Where(c => c[2] > 0).Count() > 1)
                {
                    v_result = enum_qualificationMorpho_arc.talweg;
                    return(v_result);
                }
                if (v_coordonnees.Where(c => c[2] < 0).Count() > 1)
                {
                    v_result = enum_qualificationMorpho_arc.crete;
                    return(v_result);
                }
                return(enum_qualificationMorpho_arc.autre);;
            }
            catch (Exception)
            {
                throw;
            }
        }