Пример #1
0
            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 });
                }
            }
Пример #2
0
            // 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);
            }
Пример #3
0
            // 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);
            }
Пример #4
0
            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 });
                }
            }