VBA-Einstig 
für BricsCad (NUR bis V7) Teil 1
Startseite
VBA Einführung für
BricsCad und AutoCAD
Screenshots

 Download einer kostenlosen BricsCad-Demoversion (Vollversion für 30 Tage ab Installation)

!!! Bitte beachten: Nachfolgende Ausführungen gelten nur für BricsCad bis V7. Seit V8 VBA weitestgehend kompatibel zu AutoCAD!!!

Microsoft VBA (Visual Basic for Appliations), nachfolgend kurz VBA genannt, ist eine objektorientierte Programmiersprache, die innerhalb von BricsCad 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 BricsCad wird jede Komponente, angefangen bei BricsCad selbst bis hin zu einzelnen BricsCad-Elementen wie Punkt, Polylinie, Kreis, usw. als Objekt aufgefasst. Diese Objekte sind Bestandteile verschiedener Klassen und hierarchisch organisiert. Ganz oben steht BricsCad (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. Sofern sie nicht über das Menü erreichbar ist, finden Sie die Help-Datei im BricsCad-Pfad …\Help\BricsCad-DevRef.chm.

 Zwei einfache Beispiele sollen Ihnen ein erstes Kennenlernen ermöglichen. In der ersten Übung werden Sie ein Programm entwickeln, das einen Kreis mit festen Werten zeichnet. Das dabei gewonnene Wissen erweitern Sie in der zweiten Übung, indem Sie ein Formular erarbeiten, das Ihnen eine Variante der Interaktion mit BricsCad veranschaulicht.

 Starten Sie nun BricsCad mit einer leeren Zeichnung. Der Aufruf von VBA beispielsweise über das BricsCad-Menü Werkzeuge --> Visual Basic --> Visual Basic-Editor erfolgen. Einfacher geht es mit Alt+F11.

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 DiesesDokument 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:

Bild1: In die VBA-Entwicklungsumgebung gelangen Sie mit Alt+F11 (zum Vergrößern bitte dem Link folgen)

 Public Sub AddKreis1()

 End Sub

 Übrigens können Sie sich das Tippen dieser Zeilen auch vereinfachen, indem Sie mittels des Werkzeug-Symbols “Prozedur einfügen” den Untermenüpunkt Prozedur wählen. Hier müssen Sie nur noch den Namen eingeben und VBA ergänzt den Rest.

Zwischen die beiden Zeilen kommt nun der eigentliche Programmcode. Sie beginnen es mit der Deklaration der erforderlichen Variablen.

Dim Kreis As IntelliCAD.Circle

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. Aus dieser Liste wählen Sie nun das Objekt „ItelliCAD“ und anschließend „.Circle“.

Für das Objekt Kreis brauchen Sie noch einen Einfügepunkt (Zentrum). Er setzt sich aus den Koordinaten der X-, Y- und Z-Achse zusammen. Dafür muss ein Punktobjekt erzeugt werden.

Bitte beachten Sie, dass BricsCad zwei verschiedene Arten von Punkten kennt.

Das Punktobjekt und die Punkt-Entity. Das Punktobjekt kann man sich als eine dreidimensionale Variable vom Typ Double vorstellen. Also genau das, was man braucht, um den Mittelpunkt eines Kreises zu definieren. Das Punktobjekt wird NICHT in der Zeichnung angezeigt. Es wird mittels Library.CreatePoint(x,y,z) erzeugt. In Ihrem Programm wird jetzt erst mal das Punktobjekt mit

Dim Zentrum As Point

deklariert. Im Unterschied dazu gibt es die PointEntity. Sie repräsentiert das Zeichnungselement eines Punktes, ist somit in der Zeichnung sichtbar. Die Erzeugung geschieht mittels AddPointEntity(PointObjekt). Bitte beachten Sie weiterhin, dass Sie dieser Methode das vorstehend genannte Punktobjekt als Parameter mitgeben müssen. Nicht die eigentlichen Koordinaten!.

Fehl noch der Radius des Kreises, eine Gleitkommazahl, die Sie ebenfalls deklarieren sollten:

Dim Radius As Double

Für unseren Kreis haben wir alles zusammen. Bevor es an den eigentlichen Programmcode geht sollten Sie noch eine Deklaration anfügen:

Dim Doku As IntelliCAD.Document

Mit Doku wird ein Verweis auf das BricsCad.Document hergestellt, also die Zeichnung.

Nun zum eigentlichen Algorithmus. Zunächst setzen wir den Kreismittelpunkt mit

Set Zentrum = Library.CreatePoint(10, 10, 0)

Das Library-Objekt stellt neben vielen anderen Methoden auch die Funktion zur Erzeugung eines Punktobjektes bereit. Als Parameter werden die X-, Y- und Z-Koordinate mit gegeben.

Mit

Radius = 5

Legen Sie den Radius fest.

Bevor Sie an die Erzeugung des Kreises gehen können, ist der Bezug zur Zeichnung mit folgender Anweisung zu setzen:

Set Doku = IntelliCAD.ActiveDocument

Nun haben Sie alles zusammen, was für die Kreiserzeugung benötigt wird.

Set Kreis = Doku.ModelSpace.AddCircle(Zentrum, Radius)

Der Kreis wird unter Angabe des Mittelpunktes und des Radius mit der Funktion AddCircle im Modellbereich der aktiven Zeichnung generiert. Es empfiehlt sich, Ihr erstes Programm mit

Doku.ActivePViewport.ZoomAll

Abzuschließen. Wenn Sie nach der Abarbeitung zur Zeichnung umschalten, haben Sie sofort den Überblick über Ihr Ergebnis.

Die Programmausführung starten Sie jetzt mit F5 und schalten anschließend mit der Tastekombination Alt-F11 zur Zeichnung um.

Zur besseren Übersicht hier noch mal das komplette Programm:

Public Sub AddKreis1()
Dim Kreis As IntelliCAD.Circle
Dim Zentrum As Point
Dim Radius As Double
Dim Doku As IntelliCAD.Document

Set Doku = IntelliCAD.ActiveDocument
Set Zentrum = Library.CreatePoint(10, 10, 0)
Radius = 5
Set Kreis = Doku.ModelSpace.AddCircle(Zentrum, Radius)
Doku.ActivePViewport.ZoomAll 

End Sub

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_vba_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 IntelliCAD.Circle
Dim Zentrum As IntelliCAD.Point  'Variant, weil später von der GetPoint-Funktion verlangt
Dim Radius As Variant

Set Doku = IntelliCAD.ActiveDocument
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
Set Zentrum = Doku.Utility.GetPoint(, "Mittelpunkt abtasten") 'wird unten erklärt
Set Kreis = Doku.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. Weiterhin ist die Schreibweise zu beachten. In der Zeile

Radius = Me.txt_radius

lesen Sie den Wert des Textfeldes aus. „Me“ verweist dabei auf das aktuelle Formular. Das ist nichts anderes als Faulheit. Denn folgende Programmzeile

Radius = frm_vba_kreis.txt_radius

würde nichts anderes bewirken. Zumindest in unserem Fall. Falls Sie jedoch mal in die Verlegenheit kommen, gleichzeitig mit mehreren Formularen zu arbeiten, ist die ausführliche Schreibweise erforderlich. Schließlich muß VBA ja erst mal gesagt werden, wo der Wert herkommen soll.

Die Funktion GetPoint gehört zur Utility-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 BircsCad gestartet werden. Sie müssen dem BricsCad-Objekt DieserArbeitsbereich noch folgende Aufruffunktion hinzufügen. Dazu doppelcklicken Sie auf ThisDrawing im Projektexplorer und kommen ins Code-Fenster.

Public Sub VBA1_kreisform()
frm_vba_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

IBB INGENIEURBÜRO BATTEFELD  Bochum Nöckerstraße 37c
44879 Bochum
Tel: 0234-94172-0

 Mit Fragen oder Hinweisen wenden Sie sich bitte an
  

IBB INGENIEURBÜRO BATTEFELD  Leipzig Brahestraße 17
04347 Leipzig
Tel: 0341-2330465

Hydraulische Berechnungen - GIS -  Vermessung - BricsCad V8 - Kartierung - AutoCAD - Autodesk  MAP3D - DVGW - Vermessung - GPS - INTERGEO - Free Download von BricsCad - IntelliCAD - BricsCad V7 - Programmierung - Energieversorgung - AutoLISP - VB -  VBA - SQL - SYBASE SQL Anywhere - Individualprogrammierung - Gas - Wasser - Strom - Fernwärme - Abwasser - Kanal - Kataster - Indirekteinleiterkataster - relationale Datenbanken - SICAD - Netzberechnung - STANET - AutoSTA - Schnittstellen - SQD - SQS - ALK - ALB - EBDS - ISYBAU - GRADIS - AutoCAD
 ---------------------------------------------------------------------------------------------------------------------------