private void Run(Face2 dessus, Face2 devant, Feature gPlan, Feature dPlan, Component2 pltG, Component2 pltD) { if ((dessus == null) || (devant == null)) { this.LogMethode(new String[] { "Une reference à un objet a été perdue" }); return; } try { Edge E_Face = dessus.eListeDesArretesCommunes(devant)[0]; List <Edge> ListeArrete = dessus.eListeDesArretesContigues(E_Face); // On assigne les cotes de façon arbitraire pour eviter une assignation suplémentaire Edge E_Gauche = ListeArrete[0]; Edge E_Droit = ListeArrete[1]; // Création des segements gSegment S1 = new gSegment(E_Gauche); gSegment Sf = new gSegment(E_Face); // Orientation des segements S1.OrienterDe(Sf); Sf.OrienterVers(S1); gVecteur Normal = new gVecteur((Double[])dessus.Normal); // Verification du sens de rotation et modification des cotes si nécessaire if (Sf.Vecteur.RotationTrigo(S1.Vecteur, Normal)) { E_Gauche = ListeArrete[1]; E_Droit = ListeArrete[0]; } List <Face2> L = null; L = E_Gauche.eDeuxFacesAdjacentes(); L.Remove(dessus); Face2 FaceGauche = L[0]; L = E_Droit.eDeuxFacesAdjacentes(); L.Remove(dessus); Face2 FaceDroite = L[0]; if (pltG.IsRef()) { if (pltG.GetConstrainedStatus() == (int)swConstrainedStatus_e.swUnderConstrained) { Contraindre(gPlan, FaceGauche); } } if (pltD.IsRef()) { if (pltD.GetConstrainedStatus() == (int)swConstrainedStatus_e.swUnderConstrained) { Contraindre(dPlan, FaceDroite); } } } catch (Exception e) { this.LogErreur(new Object[] { e }); } }