private void Run(ModelDoc2 modele, Component2 marche, Component2 platine, Feature planContrainte, Face2 f_Dessus, String nomConfig, Feature esquisse) { try { Edge eBase = ArretePlatine(platine.eChercherContraintes(marche, false), planContrainte, f_Dessus); Edge eFace = ArreteDevant(platine.eChercherContraintes(marche, false), f_Dessus); Edge eArriere = ArreteArriere(f_Dessus, eBase, eFace); gSegment F = new gSegment(eFace); gSegment C = new gSegment(eBase); gSegment A = new gSegment(eArriere); C.OrienterDe(F); A.OrienterDe(C); F.OrienterDe(C); Double gAg1 = F.Vecteur.Angle(C.Vecteur); Double gAg2 = A.Vecteur.Angle(C.Vecteur.Inverse()); Double gLg = Math.Max(LgMin, C.Lg); Configurer(platine, gAg1, gAg2, gLg, esquisse); } catch (Exception e) { this.LogMethode(new Object[] { e }); } }
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 }); } }
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 }); } }
protected override void Command() { Ass = MdlBase.eAssemblyDoc(); try { CurveDrivenPatternFeatureData def = FonctionRepetition.GetDefinition(); Object[] tabB = def.PatternBodyArray; Body2 b = (Body2)tabB[0]; MathTransform compRepetTrans = ComposantRepetition.Transform2; MathTransform baseMarcheTrans = Marche.Transform2; Vertex v = (Vertex)Point; Edge e = (Edge)Arrete; List <Face2> ListeFace = FonctionRepetition.eListeDesFaces(); Sketch sk = PointMarche.GetSketch(); Feature fPointMarche = (Feature)sk; List <Component2> ListeComposants = new List <Component2>() { Marche }; Double arr = 0.0001; for (int i = 1; i <= (def.D1InstanceCount + def.D2InstanceCount); i++) { MathTransform bodyTrans = def.GetTransform(i); if (bodyTrans.IsNull()) { break; } MathTransform Transform = compRepetTrans.Inverse(); Transform = Transform.Multiply(bodyTrans); Transform = Transform.Multiply(compRepetTrans); Transform = baseMarcheTrans.Multiply(Transform); gPoint pt = new gPoint(v); gSegment sg = new gSegment(e); pt.MultiplyTransfom(bodyTrans); sg.MultiplyTransfom(bodyTrans); Vertex vertex = null; Edge edge = null; foreach (Face2 face in ListeFace) { foreach (Edge ed in face.eListeDesArretes()) { gSegment s = new gSegment(ed); if (sg.Compare(s, arr)) { edge = ed; } if (s.Start.Comparer(pt, arr)) { vertex = ed.GetStartVertex(); } if (s.End.Comparer(pt, arr)) { vertex = ed.GetEndVertex(); } if (edge.IsRef() && vertex.IsRef()) { break; } } if (edge.IsRef() && vertex.IsRef()) { break; } } Entity eVertex = (Entity)vertex; Entity eEdge = (Entity)edge; Component2 cp = Ass.AddComponent5(Marche.GetPathName(), (int)swAddComponentConfigOptions_e.swAddComponentConfigOptions_CurrentSelectedConfig, "", false, "", 0, 0, 0); if (cp.IsNull()) { continue; } // Quand on réinsere un composant, les précédentes contraintes sont recrées. // On les supprime pour eviter des conflits Object[] Mates = cp.GetMates(); if (Mates.IsRef()) { foreach (Feature mate in Mates) { mate.eSelect(); MdlBase.Extension.DeleteSelection2((int)swDeleteSelectionOptions_e.swDelete_Absorbed); } } WindowLog.Ecrire(cp.Name2); cp.Transform2 = Transform; ListeComposants.Add(cp); int longstatus = 0; MdlBase.eEffacerSelection(); eVertex.eSelectEntite(false); Feature f = cp.FeatureByName(fPointMarche.Name); Sketch sketchOrigine = f.GetSpecificFeature2(); Object[] tabPt = sketchOrigine.GetSketchPoints2(); SketchPoint origine = (SketchPoint)tabPt[0]; origine.Select4(true, null); Mate2 mPoint = Ass.AddMate5((int)swMateType_e.swMateCOINCIDENT, (int)swMateAlign_e.swMateAlignCLOSEST, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out longstatus); MdlBase.eEffacerSelection(); MdlBase.eEffacerSelection(); eEdge.eSelectEntite(false); cp.FeatureByName(AxeMarche.Name).eSelect(true); Mate2 mAxe = Ass.AddMate5((int)swMateType_e.swMateANGLE, (int)swMateAlign_e.swAlignNONE, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out longstatus); MdlBase.eEffacerSelection(); MdlBase.eEffacerSelection(); Plan.eSelect(false); cp.FeatureByName(PlanMarche.Name).eSelect(true); Mate2 mPlan = Ass.AddMate5((int)swMateType_e.swMatePARALLEL, (int)swMateAlign_e.swAlignNONE, false, 0, 0, 0, 0, 0, 0, 0, 0, false, false, 0, out longstatus); MdlBase.eEffacerSelection(); Feature m = (Feature)mPoint; WindowLog.Ecrire(" " + m.Name); m = (Feature)mAxe; WindowLog.Ecrire(" " + m.Name); m = (Feature)mPlan; WindowLog.Ecrire(" " + m.Name); } MdlBase.eEffacerSelection(); foreach (var cp in ListeComposants) { cp.eSelectById(MdlBase, -1, true); } Feature Dossier = MdlBase.FeatureManager.InsertFeatureTreeFolder2((int)swFeatureTreeFolderType_e.swFeatureTreeFolder_Containing); Dossier.eRenommerFonction(String.Format("Marches ({0} {1}) ", ComposantRepetition.Name2, FonctionRepetition.Name)); } catch (Exception e) { this.LogErreur(new Object[] { e }); } }