private void Run(Face2 dessus, Face2 devant, Component2 contreMarche, Feature esquisse) { if ((dessus == null) || (devant == null)) { this.LogMethode(new String[] { "Une reference à un objet a été perdue dessus | devant :", dessus.IsRefToString(), "|", devant.IsRefToString() }); 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]; } gSegment F = new gSegment(E_Face); gSegment G = new gSegment(E_Gauche); gSegment D = new gSegment(E_Droit); G.OrienterDe(F); D.OrienterDe(F); F.OrienterDe(G); Double gAg1 = G.Vecteur.Angle(F.Vecteur); Double gAg2 = D.Vecteur.Angle(F.Vecteur.Inverse()); Double gLg1 = new gPoint(0, 0, 0).Distance(F.Start); Double gLg2 = new gPoint(0, 0, 0).Distance(F.End); Double gLc1 = G.Lg; Double gLc2 = D.Lg; Configurer(contreMarche, gAg1, gAg2, gLg1, gLg2, gLc1, gLc2, esquisse); } catch (Exception e) { this.LogErreur(new Object[] { e }); } }
// Recherche de l'arrete de devant sur laquelle est contrainte la platine. private Edge ArreteDevant(List <Mate2> listeContraintes, Face2 faceDessus) { Mate2 Ct = null; // On rechercher la contrainte avec un point foreach (Mate2 Contrainte in listeContraintes) { foreach (MateEntity2 Ent in Contrainte.eListeDesEntitesDeContrainte()) { if (Ent.ReferenceType2 == (int)swSelectType_e.swSelEXTSKETCHPOINTS) { Ct = Contrainte; break; } } if (Ct.IsRef()) { break; } } if (Ct.IsNull()) { return(null); } Face2 F_Devant = null; // On recherche la face associée à cette contrainte foreach (MateEntity2 Ent in Ct.eListeDesEntitesDeContrainte()) { if (Ent.ReferenceType2 == (int)swSelectType_e.swSelFACES) { F_Devant = (Face2)Ent.Reference; break; } } if (F_Devant.IsNull()) { return(null); } List <Edge> ListeArretes = F_Devant.eListeDesArretesCommunes(faceDessus); if (ListeArretes.Count > 0) { return(ListeArretes[0]); } return(null); }
// Recherche de l'arrete sur laquelle est contrainte la platine. private Edge ArretePlatine(List <Mate2> listeContraintes, Feature planContrainte, Face2 f_Dessus) { Mate2 Contrainte = null; foreach (Mate2 Ct in listeContraintes) { foreach (MateEntity2 Ent in Ct.eListeDesEntitesDeContrainte()) { // Si l'entite est un plan if (Ent.ReferenceType2 == (int)swSelectType_e.swSelDATUMPLANES) { RefPlane P = Ent.Reference; Feature F = (Feature)P; // On vérifie que le plan a le même nom que le plan contrainte if (planContrainte.Name == F.Name) { Contrainte = Ct; break; } } } if (Contrainte.IsRef()) { break; } } foreach (MateEntity2 Ent in Contrainte.eListeDesEntitesDeContrainte()) { // On récupère la face associée à la contrainte if (Ent.ReferenceType2 == (int)swSelectType_e.swSelFACES) { Face2 F = Ent.Reference; // Liste des arrêtes communes, normalement, il n'y en a qu'une List <Edge> L = F.eListeDesArretesCommunes(f_Dessus); // On renvoi la première if (L.Count > 0) { return(L[0]); } } } return(null); }
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 }); } }