|
Microsoft VBA (Visual Basic for Appliations), nachfolgend kurz VBA genannt, ist eine objektorientierte Programmiersprache, die innerhalb von AutoCAD und auch anderen Windowsanwendungen zur Verfügung
steht. Sie ist vergleichsweise einfach zu erlernen und benutzerfreundlich in der Handhabung. Dabei sind der grundsätzliche Aufbau der Entwicklungsumgebung, die Nutzeroberfläche, die Programmstrukturen, Werkzeuge zur
Gestaltung von Menüs/Formularen weitestgehend gleich. Der wesentliche Unterschied dagegen besteht im Objektmodell der jeweiligen Anwendung. Unter AutoCAD wird jede Komponente, angefangen bei AutoCAD selbst bis hin zu einzelnen
AutoCAD-Elementen wie Punkt, Polylinie, Kreis, usw. als Objekt aufgefasst. Diese Objekte sind Bestandteile verschiedener Klassen und hierarchisch organisiert. Ganz oben steht AutoCAD (Application). Untergeordnet sind
unter anderem die Zeichnungen (Documents), die ihrerseits wieder einen Modellbereich (ModelSpace) mit den einzelnen Zeichnungselementen enthalten. Jedes VBA-Objekt ist durch spezifische Methoden (Möglichkeiten
zur Objektmanipulation), Eigenschaften, Ereignisse und Verfahren zur Erzeugung neuer Instanzen gekennzeichnet. Das komplette Objektmodell, wie auch viele andere Informationen finden Sie in der VBA-Hilfe.
Zwei einfache Beispiele sollen die vorstehenden Worte erklären. In der ersten Übung werden Sie einen Programm entwickeln, das einen Kreis mit festen Werten zeichnen. Das dabei gewonnene Wissen
erweitern Sie in der zweiten Übung, indem Sie ein Formular erarbeiten, das Ihnen die Interaktion mit AutoCAD veranschaulicht.
Starten Sie nun AutoCAD mit einer leeren Zeichnung. Der Aufruf von VBA beispielsweise über das AutoCAD-Menü Extras --> Makro --> Visual Basic-EditorAlt+F11 erfolgen.
Die Entwicklungsumgebung von VBA öffnet sich. Bild 1 stellt die wichtigsten Komponenten dar. Oben die Menüleiste und darunter die VBA-Toolboxen. Links sehen Sie den Projektexplorer, darunter das
Eigenschaften-Fenster. Rechts das Fenster für den Programmcode. Falls auf Ihrem Bildschirm die Darstellung abweicht, können Sie über das VBA-Menü Ansicht die jeweiligen Fenster verwalten.
Beim Start von VBA wird automatisch ein Objekt ThisDrawing angelegt. Markieren Sie es im Objektexplorer. Mit der rechten Maustaste können sie über den Kontextmenüpunkt Code anzeigen nun in das Fenster zur Programmierung dieses Objektes wechseln. Hier geben Sie folgende Programmzeilen zur Erzeugung einer Prozedur ein
Public Sub AddKreis1()
End Sub
Zwischen diese beiden Zeilen kommt nun der eigentliche Programmcode. Sie beginnen es mit der Deklaration der erforderlichen Variablen.
Dim Kreis as AcadCircle
Haben Sie es bemerkt? Nachdem Sie bis „Dim Kreis as “ gekommen sind, bietet Ihnen VBA automatisch die im Objektkatalog verfügbaren Elemente zur Auswahl an. Neben dem AutoCAD-Objekt Kreis
brauchen Sie noch einen Einfügepunkt (Zentrum) und den Radius. Der Einfügepunkt setzt sich aus den Koordinaten der X-, Y- und Z-Achse zusammen. Alles Gleitkommazahlen. Dementsprechend sieht Ihre Variablenzuweisung wie folgt
aus:
Dim Zentrum (0 To 2) as Double
Dim Radius as Double
Nachdem alle Variablen deklariert wurden, geht es ans eigentliche Programm. Als erstes weisen Sie die Werte für den Kreismittelpunkt zu:
Zentrum(0) = 0 : Zentrum(1) = 0 : Zentrum(2) = 0
Die Trennung von VBA Befehlen erfolgt entweder durch einen Doppelpunkt oder das Schreiben in einzelne Zeilen. Beides ist gleichwertig und in erster Linie eine Frage der Übersichtlichkeit. Analog
zum Kreismittelpunkt definieren Sie den Radius mit
Radius = 5
Nun wird der Kreis in die Zeichnung geschrieben.
Set Kreis = ThisDrawing.ModelSpace.AddCircle (Zentrum, Radius)
Was ist hierbei wichtig? Sie haben der Objektvariablen „Kreis“ zunächst mitgeteilt, daß ein Objekt im Modellbereich der aktuellen Zeichnung erzeugt werden soll (ThisDrawing.ModelSpace).
Dazu wird die Methode AddCircle genutzt. In Klammern stehen die Parameter. Dieses Prinzip lässt sich auf die meisten anderen AutoCAD-Elemente übertragen.
Nun können Sie die Prozedur starten. Sie wechseln zu AutoCAD und rufen aus dem AutoCAD Menü Extras --> Makro --> Makros...Alt+F8 auf. Das sich öffnende Fenster bietet Ihnen Ihr gerade geschriebenes Programm an. Wählen Sie nun „Ausführen“
und der Kreis wird gezeichnet. Falls er nicht zu sehen sein sollte, zoomen Sie auf die Grenzen.
Eine der besonderen Stärken von VBA ist die Möglichkeit zur einfachen Gestaltung von Formularen. In der zweiten Übung werden Sie die Kreiserzeugung ein wenig komfortabler gestalten, indem Sie den
Anwender über ein Formular den Radius eingeben und die Lage des Kreismittelpunktes interaktiv bestimmen lassen. Dazu wechseln Sie wieder mit Alt+F11 zu VBA. Markieren Sie im Projektexplorer Ihr Projekt mit der Rechten Maustaste. Im Kontextmenü wählen Sie Einfügen
--> UserForm.
Ein leeres Formular wird erzeugt und die Werkzeugsammlung geöffnet. Bevor Sie an die Formulargestaltung gehen, sollten Sie einen Blick auf das Eigenschaften-Fenster werfen. Alles was Sie darin
sehen ist manipulierbar. Wir begnügen uns jedoch damit, lediglich den Namen und die Beschriftung des Formulars zu ändern.
Von (Name) UserForm1 auf frm_kreis
Von Caption UserForm1 auf Kreis erzeugen
Die Änderung des Namens ist sinnvoll, damit man sich im Falle der Arbeit mit mehreren Formularen auch später noch zurecht findet. Über die Caption-Eigenschaft wird die Beschriftung definiert.
Zur weiteren Menügestaltung benötigen Sie 3 Steuerelemente. Ein Bezeichnungsfeld, ein Textfeld und eine Befehlsschaltfläche. Ordnen Sie die wie in Bild 2 an, indem Sie die Elemente nacheinander
in der Werkzeugsammlung markieren und dann mit dem zu einem Kreuz gewordenen Cursor im Formular aufziehen. Nacheinander markieren Sie dann die Elemente und ändern deren Eigenschaften:
Steuerelement |
Eigenschaft
|
Von Wert
|
Auf Wert
|
|
Label1
|
Name |
Label1 |
Lbl_radius |
|
|
Caption |
Label1
|
Radius:
|
|
Textbox1
|
Name |
TextBox1
|
Txt_radius
|
|
|
Value |
(ist leer)
|
5
|
|
CommandButton1
|
Name |
CommandButton1
|
cmd_kreis
|
|
|
Caption |
CommandButton1
|
Kreis
|
Namen und Beschriftung (Caption) der Steuerelemente wurden der besseren Übersicht wegen geändert. Die Eintragung eines Wertes in der Textbox erfolgt zur Vorsicht, um einem etwaigen Fehler
durch eine vergessene Eingabe vorzubeugen.
Doppelklicken Sie jetzt auf die Befehlsschaltfläche „Kreis“ und es öffnet sich das Codefenster. Sie können erkennen, daß VBA bereits eine Prozedur Private Sub cmd_kreis_Click()
angelegt hat. Diese wird abgearbeitet, wenn Sie diesen Knopf zur Ausführung betätigen. Bitte tippen Sie nun nachfolgenden Programmcode ein. Mit „’“ oder REM werden Kommentare bezeichnet.
Dim Kreis As AcadCircle
Dim Zentrum As Variant ’Variant, weil später von der GetPoint-Funktion verlangt
Dim Radius As Variant
REM nachfolgende Funktion versteckt das Formular nach Aufruf dieser Prozedur REM und übergibt AutoCAD die weitere Steuerung
Me.Hide
Radius = Me.txt_radius ’wird unten erklärt
Zentrum = Thisdrawing.Utility.GetPoint(, “Mittelpunkt abtasten“) ’wird unten erklärt
Set Kreis = Thisdrawing.ModelSpace.AddCircle(Zentrum, Radius) ’generiert den Kreis
Me.Show ’Bringt das Formular wieder zur Anzeige
Der Radius wird bei der Programmausführung dem Textfeld entnommen. Wie es der Name sagt, handelt es sich zunächst um einen String. Die Variable aber vom Typ Variant ist, wird der Text von
VBA in einen Zahlenwert konvertiert.
Die Funktion GetPoint gehört zur AcadUtility-Klasse. Diese stellt unter anderem viele wichtige
Funktionen zur Kommunikation mit dem Anwender bereit. Hier erwartet sie die Angabe eines Punktes in der Zeichnung.
Formulare können nicht direkt aus AutoCAD gestartet werden. Dazu müssen Sie dem AutoCAD-Objekt ThisDrawing noch folgende Aufruffunktion hinzufügen. Dazu doppelcklicken Sie auf ThisDrawing im Projektexplorer und kommen ins Code-Fenster.
Public Sub Addkreis2()
frm_kreis.Show
End Sub
Sie können nun in schon gewohnter Weise Ihre neue Funktion ausführen. Abschließend speichern Sie Ihr Projekt. Beispielsweise, indem sie im VBA-Werkzeugkasten auf das dafür vorgesehene Symbol
klicken. Dann wird das komplette Projekt als dvb-Datei abgelegt. Um es zu laden, benutzen Sie später Das AutoCAD-Menü Extras --> Makro --> Projekt laden.
Zu Teil2
|