internal void SkizzeZylinderErstellen() { shapefac = (ShapeFactory)hsp_catiaPartDoc.Part.ShapeFactory; HybridBodies catHybridbodys1 = hsp_catiaPartDoc.Part.HybridBodies; HybridBody catHybridBody1; try { // "Abfangen" des geometrischen Sets catHybridBody1 = catHybridbodys1.Item("Geometrisches Set.1"); } catch (Exception) { /* MessageBox.Show("Kein Geometrisches Set gefunden", "Fehler");MessageBoxButton.OK, MessageBoxImage.Error); */return; } //Geometrisches Set Benennen catHybridBody1.set_Name("Schraube Außensechskannt"); //Typ Skizzen definieren sketches_Schraube = catHybridBody1.HybridSketches; // Referenz für die Skizze festlgen OriginElements catoriginElements = hsp_catiaPartDoc.Part.OriginElements; Reference catRef1 = (Reference)catoriginElements.PlaneYZ; //Skizze in YZ Ebene hizufügen hsp_catiaSkizze = sketches_Schraube.Add(catRef1); ErzeugeAchsensystem(); hsp_catiaPartDoc.Part.Update(); }
public void Rechteck_CreateSketch() { HybridBodies RechteckHybridBodies = CATIA_RechteckPart.Part.HybridBodies; HybridBody RechteckHybridBody; try { RechteckHybridBody = RechteckHybridBodies.Item("Geometrisches Set.1"); } catch (Exception) { MessageBoxResult result; result = MessageBox.Show("CATIA wird nicht ausgeführt!", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error ); return; } RechteckHybridBody.set_Name("Querschnitt-Skizze"); Sketches RechteckSketch = RechteckHybridBody.HybridSketches; OriginElements RechteckOriginElements = CATIA_RechteckPart.Part.OriginElements; Reference RechteckReference = (Reference)RechteckOriginElements.PlaneYZ; CATIA_Rechteck2D = RechteckSketch.Add(RechteckReference); ReferenzAchsensystem(); CATIA_RechteckPart.Part.Update(); }
public void ErstelleLeereSkizze() { HybridBody catHybridBody1; HybridBodies catHybridBodies1; try { catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; } catch (Exception ex) { MessageBox.Show(ex.Message, "Was auch immer"); return; } try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); ErzeugeAchsensystem(); hsp_catiaPart.Part.Update(); }
public void Kreis_hohl_CreateSketch() { HybridBodies Kreis_hohl_HybridBodies = CATIA_Kreis_hohl_Part.Part.HybridBodies; HybridBody Kreis_hohl_HybridBody; try { Kreis_hohl_HybridBody = Kreis_hohl_HybridBodies.Item("Geometrisches Set.1"); } catch (Exception) { MessageBoxResult result; result = MessageBox.Show("CATIA wird nicht ausgeführt!", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error ); return; } Kreis_hohl_HybridBody.set_Name("Querschnitt-Skizze"); Sketches Kreis_hohl_Sketch = Kreis_hohl_HybridBody.HybridSketches; OriginElements Kreis_hohl_OriginElements = CATIA_Kreis_hohl_Part.Part.OriginElements; Reference Kreis_hohl_Reference = (Reference)Kreis_hohl_OriginElements.PlaneYZ; CATIA_Kreis_hohl_2D = Kreis_hohl_Sketch.Add(Kreis_hohl_Reference); ReferenzAchsensystem(); CATIA_Kreis_hohl_Part.Part.Update(); }
public void ErstelleLeereSkizze() { // geometrisches Set auswaehlen und umbenennen HybridBodies catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody1; try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); // Part aktualisieren hsp_catiaPart.Part.Update(); }
private Sketch Gewindeskizze(Schraube arr) { // Referenzen für Skizze festlegen OriginElements catoriginElements = part_Schraube.OriginElements; Reference RefPlanezx = (Reference)catoriginElements.PlaneZX; //Neue Skizze erstellen Sketch Skizze_gewinde = sketches_Schraube.Add(RefPlanezx); part_Schraube.InWorkObject = Skizze_gewinde; Skizze_gewinde.set_Name("Gewinde"); //Koordinaten Für gewindeSkizze berechnen double zInnen = 0.5 * arr.kerndurchmesser + arr.gewinderundung - Math.Sin((30 * Math.PI) / 180) * arr.gewinderundung; double xInnen = Math.Cos((30 * Math.PI) / 180) * arr.gewinderundung; double zAußen = 0.5 * arr.durchmesser; double xAußen = 2 * 0.1875 * arr.gewindesteigung; double zRadius = 0.5 * (arr.kerndurchmesser + arr.gewinderundung); double xRadius = 0; // Geometrie zeichnen Factory2D catfactory2D2 = Skizze_gewinde.OpenEdition(); Point2D geweindepunkt1 = catfactory2D2.CreatePoint(zInnen, -xInnen); Point2D geweindepunkt2 = catfactory2D2.CreatePoint(zInnen, xInnen); Point2D geweindepunkt3 = catfactory2D2.CreatePoint(zAußen, xAußen); Point2D geweindepunkt4 = catfactory2D2.CreatePoint(zAußen, -xAußen); Point2D geweindepunkt5 = catfactory2D2.CreatePoint(zRadius, xRadius); Line2D linieOben = catfactory2D2.CreateLine(zInnen, xInnen, zAußen, xAußen); linieOben.StartPoint = geweindepunkt2; linieOben.EndPoint = geweindepunkt3; Line2D linieAußen = catfactory2D2.CreateLine(zAußen, xAußen, zAußen, -xAußen); linieAußen.StartPoint = geweindepunkt3; linieAußen.EndPoint = geweindepunkt4; Line2D linieUnten = catfactory2D2.CreateLine(zAußen, -xAußen, zInnen, -xInnen); linieUnten.StartPoint = geweindepunkt4; linieUnten.EndPoint = geweindepunkt1; Circle2D gewindeRundung = catfactory2D2.CreateCircle(zRadius, xRadius, arr.gewinderundung, 0, 0); gewindeRundung.CenterPoint = geweindepunkt5; gewindeRundung.EndPoint = geweindepunkt1; gewindeRundung.StartPoint = geweindepunkt2; Skizze_gewinde.CloseEdition(); return(Skizze_gewinde); }
public void erstelleLeereSkizze() { HybridBodies catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); catHybridBody1.set_Name("Profile"); Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); }
public static void CreatePatternBearing() { oCurrentSketch = oPartBody.Sketches.Add(oPlaneYZ); Factory2D oFactory2D = oCurrentSketch.OpenEdition(); oCurrentCircle1 = oFactory2D.CreateClosedCircle(iCenterX, iCenterY, iBearingDiam / 2); oCurrentSketch.CloseEdition(); ShapeFactory oShapeFactory = (ShapeFactory)oPart.ShapeFactory; Pad oPad = oShapeFactory.AddNewPad(oCurrentSketch, iBearingLength); OriginElements originElements1 = oPart.OriginElements; Reference oRefPlaneXY = oPart.CreateReferenceFromGeometry(oPart.OriginElements.PlaneXY); RectPattern rectPattern1 = oShapeFactory.AddNewRectPattern(oPad, iNumberOfCylinders + 1, 1, iCylinderSpacing, 0, 1, 1, oRefPlaneXY, oRefPlaneXY, true, true, 0); iCurrentLevel = iBearingLength; }
internal void ErstelleSkizzeKopf(Schraube arr) { part_Schraube.InWorkObject = body_Schraube; //Referenz für Skizze (Auf oberseite des Zylinders) OriginElements catoriginElements = hsp_catiaPartDoc.Part.OriginElements; Reference ref_Kopf = part_Schraube.CreateReferenceFromName("Selection_RSur:(Face:(Brp:(Pad.1;2);None:();Cf11:());Slot.1_ResultOUT;Z0;G8251)"); // neue Skizze erstellen skizze_kopf = sketches_Schraube.Add(ref_Kopf); skizze_kopf.set_Name("Kopf"); // Ebene festlegen ? hsp_catiaPartDoc.Part.Update(); }
public void ErstelleLeereSkizze() { // Factories für das Erzeugen von Modellelementen (Std und Hybrid) SF = (ShapeFactory)myPart.ShapeFactory; HSF = (HybridShapeFactory)myPart.HybridShapeFactory; // geometrisches Set auswaehlen und umbenennen HybridBodies catHybridBodies1 = myPart.HybridBodies; HybridBody catHybridBody1; try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); // neue Skizze im ausgewaehlten geometrischen Set auf eine Offset Ebene legen mySketches = catHybridBody1.HybridSketches; OriginElements catOriginElements = myPart.OriginElements; HybridShapePlaneOffset hybridShapePlaneOffset1 = HSF.AddNewPlaneOffset( (Reference)catOriginElements.PlaneYZ, 90.000000, false); hybridShapePlaneOffset1.set_Name("OffsetEbene"); catHybridBody1.AppendHybridShape(hybridShapePlaneOffset1); myPart.InWorkObject = hybridShapePlaneOffset1; myPart.Update(); HybridShapes hybridShapes1 = catHybridBody1.HybridShapes; Reference catReference1 = (Reference)hybridShapes1.Item("OffsetEbene"); hsp_catiaSkizze = mySketches.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); // Part aktualisieren myPart.Update(); }
/// <summary> /// 创建一个工作用的Part 文件 /// </summary> /// <param name="CatApplication">CATIA程序框架</param> /// <param name="CatDocument">CATIA 活动文档</param> /// <param name="PartID">待创建的CATIA 零件目标</param> public void CreatWorkPart(INFITF.Application CatApplication, ProductDocument CatDocument, ref Part PartID) { // 添加一个新零件 string Name = "RXFastDesignTool"; try { PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; } catch (Exception) { try { CatDocument.Product.Products.AddNewComponent("Part", Name); PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; } catch (Exception) { return; // throw; } } HybridBodies HBS = PartID.HybridBodies; if (HBS.Count < 1) { HybridBody HB = HBS.Add(); HB.set_Name("Geometrical Set.1"); } OriginElements Tpart = PartID.OriginElements; AnyObject dxy = Tpart.PlaneXY; AnyObject dyz = Tpart.PlaneYZ; AnyObject dzx = Tpart.PlaneZX; Selection SelectT = CatDocument.Selection; VisPropertySet VP = SelectT.VisProperties; SelectT.Add(dxy); SelectT.Add(dyz); SelectT.Add(dzx); VP = (VisPropertySet)VP.Parent; VP.SetShow(CatVisPropertyShow.catVisPropertyNoShowAttr); SelectT.Clear(); }
internal void ErzeugeGewindehelix(Schraube arr) { hybridshapefac = (HybridShapeFactory)part_Schraube.HybridShapeFactory; // Skizze für Gewindeprofiel Sketch gewinde = Gewindeskizze(arr); // "Rotationsachse" festlegen HybridShapeDirection HelixDir = hybridshapefac.AddNewDirectionByCoord(1, 0, 0); Reference RefHelxDir = part_Schraube.CreateReferenceFromObject(HelixDir); //Startpunkt festlegen HybridShapePointCoord Helixstartpunkt = hybridshapefac.AddNewPointCoord(0, 0, 0.5 * arr.durchmesser); Reference RefHelixstartpunkt = part_Schraube.CreateReferenceFromObject(Helixstartpunkt); //Helix Erstellen HybridShapeHelix Helix = hybridshapefac.AddNewHelix(RefHelxDir, false, RefHelixstartpunkt, arr.gewindesteigung, arr.gewindelaenge - 1, false, 0, 0, false); // Drehrichtung, Startpunkt Steigung Höhe Drehrichtung Anfangswinkel ... Reference RefHelix = part_Schraube.CreateReferenceFromObject(Helix); Reference RefGewinde = part_Schraube.CreateReferenceFromObject(gewinde); part_Schraube.Update(); part_Schraube.InWorkObject = body_Schraube; OriginElements catoriginElements = this.part_Schraube.OriginElements; Reference RefPlanezx = (Reference)catoriginElements.PlaneZX; //Rille erzeugen Slot GewindeRille = shapefac.AddNewSlotFromRef(RefGewinde, RefHelix); Reference RefmyPad = part_Schraube.CreateReferenceFromObject(schaft); HybridShapeSurfaceExplicit GewindestangenSurface = hybridshapefac.AddNewSurfaceDatum(RefmyPad); Reference RefGewindestangenSurface = part_Schraube.CreateReferenceFromObject(GewindestangenSurface); GewindeRille.ReferenceSurfaceElement = RefGewindestangenSurface; Reference RefGewindeRille = part_Schraube.CreateReferenceFromObject(GewindeRille); part_Schraube.Update(); }
internal void SkizzeTasche(Schraube arr) { //Referenzen für Skizze festlegen (Auf Schraubenkopf) part_Schraube.InWorkObject = body_Schraube; OriginElements catoriginElements = hsp_catiaPartDoc.Part.OriginElements; Reference ref_tasche = part_Schraube.CreateReferenceFromName("Selection_RSur:(Face:(Brp:(Pad.2;2);None:();Cf11:());Pad.2_ResultOUT;Z0;G8251)"); //Skizze erzeugen skizze_tasche = sketches_Schraube.Add(ref_tasche); skizze_tasche.set_Name("Tasche Innensechskannt"); hsp_catiaPartDoc.Part.Update(); // Sechseck auf Skizze Zeichnen part_Schraube.InWorkObject = skizze_tasche; Factory2D shapefac2 = skizze_tasche.OpenEdition(); SechseckZeichnen(arr, skizze_tasche); skizze_tasche.CloseEdition(); hsp_catiaPartDoc.Part.Update(); }
public void Senkkopf(MetrischeGewindegroesse m) { #region SKizze bauen // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneZX; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); hsp_catiaProfil.set_Name("Senkkopf"); // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); Factory2D catFactory2D1 = hsp_catiaProfil.OpenEdition(); #endregion #region Profil double tan45 = 1; double tan30 = Math.Sqrt(3) / 3; double winkel; if (m.bezeichnung <= 20) { winkel = tan45; } else { winkel = tan30; } double HoeheP4 = ((m.innenskkopfdurchmesser / 2) - (m.bezeichnung / 2)) / winkel; // erst die Punkte Point2D catPoint2D1 = catFactory2D1.CreatePoint(0, 0); Point2D catPoint2D2 = catFactory2D1.CreatePoint(m.innenskkopfhöhe, 0); Point2D catPoint2D3 = catFactory2D1.CreatePoint(m.innenskkopfhöhe, m.innenskkopfdurchmesser / 2); Point2D catPoint2D4 = catFactory2D1.CreatePoint(HoeheP4, m.innenskkopfdurchmesser / 2); Point2D catPoint2D5 = catFactory2D1.CreatePoint(0, m.bezeichnung / 2); // dann das Profil Line2D catLine2D1 = catFactory2D1.CreateLine(0, 0, m.innenskkopfhöhe, 0); catLine2D1.StartPoint = catPoint2D1; catLine2D1.EndPoint = catPoint2D2; Line2D catLine2D2 = catFactory2D1.CreateLine(m.innenskkopfhöhe, 0, m.innenskkopfhöhe, m.innenskkopfdurchmesser / 2); catLine2D2.StartPoint = catPoint2D2; catLine2D2.EndPoint = catPoint2D3; Line2D catLine2D3 = catFactory2D1.CreateLine(m.innenskkopfhöhe, m.innenskkopfdurchmesser / 2, HoeheP4, m.innenskkopfdurchmesser / 2); catLine2D3.StartPoint = catPoint2D3; catLine2D3.EndPoint = catPoint2D4; Line2D catLine2D4 = catFactory2D1.CreateLine(HoeheP4, m.innenskkopfdurchmesser / 2, 0, m.bezeichnung / 2); catLine2D4.StartPoint = catPoint2D4; catLine2D4.EndPoint = catPoint2D5; Line2D catLine2D5 = catFactory2D1.CreateLine(0, m.bezeichnung / 2, 0, 0); catLine2D5.StartPoint = catPoint2D5; catLine2D5.EndPoint = catPoint2D1; Point2D AxisPoint1 = catFactory2D1.CreatePoint(0, 0); Point2D AxisPoint2 = catFactory2D1.CreatePoint(m.innenskkopfhöhe, 0); Line2D AxisLine1 = catFactory2D1.CreateLine(0, 0, m.innenskkopfhöhe, 0); AxisLine1.StartPoint = AxisPoint1; AxisLine1.EndPoint = AxisPoint2; Reference Axisreference1 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisPoint1); GeometricElements geometricElements1 = hsp_catiaProfil.GeometricElements; Axis2D catAxis2D1 = (Axis2D)geometricElements1.Item("Absolute Achse"); Line2D AxisLine2 = (Line2D)catAxis2D1.GetItem("H-Richtung"); Reference Axisreference2 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine2); Constraints constraints1 = hsp_catiaProfil.Constraints; Constraint constraint1 = constraints1.AddBiEltCst(CatConstraintType.catCstTypeOn, Axisreference1, Axisreference2); constraint1.Mode = CatConstraintMode.catCstModeDrivingDimension; Reference Axisreference3 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine1); Reference Axisreference4 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine2); Constraint constraint2 = constraints1.AddBiEltCst(CatConstraintType.catCstTypeVerticality, Axisreference3, Axisreference4); constraint2.Mode = CatConstraintMode.catCstModeDrivingDimension; hsp_catiaProfil.CenterLine = AxisLine1; // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Shaft hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; ShapeFactory catShapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; Reference reference1 = hsp_catiaPart.Part.CreateReferenceFromObject(hsp_catiaProfil); SenkkopfShaft = catShapeFactory1.AddNewShaftFromRef(reference1); SenkkopfShaft.SetProfileElement(reference1); SenkkopfShaft.set_Name("Kopf"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Offsetebene Reference RefmyPlaneYZ = (Reference)catOriginElements.PlaneYZ; hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part; HybridShapeFactory hybridShapeFactory1 = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; HybridShapePlaneOffset OffsetEbene = hybridShapeFactory1.AddNewPlaneOffset(RefmyPlaneYZ, m.innenskkopfhöhe, true); OffsetEbene.set_Name("OffsetEbene"); Reference RefOffsetEbene = hsp_catiaPart.Part.CreateReferenceFromObject(OffsetEbene); HybridBodies hybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody hybridBody1 = hybridBodies1.Item("Profile"); hybridBody1.AppendHybridShape(OffsetEbene); hsp_catiaPart.Part.Update(); Sketches catSketches2 = catHybridBody1.HybridSketches; Sketch SkizzeaufOffset = catSketches2.Add(RefOffsetEbene); hsp_catiaPart.Part.InWorkObject = SkizzeaufOffset; SkizzeaufOffset.set_Name("OffsetSkizze"); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); // Skizzierer verlassen SkizzeaufOffset.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Innensechskant Factory2D catFactory2D2 = SkizzeaufOffset.OpenEdition(); // Sechskant erzeugen double cos30 = Math.Sqrt(3) / 2; double mSW = m.innensechskant / 2; // erst die Punkte Point2D catPoint2D6 = catFactory2D2.CreatePoint(mSW, tan30 * mSW); Point2D catPoint2D7 = catFactory2D2.CreatePoint(mSW, -(tan30 * mSW)); Point2D catPoint2D8 = catFactory2D2.CreatePoint(0, -(mSW / cos30)); Point2D catPoint2D9 = catFactory2D2.CreatePoint(-mSW, -(tan30 * mSW)); Point2D catPoint2D10 = catFactory2D2.CreatePoint(-mSW, tan30 * mSW); Point2D catPoint2D11 = catFactory2D2.CreatePoint(0, mSW / cos30); // dann die Linien Line2D catLine2D6 = catFactory2D2.CreateLine(mSW, tan30 * mSW, mSW, -(tan30 * mSW)); catLine2D6.StartPoint = catPoint2D6; catLine2D6.EndPoint = catPoint2D7; Line2D catLine2D7 = catFactory2D2.CreateLine(mSW, -(tan30 * mSW), 0, -(mSW / cos30)); catLine2D7.StartPoint = catPoint2D7; catLine2D7.EndPoint = catPoint2D8; Line2D catLine2D8 = catFactory2D2.CreateLine(0, -(mSW / cos30), -mSW, -(tan30 * mSW)); catLine2D8.StartPoint = catPoint2D8; catLine2D8.EndPoint = catPoint2D9; Line2D catLine2D9 = catFactory2D2.CreateLine(-mSW, -(tan30 * mSW), -mSW, (tan30 * mSW)); catLine2D9.StartPoint = catPoint2D9; catLine2D9.EndPoint = catPoint2D10; Line2D catLine2D10 = catFactory2D2.CreateLine(-mSW, (tan30 * mSW), 0, mSW / cos30); catLine2D10.StartPoint = catPoint2D10; catLine2D10.EndPoint = catPoint2D11; Line2D catLine2D11 = catFactory2D2.CreateLine(0, mSW / cos30, mSW, tan30 * mSW); catLine2D11.StartPoint = catPoint2D11; catLine2D11.EndPoint = catPoint2D6; // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Tasche Innensechskant // Hauptkoerper in Bearbeitung definieren hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; // Tasche erzeugen erzeugen ShapeFactory catShapeFactory2 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; SchlitzPocket = catShapeFactory2.AddNewPocket(SkizzeaufOffset, -m.schlitztiefe); // Block umbenennen SchlitzPocket.set_Name("Innensechskannt"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion }
internal void ErzeugeGewindeHelix(Schraube s) { Double P = s.metrischeGewindegroesse.steigung; Double Ri = s.metrischeGewindegroesse.bezeichnung / 2; HybridShapeFactory HSF = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; Sketch myGewinde = makeGewindeSkizze(s); HybridShapeDirection HelixDir = HSF.AddNewDirectionByCoord(1, 0, 0); Reference RefHelixDir = hsp_catiaPart.Part.CreateReferenceFromObject(HelixDir); HybridShapePointCoord HelixStartpunkt = HSF.AddNewPointCoord(s.schaftLaenge.schaftlaenge, 0, Ri); Reference RefHelixStartpunkt = hsp_catiaPart.Part.CreateReferenceFromObject(HelixStartpunkt); Boolean DrehrichtungLinks; if (s.gewinderichtung == Gewinderichtung.Rechtsgewinde) { DrehrichtungLinks = false; } else { DrehrichtungLinks = true; } HybridShapeHelix Helix = HSF.AddNewHelix(RefHelixDir, true, RefHelixStartpunkt, P, s.gewindeLaenge.gewindeLaenge, DrehrichtungLinks, 0, 0, false); Reference RefHelix = hsp_catiaPart.Part.CreateReferenceFromObject(Helix); Reference RefmyGewinde = hsp_catiaPart.Part.CreateReferenceFromObject(myGewinde); hsp_catiaPart.Part.Update(); hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; OriginElements catOriginElements = this.hsp_catiaPart.Part.OriginElements; Reference RefmyPlaneZX = (Reference)catOriginElements.PlaneZX; Sketches catSketchesChamferHelix = catHybridBody1.HybridSketches; Sketch ChamferSkizze = catSketchesChamferHelix.Add(RefmyPlaneZX); hsp_catiaPart.Part.InWorkObject = ChamferSkizze; ChamferSkizze.set_Name("Fase"); double H_links = Ri; double V_links = s.schaftLaenge.schaftlaenge - 0.65 * P; double H_rechts = Ri; double V_rechts = s.schaftLaenge.schaftlaenge; double H_unten = Ri - 0.65 * P; double V_unten = s.schaftLaenge.schaftlaenge; Factory2D catFactory2D3 = ChamferSkizze.OpenEdition(); Point2D links = catFactory2D3.CreatePoint(H_links, V_links); Point2D rechts = catFactory2D3.CreatePoint(H_rechts, V_rechts); Point2D unten = catFactory2D3.CreatePoint(H_unten, V_unten); Line2D Oben = catFactory2D3.CreateLine(H_links, V_links, H_rechts, V_rechts); Oben.StartPoint = links; Oben.EndPoint = rechts; Line2D hypo = catFactory2D3.CreateLine(H_links, V_links, H_unten, V_unten); hypo.StartPoint = links; hypo.EndPoint = unten; Line2D seite = catFactory2D3.CreateLine(H_unten, V_unten, H_rechts, V_rechts); seite.StartPoint = unten; seite.EndPoint = rechts; ChamferSkizze.CloseEdition(); hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; hsp_catiaPart.Part.Update(); ShapeFactory catshapeFactoryHelix = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; Groove myChamfer = catshapeFactoryHelix.AddNewGroove(ChamferSkizze); myChamfer.RevoluteAxis = RefHelixDir; hsp_catiaPart.Part.Update(); Slot GewindeRille = catshapeFactoryHelix.AddNewSlotFromRef(RefmyGewinde, RefHelix); Reference RefmyPad = hsp_catiaPart.Part.CreateReferenceFromObject(SchaftPad); HybridShapeSurfaceExplicit GewindestangenSurface = HSF.AddNewSurfaceDatum(RefmyPad); Reference RefGewindestangenSurface = hsp_catiaPart.Part.CreateReferenceFromObject(GewindestangenSurface); GewindeRille.ReferenceSurfaceElement = RefGewindestangenSurface; Reference RefGewindeRille = hsp_catiaPart.Part.CreateReferenceFromObject(GewindeRille); hsp_catiaPart.Part.Update(); }
/// <summary> /// 连接CATIA COM 并获得选择集 /// </summary> /// <returns></returns> private Selection GetSelect() { this.WindowState = FormWindowState.Minimized; try { CatApplication = (INFITF.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Catia.Application"); } catch (Exception) { this.WindowState = FormWindowState.Normal; this.StartPosition = FormStartPosition.CenterScreen; MessageBox.Show("未检测到打开的CATIA!,请重新运行CATIA!"); return(null); } CatApplication.set_Caption("正在运行瑞祥快速建模工具!"); // 获取当前活动ProductDocument try { CatDocument = (ProductDocument)CatApplication.ActiveDocument; } catch (Exception) { CatDocument = (ProductDocument)CatApplication.Documents.Add("Product"); try { CatDocument.Product.set_PartNumber("RxProduct"); } catch (Exception) { MessageBox.Show("未检测到活动Product,正在为您创建,请手动辅助完成!"); return(null); } //MessageBox.Show("未检测到活动Product,已自动为您创建对象!"); } // 添加一个新零件 string Name = "RXFastDesignTool"; try { //PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; //PartID = ((PartDocument)CatApplication.Documents.Item(Name)).Part; Selection FindPart = CatApplication.ActiveDocument.Selection; FindPart.Search("Name=RXFastDesignTool,all"); if (FindPart.Count2 > 0) { PartID = (Part)FindPart.Item2(1).Value; //仅拾取带个并对第一个进行操作 } else { try { CatDocument.Product.Products.AddNewComponent("Part", Name); } catch (Exception) { return(null); // throw; } PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; OriginElements Tpart = PartID.OriginElements; AnyObject dxy = Tpart.PlaneXY; AnyObject dyz = Tpart.PlaneYZ; AnyObject dzx = Tpart.PlaneZX; Selection SelectT = CatDocument.Selection; VisPropertySet VP = SelectT.VisProperties; SelectT.Add(dxy); SelectT.Add(dyz); SelectT.Add(dzx); VP = (VisPropertySet)VP.Parent; VP.SetShow(CatVisPropertyShow.catVisPropertyNoShowAttr); SelectT.Clear(); } } catch (Exception) { return(null); } try { CatDocument.Product.ApplyWorkMode(CatWorkModeType.DESIGN_MODE); } catch (Exception) { Console.WriteLine("Change Design Model Faild!"); } Selection SelectArc = CatDocument.Selection; SelectArc.Clear(); var Result = SelectArc.SelectElement3(InputObjectType(), "请选择曲面", true, CATMultiSelectionMode.CATMultiSelTriggWhenSelPerf, false); if (Result == "Cancel") { return(null); } if (SelectArc.Count < 1) { MessageBox.Show("请先选择对象后再点此命令!"); return(null); } this.WindowState = FormWindowState.Normal; this.StartPosition = FormStartPosition.CenterScreen; return(SelectArc); }
public void ZylinderkopfInnensechskant(MetrischeGewindegroesse m) { #region SKizze bauen // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); hsp_catiaProfil.set_Name("Zylinderkopf mit Innensechskannt"); // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); Factory2D catFactory2D1 = hsp_catiaProfil.OpenEdition(); // erst die Punkte Point2D catPoint2D1 = catFactory2D1.CreatePoint(0, 0); // dann den Kreis Circle2D catCircle2D_1 = catFactory2D1.CreateCircle(0, 0, m.kopfdurchmesser / 2, 0, 0); catCircle2D_1.CenterPoint = catPoint2D1; // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Pad // Hauptkoerper in Bearbeitung definieren hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; // Block(Schaft) erzeugen ShapeFactory catShapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; KopfPad = catShapeFactory1.AddNewPad(hsp_catiaProfil, -m.mutterhoehe); // Block umbenennen KopfPad.set_Name("Kopf"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Offsetebene Reference RefmyPlaneYZ = (Reference)catOriginElements.PlaneYZ; hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part; HybridShapeFactory hybridShapeFactory1 = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; HybridShapePlaneOffset OffsetEbene = hybridShapeFactory1.AddNewPlaneOffset(RefmyPlaneYZ, m.mutterhoehe, true); OffsetEbene.set_Name("OffsetEbene"); Reference RefOffsetEbene = hsp_catiaPart.Part.CreateReferenceFromObject(OffsetEbene); HybridBodies hybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody hybridBody1 = hybridBodies1.Item("Profile"); hybridBody1.AppendHybridShape(OffsetEbene); hsp_catiaPart.Part.Update(); Sketches catSketches2 = catHybridBody1.HybridSketches; Sketch SkizzeaufOffset = catSketches2.Add(RefOffsetEbene); hsp_catiaPart.Part.InWorkObject = SkizzeaufOffset; SkizzeaufOffset.set_Name("OffsetSkizze"); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); // Skizzierer verlassen SkizzeaufOffset.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Innensechskannt Factory2D catFactory2D2 = SkizzeaufOffset.OpenEdition(); // Sechskant erzeugen double tan30 = Math.Sqrt(3) / 3; double cos30 = Math.Sqrt(3) / 2; double mSW = m.innensechskant / 2; // erst die Punkte Point2D catPoint2D2 = catFactory2D2.CreatePoint(mSW, tan30 * mSW); Point2D catPoint2D3 = catFactory2D2.CreatePoint(mSW, -(tan30 * mSW)); Point2D catPoint2D4 = catFactory2D2.CreatePoint(0, -(mSW / cos30)); Point2D catPoint2D5 = catFactory2D2.CreatePoint(-mSW, -(tan30 * mSW)); Point2D catPoint2D6 = catFactory2D2.CreatePoint(-mSW, tan30 * mSW); Point2D catPoint2D7 = catFactory2D2.CreatePoint(0, mSW / cos30); // dann die Linien Line2D catLine2D1 = catFactory2D2.CreateLine(mSW, tan30 * mSW, mSW, -(tan30 * mSW)); catLine2D1.StartPoint = catPoint2D2; catLine2D1.EndPoint = catPoint2D3; Line2D catLine2D2 = catFactory2D2.CreateLine(mSW, -(tan30 * mSW), 0, -(mSW / cos30)); catLine2D2.StartPoint = catPoint2D3; catLine2D2.EndPoint = catPoint2D4; Line2D catLine2D3 = catFactory2D2.CreateLine(0, -(mSW / cos30), -mSW, -(tan30 * mSW)); catLine2D3.StartPoint = catPoint2D4; catLine2D3.EndPoint = catPoint2D5; Line2D catLine2D4 = catFactory2D2.CreateLine(-mSW, -(tan30 * mSW), -mSW, (tan30 * mSW)); catLine2D4.StartPoint = catPoint2D5; catLine2D4.EndPoint = catPoint2D6; Line2D catLine2D5 = catFactory2D2.CreateLine(-mSW, (tan30 * mSW), 0, mSW / cos30); catLine2D5.StartPoint = catPoint2D6; catLine2D5.EndPoint = catPoint2D7; Line2D catLine2D6 = catFactory2D2.CreateLine(0, mSW / cos30, mSW, tan30 * mSW); catLine2D6.StartPoint = catPoint2D7; catLine2D6.EndPoint = catPoint2D2; // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Verrundung hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; ShapeFactory catshapeFactoryRadius = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; Reference reference1 = hsp_catiaPart.Part.CreateReferenceFromBRepName( //Hier scheint der Fehler drin zu stecken, er erkennt nicht die richtige kante--wenn nicht die Kante, sondern die Fläche ausgewählt wird, scheint der Fehler behpoben zu sein "RSur:(Face:(Brp:(Pad.2;2);None:();Cf11:());WithTemporaryBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", KopfPad); // "REdge:(Edge:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.1;1)));None:();Cf11:());Face:(Brp:(Pad.1;2);None:();Cf11:());None:(Limits1:();Limits2:());Cf11:());WithTemporaryBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", SchaftPad); RadiusKopf = catshapeFactoryRadius.AddNewEdgeFilletWithConstantRadius(reference1, CatFilletEdgePropagation.catTangencyFilletEdgePropagation, m.fase); RadiusKopf.set_Name("Radius"); hsp_catiaPart.Part.Update(); #endregion #region Tasche Innensechskannt // Hauptkoerper in Bearbeitung definieren hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; // Tasche erzeugen erzeugen ShapeFactory catShapeFactory2 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; SchlitzPocket = catShapeFactory2.AddNewPocket(SkizzeaufOffset, -m.innensktiefe); // Block umbenennen SchlitzPocket.set_Name("Innensechskant"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion }
//Innenverzahntes Stirnrad public void ErzeugeProfilInnen(Data dat) { //KOORDINATEN ANLEGEN //Nullpunkt double x0 = 0; double y0 = 0; //Radien und Winkel umgestellt double Teilkreisradius = dat.getTeilkreisdurchmesser() / 2; //Angenährt double Hilfskreisradius = Teilkreisradius * 1.12; double Kopfkreisradius = Teilkreisradius - (1.25 * dat.getModul()); double Fußkreisradius = Teilkreisradius + dat.getModul(); double Verrundungsradius = 0.35 * dat.getModul(); double Alpha = 20; double Beta = 90 / dat.getZähnezahl(); double Betarad = Math.PI * Beta / 180; double Gamma = 90 - (Alpha - Beta); double Gammarad = Math.PI * Gamma / 180; double Totalangel = 360.0 / dat.getZähnezahl(); double Totalangelrad = Math.PI * Totalangel / 180; //Schnittpunkte und Koordinaten //Evolventenkreis Center Koordinaten double xMittelpunktaufEvol_links = Hilfskreisradius * Math.Cos(Gammarad); double yMittelpunktaufEvol_links = Hilfskreisradius * Math.Sin(Gammarad); //Schnittpkt. der Evolvente und dem Teilkreisradius double xPunktAufEvolvente = -Teilkreisradius *Math.Sin(Betarad); double yPunktAufEvolvente = Teilkreisradius * Math.Cos(Betarad); //Evolvente Radius double EvolventenkreisRadius = Math.Sqrt(Math.Pow((xMittelpunktaufEvol_links - xPunktAufEvolvente), 2) + Math.Pow((yMittelpunktaufEvol_links - yPunktAufEvolvente), 2)); //Schnittpunkt Kopfkreis und Evolventenkreis double xEvolventenkopfkreis_links = Schnittpunkt_X(x0, y0, Kopfkreisradius, xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius); double yEvolventenkopfkreis_links = Schnittpunkt_Y(x0, y0, Kopfkreisradius, xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius); //Center Verrundung double xMittelpunktVerrundung_links = Schnittpunkt_X(x0, y0, Fußkreisradius - Verrundungsradius, xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius + Verrundungsradius); double yMittelpunktVerrundung_links = Schnittpunkt_Y(x0, y0, Fußkreisradius - Verrundungsradius, xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius + Verrundungsradius); //Schnittpunkt Verrundung Evolventenkreis double x_SP_EvolventeVerrundung_links = Schnittpunkt_X(xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); double y_SP_EvolventeVerrundung_links = Schnittpunkt_Y(xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); //Schnittpunkt Verrundung Fußkreis double x_SP_FußkreisradiusVerrundung_links = Schnittpunkt_X(x0, y0, Fußkreisradius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); double y_SP_FußkreisradiusVerrundung_links = Schnittpunkt_Y(x0, y0, Fußkreisradius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); //Anfangspunkt Fußkreis double Hilfswinkel = Totalangelrad - Math.Atan(Math.Abs(x_SP_FußkreisradiusVerrundung_links) / Math.Abs(y_SP_FußkreisradiusVerrundung_links)); double x_AnfangspunktFußkreis = -Fußkreisradius *Math.Sin(Hilfswinkel); double y_AnfangspunktFußkreis = Fußkreisradius * Math.Cos(Hilfswinkel); //Geometrisches Set auswählen und umbennen HybridBodies catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody1; try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); //ERSTELLE SKIZZE FÜR SCHEIBE Sketches sketchesBohrung = catHybridBody1.HybridSketches; OriginElements catoriginelements = hsp_catiaPart.Part.OriginElements; Reference refmxPlaneX = (Reference)catoriginelements.PlaneYZ; hsp_catiaProfil = sketchesBohrung.Add(refmxPlaneX); ErzeugeAchsensystem(); hsp_catiaPart.Part.Update(); //Skizze umbenennen und öffnen hsp_catiaProfil.set_Name("Scheibe"); Factory2D catfactory2D2 = hsp_catiaProfil.OpenEdition(); //Kreis Circle2D Scheibe = catfactory2D2.CreateClosedCircle(x0, y0, dat.getAußenradius()); //Skizze schließen hsp_catiaProfil.CloseEdition(); //Update hsp_catiaPart.Part.Update(); //Erzeuge Block ShapeFactory shapeFactoryScheibe = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pad Block = shapeFactoryScheibe.AddNewPad(hsp_catiaProfil, dat.getBreite()); hsp_catiaPart.Part.Update(); //Zahnradskizze erstellen //Skizze umbenennen und öffnen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); //Achsensystem in Skizze erstellen ErzeugeAchsensystem(); //Update hsp_catiaPart.Part.Update(); //Umbennen und öffnen hsp_catiaProfil.set_Name("Innenverzahntes Stirnrad"); Factory2D catfactory2D1 = hsp_catiaProfil.OpenEdition(); //Punkte in Skizze einzeichnen Point2D point_Ursprung = catfactory2D1.CreatePoint(x0, y0); Point2D pointAnfangFußkreisLinks = catfactory2D1.CreatePoint(x_AnfangspunktFußkreis, y_AnfangspunktFußkreis); Point2D pointFußkreisVerrundungLinks = catfactory2D1.CreatePoint(x_SP_FußkreisradiusVerrundung_links, y_SP_FußkreisradiusVerrundung_links); Point2D pointFußkreisVerrundungRechts = catfactory2D1.CreatePoint(-x_SP_FußkreisradiusVerrundung_links, y_SP_FußkreisradiusVerrundung_links); Point2D pointMittelpunktVerrundungLinks = catfactory2D1.CreatePoint(xMittelpunktVerrundung_links, yMittelpunktVerrundung_links); Point2D pointMittelpunktVerrundungRechts = catfactory2D1.CreatePoint(-xMittelpunktVerrundung_links, yMittelpunktVerrundung_links); Point2D pointVerrundungEvolventeLinks = catfactory2D1.CreatePoint(x_SP_EvolventeVerrundung_links, y_SP_EvolventeVerrundung_links); Point2D pointVerrundungEvolventeRechts = catfactory2D1.CreatePoint(-x_SP_EvolventeVerrundung_links, y_SP_EvolventeVerrundung_links); Point2D pointMittelpunktevolventeLinks = catfactory2D1.CreatePoint(xMittelpunktaufEvol_links, yMittelpunktaufEvol_links); Point2D pointMittelpunktevolventeRechts = catfactory2D1.CreatePoint(-xMittelpunktaufEvol_links, yMittelpunktaufEvol_links); Point2D pointEvolventenKopfkreisLinks = catfactory2D1.CreatePoint(xEvolventenkopfkreis_links, yEvolventenkopfkreis_links); Point2D pointEvolventenKopfkreisRechts = catfactory2D1.CreatePoint(-xEvolventenkopfkreis_links, yEvolventenkopfkreis_links); //Kreise einzeichnen Circle2D KreisFrußkreis = catfactory2D1.CreateCircle(x0, y0, Fußkreisradius, 0, Math.PI * 2); KreisFrußkreis.CenterPoint = point_Ursprung; KreisFrußkreis.StartPoint = pointFußkreisVerrundungLinks; KreisFrußkreis.EndPoint = pointAnfangFußkreisLinks; Circle2D KreisVerrundungLinks = catfactory2D1.CreateCircle(xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius, 0, Math.PI * 2); KreisVerrundungLinks.CenterPoint = pointMittelpunktVerrundungLinks; KreisVerrundungLinks.EndPoint = pointFußkreisVerrundungLinks; KreisVerrundungLinks.StartPoint = pointVerrundungEvolventeLinks; Circle2D KreisEvolventenkreisLinks = catfactory2D1.CreateCircle(xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius, 0, Math.PI * 2); KreisEvolventenkreisLinks.CenterPoint = pointMittelpunktevolventeLinks; KreisEvolventenkreisLinks.EndPoint = pointEvolventenKopfkreisLinks; KreisEvolventenkreisLinks.StartPoint = pointVerrundungEvolventeLinks; Circle2D KreisKopfkreis = catfactory2D1.CreateCircle(x0, y0, Kopfkreisradius, 0, Math.PI * 2); KreisKopfkreis.CenterPoint = point_Ursprung; KreisKopfkreis.StartPoint = pointEvolventenKopfkreisRechts; KreisKopfkreis.EndPoint = pointEvolventenKopfkreisLinks; Circle2D KreisEvolventenkreisRechts = catfactory2D1.CreateCircle(-xMittelpunktaufEvol_links, yMittelpunktaufEvol_links, EvolventenkreisRadius, 0, Math.PI * 2); KreisEvolventenkreisRechts.CenterPoint = pointMittelpunktevolventeRechts; KreisEvolventenkreisRechts.EndPoint = pointVerrundungEvolventeRechts; KreisEvolventenkreisRechts.StartPoint = pointEvolventenKopfkreisRechts; Circle2D KreisVerrundungRechts = catfactory2D1.CreateCircle(-xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius, 0, Math.PI * 2); KreisVerrundungRechts.CenterPoint = pointMittelpunktVerrundungRechts; KreisVerrundungRechts.EndPoint = pointVerrundungEvolventeRechts; KreisVerrundungRechts.StartPoint = pointFußkreisVerrundungRechts; //Schließen hsp_catiaProfil.CloseEdition(); //Updaten hsp_catiaPart.Part.Update(); //ERSTELLE KREISMUSTER HybridShapeFactory hybridShapeFactory1 = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; ShapeFactory shapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; Factory2D factory2D1 = hsp_catiaProfil.Factory2D; HybridShapePointCoord ursprung = hybridShapeFactory1.AddNewPointCoord(0, 0, 0); Reference refUrsprung = hsp_catiaPart.Part.CreateReferenceFromObject(ursprung); HybridShapeDirection xRichtung = hybridShapeFactory1.AddNewDirectionByCoord(1, 0, 0); Reference refxRichtung = hsp_catiaPart.Part.CreateReferenceFromObject(xRichtung); CircPattern kreismuster = shapeFactory1.AddNewSurfacicCircPattern(factory2D1, 1, 2, 0, 0, 1, 1, refUrsprung, refxRichtung, false, 0, true, false); kreismuster.CircularPatternParameters = CatCircularPatternParameters.catInstancesandAngularSpacing; AngularRepartition angularRepartition1 = kreismuster.AngularRepartition; Angle angle1 = angularRepartition1.AngularSpacing; angle1.Value = Convert.ToDouble(360 / dat.getZähnezahl()); AngularRepartition angularRepartition2 = kreismuster.AngularRepartition; IntParam intParam1 = angularRepartition2.InstancesCount; intParam1.Value = Convert.ToInt32(dat.getZähnezahl()) + 1; //Kreismusterenden verbinden Reference refKreismuster = hsp_catiaPart.Part.CreateReferenceFromObject(kreismuster); HybridShapeAssemble verbindung = hybridShapeFactory1.AddNewJoin(refKreismuster, refKreismuster); Reference refVerbindung = hsp_catiaPart.Part.CreateReferenceFromObject(verbindung); hybridShapeFactory1.GSMVisibility(refVerbindung, 0); hsp_catiaPart.Part.MainBody.InsertHybridShape(verbindung); //Update hsp_catiaPart.Part.Update(); //Tasche ErzeugeTasche(dat, refVerbindung, shapeFactory1); hsp_catiaProfil = catSketches1.Parent as MECMOD.Sketch; hsp_catiaPart.Part.Update(); }
public void Sechskantverrundung(MetrischeGewindegroesse m) { #region SKizze bauen // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneZX; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); hsp_catiaProfil.set_Name("Kopffase"); // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); Factory2D catFactory2D1 = hsp_catiaProfil.OpenEdition(); #endregion #region Profil zeichnen double tan30 = Math.Sqrt(3) / 3; double cos30 = Math.Sqrt(3) / 2; double mSW = (m.schluesselweite / 2); double Breite = (mSW / cos30); Point2D catPoint2D1 = catFactory2D1.CreatePoint(m.kopfhoehesechs, mSW * 0.95); Point2D catPoint2D2 = catFactory2D1.CreatePoint(m.kopfhoehesechs, Breite); Point2D catPoint2D3 = catFactory2D1.CreatePoint(m.kopfhoehesechs - (tan30 * (Breite - mSW)), Breite); Line2D catLine2D1 = catFactory2D1.CreateLine(m.kopfhoehesechs, mSW * 0.95, m.kopfhoehesechs, Breite); catLine2D1.StartPoint = catPoint2D1; catLine2D1.EndPoint = catPoint2D2; Line2D catLine2D2 = catFactory2D1.CreateLine(m.kopfhoehesechs, Breite, m.kopfhoehesechs - (tan30 * (Breite - mSW)), Breite); catLine2D2.StartPoint = catPoint2D2; catLine2D2.EndPoint = catPoint2D3; Line2D catLine2D3 = catFactory2D1.CreateLine(m.kopfhoehesechs - (tan30 * (Breite - mSW)), Breite, m.kopfhoehesechs, mSW * 0.95); catLine2D3.StartPoint = catPoint2D3; catLine2D3.EndPoint = catPoint2D1; Point2D AxisPoint1 = catFactory2D1.CreatePoint(0, 0); Point2D AxisPoint2 = catFactory2D1.CreatePoint(m.kopfhoehesechs, 0); Line2D AxisLine1 = catFactory2D1.CreateLine(0, 0, m.kopfhoehesechs, 0); AxisLine1.StartPoint = AxisPoint1; AxisLine1.EndPoint = AxisPoint2; Reference Axisreference1 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisPoint1); GeometricElements geometricElements1 = hsp_catiaProfil.GeometricElements; Axis2D catAxis2D1 = (Axis2D)geometricElements1.Item("Absolute Achse"); Line2D AxisLine2 = (Line2D)catAxis2D1.GetItem("H-Richtung"); Reference Axisreference2 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine2); Constraints constraints1 = hsp_catiaProfil.Constraints; Constraint constraint1 = constraints1.AddBiEltCst(CatConstraintType.catCstTypeOn, Axisreference1, Axisreference2); constraint1.Mode = CatConstraintMode.catCstModeDrivingDimension; Reference Axisreference3 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine1); Reference Axisreference4 = hsp_catiaPart.Part.CreateReferenceFromObject(AxisLine2); Constraint constraint2 = constraints1.AddBiEltCst(CatConstraintType.catCstTypeVerticality, Axisreference3, Axisreference4); constraint2.Mode = CatConstraintMode.catCstModeDrivingDimension; hsp_catiaProfil.CenterLine = AxisLine1; // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Nut hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; ShapeFactory catShapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; Reference reference1 = hsp_catiaPart.Part.CreateReferenceFromObject(hsp_catiaProfil); SechskantGroove = catShapeFactory1.AddNewGrooveFromRef(reference1); SechskantGroove.SetProfileElement(reference1); SechskantGroove.set_Name("Kopfnut"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion }
internal void ErzeugeGewindeHelix(object[] ParameterListe) { // Listen Werte wieder in richtige Datentypen umwandeln int Kopf = Convert.ToInt32(ParameterListe[0]); double Durchmesser = Convert.ToDouble(ParameterListe[1]); double Gewindelänge = Convert.ToDouble(ParameterListe[2]); double Schaftlänge = Convert.ToDouble(ParameterListe[3]); double Steigung = Convert.ToDouble(ParameterListe[4]); int Gewindeart = Convert.ToInt32(ParameterListe[5]); double Schlüsselweite = Convert.ToDouble(ParameterListe[6]); double Kopfhöhe = Convert.ToDouble(ParameterListe[7]); double Kopfdurchmesser = Convert.ToDouble(ParameterListe[8]); int SchraubenrichtungInt = Convert.ToInt32(ParameterListe[9]); double helixAchseStart = Gewindelänge + Schaftlänge + Kopfhöhe; Double P = Steigung; Double Ri = Durchmesser / 2; myPart = hsp_catiaPart.Part; myBody = myPart.MainBody; HSF = (HybridShapeFactory)myPart.HybridShapeFactory; myGewinde = makeGewindeSkizze(ParameterListe); HybridShapeDirection HelixDir = HSF.AddNewDirectionByCoord(1, 0, 0); Reference RefHelixDir = myPart.CreateReferenceFromObject(HelixDir); HybridShapePointCoord HelixStartpunkt = HSF.AddNewPointCoord(helixAchseStart, 0, Ri); Reference RefHelixStartpunkt = myPart.CreateReferenceFromObject(HelixStartpunkt); if (SchraubenrichtungInt == 0) { Helix = HSF.AddNewHelix(RefHelixDir, true, RefHelixStartpunkt, P, Gewindelänge, false, 0, 0, true); } if (SchraubenrichtungInt == 1) { Helix = HSF.AddNewHelix(RefHelixDir, true, RefHelixStartpunkt, P, Gewindelänge, true, 0, 0, true); } Reference RefHelix = myPart.CreateReferenceFromObject(Helix); Reference RefmyGewinde = myPart.CreateReferenceFromObject(myGewinde); hsp_catiaPart.Part.Update(); myPart.InWorkObject = myBody; OriginElements catOriginElements = this.hsp_catiaPart.Part.OriginElements; Reference RefmyPlaneZX = (Reference)catOriginElements.PlaneZX; Slot GewindeRille = SF.AddNewSlotFromRef(RefmyGewinde, RefHelix); Reference RefmyPad = myPart.CreateReferenceFromBRepName( "RSur:(Face:(Brp:(Pad.2;0:(Brp:(Sketch.2;1)));None:();Cf11:());WithTemporaryBody;WithoutBuildError;WithSelectingFeatureSupport;MFBRepVersion_CXR15)", Schaft); if (Kopf == 1 || Kopf == 2) { HybridShapeSurfaceExplicit GewindestangenSurface = HSF.AddNewSurfaceDatum(RefmyPad); Reference RefGewindestangenSurface = myPart.CreateReferenceFromBRepName( "FSur:(Face:(Brp:(Pad.2;0:(Brp:(Sketch.2;1)));None:();Cf12:());WithTemporaryBody;WithoutBuildError;WithInitialFeatureSupport;MFBRepVersion_CXR29)", Schaft); GewindeRille.ReferenceSurfaceElement = RefGewindestangenSurface; } if (Kopf == 3) { //HybridShapeSurfaceExplicit GewindestangenSurface = HSF.AddNewSurfaceDatum(RefmyPad); Reference RefGewindestangenSurface = myPart.CreateReferenceFromBRepName( "FSur:(Face:(Brp:(Pad.1;0:(Brp:(Sketch.2;1)));None:();Cf12:());WithTemporaryBody;WithoutBuildError;WithInitialFeatureSupport;MFBRepVersion_CXR29)", Schaft); GewindeRille.ReferenceSurfaceElement = RefGewindestangenSurface; } myPart.Update(); Reference RefGewindeRille = myPart.CreateReferenceFromObject(GewindeRille); myPart.Update(); }
// Separate Skizzenerzeugung für de Helix public Sketch makeGewindeSkizze(object[] ParameterListe) { // Listen Werte wieder in richtige Datentypen umwandeln int Kopf = Convert.ToInt32(ParameterListe[0]); double Durchmesser = Convert.ToDouble(ParameterListe[1]); double Gewindelänge = Convert.ToDouble(ParameterListe[2]); double Schaftlänge = Convert.ToDouble(ParameterListe[3]); double Steigung = Convert.ToDouble(ParameterListe[4]); int Gewindeart = Convert.ToInt32(ParameterListe[5]); double Schlüsselweite = Convert.ToDouble(ParameterListe[6]); double Kopfhöhe = Convert.ToDouble(ParameterListe[7]); double Kopfdurchmesser = Convert.ToDouble(ParameterListe[8]); string Schraubenrichtung = Convert.ToString(ParameterListe[9]); double Gesamtlänge = Gewindelänge + Schaftlänge + Kopfhöhe; Double P = Steigung; Double Ri = Durchmesser / 2; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; //Reference catReference3 = (Reference)catOriginElements.PlaneXY; hsp_catiaPart.Part.InWorkObject = hsp_catiaProfil_Gewinde; hsp_catiaProfil_Gewinde.set_Name("Gewinde"); double V_oben_links = Gesamtlänge - (((((Math.Sqrt(3) / 2) * P) / 6) + 0.6134 * P) * Math.Tan((30 * Math.PI) / 180)); double H_oben_links = Ri; double V_oben_rechts = Gesamtlänge + (((((Math.Sqrt(3) / 2) * P) / 6) + 0.6134 * P) * Math.Tan((30 * Math.PI) / 180)); double H_oben_rechts = Ri; double V_unten_links = Gesamtlänge - ((0.1443 * P) * Math.Sin((60 * Math.PI) / 180)); double H_unten_links = Ri - (0.6134 * P - 0.1443 * P) - Math.Sqrt(Math.Pow((0.1443 * P), 2) - Math.Pow((0.1443 * P) * Math.Sin((60 * Math.PI) / 180), 2)); double V_unten_rechts = Gesamtlänge + (0.1443 * P) * Math.Sin((60 * Math.PI) / 180); double H_unten_rechts = Ri - (0.6134 * P - 0.1443 * P) - Math.Sqrt(Math.Pow((0.1443 * P), 2) - Math.Pow((0.1443 * P) * Math.Sin((60 * Math.PI) / 180), 2)); double V_Mittelpunkt = Gesamtlänge; double H_Mittelpunkt = Ri - ((0.6134 * P) - 0.1443 * P); Factory2D catFactory2D2 = hsp_catiaProfil_Gewinde.OpenEdition(); Point2D Oben_links = catFactory2D2.CreatePoint(H_oben_links, V_oben_links); Point2D Oben_rechts = catFactory2D2.CreatePoint(H_oben_rechts, V_oben_rechts); Point2D Unten_links = catFactory2D2.CreatePoint(H_unten_links, V_unten_links); Point2D Unten_rechts = catFactory2D2.CreatePoint(H_unten_rechts, V_unten_rechts); Point2D Mittelpunkt = catFactory2D2.CreatePoint(H_Mittelpunkt, V_Mittelpunkt); Line2D Oben = catFactory2D2.CreateLine(H_oben_links, V_oben_links, H_oben_rechts, V_oben_rechts); Oben.StartPoint = Oben_links; Oben.EndPoint = Oben_rechts; Line2D Rechts = catFactory2D2.CreateLine(H_oben_rechts, V_oben_rechts, H_unten_rechts, V_unten_rechts); Rechts.StartPoint = Oben_rechts; Rechts.EndPoint = Unten_rechts; Circle2D Verrundung = catFactory2D2.CreateCircle(H_Mittelpunkt, V_Mittelpunkt, 0.1443 * P, 0, 0); Verrundung.CenterPoint = Mittelpunkt; Verrundung.StartPoint = Unten_rechts; Verrundung.EndPoint = Unten_links; Line2D Links = catFactory2D2.CreateLine(H_oben_links, V_oben_links, H_unten_links, V_unten_links); Links.StartPoint = Unten_links; Links.EndPoint = Oben_links; hsp_catiaProfil_Gewinde.CloseEdition(); hsp_catiaPart.Part.Update(); return(hsp_catiaProfil_Gewinde); }
private bool GetSelect(bool InitFrame) { this.WindowState = FormWindowState.Minimized; try { CatApplication = (INFITF.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Catia.Application"); } catch (Exception) { this.WindowState = FormWindowState.Normal; this.StartPosition = FormStartPosition.CenterScreen; MessageBox.Show("未检测到打开的CATIA!,请重新运行CATIA!"); return(false); //throw; } CatApplication.set_Caption("正在运行瑞祥快速建模工具!"); // 获取当前活动ProductDocument try { CatDocument = (ProductDocument)CatApplication.ActiveDocument; } catch (Exception) { CatDocument = (ProductDocument)CatApplication.Documents.Add("Product"); try { CatDocument.Product.set_PartNumber("RxProduct"); } catch (Exception) { MessageBox.Show("未检测到活动Product,正在为您创建,请手动辅助完成!"); return(false); } //MessageBox.Show("未检测到活动Product,已自动为您创建对象!"); } // 添加一个新零件 string Name = "RXFastDesignTool"; try { PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; } catch (Exception) { try { CatDocument.Product.Products.AddNewComponent("Part", Name); } catch (Exception) { return(false); // throw; } PartID = ((PartDocument)CatApplication.Documents.Item(Name + ".CATPart")).Part; OriginElements Tpart = PartID.OriginElements; AnyObject dxy = Tpart.PlaneXY; AnyObject dyz = Tpart.PlaneYZ; AnyObject dzx = Tpart.PlaneZX; Selection SelectT = CatDocument.Selection; VisPropertySet VP = SelectT.VisProperties; SelectT.Add(dxy); SelectT.Add(dyz); SelectT.Add(dzx); VP = (VisPropertySet)VP.Parent; VP.SetShow(CatVisPropertyShow.catVisPropertyNoShowAttr); SelectT.Clear(); } try { CatDocument.Product.ApplyWorkMode(CatWorkModeType.DESIGN_MODE); } catch (Exception) { Console.WriteLine("Change Design Model Faild!"); } this.WindowState = FormWindowState.Normal; this.StartPosition = FormStartPosition.CenterScreen; return(true); }
public void ErzeugeProfil(Zahnrad Zahnrad1) { // geometrisches Set auswaehlen und umbenennen HybridBodies catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody1; try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); // Part aktualisieren hsp_catiaPart.Part.Update(); //Nullpunkt double x0 = 0; double y0 = 0; //Hilfsgrößen von Wilkos PDF double Teilkreisradius = Zahnrad1.d / 2; double Hilfskreisradius = Teilkreisradius * 0.94; double Fußkreisradius = Teilkreisradius - (1.25 * Zahnrad1.m); double Kopfkreisradius = Teilkreisradius + Zahnrad1.m; double Verrundungsradius = 0.35 * Zahnrad1.m; double Alpha = 20; double Beta = 90 / Zahnrad1.z; double Betarad = Math.PI * Beta / 180; double Gamma = 90 - (Alpha - Beta); double Gammarad = Math.PI * Gamma / 180; double Totalangel = 360.0 / Zahnrad1.z; double Totalangelrad = Math.PI * Totalangel / 180; //Punkte //LinkerEvolKreis Mittelp. Koordinaten double xMPEvo_links = Hilfskreisradius * Math.Cos(Gammarad); double yMPEvo_links = Hilfskreisradius * Math.Sin(Gammarad); //Schnittpkt. auf Evolvente und Teilkreisradius double xPunktAufEvolvente = -Teilkreisradius *Math.Sin(Betarad); double yPunktAufEvolvente = Teilkreisradius * Math.Cos(Betarad); //Evolventenkreis Radius double EvolventenkreisRadius = Math.Sqrt(Math.Pow((xMPEvo_links - xPunktAufEvolvente), 2) + Math.Pow((yMPEvo_links - yPunktAufEvolvente), 2)); //Koordinaten Schnittpunkt Kopfkreis und Evolventenkreis double xEvolventenkopfkreis_links = Schnittpunkt_X(x0, y0, Kopfkreisradius, xMPEvo_links, yMPEvo_links, EvolventenkreisRadius); double yEvolventenkopfkreis_links = Schnittpunkt_Y(x0, y0, Kopfkreisradius, xMPEvo_links, yMPEvo_links, EvolventenkreisRadius); //Mittelpunktkoordinaten Verrundung double xMittelpunktVerrundung_links = Schnittpunkt_X(x0, y0, Fußkreisradius + Verrundungsradius, xMPEvo_links, yMPEvo_links, EvolventenkreisRadius + Verrundungsradius); double yMittelpunktVerrundung_links = Schnittpunkt_Y(x0, y0, Fußkreisradius + Verrundungsradius, xMPEvo_links, yMPEvo_links, EvolventenkreisRadius + Verrundungsradius); //Schnittpubktkoordinaten Verrundung - Evolventenkreis double x_SP_EvolventeVerrundung_links = Schnittpunkt_X(xMPEvo_links, yMPEvo_links, EvolventenkreisRadius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); double y_SP_EvolventeVerrundung_links = Schnittpunkt_Y(xMPEvo_links, yMPEvo_links, EvolventenkreisRadius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); //Schnittpunktkoordinaten Verrundung - Fußkreis double x_SP_FußkreisradiusVerrundung_links = Schnittpunkt_X(x0, y0, Fußkreisradius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); double y_SP_FußkreisradiusVerrundung_links = Schnittpunkt_Y(x0, y0, Fußkreisradius, xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius); //Koordinaten Anfangspunkt Fußkreis double Hilfswinkel = Totalangelrad - Math.Atan(Math.Abs(x_SP_FußkreisradiusVerrundung_links) / Math.Abs(y_SP_FußkreisradiusVerrundung_links)); double x_AnfangspunktFußkreis = Fußkreisradius * Math.Sin(Hilfswinkel); double y_AnfangspunktFußkreis = Fußkreisradius * Math.Cos(Hilfswinkel); //Skizze umbenennen und öffnen hsp_catiaProfil.set_Name("Zahnradskizze"); Factory2D catfactory2D1 = hsp_catiaProfil.OpenEdition(); //Nun die Punkte in die Skizze Point2D Ursprung = catfactory2D1.CreatePoint(x0, y0); Point2D EndpunktEvolventenkreis = catfactory2D1.CreatePoint(x_AnfangspunktFußkreis, y_AnfangspunktFußkreis); Point2D VerrundungLinksAnfang = catfactory2D1.CreatePoint(x_SP_FußkreisradiusVerrundung_links, y_SP_FußkreisradiusVerrundung_links); Point2D VerrundungRechtsEnde = catfactory2D1.CreatePoint(-x_SP_FußkreisradiusVerrundung_links, y_SP_FußkreisradiusVerrundung_links); Point2D MPVerrundungLinks = catfactory2D1.CreatePoint(xMittelpunktVerrundung_links, yMittelpunktVerrundung_links); Point2D MPVerrundungRechts = catfactory2D1.CreatePoint(-xMittelpunktVerrundung_links, yMittelpunktVerrundung_links); Point2D VerrundungEndeLinks = catfactory2D1.CreatePoint(x_SP_EvolventeVerrundung_links, y_SP_EvolventeVerrundung_links); Point2D VerrundungAnfangRechts = catfactory2D1.CreatePoint(-x_SP_EvolventeVerrundung_links, y_SP_EvolventeVerrundung_links); Point2D MPEvolventeLinks = catfactory2D1.CreatePoint(xMPEvo_links, yMPEvo_links); Point2D MPEvolventeRechts = catfactory2D1.CreatePoint(-xMPEvo_links, yMPEvo_links); Point2D EvolventenEndeLinks = catfactory2D1.CreatePoint(xEvolventenkopfkreis_links, yEvolventenkopfkreis_links); Point2D EvolventenEndeRechts = catfactory2D1.CreatePoint(-xEvolventenkopfkreis_links, yEvolventenkopfkreis_links); //Kreise Circle2D Fußkreis = catfactory2D1.CreateCircle(x0, y0, Fußkreisradius, 0, Math.PI * 2); Fußkreis.CenterPoint = Ursprung; Fußkreis.StartPoint = EndpunktEvolventenkreis; Fußkreis.EndPoint = VerrundungRechtsEnde; Circle2D VerrundungLinks = catfactory2D1.CreateCircle(xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius, 0, Math.PI * 2); VerrundungLinks.CenterPoint = MPVerrundungLinks; VerrundungLinks.StartPoint = VerrundungLinksAnfang; VerrundungLinks.EndPoint = VerrundungEndeLinks; Circle2D EvolventenkreisLinks = catfactory2D1.CreateCircle(xMPEvo_links, yMPEvo_links, EvolventenkreisRadius, 0, Math.PI * 2); EvolventenkreisLinks.CenterPoint = MPEvolventeLinks; EvolventenkreisLinks.StartPoint = EvolventenEndeLinks; EvolventenkreisLinks.EndPoint = VerrundungEndeLinks; Circle2D Kopfkreis = catfactory2D1.CreateCircle(x0, y0, Kopfkreisradius, 0, Math.PI * 2); Kopfkreis.CenterPoint = Ursprung; Kopfkreis.StartPoint = EvolventenEndeRechts; Kopfkreis.EndPoint = EvolventenEndeLinks; Circle2D EvolventenkreisRechts = catfactory2D1.CreateCircle(-xMPEvo_links, yMPEvo_links, EvolventenkreisRadius, 0, Math.PI * 2); EvolventenkreisRechts.CenterPoint = MPEvolventeRechts; EvolventenkreisRechts.StartPoint = VerrundungAnfangRechts; EvolventenkreisRechts.EndPoint = EvolventenEndeRechts; Circle2D VerrundungRechts = catfactory2D1.CreateCircle(-xMittelpunktVerrundung_links, yMittelpunktVerrundung_links, Verrundungsradius, 0, Math.PI * 2); VerrundungRechts.CenterPoint = MPVerrundungRechts; VerrundungRechts.StartPoint = VerrundungAnfangRechts; VerrundungRechts.EndPoint = VerrundungRechtsEnde; // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); ShapeFactory shapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; HybridShapeFactory hybridShapeFactory1 = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; Factory2D factory2D1 = hsp_catiaProfil.Factory2D; HybridShapePointCoord ursprung = hybridShapeFactory1.AddNewPointCoord(0, 0, 0); Reference refUrsprung = hsp_catiaPart.Part.CreateReferenceFromObject(ursprung); HybridShapeDirection xRichtung = hybridShapeFactory1.AddNewDirectionByCoord(1, 0, 0); Reference refxRichtung = hsp_catiaPart.Part.CreateReferenceFromObject(xRichtung); CircPattern kreismuster = shapeFactory1.AddNewSurfacicCircPattern(factory2D1, 1, 2, 0, 0, 1, 1, refUrsprung, refxRichtung, false, 0, true, false); kreismuster.CircularPatternParameters = CatCircularPatternParameters.catInstancesandAngularSpacing; AngularRepartition angularRepartition1 = kreismuster.AngularRepartition; Angle angle1 = angularRepartition1.AngularSpacing; angle1.Value = Convert.ToDouble(360 / Zahnrad1.z); AngularRepartition angularRepartition2 = kreismuster.AngularRepartition; IntParam intParam1 = angularRepartition2.InstancesCount; intParam1.Value = Convert.ToInt32(Zahnrad1.z) + 1; //Kreismusterenden verbinden Reference refKreismuster = hsp_catiaPart.Part.CreateReferenceFromObject(kreismuster); HybridShapeAssemble verbindung = hybridShapeFactory1.AddNewJoin(refKreismuster, refKreismuster); Reference refVerbindung = hsp_catiaPart.Part.CreateReferenceFromObject(verbindung); hybridShapeFactory1.GSMVisibility(refVerbindung, 0); hsp_catiaPart.Part.MainBody.InsertHybridShape(verbindung); hsp_catiaPart.Part.Update(); ErzeugeBlock(Zahnrad1, refVerbindung, shapeFactory1); Sketches sketchesBohrung = catHybridBody1.HybridSketches; OriginElements catoriginelements = hsp_catiaPart.Part.OriginElements; Reference refmxPlaneX = (Reference)catoriginelements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(refmxPlaneX); ErzeugeAchsensystem(); hsp_catiaPart.Part.Update(); hsp_catiaProfil.set_Name("Bohrung"); Factory2D catfactory2D2 = hsp_catiaProfil.OpenEdition(); Circle2D KreisFürBohrungsskizze = catfactory2D2.CreateClosedCircle(x0, y0, Zahnrad1.bd / 2); hsp_catiaProfil.CloseEdition(); hsp_catiaPart.Part.Update(); hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pocket Tasche = shapeFactory1.AddNewPocket(hsp_catiaProfil, Zahnrad1.b); hsp_catiaPart.Part.Update(); }
//InnenVerzahnung public void ErstelleProfilInnen(Data dat) { //geometrisches set auswählen und umbenennen HybridBodies catHybridBodies_I = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody_I; try { catHybridBody_I = catHybridBodies_I.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden!\nEin PART manuell erzeugen und darauf achten, dass ein 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); return; } catHybridBody_I.set_Name("Profile"); //Neue Skizze im ausgewählten geometrischen Set anlegen Sketches catSketches_I = catHybridBody_I.HybridSketches; OriginElements catOriginElements_I = hsp_catiaPart.Part.OriginElements; Reference catReference_I = (Reference)catOriginElements_I.PlaneYZ; hsp_catiaProfil = catSketches_I.Add(catReference_I); //Achsensystem in Skizze erzeugen ErzeugeAchsensystem(); //Part aktualisieren hsp_catiaPart.Part.Update(); hsp_catiaProfil.set_Name("InnenverzahnungBlock"); Factory2D catFactory_I = hsp_catiaProfil.OpenEdition(); Circle2D catC2D_I = catFactory_I.CreateClosedCircle(0, 0, dat.getFußkreisdurchmesser_iZahnrad1()); hsp_catiaProfil.CloseEdition(); hsp_catiaPart.Part.Update(); ShapeFactory SF_I = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; HybridShapeFactory HSF_I = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; //Erzeuge Block aus Skizze hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pad myPad = SF_I.AddNewPad(hsp_catiaProfil, dat.getBreiteZahnrad1()); hsp_catiaPart.Part.Update(); //Neue Skizze im ausgewählten geometrischen Set anlegen Sketches catSketches1 = catHybridBody_I.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); //Achsensystem in Skizze erzeugen ErzeugeAchsensystem(); //Part aktualisieren hsp_catiaPart.Part.Update(); //HilfsRadien double d_r = (dat.getModulZahnrad1() * dat.getZaehnezahlZahnrad1()) / 2; double hk_r = d_r * 1.06; double da_r = d_r - (1.25 * dat.getModulZahnrad1()); double df_r = d_r + dat.getModulZahnrad1(); double vd_r = 0.35 * dat.getModulZahnrad1(); //HilfsWinkel double alpha = 20; double beta = 90 / dat.getZaehnezahlZahnrad1(); double beta_r = Math.PI * beta / 180; double gamma = 90 - (alpha - beta); double gamma_r = Math.PI * gamma / 180; double ta = 360.0 / dat.getZaehnezahlZahnrad1(); double ta_r = Math.PI * ta / 180; //Nullpunkte double x0 = 0; double y0 = 0; //MittelPunkt EvolventenKreis double MP_EvolventenKreis_x = hk_r * Math.Cos(gamma_r); double MP_EvolventenKreis_y = hk_r * Math.Sin(gamma_r); // SchnittPunkt Evolventenkreis & Teilkreisradius double SP_EvolventenTeilKreis_x = -d_r *Math.Sin(beta_r); double SP_EvolventenTeilKreis_y = d_r * Math.Cos(beta_r); //Evolventenkreis Radius double Evolventenkreis_r = Math.Sqrt(Math.Pow((MP_EvolventenKreis_x - SP_EvolventenTeilKreis_x), 2) + Math.Pow((MP_EvolventenKreis_y - SP_EvolventenTeilKreis_y), 2)); //SchnittPunkt Evolventenkreis & Kopfkreisradius double SP_EvolventenKopfKreis_x = Schnittpunkt_x(x0, y0, da_r, MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r); double SP_EvolventenKopfKreis_y = Schnittpunkt_y(x0, y0, da_r, MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r); //MittelPunkt VerrundungsRadius double MP_Verrundung_x = Schnittpunkt_x(x0, y0, df_r + vd_r, MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r + vd_r); double MP_Verrundung_y = Schnittpunkt_y(x0, y0, df_r + vd_r, MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r + vd_r); //SchnittPunkt Evolventenkreis & Verrundungsradius double SP_EvolventeVerrundung_x = Schnittpunkt_x(MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r, MP_Verrundung_x, MP_Verrundung_y, vd_r); double SP_EvolventeVerrundung_y = Schnittpunkt_y(MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r, MP_Verrundung_x, MP_Verrundung_y, vd_r); //SchnittPunkt Fußkreis & Verrundungs Radius double SP_FußkreisVerrundungsRadius_x = Schnittpunkt_x(x0, y0, df_r, MP_Verrundung_x, MP_Verrundung_y, vd_r); double SP_FußkreisVerrundungsRadius_y = Schnittpunkt_y(x0, y0, df_r, MP_Verrundung_x, MP_Verrundung_y, vd_r); //StartPunkt Fußkreis Radius double phi = ta_r - Math.Atan(Math.Abs(SP_FußkreisVerrundungsRadius_x) / Math.Abs(SP_FußkreisVerrundungsRadius_y)); double StartPkt_Fußkreis_x = -df_r *Math.Sin(phi); double StartPkt_Fußkreis_y = df_r * Math.Cos(phi); //Skizze umbenennen und öffnen hsp_catiaProfil.set_Name("InnenverzahnungEinzel"); Factory2D catFactory2D1 = hsp_catiaProfil.OpenEdition(); //Punkte Point2D catP2D_Ursprung = catFactory2D1.CreatePoint(x0, y0); Point2D catP2D_StartPkt_Fußkreis = catFactory2D1.CreatePoint(StartPkt_Fußkreis_x, StartPkt_Fußkreis_y); Point2D catP2D_SP_FußkreisVerrundungsRadius1 = catFactory2D1.CreatePoint(SP_FußkreisVerrundungsRadius_x, SP_FußkreisVerrundungsRadius_y); Point2D catP2D_SP_FußkreisVerrundungsRadius2 = catFactory2D1.CreatePoint(-SP_FußkreisVerrundungsRadius_x, SP_FußkreisVerrundungsRadius_y); Point2D catP2D_MP_EvolventenKreis1 = catFactory2D1.CreatePoint(MP_EvolventenKreis_x, MP_EvolventenKreis_y); Point2D catP2D_MP_EvolventenKreis2 = catFactory2D1.CreatePoint(-MP_EvolventenKreis_x, MP_EvolventenKreis_y); Point2D catP2D_SP_EvolventenKopfKreis1 = catFactory2D1.CreatePoint(SP_EvolventenKopfKreis_x, SP_EvolventenKopfKreis_y); Point2D catP2D_SP_EvolventenKopfKreis2 = catFactory2D1.CreatePoint(-SP_EvolventenKopfKreis_x, SP_EvolventenKopfKreis_y); Point2D catP2D_MP_Verrundung1 = catFactory2D1.CreatePoint(MP_Verrundung_x, MP_Verrundung_y); Point2D catP2D_MP_Verrundung2 = catFactory2D1.CreatePoint(-MP_Verrundung_x, MP_Verrundung_y); Point2D catP2D_SP_EvolventeVerrundung1 = catFactory2D1.CreatePoint(SP_EvolventeVerrundung_x, SP_EvolventeVerrundung_y); Point2D catP2D_SP_EvolventeVerrundung2 = catFactory2D1.CreatePoint(-SP_EvolventeVerrundung_x, SP_EvolventeVerrundung_y); //Kreise Circle2D catC2D_Frußkreis = catFactory2D1.CreateCircle(x0, y0, df_r, 0, 0); catC2D_Frußkreis.CenterPoint = catP2D_Ursprung; catC2D_Frußkreis.StartPoint = catP2D_SP_FußkreisVerrundungsRadius1; catC2D_Frußkreis.EndPoint = catP2D_StartPkt_Fußkreis; Circle2D catC2D_Kopfkreis = catFactory2D1.CreateCircle(x0, y0, da_r, 0, 0); catC2D_Kopfkreis.CenterPoint = catP2D_Ursprung; catC2D_Kopfkreis.StartPoint = catP2D_SP_EvolventenKopfKreis2; catC2D_Kopfkreis.EndPoint = catP2D_SP_EvolventenKopfKreis1; Circle2D catC2D_EvolventenKreis1 = catFactory2D1.CreateCircle(MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r, 0, 0); catC2D_EvolventenKreis1.CenterPoint = catP2D_MP_EvolventenKreis1; catC2D_EvolventenKreis1.StartPoint = catP2D_SP_EvolventenKopfKreis1; catC2D_EvolventenKreis1.EndPoint = catP2D_SP_EvolventeVerrundung1; Circle2D catC2D_Evolventenkreis2 = catFactory2D1.CreateCircle(-MP_EvolventenKreis_x, MP_EvolventenKreis_y, Evolventenkreis_r, 0, 0); catC2D_Evolventenkreis2.CenterPoint = catP2D_MP_EvolventenKreis2; catC2D_Evolventenkreis2.StartPoint = catP2D_SP_EvolventeVerrundung2; catC2D_Evolventenkreis2.EndPoint = catP2D_SP_EvolventenKopfKreis2; Circle2D catC2D_VerrundungsKreis1 = catFactory2D1.CreateCircle(MP_Verrundung_x, MP_Verrundung_y, vd_r, 0, 0); catC2D_VerrundungsKreis1.CenterPoint = catP2D_MP_Verrundung1; catC2D_VerrundungsKreis1.StartPoint = catP2D_SP_FußkreisVerrundungsRadius1; catC2D_VerrundungsKreis1.EndPoint = catP2D_SP_EvolventeVerrundung1; Circle2D catC2D_VerrundungsKreis2 = catFactory2D1.CreateCircle(-MP_Verrundung_x, MP_Verrundung_y, vd_r, 0, 0); catC2D_VerrundungsKreis2.CenterPoint = catP2D_MP_Verrundung2; catC2D_VerrundungsKreis2.StartPoint = catP2D_SP_EvolventeVerrundung2; catC2D_VerrundungsKreis2.EndPoint = catP2D_SP_FußkreisVerrundungsRadius2; hsp_catiaProfil.CloseEdition(); hsp_catiaPart.Part.Update(); //Skizze und Referenzen Factory2D Factory2D1 = hsp_catiaProfil.Factory2D; HybridShapePointCoord Ursprung = HSF_I.AddNewPointCoord(0, 0, 0); Reference RefUrsprung = hsp_catiaPart.Part.CreateReferenceFromObject(Ursprung); HybridShapeDirection XDir = HSF_I.AddNewDirectionByCoord(1, 0, 0); Reference RefXDir = hsp_catiaPart.Part.CreateReferenceFromObject(XDir); //Kreismuster mit Daten füllen CircPattern Kreismuster = SF_I.AddNewSurfacicCircPattern(Factory2D1, 1, 2, 0, 0, 1, 1, RefUrsprung, RefXDir, false, 0, true, false); Kreismuster.CircularPatternParameters = CatCircularPatternParameters.catInstancesandAngularSpacing; AngularRepartition angularRepartition1 = Kreismuster.AngularRepartition; Angle angle1 = angularRepartition1.AngularSpacing; angle1.Value = Convert.ToDouble(360 / dat.getZaehnezahlZahnrad1()); AngularRepartition angularRepartition2 = Kreismuster.AngularRepartition; IntParam intParam1 = angularRepartition2.InstancesCount; intParam1.Value = Convert.ToInt32(dat.getZaehnezahlZahnrad1()) + 1; //geschlossene Kontur Reference Ref_Kreismuster = hsp_catiaPart.Part.CreateReferenceFromObject(Kreismuster); HybridShapeAssemble Verbindung = HSF_I.AddNewJoin(Ref_Kreismuster, Ref_Kreismuster); Reference Ref_Verbindung = hsp_catiaPart.Part.CreateReferenceFromObject(Verbindung); HSF_I.GSMVisibility(Ref_Verbindung, 0); hsp_catiaPart.Part.Update(); /*Bodies bodies = hsp_catiaPart.Part.Bodies; * Body myBody = bodies.Add(); * myBody.set_Name("Zahnrad"); * myBody.InsertHybridShape(Verbindung); * * hsp_catiaPart.Part.Update();*/ //Tasche für Innenverzahnung(grob) hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pocket catPocketInnen = SF_I.AddNewPocketFromRef(Ref_Verbindung, dat.getBreiteZahnrad1()); hsp_catiaPart.Part.Update(); }
private Sketch makeGewindeSkizze(Schraube s) { Double P = s.metrischeGewindegroesse.steigung; Double Ri = s.metrischeGewindegroesse.bezeichnung / 2; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference RefmyPlaneZX = (Reference)catOriginElements.PlaneZX; Sketches catSketchesGewinde = catHybridBody1.HybridSketches; Sketch myGewinde = catSketchesGewinde.Add(RefmyPlaneZX); hsp_catiaPart.Part.InWorkObject = myGewinde; myGewinde.set_Name("Gewinde"); double V_oben_links = -(((((Math.Sqrt(3) / 2) * P) / 6) + 0.6134 * P) * Math.Tan((30 * Math.PI) / 180) - s.schaftLaenge.schaftlaenge); double H_oben_links = Ri; double V_oben_rechts = (((((Math.Sqrt(3) / 2) * P) / 6) + 0.6134 * P) * Math.Tan((30 * Math.PI) / 180) + s.schaftLaenge.schaftlaenge); double H_oben_rechts = Ri; double V_unten_links = -((0.1443 * P) * Math.Sin((60 * Math.PI) / 180) - s.schaftLaenge.schaftlaenge); double H_unten_links = Ri - (0.6134 * P - 0.1443 * P) - Math.Sqrt(Math.Pow((0.1443 * P), 2) - Math.Pow((0.1443 * P) * Math.Sin((60 * Math.PI) / 180), 2)); double V_unten_rechts = (0.1443 * P) * Math.Sin((60 * Math.PI) / 180) + s.schaftLaenge.schaftlaenge; double H_unten_rechts = Ri - (0.6134 * P - 0.1443 * P) - Math.Sqrt(Math.Pow((0.1443 * P), 2) - Math.Pow((0.1443 * P) * Math.Sin((60 * Math.PI) / 180), 2)); double V_Mittelpunkt = s.schaftLaenge.schaftlaenge; double H_Mittelpunkt = Ri - ((0.6134 * P) - 0.1443 * P); Factory2D catFactory2D2 = myGewinde.OpenEdition(); Point2D Oben_links = catFactory2D2.CreatePoint(H_oben_links, V_oben_links); Point2D Oben_rechts = catFactory2D2.CreatePoint(H_oben_rechts, V_oben_rechts); Point2D Unten_links = catFactory2D2.CreatePoint(H_unten_links, V_unten_links); Point2D Unten_rechts = catFactory2D2.CreatePoint(H_unten_rechts, V_unten_rechts); Point2D Mittelpunkt = catFactory2D2.CreatePoint(H_Mittelpunkt, V_Mittelpunkt); Line2D Oben = catFactory2D2.CreateLine(H_oben_links, V_oben_links, H_oben_rechts, V_oben_rechts); Oben.StartPoint = Oben_links; Oben.EndPoint = Oben_rechts; Line2D Rechts = catFactory2D2.CreateLine(H_oben_rechts, V_oben_rechts, H_unten_rechts, V_unten_rechts); Rechts.StartPoint = Oben_rechts; Rechts.EndPoint = Unten_rechts; Circle2D Verrundung = catFactory2D2.CreateCircle(H_Mittelpunkt, V_Mittelpunkt, 0.1443 * P, 0, 0); Verrundung.CenterPoint = Mittelpunkt; Verrundung.StartPoint = Unten_rechts; Verrundung.EndPoint = Unten_links; Line2D Links = catFactory2D2.CreateLine(H_oben_links, V_oben_links, H_unten_links, V_unten_links); Links.StartPoint = Unten_links; Links.EndPoint = Oben_links; myGewinde.CloseEdition(); hsp_catiaPart.Part.Update(); return(myGewinde); }
public void Sechskant(MetrischeGewindegroesse m) { #region SKizze bauen // neue Skizze im ausgewaehlten geometrischen Set anlegen Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); // Achsensystem in Skizze erstellen ErzeugeAchsensystem(); hsp_catiaProfil.set_Name("Sechskantkopf"); // Skizzierer verlassen hsp_catiaProfil.CloseEdition(); // Part aktualisieren hsp_catiaPart.Part.Update(); Factory2D catFactory2D1 = hsp_catiaProfil.OpenEdition(); // Sechskant erzeugen double tan30 = Math.Sqrt(3) / 3; double cos30 = Math.Sqrt(3) / 2; double mSW = m.schluesselweite / 2; //double mSW = 16; //Test mit Schlüsselweite 16 // erst die Punkte Point2D catPoint2D1 = catFactory2D1.CreatePoint(mSW, tan30 * mSW); Point2D catPoint2D2 = catFactory2D1.CreatePoint(mSW, -(tan30 * mSW)); Point2D catPoint2D3 = catFactory2D1.CreatePoint(0, -(mSW / cos30)); Point2D catPoint2D4 = catFactory2D1.CreatePoint(-mSW, -(tan30 * mSW)); Point2D catPoint2D5 = catFactory2D1.CreatePoint(-mSW, tan30 * mSW); Point2D catPoint2D6 = catFactory2D1.CreatePoint(0, mSW / cos30); // dann die Linien Line2D catLine2D1 = catFactory2D1.CreateLine(mSW, tan30 * mSW, mSW, -(tan30 * mSW)); catLine2D1.StartPoint = catPoint2D1; catLine2D1.EndPoint = catPoint2D2; Line2D catLine2D2 = catFactory2D1.CreateLine(mSW, -(tan30 * mSW), 0, -(mSW / cos30)); catLine2D2.StartPoint = catPoint2D2; catLine2D2.EndPoint = catPoint2D3; Line2D catLine2D3 = catFactory2D1.CreateLine(0, -(mSW / cos30), -mSW, -(tan30 * mSW)); catLine2D3.StartPoint = catPoint2D3; catLine2D3.EndPoint = catPoint2D4; Line2D catLine2D4 = catFactory2D1.CreateLine(-mSW, -(tan30 * mSW), -mSW, (tan30 * mSW)); catLine2D4.StartPoint = catPoint2D4; catLine2D4.EndPoint = catPoint2D5; Line2D catLine2D5 = catFactory2D1.CreateLine(-mSW, (tan30 * mSW), 0, mSW / cos30); catLine2D5.StartPoint = catPoint2D5; catLine2D5.EndPoint = catPoint2D6; Line2D catLine2D6 = catFactory2D1.CreateLine(0, mSW / cos30, mSW, tan30 * mSW); catLine2D6.StartPoint = catPoint2D6; catLine2D6.EndPoint = catPoint2D1; // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion #region Pad // Hauptkoerper in Bearbeitung definieren hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; // Block(Balken) erzeugen ShapeFactory catShapeFactory2 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; KopfPad = catShapeFactory2.AddNewPad(hsp_catiaProfil, -m.kopfhoehesechs); //Pad catPad2 = catShapeFactory2.AddNewPad(hsp_catiaProfil, -12); // Test mit Mutterhoehe 12 // Block umbenennen KopfPad.set_Name("Kopf"); // Part aktualisieren hsp_catiaPart.Part.Update(); #endregion Sechskantverrundung(m); }
//Außenverzahntes Stirnrad public void ErzeugeProfilAußen(Data dat) { //ERZEUGE SKIZZE //Geometrisches Set auswählen und umbennen HybridBodies catHybridBodies1 = hsp_catiaPart.Part.HybridBodies; HybridBody catHybridBody1; try { catHybridBody1 = catHybridBodies1.Item("Geometrisches Set.1"); } catch (Exception) { MessageBox.Show("Kein geometrisches Set gefunden! " + Environment.NewLine + "Ein PART manuell erzeugen und ein darauf achten, dass 'Geometisches Set' aktiviert ist.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Information); return; } catHybridBody1.set_Name("Profile"); Sketches catSketches1 = catHybridBody1.HybridSketches; OriginElements catOriginElements = hsp_catiaPart.Part.OriginElements; Reference catReference1 = (Reference)catOriginElements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(catReference1); //Erstelle Achsensystem ErzeugeAchsensystem(); //Update hsp_catiaPart.Part.Update(); //KOORDINATEN ANLEGEN //Nullpunkt double x0 = 0; double y0 = 0; //Radien und Winkel double teilkreisradius = dat.getTeilkreisdurchmesser() / 2; double hilfskreisradius = teilkreisradius * 0.94; double fußkreisradius = teilkreisradius - (1.25 * dat.getModul()); double kopfkreisradius = teilkreisradius + dat.getModul(); double verrundungsradius = 0.35 * dat.getModul(); double alpha = 20; double beta = 90 / dat.getZähnezahl(); double betarad = Math.PI * beta / 180; double gamma = 90 - (alpha - beta); double gammarad = Math.PI * gamma / 180; double totalangle = 360.0 / dat.getZähnezahl(); double totalanglerad = Math.PI * totalangle / 180; //Schnittpunkte und Koordinaten //Evolventenkreis Center Koordinaten double mittelpunktEvol_x = hilfskreisradius * Math.Cos(gammarad); double mittelpunktEvol_y = hilfskreisradius * Math.Sin(gammarad); //Schnittpkt. der Evolvente und dem Teilkreisradius double punktEvol_x = -teilkreisradius *Math.Sin(betarad); double punktEvol_y = teilkreisradius * Math.Cos(betarad); //Evolvente Radius double EvolventenkreisRadius = Math.Sqrt(Math.Pow((mittelpunktEvol_x - punktEvol_x), 2) + Math.Pow((mittelpunktEvol_y - punktEvol_y), 2)); //Schnittpunkt Kopfkreis und Evolventenkreis double evolventenKopfk_x = Schnittpunkt_X(x0, y0, kopfkreisradius, mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius); double evolventenKopfk_y = Schnittpunkt_Y(x0, y0, kopfkreisradius, mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius); //Center Verrundung double mittelpunktVer_x = Schnittpunkt_X(x0, y0, fußkreisradius + verrundungsradius, mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius + verrundungsradius); double mittelpunktVer_y = Schnittpunkt_Y(x0, y0, fußkreisradius + verrundungsradius, mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius + verrundungsradius); //Schnittpunkt Verrundung Evolventenkreis double evolventenVer_x = Schnittpunkt_X(mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius, mittelpunktVer_x, mittelpunktVer_y, verrundungsradius); double evolventenVer_y = Schnittpunkt_Y(mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius, mittelpunktVer_x, mittelpunktVer_y, verrundungsradius); //Schnittpunkt Verrundung Fußkreis double fußkreisVer_x = Schnittpunkt_X(x0, y0, fußkreisradius, mittelpunktVer_x, mittelpunktVer_y, verrundungsradius); double fußkreisVer_y = Schnittpunkt_Y(x0, y0, fußkreisradius, mittelpunktVer_x, mittelpunktVer_y, verrundungsradius); //Anfangspunkt Fußkreis double hilfswinkel = totalanglerad - Math.Atan(Math.Abs(fußkreisVer_x) / Math.Abs(fußkreisVer_y)); double anfangspunktFußk_x = -fußkreisradius *Math.Sin(hilfswinkel); double anfangspunktFußk_y = fußkreisradius * Math.Cos(hilfswinkel); //Skizze umbenennen und öffnen hsp_catiaProfil.set_Name("Außenverzahntes Stirnrad"); Factory2D catfactory2D1 = hsp_catiaProfil.OpenEdition(); //Punkte in Skizze einzeichnen Point2D point_Ursprung = catfactory2D1.CreatePoint(x0, y0); Point2D pointAnfangFußkreis = catfactory2D1.CreatePoint(anfangspunktFußk_x, anfangspunktFußk_y); Point2D pointFußkreisVer_l = catfactory2D1.CreatePoint(fußkreisVer_x, fußkreisVer_y); Point2D pointFußkreisVer_r = catfactory2D1.CreatePoint(-fußkreisVer_x, fußkreisVer_y); Point2D pointMittelpunktVer_l = catfactory2D1.CreatePoint(mittelpunktVer_x, mittelpunktVer_y); Point2D pointMittelpunktVer_r = catfactory2D1.CreatePoint(-mittelpunktVer_x, mittelpunktVer_y); Point2D pointVerrundungEvol_l = catfactory2D1.CreatePoint(evolventenVer_x, evolventenVer_y); Point2D pointVerrundungEvol_r = catfactory2D1.CreatePoint(-evolventenVer_x, evolventenVer_y); Point2D pointMittelpunktevol_l = catfactory2D1.CreatePoint(mittelpunktEvol_x, mittelpunktEvol_y); Point2D pointMittelpunktevol_r = catfactory2D1.CreatePoint(-mittelpunktEvol_x, mittelpunktEvol_y); Point2D pointEvolventenKopfkreis_l = catfactory2D1.CreatePoint(evolventenKopfk_x, evolventenKopfk_y); Point2D pointEvolventenKopfkreis_r = catfactory2D1.CreatePoint(-evolventenKopfk_x, evolventenKopfk_y); //Kreise in Skizze einzeichnen Circle2D kreisFußkreis = catfactory2D1.CreateCircle(x0, y0, fußkreisradius, 0, Math.PI * 2); kreisFußkreis.CenterPoint = point_Ursprung; kreisFußkreis.StartPoint = pointFußkreisVer_l; kreisFußkreis.EndPoint = pointAnfangFußkreis; Circle2D kreisVerrundung_l = catfactory2D1.CreateCircle(mittelpunktVer_x, mittelpunktVer_y, verrundungsradius, 0, Math.PI * 2); kreisVerrundung_l.CenterPoint = pointMittelpunktVer_l; kreisVerrundung_l.StartPoint = pointFußkreisVer_l; kreisVerrundung_l.EndPoint = pointVerrundungEvol_l; Circle2D kreisEvolventenkreis_l = catfactory2D1.CreateCircle(mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius, 0, Math.PI * 2); kreisEvolventenkreis_l.CenterPoint = pointMittelpunktevol_l; kreisEvolventenkreis_l.StartPoint = pointEvolventenKopfkreis_l; kreisEvolventenkreis_l.EndPoint = pointVerrundungEvol_l; Circle2D kreisKopfkreis = catfactory2D1.CreateCircle(x0, y0, kopfkreisradius, 0, Math.PI * 2); kreisKopfkreis.CenterPoint = point_Ursprung; kreisKopfkreis.StartPoint = pointEvolventenKopfkreis_r; kreisKopfkreis.EndPoint = pointEvolventenKopfkreis_l; Circle2D kreisEvolventenkreis_r = catfactory2D1.CreateCircle(-mittelpunktEvol_x, mittelpunktEvol_y, EvolventenkreisRadius, 0, Math.PI * 2); kreisEvolventenkreis_r.CenterPoint = pointMittelpunktevol_r; kreisEvolventenkreis_r.StartPoint = pointVerrundungEvol_r; kreisEvolventenkreis_r.EndPoint = pointEvolventenKopfkreis_r; Circle2D kreisVerrundung_r = catfactory2D1.CreateCircle(-mittelpunktVer_x, mittelpunktVer_y, verrundungsradius, 0, Math.PI * 2); kreisVerrundung_r.CenterPoint = pointMittelpunktVer_r; kreisVerrundung_r.StartPoint = pointVerrundungEvol_r; kreisVerrundung_r.EndPoint = pointFußkreisVer_r; //Skizze schließen hsp_catiaProfil.CloseEdition(); //Update hsp_catiaPart.Part.Update(); //ERSTELLE KREISMUSTER ShapeFactory shapeFactory1 = (ShapeFactory)hsp_catiaPart.Part.ShapeFactory; HybridShapeFactory hybridShapeFactory1 = (HybridShapeFactory)hsp_catiaPart.Part.HybridShapeFactory; Factory2D factory2D1 = hsp_catiaProfil.Factory2D; HybridShapePointCoord ursprung = hybridShapeFactory1.AddNewPointCoord(0, 0, 0); Reference refUrsprung = hsp_catiaPart.Part.CreateReferenceFromObject(ursprung); HybridShapeDirection xRichtung = hybridShapeFactory1.AddNewDirectionByCoord(1, 0, 0); Reference refxRichtung = hsp_catiaPart.Part.CreateReferenceFromObject(xRichtung); CircPattern kreismuster = shapeFactory1.AddNewSurfacicCircPattern(factory2D1, 1, 2, 0, 0, 1, 1, refUrsprung, refxRichtung, false, 0, true, false); kreismuster.CircularPatternParameters = CatCircularPatternParameters.catInstancesandAngularSpacing; AngularRepartition angularRepartition1 = kreismuster.AngularRepartition; Angle angle1 = angularRepartition1.AngularSpacing; angle1.Value = Convert.ToDouble(360 / dat.getZähnezahl()); AngularRepartition angularRepartition2 = kreismuster.AngularRepartition; IntParam intParam1 = angularRepartition2.InstancesCount; intParam1.Value = Convert.ToInt32(dat.getZähnezahl()) + 1; //Kreismusterenden verbinden Reference refKreismuster = hsp_catiaPart.Part.CreateReferenceFromObject(kreismuster); HybridShapeAssemble verbindung = hybridShapeFactory1.AddNewJoin(refKreismuster, refKreismuster); Reference refVerbindung = hsp_catiaPart.Part.CreateReferenceFromObject(verbindung); hybridShapeFactory1.GSMVisibility(refVerbindung, 0); hsp_catiaPart.Part.MainBody.InsertHybridShape(verbindung); //Update hsp_catiaPart.Part.Update(); //ERSTELLE BLOCK ErzeugeBlock(refVerbindung, shapeFactory1, dat); if (dat.Bohrungsauswahl == 1) { //Skizze Sketches sketchesBohrung = catHybridBody1.HybridSketches; OriginElements catoriginelements = hsp_catiaPart.Part.OriginElements; Reference refmxPlaneX = (Reference)catoriginelements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(refmxPlaneX); //Achsensystem ErzeugeAchsensystem(); //Update hsp_catiaPart.Part.Update(); //Skizze Umbennen hsp_catiaProfil.set_Name("Bohrung"); //Öffnen Factory2D catfactory2D2 = hsp_catiaProfil.OpenEdition(); //Kreis Circle2D KreisFürBohrungsskizze = catfactory2D2.CreateClosedCircle(x0, y0, dat.getBohrung()); //Schließen hsp_catiaProfil.CloseEdition(); //Update hsp_catiaPart.Part.Update(); //Tasche hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pocket Tasche = shapeFactory1.AddNewPocket(hsp_catiaProfil, dat.getBreite()); hsp_catiaPart.Part.Update(); } if (dat.Bohrungsauswahl == 2) { //Schnittpunkte und Koordinaten //LH Schnittpunkt Passfederhöhe mit Bohrung double x_AnfangkreisZuPassfeder = -dat.getPassfederbreite() / 2; double y_AnfangkreisZuPassfeder = Math.Sqrt(Math.Pow(dat.getBohrung(), 2) - Math.Pow((dat.getPassfederbreite() / 2), 2)); //LH Schnittpunkt Breite und Höhe double x_Passfederecke = -dat.getPassfederbreite() / 2; double y_Passfederecke = dat.getPassfederhöhe(); //Skizze Sketches sketchesBohrung = catHybridBody1.HybridSketches; OriginElements catoriginelements = hsp_catiaPart.Part.OriginElements; Reference refmxPlaneX = (Reference)catoriginelements.PlaneYZ; hsp_catiaProfil = catSketches1.Add(refmxPlaneX); //Achsensystem ErzeugeAchsensystem(); //Update hsp_catiaPart.Part.Update(); //Umbennen und öffnen hsp_catiaProfil.set_Name("Bohrung mit Passfedernut"); Factory2D catfactory2D2 = hsp_catiaProfil.OpenEdition(); //Punkte in Skizze einzeichnen Point2D POINTLinksAnfangKreisZuPassfeder = catfactory2D2.CreatePoint(x_AnfangkreisZuPassfeder, y_AnfangkreisZuPassfeder); Point2D POINTLinksPassfederEcke = catfactory2D2.CreatePoint(x_Passfederecke, y_Passfederecke); Point2D POINTRechtsPassfederEcke = catfactory2D2.CreatePoint(-x_Passfederecke, y_Passfederecke); Point2D POINTRechtsAnfangKreisZuPassfeder = catfactory2D2.CreatePoint(-x_AnfangkreisZuPassfeder, y_AnfangkreisZuPassfeder); //Linien einzeichnen Line2D PassfederKanteLinks = catfactory2D2.CreateLine(x_AnfangkreisZuPassfeder, y_AnfangkreisZuPassfeder, x_Passfederecke, y_Passfederecke); PassfederKanteLinks.StartPoint = POINTLinksAnfangKreisZuPassfeder; PassfederKanteLinks.EndPoint = POINTLinksPassfederEcke; Line2D PassfederHöhenkante = catfactory2D2.CreateLine(x_Passfederecke, y_Passfederecke, -x_Passfederecke, y_Passfederecke); PassfederHöhenkante.StartPoint = POINTLinksPassfederEcke; PassfederHöhenkante.EndPoint = POINTRechtsPassfederEcke; Line2D PassfederKanteRechts = catfactory2D2.CreateLine(-x_Passfederecke, y_Passfederecke, -x_AnfangkreisZuPassfeder, y_AnfangkreisZuPassfeder); PassfederKanteRechts.StartPoint = POINTRechtsPassfederEcke; PassfederKanteRechts.EndPoint = POINTRechtsAnfangKreisZuPassfeder; Circle2D KreisFürPassfeder = catfactory2D2.CreateCircle(x0, y0, dat.getBohrung(), 0, Math.PI * 2); KreisFürPassfeder.CenterPoint = point_Ursprung; KreisFürPassfeder.EndPoint = POINTRechtsAnfangKreisZuPassfeder; KreisFürPassfeder.StartPoint = POINTLinksAnfangKreisZuPassfeder; //Skizze schließen hsp_catiaProfil.CloseEdition(); //Update hsp_catiaPart.Part.Update(); //Tasche hsp_catiaPart.Part.InWorkObject = hsp_catiaPart.Part.MainBody; Pocket Tasche = shapeFactory1.AddNewPocket(hsp_catiaProfil, dat.getBreite()); hsp_catiaPart.Part.Update(); } }