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); } }
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); }
public void ArcSupprimer(string p_codeArcASupprimer) { BeanArc_internal v_arcASupprimer = p12_arcsByCode[p_codeArcASupprimer]; ArcSupprimer(v_arcASupprimer); }
// 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)); }
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; } }