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

Lekcja 17 - Tworzenie własnych funkcji

 

 

Tworzenie własnych funkcji

Prawdopodobnie nie mieli Państwo problemów ze zrozumieniem lekcji 5., w której zostały wytłumaczone sposoby tworzenia prostych obiektów rysunkowych tj. okręgu, elipsy, łuku. Niemniej jednak tworzenie od podstaw kilkunastu okręgów o różnych punktach wstawienia i średnicy jest bardzo czasochłonne, a ponadto plik projektu osiąga monstrualne rozmiary.

Aby temu zaradzić, programiści piszą funkcje automatyzujące najczęściej spotykane zadania projektowe. VBA nie jest tu wyjątkiem. Myślę, że ludzie piszący w AutoLispie doskonale wiedzą, o czym mówię.

Z Visual Basic-em sprawa jest o tyle odmienna, że w VBA w AutoCAD-zie generalnie wykorzystujemy metody oraz cechy, a nie jak to jest np. w AutoLispie funkcje i polecenia. Ale zaręczam, że po przerobieniu tej lekcji nie będą Państwo mieli kłopotów ze stworzeniem swojej własnej funkcji.

Weźmy na początek zagadnienie rysowania okręgu. W lekcji 5. jeden z przykładów ilustruje tworzenie okręgu w oparciu o dane pobrane od użytkownika (wskaż punkt środkowy, wskaż środek okręgu). Cechą tego rozwiązania jest pełna "interaktywność" użytkownika z AutoCAD-em. Drugi przykład rysuje okrąg w oparciu o znane dane (środek, promień). To rozwiązanie jest wykorzystywane, gdy te dwie wielkości pochodzą z wcześniejszych obliczeń w ramach programu lub są przekazywane jako parametry przez inną funkcję.

Na początek wyodrębnijmy z naszej procedury część "główną" .Będzie ona miała za zadanie pobranie informacji od użytkownika i przekazanie jej do funkcji.

Część pierwsza : Procedura Główna
Public Sub RysujOkrag() Dim PromienOkregu As Double Dim SrodekOkregu As Variant SrodekOkregu = ThisDrawing.Utility.GetPoint (, "Wskaż środek okręgu:") CircleRadius = ThisDrawing.Utility.GetReal ("Podaj promień:") DrawACircle CDbl(CentrePoint(0)), CDbl(CentrePoint(1)),_ CDbl(CentrePoint(2)), CircleRadius End Sub

Stworzyliśmy procedurę o nazwie RysujOkrag.

Public Sub RysujOkrag()

Zmienne lokalne w tej procedurze : PromienOkregu, SrodekOkregu

Składnia Dim służy do deklaracji zmiennych (ustala typ zmiennych). W VBA mamy do czynienia z wieloma różnymi typami danych.

Dla zmiennej lokalnej PromienOkregu typ zmiennej deklarujemy jako double tzw. "podwójnej precyzji".

Dim PromienOkregu As Double

Dla zmiennej lokalnej SrodekOkregu typ zmiennej deklarujemy jako Variant. Ten typ pozwala zmiennej przyjmować różne typy danych wejściowych. Jest to ważne, ponieważ dzięki temu nie musimy obawiać się wystąpienia błędu z uwagi na różne jednostki używane w AutoCAD-zie np. imperial, metric, itd.

Dim SrodekOkregu As Variant

Do pobrania punktu SrodekOkregu wykorzystamy metode GetPoint

SrodekOkregu = ThisDrawing.Utility.GetPoint(, "Wskaż środek okręgu:")

Mamy środek okręgu wskazany przez użytkownika. Jego współrzędne przechowuje zmienna SrodekOkregu.

Następnie musimy uzyskać od użytkownika wielkość promienia naszego okręgu. Drobna uwaga - promień okręgu nie może być równy 0. Aby upewnić się, że użytkownik wpisze w linii poleceń wartość większą od zera, do pobrania wielkości promienia wykorzystamy metodę GetReal (metoda ta zwraca tylko liczby rzeczywiste).

CircleRadius = ThisDrawing.Utility.GetReal("Podaj promień:")

Następna linia "załatwia" nam sprawę rysowania okręgu.
RysOkrag CDbl(CentrePoint(0)), CDbl(CentrePoint(1)),_ CDbl(CentrePoint(2)), CircleRadius

Linia powyższa wywołuje funkcję RysOkrag z dwoma argumentami (SrodekOkregu, PromienOkregu).

CDbl (wbudowana funkcja VBA) konwertuje dane typu Variant na dane typu Double.

Zmienna SrodekOkregu ma współrzędne (SrodekOkregu(0), SrodekOkregu(1), SrodekOkregu(2))

Gdzie:

SrodekOkregu(0) = X

SrodekOkregu(1) = Y

SrodekOkregu(2) = Z

Przykładowe wywołanie procedury:

RysOkrag 4,5,6,7

4,5,6 -> środek okręgu

7 -> promień okręgu

Część druga : Funkcja rysująca

Nazwa funkcji: RysOkrąg

Zmienne lokalne: CenX, CenY, CenZ, Rad, CircleCentre

Funkcja RysOkrag wymaga podania dwóch parametrów, bez których nie może być uruchomiona. Parametrami tymi są: środek okręgu oraz promień okręgu.

Prametry te są przechowywane w zmiennych lokalnych CenX, CenY, CenZ, Rad, CircleCentre i są zadeklarowane jako obiekt AutoCAD-a (okrąg).
Public Function RysOkrag(CenX As Double , CenY As Double, CenZ As Double, _ Rad As Double) As AcadCircle

W następnej linii deklarujemy zmienną SrodekOkregu jako zmienną typu double. Zmienna ta posłuży nam do przechowywania informacji o współrzędnych środka okręgu.

Dim SrodekOkregu (0 To 2) As Double

Przypisujemy zmiennym X, Y i Z wartości wyodrębnione ze zmiennej SrodekOkręgu.

SrodekOkregu (0) = CenX: SrodekOkregu (1) = CenY: SrodekOkregu (2) = CenZ

Zmienne z procedury RysujOkrag przekazywane są do procedury RysOkrag do zmiennej SrodekOkręgu oraz promień okręgu do zmiennej Rad. Teraz możemy przejść już do dodania linii kodu do naszej funkcji, która spowoduje narysowanie okręgu w AutoCAD-zie.

Set RysOkrag = ThisDrawing.ModelSpace.AddCircle(SrodekOkregu, Rad)

Koniec funkcji RysOkrag

End Function

Funkcja RysOkrag rysuje nam okrąg w przestrzeni modelu w AutoCAD-zie. Następnie funkcja kończy swoje działanie, po czym powraca do procedury, z której została wywołana.

Poniżej zamieszczony został kompletny listing zawierający przykłady rysowania okręgów.
Public Function DrawACircle (CenX As Double, CenY As Double, CenZ As Double, Rad As Double) As AcadCircle Dim CircleCentre(0 To 2) As Double CircleCentre(0) = CenX: CircleCentre(1) = CenY: CircleCentre(2) = CenZ Set DrawACircle = ThisDrawing.ModelSpace. AddCircle(CircleCentre, Rad) End Function Public Sub DrawCircle() Dim CircleRadius As Double Dim CentrePoint As Variant CentrePoint = ThisDrawing.Utility.GetPoint (, "Select Centre Point:") CircleRadius = ThisDrawing.Utility.GetReal ("Enter Circle Radius:") DrawACircle CDbl(CentrePoint(0)), CDbl(CentrePoint(1)), CDbl (CentrePoint(2)), CircleRadius End Sub ' end the macro Sub okrag1() DrawACircle 50, 50, 7, 8 DrawACircle 80, 50, 7, 8 DrawACircle 110, 50, 7, 8 Dim pkt1(0 To 2) As Double Dim pkt2(0 To 2) As Double pkt1(0) = 10: pkt1(1) = 10: pkt1(2) = 0 pkt2(0) = 160: pkt2(1) = 90: pkt2(2) = 0 ThisDrawing.Application.ZoomWindow pkt1, pkt2 End Sub Sub okrag2() DrawCircle End Sub

Na poniższym rysunku widzimy efekt działania funkcji RysOkrąg.

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.