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
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.
Bei diesem Objekt handelt es sich um die Einstellungen im Dialogfenster Werkzeuge/Optionen in AutoCAD. Hier sind die Supportpfade, Hintergrundfarben u.a. hinterlegt.
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 auflistenDie nachfolgende Prozedur listet die bestehenden Bemaßunsstile der aktuellen Zeichnung auf und gibt das Ergebnis in einem Meldungsfenster aus. |
|
Textstile auflisten
|
|
Blocks-AuflistungDie 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. |
|
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
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.
PlotkonfigurationListet alle Plotterkonfigurationen auf. |
|
LinientypenListet alle geladenen Linientypen auf. |
|
LayerListet alle Layer auf. |
|
LayoutsAuflistung der in der Zeichnung vorhanden Layouts. |
|
UCS-AuflistungDie BKS-Auflistung zeigt alle gespeicherten Koordinatensysteme an. |
|
AnsichtsfensterZeigt die in der Zeichnung vorhandenen Ansichtsfenster an. |
|
Übung 13: Blocknamen in ein Nachschlagefeld einfügenErstellen 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 FormularcodesDrü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. |
|
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 erweiternErweitern 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.
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. |
|
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.
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
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. |
|
Listet die in der Zeichnung vorhanden Hyperlinks (Verknüpfungen in das Internet oder lokal im Netzwerk) auf.
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.
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.
Die Supportpfade sind in den Voreinstellungen des Applicationobjekts gespeichert. Die Methode heißt Files.
Die Funktion sollten Sie nicht ausführen, oder nach der Ausführung die zusätzlichen Pfade wieer löschen.
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.
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.
Wenn der Layer namentlich „bekannt“ ist, kann er über die Item-Methode ausgwählt werden. Farbe 7 ist weiß bzw. scharz. |
|
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 LayerIm 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 schaltenDie 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 AusschaltenDie 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 EntsperrenDiese Routine sperrt alle Layer Wird der Schalter von True auf False geändert, werden alle Layer entsperrt. |
|
Frieren und TauenDer Layerstatus Freeze kann die Zustände True oder
False annehmen. Beim Zustand
Freeze = True ist der Layer gefroren. |
|
Umbenennen von Layern
|
|
Löschen von LayernAuch 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. |
|
LayerfarbeIm 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-EigenschaftJedes 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. |
|
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 LinientypenDas 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 existiertBei 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 LinientypenEin 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 LinientypenDie 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 LinientypenFolgende Linientypen können nicht gelöscht werden · aktiver Linientyp · referenzierte Linientypen (die in der Zeichnung verwendet werden) · XRef-abhängige Linientypen · Linientyp VonLayer, VonBlock, Continuous Das Löschen der übrigen Linientypen ist sehr einfach. Mit der Methode objLTyp.Delete. |
|
Linientyp-Handles
|
|
LinientypbeschreibungMit dieser Routine können Sie die Beschreibung des
Linientyps ändern. |
|
Linientyp-SkalierungDie 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 LinientypfaktorSetzen des Linientypfaktors. |
|
Skalierfaktor abfragenAnzeigen des aktuellen Wertes des Linientypfaktors. |
|
Skalierfaktor setzen: ObjetkbezogenSetzen des objektbezogenen Linientypfaktors: |
|
Objektbezogenen Skalierfaktor setzenAnzeigen des objektbezogenen Linientypfaktors. |
|
Fehlerbehandlung
· Welche Fehlerarten gibt es · Wie wird eine Fehlerbehandlungsroutine eingesetzt · Wie fragt man Fehlernummern ab Es gibt verschiedene Fehlerarten. · Laufzeitfehler · Syntaxfehler |
|
LaufzeitfehlerLaufzeitfehler 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: ÜberlaufFehler 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 NullDer Fehler wird verursacht, wenn durch eine Variable geteilt wird, die keinen Wert enthält. |
|
Fehler 13: Tyen unverträglichDer Fehler wird durch Verwendung eines falschen Datentyps verursacht, z.B. wenn Sie eine Zahl durch einen Text oder durch 0 teilen. |
|
FehlerbehandlungsroutineDie 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. |
|
SyntaxfehlerSyntaxfehler 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öglichZum 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· Wie werden Koordinaten vom Benutzer abgefragt · Welche Eingabemethoden gibt es? · Was ist der Prompt? · Welche Get-Methoden gibt es? · Wie baut man eine Fehlerbehandlungsroutine auf? · Wie werden Datentypen umgewandelt? |
|
Eingabemethoden und DialogeBisher 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. einblendenSie 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. |
|
EingabeaufforderungDie 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-MethodeMit der Promptmethode können Meldungen an der Befehlszeile angezeigt werden. UtilityObject.Prompt Meldung |
|
InitializeUserInputUm 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-MethodenGetRealWenn Zahlenwerte mit Dezimalstellen benötigt werden, verwenden Sie die Eingabemethode Getreal. |
|
Achten Sie darauf, dass AutoCAD den Punkt als
Dezimaltrennzeichen verwendet.
|
|
GetAngleDas folgende Beispiel fragt einen Winkel ab und gibt das Ergebnis als MsgBox zurück. Der Basispunkt wird später zum Zeichnen benötigt. |
|
GetOrientationGetOrientation 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. |
|
GetintegerMit dieser Funktion können Sie nur Ganzzahlen zwischen -32,768 und +32,767.eingeben. Aufbau der Funktion: |
|
GetDistanceFragt 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.
GetInputBenutzereingaben 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. |
|
GetEntityDiese 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.
GetSubEntityMit dieser Methode können Sie u.a. die ObjektId's von Blockbestandteilen auslesen (nested Entities). |
|
Inhalt dieses Kapitels:
· Welche Bereiche gibt es?
· Wie werden Zeichnungsobjekte erstellt?
· Zeichenbefehle.
· Erzeugen von 3D-Objekten.
Zeichnungsobjekte sind alle grafischen Objekte in AutoCAD. VBA kann bestimmte Zeichnungsroutinen erheblich vereinfachen. Das Erstellen der Objekte erfolgt im Regelfall im Modellbereich.
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.
Das folgende Beispiel zeichnet einen Kreis mit fest vorgegebenenKoordinaten im Modellbereich.
Die folgende Routine zeichnet 6 Kreise mit einem gemeinsamen Zentrum.
Im folgenden Beispiel wird ein Bogen im Modellbereich erzeugt. Die Bogenparameter sind in AutoCAD einzugeben.
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.
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.
Der Strahl hat einen definierten Startpunkt, aber keinen Endpunkt.
Papierbereich
und Modellbereich aus der Blocksauflistung ausschließen
Übung
13: Blocknamen in ein Nachschlagefeld einfügen
Übung
14: Programmcode für Filter erstellen und Formular erweitern
Layer
über den Namen ansprechen
Übung
15: Prüfen, ob ein bestimmter Layer vorhanden ist
Prüfen,
ob Linientyp existiert
Skalierfaktor
setzen: Objetkbezogen
Objektbezogenen
Skalierfaktor setzen
Fehler
11: Division durch Null
Fehler
429: Objekterstellung nicht möglich
Benutzerdialog
mit dem Utility-Objekt
Ellipse
mit variabler Koordinateneingabe.
Ellipse
mit festen Koordinaten