// 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); }
protected override void Command() { try { Face2 Face = MdlBase.eSelect_RecupererObjet <Face2>(); if (Face.IsNull()) { WindowLog.Ecrire("Pas de face selectionnée"); return; } Body2 CorpsBase = Face.GetBody(); if (CorpsBase.IsNull()) { WindowLog.Ecrire("Pas de corps selectionnée"); return; } String MateriauxCorpsBase = ""; if (MdlBase.TypeDoc() == eTypeDoc.Piece) { MateriauxCorpsBase = CorpsBase.eGetMateriauCorpsOuPiece(MdlBase.ePartDoc(), MdlBase.eNomConfigActive()); } else { Component2 cpCorpsBase = MdlBase.eSelect_RecupererComposant(); MateriauxCorpsBase = CorpsBase.eGetMateriauCorpsOuComp(cpCorpsBase); } MdlBase.eEffacerSelection(); WindowLog.Ecrire("Matériau : " + MateriauxCorpsBase); var ListeCorpsIdentiques = new List <Body2>(); Action <Body2, String> Test = delegate(Body2 corps, String mat) { if (MateriauxCorpsBase != mat) { return; } if (corps.eComparerGeometrie(CorpsBase) == Sw.Comparaison_e.Semblable) { ListeCorpsIdentiques.Add(corps); } }; if (MdlBase.TypeDoc() == eTypeDoc.Piece) { var Piece = MdlBase.ePartDoc(); foreach (var Corps in Piece.eListeCorps()) { var MateriauCorpsTest = Corps.eGetMateriauCorpsOuPiece(Piece, MdlBase.eNomConfigActive()); Test(Corps, MateriauCorpsTest); } } else { foreach (var comp in MdlBase.eComposantRacine().eRecListeComposant(c => { return(c.TypeDoc() == eTypeDoc.Piece); })) { foreach (var Corps in comp.eListeCorps()) { var MateriauCorpsTest = Corps.eGetMateriauCorpsOuComp(comp); Test(Corps, MateriauCorpsTest); } } } WindowLog.EcrireF("Nb de corps identiques : {0}", ListeCorpsIdentiques.Count); foreach (var corps in ListeCorpsIdentiques) { corps.eSelect(true); } } catch (Exception e) { this.LogErreur(new Object[] { e }); } }
private void Run(Component2 cBase) { if (cBase == null) { this.LogMethode(new String[] { "Une reference à un objet a été perdue cBase :", cBase.IsRefToString() }); return; } try { List <Body2> ListeCorps = cBase.eListeCorps(); List <Trou> ListeTrou = new List <Trou>(); // Recherche des faces cylindriques foreach (Body2 C in ListeCorps) { // On recherche la face fixe de la tôle Face2 faceFixe = C.eFaceFixeTolerie(); // S'il n'y en a pas c'est que ce n'est pas une tôle if (faceFixe.IsNull()) { continue; } // On recherche les faces de cette tôle var liste = new List <Face2>(); faceFixe.eChercherFacesTangentes(ref liste); // Pour chaque face plane foreach (Face2 faceBase in liste.FindAll(f => ((Surface)f.GetSurface()).IsPlane())) { // On récupère les boucles internes var listePercage = new List <Loop2>(); foreach (Loop2 loop in (Object[])faceBase.GetLoops()) { if (!loop.IsOuter()) { listePercage.Add(loop); } } // Pour chaque boucle interne foreach (var loop in listePercage) { var edge = (Edge)loop.GetEdges()[0]; var facePercage = edge.eAutreFace(faceBase); // On verifie que le perçage est un cylindre // et qu'il débouche bien if (facePercage.eEstUnCylindre() && (facePercage.GetLoopCount() > 1)) { // Si le diametre == 0 on recupère toutes les faces if ((ListeDiametre.Count == 1) && (ListeDiametre[0] == 0)) { ListeTrou.Add(new Trou(facePercage, faceBase)); } // Sinon, on verifie qu'elle corresponde bien au diametre demandé else if (ListeDiametre.Contains(DiametreMm(facePercage))) { ListeTrou.Add(new Trou(facePercage, faceBase)); } } } } } // S'il n'y a pas assez de composant de perçage, on en rajoute while (_ListePercage.Count < ListeTrou.Count) { AjouterPercage(); } MdlBase.EditRebuild3(); List <String> ListeNomComp = _ListePercage.Keys.ToList(); // Contrainte des perçages for (int i = 0; i < ListeTrou.Count; i++) { String NomComp = ListeNomComp[i]; Component2 Comp = _AssBase.GetComponentByName(NomComp); // On active le composant au cas ou :) MdlBase.eSelectByIdComp(_ListePercage[NomComp]); _AssBase.eModifierEtatComposant(swComponentSuppressionState_e.swComponentResolved); MdlBase.eEffacerSelection(); int longstatus = 0; var Trou = ListeTrou[i]; MdlBase.ClearSelection2(true); Trou.Plan.eSelectEntite(); PlanDeFace(Comp).eSelect(true); _AssBase.AddMate5((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignALIGNED, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out longstatus); MdlBase.eEffacerSelection(); Trou.Cylindre.eSelectEntite(); FaceCylindrique(Comp).eSelectEntite(true); _AssBase.AddMate5((int)swMateType_e.swMateCONCENTRIC, (int)swMateAlign_e.swMateAlignCLOSEST, false, 0, 0, 0, 0, 0, 0, 0, 0, false, true, 0, out longstatus); MdlBase.eEffacerSelection(); } } catch (Exception e) { this.LogMethode(new Object[] { e }); } }