Korzystamy z cookies, więcej informacji »
Dodano: 16.05.2010 16:12 | brak komentarzy

Lekcja 13 - Warstwy

 

 

Warstwy AutoCAD-a w VBA

Rysowanie zawsze odbywa się na warstwie, która jest warstwą standardową lub warstwą utworzoną i nazwaną przez użytkownika. Z każdą warstwą jest skojarzony kolor i rodzaj linii.

Przykładowa procedura tworząca w AutoCAD-zie nową warstwę o nazwie Wymiary i kolorze niebieskim

Pisanie procedury tworzącej nową warstwę w AutoCAD-zie rozpoczynamy od zdefiniowania jej nazwy

Sub nowa_warstwa1()

Deklarujemy zmienną layerObj jako nowy obiekt AutoCAD-a

Dim layerObj As AcadLayer

Tworzymy nową warstwę w AutoCAD-zie i wykorzystujemy instrukcję Set do skojarzenia odwołania do obiektu ze zmienną.

Set layerObj = ThisDrawing.Layers.Add("Wymiary")

Zmieniamy kolor warstwy na kolor czerwony (przypisujemy warstwie Wymiary kolor czerwony)
layerObj.Color = acRed End Sub ' koniec procedury


Rys. 1 Lista rozwijana warstwy z widoczną nową warstwą o nazwie Wymiary i kolorze niebieskim

Umieszczanie obiektów na wybranej warstwie

W drugim przykładzie nauczymy się, jak przypisać nowo utworzony obiekt do danej warstwy. W tym celu utworzymy nową warstwę o nazwie "Opisy" i przypiszemy jej kolor czerwony, a następnie przypiszemy do niej wcześniej utworzony okrąg.

Definiujemy nazwę nowej procedury Sub nowa_warstwa2()

Rysujemy okrąg o środku leżącym w punkcie (20,20,0).

Deklarujemy zmienną circleObj jako nowy obiekt AutoCAD-a

Dim circleObj As AcadCircle

Deklarujemy zmienną center jako zmienną typu double, zostanie ona wykorzystana do przechowywania wartości współrzędnych punktu środkowego okręgu.

Dim center(0 To 2) As Double

Deklarujemy zmienną radius jako double, zostanie ona wykorzystana do przechowywania wartości promienia okręgu.
Dim radius As Double 'Przypisujemy do zmienej center wartości 'współrzędnych punktu środkowego center(0) = 2: center(1) = 2: center(2) = 0 Przypisujemy do zmiennej promień wartość 1 radius = 1

Tworzymy okrąg o środku w punkcie center i promieniu radius

Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)

Przypisujemy do okręgu kolor ByLayer. W ten sposób okrąg automatycznie przejmie kolor warstwy, na której zostanie umieszczony.

circleObj.Color = acByLayer

Deklarujemy zmienną layerObj jako nowy obiekt AutoCAD-a.

Dim layerObj As AcadLayer

Tworzymy nową warstwę o nazwie opisy.

Set layerObj = ThisDrawing.Layers.Add("opisy")

przypisujemy tej warstwie kolor czerwony

layerObj.Color = acRed


Rys. 2 Lista rozwijana warstwy z widoczną nową warstwą o nazwie Opisy i kolorze czerwonym

Przypisujemy okrąg do warstwy Opisy

circleObj.Layer = "opisy"

Przerysowujemy ekran

circleObj.Update

End Sub kończymy procedurę


Rys. 3 Okrąg umieszczony na warstwie Opisy

Przykładowy program wyświetlający nazwy wszystkich warstw występujących w rysunku
Sub LayerNames() 'Zdefiniowanie nazwy nowej proceduryDeklaracja 'zmiennej obLayer jako warstwy AutoCAD-a Dim objLayer As AcadLayer 'Deklaracja zmiennej objLayers jako zbioru warstw. Dim objLayers As AcadLayers 'Deklaracja zmiennej strLayers jako zmiennej typu tekst. Dim strLayers As String 'Wykorzystanie instrukcji Set do skojarzenia ' odwołania obiektu ze zmianą. Set objLayers = ThisDrawing.Layers 'Dla każdej warstwy w zbiorze warstw For Each objLayer In objLayers 'Przypisz zmiennej strLayers nazwę warstw, 'po czym dodaj znak powrotu karetki strLayers = strLayers & objLayer.Name & vbCr 'Dalej Next 'Wyświetl nazwy wszystkich warstw dostępnych 'na rysunku MsgBox strLayers, vbInformation, "Warstwy w rysunku:" End Sub 'Koniec procedury.


Rys. 4 Okno informacyjne AutoCAD-a z listą dostępnych warstw na rysunku

Ustawianie bieżącej warstwy

Rysujemy zawsze na warstwie bieżącej. Jeżeli ustawimy daną warstwę jako bieżącą, możemy rysować na tej warstwie nowe obiekty. Jeżeli uczynimy warstwą bieżącą jakąkolwiek inną warstwę, to wszystkie nowo tworzone obiekty umieszczone zostaną na tej warstwie, a także kolor oraz typ linii obiektów będzie taki, jaki ma ta warstwa.
Sub warstwy4 () 'definiujemy nową nazwę procedury Dim newlayer As AcadLayer 'deklarujemy zmienną newlayer jako 'nowy obiekt AutoCAD-a Set newlayer = ThisDrawing.Layers.Add ("Wymiary") 'Wykorzystujemy instrukcję Set ThisDrawing.ActiveLayer = newlayer 'ustawiamy warstwę Wymiary jako aktywną warstwę End Sub 'koniec procedury.

Zamrażanie warstw

Przykładowa procedura zamrażająca warstwę o nazwie Opisy, która została stworzona w przykładzie drugim.
Sub zamrazanie_warstwy() 'definiujemy nową nazwę procedury Dim objLayer As AcadLayer 'deklarujemy zmienną newlayer jako 'nowy obiekt AutoCAD-a Dim strNazwa As String 'deklarujemy zmienną strNazwa jako 'zmienną typu string. Zmienną tę wykorzystamy 'do przechowywania nazwy warstwy strNazwa = "Opisy" 'przypisujemy do zmiennej strNazwa nazwę warstwy Set objLayer = ThisDrawing.Layers(strNazwa) 'korzystamy z instrukcji Set do skojarzenia 'odwołania do obiektu ze zmienną objLayer.Freeze = True 'zamrażamy warstwę End Sub


Rys. 5 Widok paska rozwijalnego warstwy z zamrożoną warstwą Opisy

Zamroziliśmy warstwę Opisy. Została ona utworzona we wcześniejszym przykładzie. Jeżeli nie jesteśmy pewni, czy dana warstwa została utworzona, należy dokonać sprawdzenia, czy warstwa o danej nazwie występuje w naszym rysunku. Możemy wykorzystać w tym celu następującą składnię:

If objLayer is Nothing Then

Jeżeli zamiast podawać nazwę warstwy do zamrożenia chcemy np. zamrozić wszystkie warstwy w rysunku, możemy w tym celu wykorzystać pętlę For Each.
Sub zamrazanie_warstwy2() 'definiujemy nową nazwę procedury Dim objLayer As AcadLayer 'deklarujemy zmienną newlayer 'jako nowy obiekt AutoCAD-a On Error Resume Next 'omijamy bieżącą warstwę For Each objLayer In This.Drawing.Layers 'wchodzimy w pętlę jak długo objLayer.Freeze = True 'zamrażamy warstwę Next objLayer 'przechodzimy do następnej warstwy End Sub 'koniec procedury

Posługując się metodą GetEntity, która była omawiana na drugiej lekcji, można także poprosić użytkownika o wskazanie obiektu na ekranie AutoCAD-a i zamrozić warstwę, na której ten obiekt się znajduje.
Sub zamrażanie_wskazanej() 'definiujemy nazwę nowej procedury Dim WskazanyObiekt As AcadObject 'deklarujemy zmienną WskazanyObiekt jako obiekt 'AutoCAD-a Dim Warstwa_do_zamrożenia As AcadLayer 'deklarujemy zmienną Warstwa_do_zamrożenia 'jako warstwa AutoCAD-a Dim WskazanyPunkt As Variant 'deklarujemy zmienną WskazanyPunkt jako Variant On Error Resume Next 'pomijamy przypadek, gdy zostanie wskazana warstwa bieżąca With ThisDrawing.Utility 'Pobranie danych od użytkownika GetEntity WskazanyObiekt, WskazanyPunkt, vbCr & "Wskaż obiekt leżący na warstwie do zamrożenia " End With If WskazanyObiekt Is Nothing Then 'jeśli zmienna wskazany obiekt ma wartość 'pustą ( gdy warstwa nie została wskazana) MsgBox "Nie wybrano obiektu" ' wyświetlenie komunikatu Exit Sub 'i zakończenie procedury End If 'w przeciwnym razie 'Korzystamy z instrukcji Set do 'skojarzenia odwołania do obiektu ze zmienną Set Warstwa_do_zamrożenia = ThisDrawing.Layers(WskazanyObiekt.Layer) 'Zamrażamy warstwę na której leży wskazany obiekt Warstwa_do_zamrożenia.Freeze = True End Sub 'koniec procedury

Dodaj komentarz
Żeby móc dodawać komentarze musisz być zalogowany.
Komentarze
Brak komentarzy.
Newsletter
Prosto na email będziesz otrzymywać między innymi
  • oferty pracy
  • zniżki na książki
  • najnowsze publikacje
AutoCAD cz. I

AutoCAD - kurs dla początkujących

 

Pierwszy z kursów przeznaczony jest dla osób rozpoczynających pracę w środowisku AutoCAD.
Omówiona została filozofia pracy z programem AutoCAD, wygląd głównego okna aplikacji oraz dopasowanie programu do własnych potrzeb.

Kolejne podrozdziały poświęcone są zagadnieniom rysowania i modyfikowania obiektów (linie, multilinie, okrąg, prostokąt wielobok, splajn). Zostały również omówione zasady pracy z warstwami, blokami oraz wymiarowanie. Ostatnie rozdziały kursu podstawowego omawiają zasady drukowania.