![]() |
![]() |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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!!! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Eine der wichtigsten Methoden zur Organisation von BricsCad-Zeichnungen ist die Verwendung von Layern (Zeichnungsebenen). Jeder Layer verfügt über Eigenschaften, die auf das mit ihm verbundene Zeichnungsobjekt übertragen werden können. Darum beschäftigt sich der vorliegende Teil unseres VBA-Kurses mit Möglichkeiten des Zugriffs auf Layer, deren Eigenschaften und Möglichkeiten zu deren Manipulation. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Das BricsCad-Objektmodell kennt die Layers-Collection als „Obermenge“ aller darin
enthaltenen einzelnen Layer. Um einen einzelnen Layer im Programm zu verwenden, kommt die Item-Methode zum Einsatz. Wie in Listing 1 dargestellt, kann als Parameter entweder der Name des Layers oder eine Integer-Zahl verwendet
werden. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Oftmals kommt es vor, dass man alle Ebenen der Zeichung bearbeiten möchte. Beispielsweise um bestimmte Eigenschaften zu setzen, oder nach ihnen zu suchen. Für derartige Iterationen kann wie bei allen anderen Collection-Objekten die For-Each-Schleife verwendet werden. Listing 2 zeigt dieses Verfahren an einem einfachen Programm, das die Namen aller in der Zeichnung enthaltenen Layer in eine Message-Box schreibt. Das selbe Ergebnis können Sie auch mit einer Zählschleife erreichen. Dabei wird die Count-Eigenschaft des Collection-Objektes genutzt. Listing 3 liefert das einfache Beispiel. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Auf die vorgenannte Weise erreichen Sie alle Zeichnungsebenen oder Teile davon. Wird gezielt nach genau einem Layer gesucht, können wahlweise diese beiden Methoden angewandt werden. Meistens wird dabei nach einem Layernamen gesucht. Bitte beachten Sie in diesem Fall, dass BricsCad bei der Namensgebung zwar keinen Unterschied zwischen Groß- und Kleinschreibung macht. Dafür aber der Zeichenkettenvergleich in VBA. Unter anderem aus diesem Grund empfiehlt sich die Verwendung eines anderen Verfahrens. Nämlich die Auswertung von Laufzeitfehlern, die beim Zugriff auf einen unbekannten Layernamen auftreten. In Listing 4 wird im Anschluß an die Variablendeklarationen der gesuchte Layername abgefragt und danach die „Resume Next“ Anweisung eingefügt. Sie veranlasst die weitere Programmabarbeitung, auch wenn ein Fehler auftritt. Wenn das der Fall ist, enthält die Variable Ebene den Wert „Nothing“. Genau das testet die abschließende If-Then-Eelse-Funktion. Für beide möglichen Fälle ist eine entsprechende Message vorgesehen. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sie haben bis hier hin gesehen, wie ein Layer angesprochen wird. Nun kommen wir zu den mittels VBA beeinflussbaren Eigenschaften. Eine Übersicht dazu finden Sie in Tabelle 1. Das in der letzten Spalte enthaltene Beispiel setzt die Deklaration „Dim Ebene As IntelliCAD.Layer“ voraus. Bitte beachten Sie bei der Color-Eigenschaft, dass die Farbe „byLayer“ nicht zugelassen ist. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Tabelle 1: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Eine Besonderheit stellt in diesem Zusammenhang die Festlegung des aktuellen Layers dar. Er ist eine Eigenschaft des Document-Objektes. Die beiden folgenden Seiten zeigen, wie er gesetzt bzw. abgefragt werden kann: Set Doku = IntelliCAD.ActiveDocument Übrigens kann ein gefrorener Layer nicht aktiv gesetzt werden. Sie sollten also in Ihrem Programm erst testen, ob die Eigenschaft Freeze wahr oder falsch ist und gegebenenfalls auf True setzen, oder dem Anwender eine entsprechende Message zukommen lassen. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Nachdem Sie nun auch noch wissen, wie die Eigenschaften der Layer manipuliert werden können, bleibt zu klären, wie man programmtechnisch einen neuen Layer erzeugt, bzw. einen vorhandenen löscht. Die Erzeugung erfolgt mittels der Add-Methode. Um abzusichern, dass kein neuer Layer mit einem schon vorhandenen Namen eingefügt wird empfiehlt es sich wieder, die bereits bekannte On Error Methode zu verwenden. Wie bei fast allen anderen BricsCad-Objekten erfolgt das Löschen von Layern unter Verwendung der Delete-Methode. Listing 5 zeigt zusammenhängend, wie ein Layer neu in die Zeichnungsstruktur eingefügt und anschließend wieder gelöscht werden kann. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Um das gerade erworbene Wissen praktisch an zu wenden, hier noch ein überschaubares Beispiel. Allerdings setzt es
auch Kenntnisse aus einem vorangegangenen Kursteil voraus. Listing 6 enthält eine Prozedur, mit der interaktiv gewählte Layer ausgeschaltet werden können. Das Programm beginnt wie immer mit dem Deklarationsteil.
Anschließend wird ein Selectionset angelegt und mittels SelectOnScreen im Modellbereich gefüllt. Im nächsten Schritt ermittelt die Routine den aktiven Layer, denn der darf nicht ausgeschaltet werden. In der folgenden
For-Next-Schleife wird aus jedem gewählten BricsCad-Element der Layername bestimmt, dann die jeweilige Ebene gesetzt und schließlich deren Eigenschaft auf LayerOn=False geschaltet. Allerdings nur, wenn es sich nicht um den
aktiven Layer handelt, dann gibt es nur eine Mitteilung auf dem Bildschirm. Zum Ende sollten Sie nicht vergessen den Auswahlsatz wieder zu löschen, sonst kommt es beim erneuten Aufruf des Programms zu einer Fehlermeldung
(SelectionSet ist bereits vorhanden).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Viel Spaß beim ausprobieren ;-). !!! Dieser Teil wird nicht mehr fortgesetzt, da VBA von BricsCad seit V8 kompatibel zu AutoCAD ist !!! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
IBB INGENIEURBÜRO BATTEFELD Bochum Nöckerstraße 37c |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Mit Fragen oder Hinweisen wenden Sie sich bitte an |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
IBB INGENIEURBÜRO BATTEFELD Leipzig Brahestraße 17 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||