Besuche die neue Inventor FAQ!

Hier findest du die neue Inventor FAQ

Programmieren in Visual Basic – Eine Einführung – Teil 9

vb_prog.gifDas ist der neunte Teil des VB-Kurses. Was bisher geschah (als Neueinsteiger bitte erstmal diese Teile durchlesen!):

Programmieren in Visual Basic – Eine Einführung – Teil 1
Programmieren in Visual Basic – Eine Einführung – Teil 2
Programmieren in Visual Basic – Eine Einführung – Teil 3
Programmieren in Visual Basic – Eine Einführung – Teil 4
Programmieren in Visual Basic – Eine Einführung – Teil 5
Programmieren in Visual Basic – Eine Einführung – Teil 6
Programmieren in Visual Basic – Eine Einführung – Teil 7
Programmieren in Visual Basic – Eine Einführung – Teil 8

Im achten Teil unseres kleinen Programmierkurses haben wir aus Visual Basic den Inventor angesteuert und auf Knopfdruck eine ipt geschlossen. Das war schon gar nicht schlampig – aber da geht sicherlich noch mehr. Vielleicht sogar irgendwann mal ein “Add-in” für den Inventor, wer weis… ;)

 Skizzen, Kreise und Extrusionen

Aber vorerst backen wir noch kleine Brötchen und in diesem Fall heißt es, dass wir so anfangen, wie jeder Inventoranfänger: Mit einer ipt und einer Skizze. Was wir sicherlich wieder brauchen werden, sind die Objekte Inventor.Application und Inventor.PartDocument weil wir wieder im Inventor “rumfuhrwerken” und das in einem Bauteil. D.h. es geht gleich los, wie in Teil 8 mit dem Anlegen einer neuen Windows Anwendung und dem Einbinden des “Inventors”. Solltest du nur Bahnhof verstehen, lies dir das nochmals durch: VB den “Inventordialekt” beibringen. Alle anderen – los geht’s! :)

Nach dem die Objekte wie im Beispiel vorher definiert sind, erstellen wir einen Button, den wir “Kreis” nennen und der dann später in Inventor einen Kreis zeichnen soll der dann auch noch extrudiert wird, sodass wir einen wunderbaren Zylinder haben und das, ohne das wir in Inventor irgendwas anklicken.

Das erste neue Objekt ist das “Transient Geometry” Objekt. Mit diesem Objekt können wir in Inventor Punkte definieren, z.B. die Mittelpunktkoordiante unseres Kreises. Unsere Objektdefinition sieht also bisher so aus:

Public Class Form1
Dim oInventorApp As Inventor.Application
Dim opartDoc As Inventor.PartDocument
Dim oTG As Inventor.TransientGeometry

In unserem Windowsprogramm brauchen wir noch 2 Textboxen wo der Kreisradius und die Zylinderhöhe eingegeben werden kann und dazu 2 Labels als Beschriftungen damit der Anwender unseres Tools auch weis, was er wo eingeben muss. Ich habe die Beschriftung meines Buttons noch auf “Zylinder erstellen” gesetzt, schließlich wollen wir ja dem Anwender sagen, was passiert, wenn er drauf drückt ;). Bei mir sieht das Fenster dann so aus:

vb9_1.gif

Nun weisen wir dem Button “Kreis” die Funktionen zu, das ein Zylinder entsteht. Mache einen Doppelklick auf den Button und schon bist du im Codefenster beim “Click”-Ereignis “Kreis-Click” des Knopfes. Wie beim letzten Beispiel gehen wir davon aus, das der Inventor läuft, ein Bauteil öffnen ist und darin ein Skizze aktiv ist. Wir weißen also den Objekte, die wir bereits definiert haben, ihren “Inhalt” zu:

oInventorApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application")
opartDoc = oInventorApp.ActiveDocument
oTG = oInventorApp.TransientGeometry

Neu ist hier die Zuweisung an das “TransientGeometry” oTG-Objekt. Das ist einfach so und das brauchen wir auch, damit wir einen Kreismittelpunkt definieren können. Nun wollen wir ja auf eine Skizze einen Kreis zeichnen, also brauchen wir erstmal eine Skizze und das heißt … Objekt deklarieren und eine Zuweisung vornehmen. Wir wollen auf die bereits in Inventor aktive Skizze zugreifen (das ist am wenigsten Programmierarbeit ;) ) und das schaut dann so aus:


Dim osketch1 As Inventor.PlanarSketch
osketch1 = oInventorApp.ActiveEditObject

Ich denke, dass ist soweit klar, oder, ist ja langsam immer das gleich Spiel. Wir deklarieren ein Objekt eines bestimmten Typs und dann weisen wir dem Objekt seinen Inhalt zu. In diesem Fall eben die eben aktive Skizze.

Da wir den Kreisradius in der Box eingeben können, müssen wir den Inhalt der Textbox auch wieder auslesen. Zuvor kommt aber wieder die Definition eine Variable.

Dim dblRadius As Double
'der Var. wird der Inhalt der Textbox "KR" zugewiesen und durch 10 geteilt, da wir ja intern in cm rechnen
dblRadius = KR.Text / 10

Mein Kreisradiustextfeld heißt “KR” und wir wollen den Text daraus haben den wir dann der Variable dblRadius (dbl = Double = Typ der Variable) zuweisen. Da Inventor intern mit Zentimeter rechnet, müssen wir den eingegebenen Wert (der aller Voraussicht nach vom Anwender ja in mm eingegeben wird) in cm umrechnen.

Wenn wir den Kreisradius haben, können wir den Kreis in die Skizze zeichnen. Es wird langsam langweilig den wir definieren wieder ein Objekt, dieses mal vom Typ “Inventor.SketchCircle” – es soll ja ein Kreis werden – und dann weisen wir dem Objekt seinen Inhalt zu, der in diesem Fall im gleichen Schritt definiert wird:

'Kreis zeichnen auf 0,0 mit Radius 1 ZENTIMETER (Inventor scheint intern in CM zu rechnen!)
Dim okreis As Inventor.SketchCircle
okreis = osketch1.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(0, 0), dblRadius)

osketch1 ist das Objekt “PlanarSketch” das wir oben definiert haben und auf der Skizze erzeugen wir mittels “SketchCircles” (also in etwa “skizziere Kreise”) und der Methode “AddByCenterRadius” (also “füge hinzu durch Angabe von Mittelpunkt und Radius) einen Kreis. Und hier kommt die, mir etwas suspekte,  “TransientGeometry” ins Spiel, über die wir den Kreismittelpunkt angeben. oTG haben wir bereits als Objekt definiert und nun sagen wir dem Objekt, das wir einen 2D Punkt brauchen und geben dessen Koordinaten 0,0 an. Falls du dich fragst, warum man da nicht einfach 0,0 schreiben kann – das frage ich mich auch ;)

Wenn der Kreis in der Skizze ist, dann wird er bemaßt:

'Kreis bemaßen
Dim oBemassung_kreis As Inventor.DiameterDimConstraint
oBemassung_kreis = osketch1.DimensionConstraints.AddDiameter(okreis, oTG.CreatePoint2d(1.5, 1.5))

Objekt definieren und dann wieder angeben das auf die Skizze ein Bemaßung soll (DimensionConstraints.AddDiameter) und zwar an das Objekt Kreis und wieder die “TransientGeometry” die die Ausrichtung der Bemaßung angibt (Setze die Werte mal von 1.5 auf 0, dann wirst du sehen, was ich meine).

Wenn der Kreis erstellt und vermaßt, ist können wir in Extrudieren. Dazu müssen wir wieder ein paar Objekte definieren, die den Wert der Textbox “zylhoehe” auslesen und dann extrudieren.

'Kreis extrudieren
Dim oZylinderext As Inventor.ExtrudeFeature
Dim oprofil As Inventor.Profile
Dim opartcompdef As Inventor.PartComponentDefinition
Dim dblzylhoehe As Double
dblzylhoehe = zylhoehe.Text / 10
opartcompdef = opartDoc.ComponentDefinition
oprofil = osketch1.Profiles.AddForSolid(False)
oZylinderext = opartcompdef.Features.ExtrudeFeatures.AddByDistanceExtent(oprofil, dblzylhoehe, _
PartFeatureExtentDirectionEnum.kNegativeExtentDirection, PartFeatureOperationEnum.kJoinOperation)

Wieder werden Objekte definiert, z.B. das “oZylinderext” Objekt das der Extrusion entspricht. Die ganzen Angaben mit “k” sind die Extrusionsoptionen, also z.B. die Richtung mittels PartFeatureExtentDirectionEnum.kNegativeExtentDirection”. Das ist ein Punkt im Programm, da würde ich ohne ein Beispiel, wie das im Verzeichnis “C:\Programme\Autodesk\Inventor 2008\SDK\Samples\Vb.net\Standalone Applications\Inventor\PartFeatures” schlecht aussehen. Es gilt also, wie überall: Lerne aus den Beispielen anderer!

Hier das Programm am Stück:

Public Class Form1
Dim oInventorApp As Inventor.Application
Dim opartDoc As Inventor.PartDocument
Dim oTG As Inventor.TransientGeometry
Private Sub Kreis_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Kreis.ClickoInventorApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application")
opartDoc = oInventorApp.ActiveDocument
oTG = oInventorApp.TransientGeometry
'Auf der AKTIVEN SKIZZE geht's los!
Dim osketch1 As Inventor.PlanarSketch
osketch1 = oInventorApp.ActiveEditObject
Dim dblRadius As Double
dblRadius = KR.Text / 10 'der Var. wird der Inhalt der Textbox "KR" zugewiesen und durch 10 geteilt,
'da wir ja intern in cm rechnen
'Kreis zeichnen auf 0,0 mit Radius 1 ZENTIMETER (Inventor scheint intern in CM zu rechnen!)
Dim okreis As Inventor.SketchCircle
okreis = osketch1.SketchCircles.AddByCenterRadius(oTG.CreatePoint2d(0, 0), dblRadius)
'Kreis bemaßen
Dim oBemassung_kreis As Inventor.DiameterDimConstraint
oBemassung_kreis = osketch1.DimensionConstraints.AddDiameter(okreis, oTG.CreatePoint2d(1.5, 1.5))

'Kreis extrudieren
Dim oZylinderext As Inventor.ExtrudeFeature
Dim oprofil As Inventor.Profile
Dim opartcompdef As Inventor.PartComponentDefinition
Dim dblzylhoehe As Double
dblzylhoehe = zylhoehe.Text / 10
opartcompdef = opartDoc.ComponentDefinition
oprofil = osketch1.Profiles.AddForSolid(False)
oZylinderext = opartcompdef.Features.ExtrudeFeatures.AddByDistanceExtent(oprofil, dblzylhoehe, _
PartFeatureExtentDirectionEnum.kNegativeExtentDirection, PartFeatureOperationEnum.kJoinOperation)
End Sub

End Class

Wenn du das Programm ausführst (Bauteil mit Skizze vorher aktivieren!) dann wirst du feststellen, dass du eine Extrusion hast, aber immer noch die Skizzenbearbeitung aktiv ist. Also musst du am Ende des Programmes die Skizze verlassen. Und das ist deine Hausaufgabe. Wie heißt die Zeile Code die veranlasst, die Skizze zu verlassen? Ein kleiner Tipp: schreibe osketch1. und schaue in der Liste, was nach dem Beendet des Editierens der Skizze ausschaut.

Das war’s für heute zum Thema VB. Bis demnächst!

Bisherige Artikel zum Thema “Programmieren in Visual Basic”:
Programmieren in Visual Basic – Eine Einführung – Teil 1
Programmieren in Visual Basic – Eine Einführung – Teil 2
Programmieren in Visual Basic – Eine Einführung – Teil 3
Programmieren in Visual Basic – Eine Einführung – Teil 4
Programmieren in Visual Basic – Eine Einführung – Teil 5
Programmieren in Visual Basic – Eine Einführung – Teil 6
Programmieren in Visual Basic – Eine Einführung – Teil 7
Programmieren in Visual Basic – Eine Einführung – Teil 8

7 Kommentare zu Programmieren in Visual Basic – Eine Einführung – Teil 9

Einen Kommentar schreiben

 

 

 

Diese HTML-Tags können verwendet werden

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>