Ejemplo n.º 1
0
        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 });
            }
        }