VBA für AutoCAD Teil 2

 

 

© Dipl.-Wirtsch.-Ing. Franz Ertl

 

 


Einleitung

Visual Basic for Applications oder kurz VBA ist eine Programmiersprache, die von Microsoft entwickelt wurde. Verschiedene Programmstrukturen wurden aus dem früheren Basic übernommen. Die Entwicklungsumgebung und die Art zu programmieren hat sich aber erheblich geändert. Ein Hauptvorteil gegenüber anderen Programmiersprachen ist die leichte Erlernbarkeit und die Integration in viele Programme. Mit VBA können Sie keine ausführbaren Programme erstellen. Sie können aber VBA-Routinen in Visual Basic übertragen. Die Sprachelemente von VB sind identisch mit denen von VBA. In VBA gibt es aber zusätzliche auf die jeweilige Anwendung bezogene Elemente. Zum Beispiel finden Sie in Microsoft Excel das Objekt „Cell“, das es in Autocad nicht gibt.  In AutoCAD gibt es das Objekt Acad_Text, das es in Excel nicht gibt. Um in VB mit diesen Objekten arbeiten zu können, müssen Verweise erstellt werden. Sie erfahren mehr im Kapitel „Modul einfügen“.

Dieses Skript ist kein allumfassendes Nachschlagewerk, sondern eine Sammlung von Übungen, mit dem Ziel „VBA - Learning by doing“.

Verwenden Sie zur Vertiefung die Hilfe (Entwicklerhilfe).

 

 

Fortsetzung von Teil 1

Objektmodell (Auszug)

Auflistungen und Objekte

Das Application-Objekt

Das Application-Objekt ist allen anderen Objekten übergeordnet. Die Documents-Auflistung - also die Auflistung aller geöffneten Zeichnungen - ist dem Application-Objekt untergeordnet, ebenso die Menubar-, MenuGroups- und die Preferences-Auflistung.

Das Preferences-Objekt

Bei diesem Objekt handelt es sich um die Einstellungen im Dialogfenster Werkzeuge/Optionen in AutoCAD. Hier sind die Supportpfade, Hintergrundfarben u.a. hinterlegt.

Dokuments-Objekte

Die Documents-Auflistung beinhaltet die geöffneten Zeichnungen. Die aktuelle Zeichnung wird mit der Anweisung ThisDrawing angesprochen.

 

Übung 12: Auflisten der geöffneten Zeichnungen



Bemaßungsstile auflisten

Die nachfolgende Prozedur listet die bestehenden Bemaßunsstile der aktuellen Zeichnung auf und gibt das Ergebnis in einem Meldungsfenster aus.

 

           

Textstile auflisten

 

Blocks-Auflistung

Die Blocksauflistung kann für die Erstellung von Stücklisten verwendet werden. Attributwerte können z. B. nach Excel oder Access exportiert werden (Übung auf Seite 189).

Der Modellbereich und der Papierbereich sind spezielle Blöcke, die auch aufgelistet werden.

 

 

 

 

Papierbereich und Modellbereich aus der Blocksauflistung ausschließen

Sollen die Zeichenbereiche Model_Space und Paper_Space (Modellbereich und Papierbereich) nicht dargestellt werden, kann der Ausschluß über eine Bedingung durchgeführt werden.

 

 

If Not left(objBlock.Name, 5) Like "*Mode" and not left(objBlock.Name,5)=*Pape” Then

 

Wenn die linken 5 Zeichen des Blocks nicht "*Mode“ oder „*Pape“ lauten, füge den Namen zum Text hinzu.

 

strBloecke = strBloecke & objBlock.Name & vbCr

 

Dictionaries

Es handelt sich nicht um eine Rechtschreibauflistung, sondern Dictionaries sind Container für alle Objekttypen. Der Zugriff erfolgt über Schlüsselwörter. Z.B. werden Dort Extendet Datas (Xdata) gespeichert.

 

Plotkonfiguration

Listet alle Plotterkonfigurationen auf.

 

 

Linientypen

Listet alle geladenen Linientypen auf.

 

Layer

Listet alle Layer auf.

 

Layouts

Auflistung der in der Zeichnung vorhanden Layouts.

 

UCS-Auflistung

Die BKS-Auflistung zeigt alle gespeicherten Koordinatensysteme an.

 

Ansichtsfenster

Zeigt die in der Zeichnung vorhandenen Ansichtsfenster an.

 


Übung 13: Blocknamen in ein Nachschlagefeld einfügen

Erstellen Sie ein neues Formular.

Fügen Sie ein Nachschlagefeld ein.

Doppelklicken Sie auf das Nachschlagefeld.

Wählen Sie das Ereignis ENTER und geben Sie den rechts dargestellten Code ein.

 

Ausführen des Formularcodes

Drücken Sie F5, um den Programmcode auszuführen.

Klicken Sie auf das Nachschlagefeld.

Es ist noch nicht ideal. Modellbereich und Papierbereich haben in der Auswahl nichts verloren.

 

 

Der Code wird ein wenig erweitert, um den Papierbereich und den Modellbereich auszuschließen.

Die Combobox wird nun auch bei jedem Aufruf mit der Methode CLEAR geleert, bevor neue Einträge hinzugefügt werden Combobox1.clear.

 

 

 


Auswahlsätze verwenden

Zur Auswahl einer größeren Anzahl von Objekten ist die Auflistung ungeeignet. Besser eignen sich Auswahlsätze.

Die Nachfolgende Routine zeigt, wie man per SelectionSet alle eingefügten Blöcke sehr schnell erfassen kann.

Der SelectionSet filtert die Objekte, anstatt sie nacheinander zu durchlaufen.

Filterlisten werden aus Paaren von Argumenten gebildet. Das erste Argument kennzeichnet den Filtertyp (z. B. ein Objekt), und das zweite Argument gibt den zu filternden Wert an (z. B. Kreise). Der Filtertyp ist ein DXF-Gruppencode, durch den der zu verwendende Filter angegeben wird.

Die folgenden Codes zeigen einige wichtige Gruppencodes (Filterregeln).

Eine vollständige Liste der DXF-Gruppencodes finden Sie unter "Group Code Value Types" in der DXF-Referenz.

 

Die Filterargumente werden als Anordnungen deklariert. Der Filtertyp wird als Ganzzahl und der Filterwert als Variant deklariert. Jeder Filtertyp muss zusammen mit einem Filterwert angegeben werden. Beispiel:

·         FilterType(0) = 0 'Gibt an, dass der Filter sich auf einen Objekttyp bezieht
·         FilterData(0) = "Circle" 'Gibt an, dass der Objekttyp "Circle" ist

 

Der Benutzer wird aufgefordert, Objekte zu wählen. Wenn sich Kreise innerhalb der Auswahl befinden, werden diese in den Auswahlsatz SS2 aufgenommen, alle anderen Objekte werden nicht berücksichtig.

 

Im folgenden Beispiel werden aus der Zeichnung alle eingefügten Blöcke (Instanzen) gefiltert.

Die folgende Routine kann man sehr gut mit dem Formular verwenden, um die Anzahl der eingefügten Blöcke zu ermitteln.

Der Gruppencode 2 gibt den Namen von Objeken zurück. Aus dem Formular muss nun der Name des Blocks in „GrpData1“ übergeben werden.

Übung 14: Programmcode für Filter erstellen und Formular erweitern

Erweitern Sie Userform3 um eine Textbox und eine Befehlsschaltfläche.

Ändern Sie die Beschriftung (Caption) der Befehlsschaltfläche auf „Blöcke zählen“.

 

Ändern Sie den Namen der Befehlsschaltfläche.

Vermeiden Sie Umlaute.

Doppelklicken Sie auf die Befehlsschaltfläche.

 

 

Geben Sie den rechts dargestellten Code ein:

 

 

 

 

 

 

Wenn die Funktion vor Eingabe des Codes geschrieben wurde, wird bei der Eingabe gezeigt, welche Argumente die Funktion benötigt.

 

 

 

Erstellen Sie folgende Funktion zum Filtern der Blöcke in der Zeichnung.

 

Wählen Sie zuerst den gewünschten Block aus.

Klicken Sie dann auf „Blöcke zählen“.

 

 

Sie könnten auch die folgende Sub Prozedur verwenden.

Diese greift aber direkt auf die Felder im Formular zu und ist deshalb nicht so flexibel einsetzbar.

Die Funktion kann auch aus anderen Formularen heraus aufgerufen werden.

SelectionSet für Linien

 

Alle Kreise filtern

 

Kreise oder Linien filtern

 


Zeichnungseinstellungen

Die Einstellungen des Optionendialogfensters werden teilweise in der Windows-Registry, teilweise in der Zeichnung gespeichert. Letztere können mit der Datenbankvoreinstellung aufgelistet oder geändert werden.

Nachfolgend die Auflistung der Polyliniensegmente.

 

 

Utility-Objekt

Mit dem Utility-Objekt können Sie direkt auf die Befehlszeile zugreifen oder z.B. über einen Benutzerdialog Objekte wählen, ähnlich wie in LISP.

Die Get???-Befehle aus LISP sind über das Utility-Objekt in abgeänderter Form verfügbar.

Methoden des Utility-Objekts


AngleFromXAxis

AngleToReal

AngleToString

CreateTypedArray

DistanceToReal

GetAngle

GetCorner

GetDistance

GetEntity

GetInput

GetInteger

GetKeyword

GetOrientation

GetPoint

GetReal

GetRemoteFile

GetString

GetSubEntity

InitializeUserInput

IsRemoteFile

IsURL

LaunchBrowser

DialogPolar

PointPrompt

PutRemoteFile

RealToString

TranslateCoordinates

PropertiesApplication



Zeichenobjekte durchlaufen

Die gezeigte Routine durchläuft alle Objekte im Modellbereich:

Thisdrawing.ModelSpace beschreibt den Modellbereich.

Im Beispiel waren 2 Kreise und 3 Linien in der aktiven Zeichnung vorhanden. Die Objektkoordinaten und andere Eigenschaften können ebenso einfach abgefragt und bei Bedarf nach Excel exportiert werden. Z. B. um die Koordinaten von Bohrungen für ein CNC-Programm auszugeben.

 

Hyperlinks

Listet die in der Zeichnung vorhanden Hyperlinks (Verknüpfungen in das Internet oder lokal im Netzwerk) auf.

Zeichenbereiche

Der Modellbereich ist der eigentliche Zeichenbereich. Über Ansichtsfenster werden die Objekte des Zeichenbereichs oder Ausschnitte davon im Papierbereich sichtbar gemacht.

Für Detailansichten ist nur eine Zeichnung nötig, aus welcher dann im Papierbereich mehrere Ansichtsbereiche erstellt und in verschiedenen Maßstäben dargestellt werden.

Preferences-Objekt

Die Voreinstellungen von AutoCAD werden in den Datenbankvoreinstellungen oder in der Windows-Registry gespeichert. Das Preferences-Objekt betrifft die Einstellungen, die in der Registry hinterlegt werden. Dazu gehören die Support-Pfade, die Hintergrundfarbe, die Cursorgröße u.a.

Auslesen der Supportpfade

Die Supportpfade sind in den Voreinstellungen des Applicationobjekts gespeichert. Die Methode heißt Files.

 

Ändern der Supportpfade

Die Funktion sollten Sie nicht ausführen, oder nach der Ausführung die zusätzlichen Pfade wieer löschen.


Layer und Linientypen

In diesem Kapitel wird der Zugriff auf Layer und Linientypen beschrieben.

Der Zugriff auf Layer kann z.B. zum automatischen Setzen von Layern - abhängig von bestimmten Befehlen verwendet werden. So könnte beim Aufruf von Bemaßungsbefehlen automatisch der Bemaßungslayer gesetzt werden.

Linientypen können – abhängig von bestimmten Befehlen – automatisch geladen werden.

Zugriff auf einzelne Layer

In den Auflistungen wurde gezeigt, wie man die Layerauflistung durchlaufen kann. Beim Durchlaufen können die Namen und die Eigenschaften der einzelnen Layer dargestellt und auch geändert werden. Sie können alle Layeroptionen, die per Tastatur oder Menü verfügbar sind auch per Code zuweisen.

Um Einstellungen eines Layers zu ändern, wird ein Verweis auf das Layerobjekt erzeugt.

Layer über den Namen ansprechen

Wenn der Layer namentlich „bekannt“ ist, kann er über die Item-Methode ausgwählt werden.

Farbe 7 ist weiß bzw. scharz.

Übung 15: Prüfen, ob ein bestimmter Layer vorhanden ist

Diese Routine fragt den Layernamen ab. Wenn der Layer nicht vorhanden ist, wird die Fehlerroutine durchlaufen. Wenn die Fehlernummer wie angegeben lautet, gibt es den Layer nicht. Es wird die entsprechende Fehlermeldung gezeigt, sonst wird die Farbe und der Linientyp des Layers angezeigt.

 

Layer 0 als gesuchter Layer

 

Layer Kon als gesuchter Layer.

 

 

Erzeugen neuer Layer

Im Beispiel wird ein neuer Layer „Kontur“ angelegt. Nachdem der Verweis auf das Layerobjekt erzeugt wurde können Sie die Layereigenschaften ansprechen.

 

Hier wird die Farbe mit angegeben.

Zeichnungsobjekte werden auf dem aktuellen (= aktiven) Layer erstellt.

 

 

 

Layer aktiv schalten

Die ActiveLayer-Eigenschaft gehört zum Dokument-Objekt.

Die dargestellte Routine schaltet den Layer aktiv. Sie endet in einem Fehler, falls der Layer nicht existiert.

 

DocumentObject.ActiveLayer = objLayer

 

Ein- und Ausschalten

Die dargestellte Routine schaltet alle Layer aus.

Vorsicht, auch der aktuelle Layer wird ausgeschaltet.

Wird der Schalter von False auf True geändert, werden alle Layer eingeschaltet.

 

 Sperren und Entsperren

Diese Routine sperrt alle Layer

Wird der Schalter von True auf False geändert, werden alle Layer entsperrt.

 

Frieren und Tauen

Der Layerstatus Freeze kann die Zustände True oder False annehmen. Beim Zustand Freeze = True ist der Layer gefroren.

 

Umbenennen von Layern

 

Löschen von Layern

Auch hier tritt ein Laufzeitfehler auf, wenn der Layer nicht existiert. Verwenden Sie die Routine in „Übung 15: Prüfen, ob ein bestimmter Layer vorhanden ist“, um den Fehler abzufangen.

 

Layerfarbe

Im nachfolgenden Beispiel wird die Farbe des Layers „Kon“ auf grün geändert. Vorausgesetzt wird, dass der Layer vorhanden ist, sonst wird die Routine mit einem Fehler beendet.

 

 

Farbübersicht

 

Beim Konstruieren in AutoCAD sollte man die Objektfarbe "VonLayer" verwenden, in der Bemaßung die Farbe "VonBlock". Wird die Farbe des Layers geändert, ändert sich automatisch die Farbe aller Objekte auf diesem Layer.

Weisen Sie Layern nicht die Farben VonBlock oder VonLayer zu, das Ergebnis führt zu Überraschungen.

Layerfarben sind durch Nummern von 0 bis 256 einzustellen. Die Farben von 1 bis  7 sind anhand des Namens ansprechbar, die übrigen über die Nummer.

Handle-Eigenschaft

Jedes AutoCAD-Objekt erhält eine eindeutige Identifikationsnummer. Über diese Nummer kann das Zeichnungsobjekt jederzeit direkt angesprochen werden. Der Haupteinsatzbereich ist beim Arbeiten mit XData. XData oder Extended Data sind nichtgrafische Zeichnungsobjekte, vergleichbar mit Attributen in Blöcken. Viele Applikationen zu AutoCAD arbeiten mit diesem Verfahren, das es ohne spezielle Datenbankanbindung erlaubt, wichtige Bauteilinformationen zu speichern.

 

Zugriff auf Linientypen

Ebenso wie bei den Farben ist es sinnvoll, auch den Linientyp auf "VonLayer" einzustellen. Ändert man den Linientyp des Layers wird automatisch der Linientyp aller auf diesem Layer befindlichen Objekte geändert.

Laden von Linientypen

Das folgende Beispiel sieht zuerst in der Zeichnung nach, ob der Linientyp geladen ist, wenn er nicht geladen ist, wird die Linientypdatei Acad.lin durchsucht und falls er dort vorhanden, wird er geladen.

 

In AutoCAD finden Sie im Menü Format/Linientyp die Schaltfläche "Laden..." Dort können Sie nachsehen, welche Linientypdatei verwendet wird.

 

Prüfen, ob Linientyp existiert

Bei früheren Versionen von AutoCAD wurden Linientypnamen automatisch in Großbuchstaben umgewandelt.  Seit AutoCAD 2000 ist das nicht mehr der Fall, Sie können Groß- und Kleinbuchstaben verwenden. Beim Laden von Linientypen über VBA kann das zu Problemen führen, weil der Linientypname "Gestrichelt" nicht identisch mit dem Linientypnamen "gestrichelt" ist. Deshalb ist es besser, wenn man Linientypen über AutoCAD laden läßt. AutoCAD entscheidet sich für die richtige Schreibweise.

 

 

 

Setzen von Linientypen

Ein Linientyp kann ebenso wie ein Layer aktiv gesetzt werden. D.h. alle Objekte, die gezeichnet werden, werden unabhängig vom Linientyp des Layers mit diesem Linientyp gezeichnet. Diese Einstellung ist nicht sehr flexibel. Besser ist es, den aktiven Linientyp auf "VonLayer" zu setzen.

Der aktuelle Linientyp wird in der Zeichnung gespeichert. Er gehört zum Document-Objekt.

 

 

 

DocumentObject.ActiveLinetype = objLTyp

 

Dieses Beispiel setzt den Linientyp "Acad_Iso02W100"

 

Umbenennen von Linientypen

Die Linientypnamen "VonLayer" bzw. "VonBlock" können nicht geändert werden, genauso wenig wie XRef-abhängige Linientypen. Achten Sie beim Ändern von Linientypnamen darauf, dass der neue Name nicht bereits existiert.

 

Löschen von Linientypen

Folgende Linientypen können nicht gelöscht werden

Das Löschen der übrigen Linientypen ist sehr einfach.

Mit der Methode objLTyp.Delete.

 

Linientyp-Handles

 

 

Linientypbeschreibung

Mit dieser Routine können Sie die Beschreibung des Linientyps ändern.

 

Linientyp-Skalierung

Die Linienskalierung beeinflusst die Linienlänge von unterbrochenen Linien z.B. Acad_Iso02W100. Der Tastaturbefehl in AutoCAD lautet LTFAKTOR, um die globale Einstellung, d.h. die Einstellung aller Linien zu ändern. Demgegenüber gibt es die objektbezogene Linienskalierung CELTSCALE. Diese beiden Skalierarten beeinflussen sich gegenseitig. Die objektbezogene Skalierung kann auch über die Eigenschaften des Objekts geändert werden.

 

Globaler Linientypfaktor

Setzen des Linientypfaktors.

 

Skalierfaktor abfragen

Anzeigen des aktuellen Wertes des Linientypfaktors.

                                                                          

Skalierfaktor setzen: Objetkbezogen

 Setzen des objektbezogenen Linientypfaktors:

 

 

Objektbezogenen Skalierfaktor setzen

Anzeigen des objektbezogenen Linientypfaktors.

 


Fehlerbehandlung

Es gibt verschiedene Fehlerarten.

 

 

Laufzeitfehler

Laufzeitfehler sind durchnumeriert. Mit der unten dargestellten Fehlerbehandlungsroutine werden Fehlernummer und Fehlerbeschreibung als MsgBox ausgegeben.

Es gibt viele Ursachen für Laufzeitfehler, einige sind hier kurz beschrieben.

 

 

Fehler 6: Überlauf

Fehler 6 wird verursacht, wenn Sie einer Variablen einen zu großen Wert zuweisen. Z.B. Sie weisen der Variablen bytZahl mit dem Datentyp Byte einen Zahlenwert kleiner 0 oder größer 255 zu.

 

Fehler 11: Division durch Null

Der Fehler wird verursacht, wenn durch eine Variable geteilt wird, die keinen Wert enthält.

 

 

Fehler 13: Tyen unverträglich

Der Fehler wird durch Verwendung eines falschen Datentyps verursacht, z.B. wenn Sie eine Zahl durch einen Text oder durch 0 teilen.

 

 

Fehlerbehandlungsroutine

Die Anweisung On Error goto FehlerRoutine geht zur Sprungmarke FehlerRoutine:, sobald ein Fehler auftritt.

Vor dieser Sprungmarke befindet sich der Programmcode und die Anweisung

Exit Sub, damit nach Durchlaufen des Programmcodes nicht automatisch die Fehlerroutine durchlaufen wird.

Bei einem Fehlerfall wird per MsgBox eine Fehlerinformation ausgegeben.

 

Syntaxfehler

Syntaxfehler sind vergleichbar mit Rechtschreibfehlern bzw. Grammatikfehlern. Eine Funktion wurde falsch geschrieben.

Viele Fehler sind durch Fehlernummern sofort erkennbar. Z.B. der Fehler 429 besagt, dass das angesprochene Objekt nicht geöffnet ist.

Taucht der Fehler auf, kann er durch eine Bedingung abgefangen und das Objekt geöffnet werden.

Damit das Programm aber nicht unterbrochen wird, muss der Begriff on error RESUME next eingegeben werden.

 

 

Anweisung

Beschreibung

On Error Resume next

Setze in der dem Fehler folgenden Zeile fort

On Error Goto FehlerBehandlungszeile

Springt zur Zeile FehlerBehandlungsroutine: und führt den nachfolgenden Code aus.

                                                                            

Fehler 429: Objekterstellung nicht möglich

Zum Starten von externen Anwendungen, um Daten zu übertragen (z.B. MS-Excel, MS Access...), ist es nötig, die CreateObject-Anweisung zu verwenden. Die Anwendung erstellt eine neue Instanz eines Programms.

 

 

Im folgenden Beispiel „nimmt die Programmroutine an“, dass das Programm Excel bereits gestaret wurde. Wenn der Code das erste Mal durchlaufen wird, stimmt das nicht. Deshalb wird der Fehler 429 aufgerufen. Wenn man aber weiß, dass dabei genau diese Fehlernummer entsteht, kann man ganz gezielt den Programmcode fortsetzen.

Die Fehlerbehandlung prüft, ob die Fehlernummer 429 lautet, wenn das zutrifft, wird das Programm gestartet.

Das folgende Beispiel zeigt den Ablauf mit MS Excel 2003:

 

 


Benutzerdialog mit dem Utility-Objekt

 

 

 

Eingabemethoden und Dialoge

Bisher wurden nur Eingaben vom Benutzer abgefragt. Keine einzige Koordinate wurde am Bildschirm gezeigt oder per Tastatur eingegeben. In diesem Kapitel sehen Sie, wie der Anwender mit dem Programm kommunizieren oder auf die Befehlszeile zugreifen kann.

 

 

 

Im folgenden Beispiel wird ein Punkt abgefragt.

 

 

Sie können den Punkt in AutoCAD zeigen oder per Tastatur eingeben.

 

 

Dann wird der Punkt in die X,Y- und die Z-Koorinate bezogen auf das WKS zerlegt und in einer Message-Box ausgegeben.

 

Formular aus- bzw. einblenden

Sie können erst auf AutoCAD zugreifen, wenn Sie das Formular mit der Methode Me.hide versteckt haben. Me spricht das aktuelle Formular an, die Methode hide blendet es aus, die Methode show blendet es wieder ein. D.h. dieser Programmcode wird aus einem Formular heraus aufgerufen.

 

 

 

Eingabeaufforderung

Die Benutzereingabe kann mit einer Aufforderung an der Befehlszeile erfolgen wie im obigen Beispiel. Sie kann aber auch ohne Eingabeaufforderung erfolgen:

 

 

Nach dem Aufruf der Funktion muss ein Punkt geklickt werden, sonst geht’s nicht weiter.

 

Prompt-Methode

Mit der Promptmethode können Meldungen an der Befehlszeile angezeigt werden.

UtilityObject.Prompt Meldung

 

 

InitializeUserInput

 

Um mehr als eine Option zu setzen, addieren Sie die Bit-Codes. Z.B. bedeutet der Code 3 keine Null-Werte und keine 0-Werte.

 

 

Dieses nachfolgende Beispiel verhindert, dass der Benutzer negative Zahlen eingibt.

 

Get-Methoden

GetReal

Wenn Zahlenwerte mit Dezimalstellen benötigt werden, verwenden Sie die Eingabemethode Getreal.

 

 

 

 

 

 

 

 

Achten Sie darauf, dass AutoCAD den Punkt als Dezimaltrennzeichen verwendet.

 

GetAngle

Das folgende Beispiel fragt einen Winkel ab und gibt das Ergebnis als MsgBox zurück. Der Basispunkt wird später zum Zeichnen benötigt.

 

 

 

GetOrientation

GetOrientation ist ähnlich aufgebaut, wie GetAngle, nur geht GetOrientation immer davon aus, dass 0 Grad nach Osten zeigt. GetAngle orientiert sich an der Einstellung der Systemvariablen ANGBASE.

 

 

Umwandeln in Dezimalgrad

. Die Funktionen in AutoCAD beruhen weitgehend auf Rad-Angaben. Sie können mit Dezimalgrad nichts anfangen. Deshalb müssen diese vor der Berechnung in Rad umgewandelt werden. Die nachfolgende Sub-Prozedur sollte als Funktion ausgelegt werden, um aus verschiedenen Routinen Winkelangaben in Grad an die Funktion zu senden und das Ergebnis in Rad zurückzubekommen.

 

 

   

 

Getinteger

Mit dieser Funktion können Sie nur Ganzzahlen zwischen -32,768 und +32,767.eingeben.

Aufbau der Funktion:

 

 

GetDistance

Fragt den Abstand ab.

 

Im folgenden Beispiel wird der Abstand durch 2 Punkte oder durch Eingabe eines Wertes abgefragt.

 

 

 

Im folgenden Beispiel wird der erste Punkt als Koordinate (50,50) vorgegeben, er könnte genauso gut über GETPOINT abgefragt werden. Der nächste Punkt kann mit „Gummiband“ gezeigt oder über die Tastatur eingetippt werden.

GetCorner

 

 

 

 

Meistens soll aber der erste Punkt gezeigt werden. Hierfür eignet sich die Funktion GetPoint.

 

GetInput

Benutzereingaben an der Befehlszeile. Sie müssen in das Autcadfenster umschalten, wenn Sie den Code per F8 (Debugger) ausführen.

 

GetString

Getstring ist eine Funktion, mit welcher eingebene Texte erfasst werden können.

Im folgenden Beispiel werden 3 Arten der Eingabe gezeigt.

Im ersten Fall sind keine Leerzeichen enthalten, im 2 Fall sind Leerzeichen erlaubt, im 3. Fall ist keine leere Zeichenfolge ("") erlaubt.

Die Eingabe erfolgt an der Befehlszeile von AutoCAD.

 

 

 

 

GetEntity

Diese Methode erlaubt es, Objekte durch Anklicken zu wählen.

 

 

Im Beispiel wird der Objektname abgefragt. Sie können auch den Punkt anzeigen lassen, an welchem Sie das Objekt angeklickt haben u.a.

GetSubEntity

Mit dieser Methode können Sie u.a. die ObjektId's von Blockbestandteilen auslesen (nested Entities).

 

 


Zeichnungsobjekte

Zeichnungsobjekte sind alle grafischen Objekte in AutoCAD. VBA kann bestimmte Zeichnungsroutinen erheblich vereinfachen. Das Erstellen der Objekte erfolgt im Regelfall im Modellbereich.

Zeichenbefehle

Linie

Linien sind grundlegende Objekte einer Zeichnung. Sie werden definiert durch den Startpunkt und den Endpunkt. Der Rückgabewert des Befehls RetVal ist ein Linienobjekt.

 

 

Die Anweisung, um eine Linie zu erzeugen sieht folgendermaßen aus.

 

Beim Schreiben der Anweisung wird die Quickinfo eingeblendet, sobald Sie nach der Anweisung "Addline" die Leertaste betätigen. Sie zeigt Ihnen, welche Argumente als nächstes erfoderlich sind.

Die folgende Routine fragt an der Befehlszeile Startpunkt und Endpunkt der Linie. Dann zeichnet sie die entsprechende Linie. Nicht wirklich eine Verbesserung gegenüber dem Linie-Befehl. Aber sie zeigt, wie man den Befehl einsetzt.

Beispielsweise könnte man aus Excel oder Access die Start- und Endpunkte einlesen und so eine Linie anhand einer Liste erzeugen lassen.

Kreis

Das folgende Beispiel zeichnet einen Kreis mit fest vorgegebenenKoordinaten im Modellbereich.

 

 

 

Übung: Konzentrische Kreise

Die folgende Routine zeichnet 6 Kreise mit einem gemeinsamen Zentrum.

 

Bogen

Im folgenden Beispiel wird ein Bogen im Modellbereich erzeugt. Die Bogenparameter sind in AutoCAD einzugeben.

 

 


Ellipse

Ellipse mit variabler Koordinateneingabe.

 

Ellipse mit festen Koordinaten

       

 

Multilinie

Das Multilinienobjekt zeichnet gleichzeitig bis zu 16 Linien nebeneinander. Die einzelnen Linien können unterschiedliche Farben und Linientypen verwenden. Zum Ändern von Multilinien gibt es in AutoCAD den Befehl MLEDIT, mit welchem Sie relativ einfach Wandanschlüsse zeichnen können. Sollen Multilinienobjekte versetzt oder gestutzt werden, zerlegen Sie das Objekt in den Ursprung. Der MLEDIT-Befehl funktioniert dann nicht mehr.

 

 

Polylinie

Zeichnen Sie einen Linienzug mit dem Befehl LINIE, können die einzelnen Bestandteile des Linienzuges nach belieben gelöscht oder verschoben werden kann. Wurde der Linienzug mit dem Befehl PLINIE erzeugt, handelt es sich um ein einzelnes Objekt. Ein klassisches Beispiel ist das RECHTECK.

Um Bögen in Polylinien zu erzeugen, zeichnen Sie zuerst die Polyline. Setzen Sie dann den BULGE an den gewünschten Vertex-Punkten mit der Methode SetBulge.

Verwenden Sie zum Erzeugen von Polylinien besser die Methode AddLightweightPolyline. Dieses Objekt spart Speicherplatz.

Konstruktionslinie

Konstruktionslinien sind Linien ohne Start- und Endpunkt. Sie beginnen im Unendlichen und enden im Unendlichen. Sie können gestutzt werden und als Linien in die Konstruktion eingebaut werden.

 

Strahl

Der Strahl hat einen definierten Startpunkt, aber keinen Endpunkt.

 

 

 


VBA für AutoCAD Teil 2.. 1

Einleitung.. 2

Objektmodell (Auszug). 3

Auflistungen und Objekte. 4

Das Application-Objekt 4

Das Preferences-Objekt 4

Dokuments-Objekte. 4

Bemaßungsstile auflisten. 5

Textstile auflisten. 5

Blocks-Auflistung. 5

Papierbereich und Modellbereich aus der Blocksauflistung ausschließen. 6

Dictionaries. 6

Plotkonfiguration. 6

Linientypen. 6

Layer. 7

Layouts. 7

UCS-Auflistung. 7

Ansichtsfenster. 7

Übung 13: Blocknamen in ein Nachschlagefeld einfügen. 8

Ausführen des Formularcodes. 8

Auswahlsätze verwenden. 9

Übung 14: Programmcode für Filter erstellen und Formular erweitern. 10

SelectionSet für Linien. 13

Alle Kreise filtern. 14

Kreise oder Linien filtern. 15

Zeichnungseinstellungen. 16

Utility-Objekt 16

Methoden des Utility-Objekts. 16

Zeichenobjekte durchlaufen. 17

Hyperlinks. 18

Zeichenbereiche. 18

Preferences-Objekt 18

Auslesen der Supportpfade. 18

Ändern der Supportpfade. 19

Layer und Linientypen. 20

Zugriff auf einzelne Layer. 20

Layer über den Namen ansprechen. 20

Übung 15: Prüfen, ob ein bestimmter Layer vorhanden ist 20

Erzeugen neuer Layer. 21

Layer aktiv schalten. 22

Ein- und Ausschalten. 22

Sperren und Entsperren. 22

Frieren und Tauen. 22

Umbenennen von Layern. 22

Löschen von Layern. 22

Layerfarbe. 23

Handle-Eigenschaft 23

Zugriff auf Linientypen. 23

Laden von Linientypen. 24

Prüfen, ob Linientyp existiert 25

Setzen von Linientypen. 25

Umbenennen von Linientypen. 26

Löschen von Linientypen. 26

Linientyp-Handles. 26

Linientypbeschreibung. 27

Linientyp-Skalierung. 27

Globaler Linientypfaktor. 27

Skalierfaktor abfragen. 27

Skalierfaktor setzen: Objetkbezogen. 27

Objektbezogenen Skalierfaktor setzen. 27

Fehlerbehandlung.. 28

Laufzeitfehler. 28

Fehler 6: Überlauf 28

Fehler 11: Division durch Null 28

Fehler 13: Tyen unverträglich. 29

Fehlerbehandlungsroutine. 29

Syntaxfehler. 29

Fehler 429: Objekterstellung nicht möglich. 30

Benutzerdialog mit dem Utility-Objekt.. 30

Eingabemethoden und Dialoge. 30

Formular aus- bzw. einblenden. 31

Eingabeaufforderung. 32

Prompt-Methode. 32

InitializeUserInput 32

Get-Methoden. 33

GetReal 33

GetAngle. 33

GetOrientation. 34

Umwandeln in Dezimalgrad. 34

Getinteger. 35

GetDistance. 35

GetCorner. 36

GetInput 38

GetString. 39

GetEntity. 39

GetSubEntity. 40

Zeichnungsobjekte. 41

Zeichenbefehle. 41

Linie. 41

Kreis. 42

Übung: Konzentrische Kreise. 42

Bogen. 43

Ellipse. 45

Ellipse mit variabler Koordinateneingabe. 45

Ellipse mit festen Koordinaten. 45

Multilinie. 46

Polylinie. 46

Konstruktionslinie. 47

Strahl 47