| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: komplexe Skizze extrudieren (2166 mal gelesen)
|
Cookiie Mitglied
Beiträge: 32 Registriert: 20.06.2005
|
erstellt am: 28. Jul. 2005 13:39 <-- editieren / zitieren --> Unities abgeben:
Hi, folgendes, ich habe ein Menge von Punkten die jeweils durch eine Linie oder durch einen Kreisbogen miteindander verbunden sind. Das Ganze ergibt auch ein geschlossenes Gebilde. Jetzt möchte ich diese Skizze als erstes fixieren, so daß sie nicht mehr veränderlich ist. Wenn ich ein Bauteil konstruiert habe, dann habe ich es immer in Bezug auf die x-Achse definiert. Genauso die Abhängigkeiten parallel , senkrecht etc. untereinander. Wie mach ich das per Code? Ich brauche das ja im Prinzip für jede Linie bzw. jeden Kreisbogen. Zum Schluß will ich dieses Vieleck mit einer bestimmten Tiefe Extrudieren. Und das klappt bisher nicht, ich vermute mal entweder weil die Kontur als solches nicht geschlossen ist oder eben weil sie nicht fixiert ist. Mein bisheriger Code
Code:
Sub zeichnen(arr() As Variant) Dim punkt1x As Double, punkt1y As Double, punkt2x As Double, punkt2y As Double Dim mittex As Double, mittey As Double Dim radius As Double, winkel As Double Dim i As Integer Dim counterclockwise As Boolean, erstes As Boolean Dim LPDicke As String 'realspalte -1 Const SP_xKoord As Integer = 1 Const SP_yKoord As Integer = 2 Const SP_Kreisbogen As Integer = 3 Const Einheit As Long = 1000000 ' Neues Bauteil Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.Documents.Add(kPartDocumentObject, ThisApplication.FileManager.GetTemplateFile(kPartDocumentObject)) Dim oCompDef As PartComponentDefinition Set oCompDef = ThisApplication.ActiveDocument.ComponentDefinition ' Neue Skizze in der xy-ebene Dim oSketch As PlanarSketch Set oSketch = oCompDef.Sketches.Add(oCompDef.WorkPlanes.Item(3)) Dim oTransGeom As TransientGeometry Set oTransGeom = ThisApplication.TransientGeometry oSketch.Name = "Board" punkt1x = 0 punkt1y = 0 punkt2x = arr(SP_xKoord, 2) / Einheit punkt2y = arr(SP_yKoord, 2) / Einheit 'startpunkt Dim opunkt1 As Point2d Set opunkt1 = oTransGeom.CreatePoint2d(punkt1x, punkt1y) 'endpunkt Dim opunkt2 As Point2d Set opunkt2 = oTransGeom.CreatePoint2d(punkt2x, punkt2y) For i = 3 To UBound(arr, 2) 'erst ab 3ter Zeile Koordinateninformationen Set opunkt1 = opunkt2 punkt2x = arr(SP_xKoord, i) / Einheit punkt2y = arr(SP_yKoord, i) / Einheit Set opunkt2 = oTransGeom.CreatePoint2d(punkt2x, punkt2y) winkel = arr(SP_Kreisbogen, i) / 100000 'liest nachkommastellen ohne komma ein If winkel = 0 Then Call oSketch.SketchLines.AddByTwoPoints(opunkt1, opunkt2) ElseIf winkel = 360 Then radius = Sqr((opunkt2.x - opunkt1.x) ^ 2 + (opunkt2.y - opunkt1.y) ^ 2) Call oSketch.SketchCircles.AddByCenterRadius(opunkt1, radius) Else Call berechneMittelpunkt(opunkt1, opunkt2, winkel, counterclockwise, mittex, mittey) Dim center As Point2d Set center = oTransGeom.CreatePoint2d(mittex, mittey) Call oSketch.SketchArcs.AddByCenterStartEndPoint(center, opunkt1, opunkt2, counterclockwise) End If Next i 'oSketch.Visible = False 'Call oSketch.GeometricConstraints.AddGround '<-- klappt nicht so wie gedacht 'erzeugt ein Profil Dim oProfile As Profile Set oProfile = oSketch.Profiles.AddForSolid 'üngultiger Befehl kommt hier, wenn ichs deaktiviere, gibts logischerweise probs bei der extrusion LPDicke = arr(0, 1) / Einheit 'erzeugt die Extrusion Call oCompDef.Features.ExtrudeFeatures.AddByDistanceExtent(oProfile, LPDicke, kPositiveExtentDirection, kJoinOperation) End Sub
Wie man sieht lese ich alle Punkte von einem Array ein und je nach Wert des Winkels wird eine Linie oder ein Kreisbogen gezeichnet. Das klappt auch bis zum Schluß. Ich vermute mal es gibt auch Probleme weil der letzte Punkt mit dem ersten übereinstimmt und ich diesen Punkt aber zweimal erzeuge. ich hoffe aber das mir jemand beim Rest weiterhelfen kann. Wichtig ist mir vorallem, daß wenn ich extrudiert habe, man das Bauteil nicht mehr verändern kann. Gruß Michael Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Cookiie Mitglied
Beiträge: 32 Registriert: 20.06.2005
|
erstellt am: 29. Jul. 2005 15:17 <-- editieren / zitieren --> Unities abgeben:
So Problem zur Hälfte gelöst. Damit man extrudieren kann, braucht man eine geschlossene Kontur. Der bisherige Code erzeugte allerdings nur Linie und Kreisbögen die einfach aneinder gereiht wurden. Lösung war deshalb als Startpunkt für die neue Linie/Kreisbogen den Endpunkt der verhergehenden Linie/Kreisbogen zu nehmen. Set oLines(1) = oSketch.SketchLines.AddByTwoPoints(oLines(2).EndSketchPoint, opunkt2) Das letzte Verbindungsstück bracuht natürlich noch den Startpunkt des ersten als Endpunkt. Das einzige Problem was jetzt noch habe ist, daß ich um die Skizze fixieren zu können als Referenz z.B. die x-Achse benötige. Im Inventor selber ging das schön per 'Geometrie projizieren'. Nur per Code hab ich bisher noch nichts passendes finden können. Vielleicht hat ja jemand übers WE eine Erleuchtung. Ein kühles WE wünschend Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Elektroingenieur Netz- und Anlagenplanung Strom (m/w/d) | Wir sind ein Tochterunternehmen der Mainzer Stadtwerke AG und versorgen die Region zuverlässig mit Strom, Erdgas und Trinkwasser. Über 500 Mitarbeitende setzen alles daran, dass Mainz und die Region jederzeit gut versorgt sind. Ob in der Montage, der IT, im Büro oder als Azubi ? unsere Berufe sind so vielfältig wie wir. Werden Sie jetzt Teil davon! WAS WIR FÜR SIE ... | Anzeige ansehen | Elektrotechnik, Elektronik |
|
Markus_Leitl Mitglied Maschinenbautechniker
Beiträge: 2 Registriert: 20.05.2006
|
erstellt am: 21. Mai. 2006 15:23 <-- editieren / zitieren --> Unities abgeben: Nur für Cookiie
Hi Cookiie, die Punkte müssen verschmolzen werden um eine geschlossene Kontur zu erzeugen, die Methode dazu lautet Merge z.B : Erster Punkt des Startobjekts --> oLines(1).StartSketchPoint Letzter Punkt des Endobjekts --> oLines(8).EndSketchPoint oLines(1).StartSketchPoint.Merge oLines(letzeLinie).EndSketchPoint Habe ein Beispiel angehängt... [Diese Nachricht wurde von Markus_Leitl am 21. Mai. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|