VBA dla AutoCAD.doc

(1188 KB) Pobierz


VBA dla AutoCAD-a -- kurs dla początkujących              1

Część I -- Pobieranie danych              2

Lekcja 1 -- Pobieranie danych od użytkownika -- część 1 (metody Getxxx) -- kontrola wprowadzonych danych -- Initialize User Input              2

Metoda Prompt              2

GetKeyword              3

GetString              4

GetInteger              5

GetReal              6

GetPoint              6

Lekcja 2 -- Pobieranie danych od użytkownika -- część 2 (metody Getxxx)              7

GetCorner              7

GetDistance              8

GetAngle              9

GetOrientation              10

GetEntity              10

GetSubEntity              12

Linia              13

Rysowanie polilinii              18

Rysowanie okręgu              23

Rysowanie elipsy              25

Rysowanie łuku              26

Kreskowanie              31

Tworzenie tekstu              39

Część III -- Płaskie elementy złożone              42

Obliczanie odległości pomiędzy dwoma punktami              42

Rysowanie trójkąta              45

Rysowanie prostokąta              49

Metoda PROMPT - rysowanie stopy (linia)              52

Modyfikowanie obiektów              57

Warstwy AutoCAD-a w VBA              63

Zbiory wskazań w VBA              67

Wymiarowanie w VBA w AutoCAD-zie              73

Instrukcje warunkowe              78

Tworzenie własnych funkcji              85

Widoki              88

Bloki              92

Menu w VBA w AutoCAD-zie              96

VBA dla AutoCAD-a -- kurs dla początkujących

Jedną z wielkich innowacji wprowadzonych wraz z wersją 14. AutoCAD-a była możliwość pisania makr i aplikacji z wykorzystaniem Visual Basic for Applications, zwanym potocznie VBA.

W AutoCAD-zie 2000 jest to już pełnoprawny członek rodziny języków programowania, w których możemy pisać aplikacje pod AutoCAD-a. Kurs ten, podobnie jak i kurs z programowania okien dialogowych jest napisany specjalnie dla Wydawnictwa Helion, nie jest więc opisem zmagań projektanta nad tworzeniem jakiejś aplikacji, ale spójnym zestawem lekcji, gdzie każda następna korzysta z wiedzy zdobytej na lekcji poprzedniej. Lekcje te nie są też zbiorem wiedzy encyklopedycznej. Każde zagadnienie jest wytłumaczone w oparciu o przykłady, które można wykorzystać podczas pisania własnych aplikacji. Kursy te są również spłatą "moralnego długu" zaciągniętego przeze mnie, gdy zakupiłem pierwsze dwie książki Wydawnictwa Helion dotyczące programowania w AutoLisp-ie. Teraz ja oddaję Wam do rąk narzędzie, dzięki któremu jedynym, co tak naprawdę będzie Was ograniczać podczas pracy w AutoCAD-zie, będzie Wasza wyobraźnia.

Na marginesie dodam, że zamieszczone w tekście przykłady programów są nienaturalnie "połamane". Musieliśmy tak zrobić ze względu na ograniczenia jakie narzuca publikacja długich linii tekstu na stronach internetowych a co za tym idzie na łamach serwisu. Wszystkie zamieszczone przykłady są dostępne w pełnej formie w postaci plików DVB.

Część I -- Pobieranie danych

Lekcja 1 -- Pobieranie danych od użytkownika -- część 1 (metody Getxxx) -- kontrola wprowadzonych danych -- Initialize User Input

Wszystkie metody pobierania danych przez AutoCAD-a wymagają od użytkownika interakcji z wykorzystaniem rysunku lub linii poleceń. Jeżeli chcemy korzystać z tych metod w trakcie pracy z programem w VBA, który zawiera formularze, musimy na czas korzystania z tych metod ukryć formularz VBA. Dzieje się tak dlatego, iż w Autocad-zie w wersji 2000 zaimplementowany jest Visual Basic w wersji 5.0, w którym formularze są tzw. modalne, co oznacza, że podczas gdy są one aktywne, nie ma możliwości korzystania w Autocad-zie z ekranu graficznego ani linii poleceń (modalne są również okna dialogowe DCL). Wszystkie funkcje do pobierania informacji noszą potoczną nazwę Getxxx.

Przykład ukrywania formularza VBA na czas pobrania od użytkownika informacji:

Private Sub cmdGetReal_click ()

Dim dblinput As Double

Me.Hide

  DblInput = ThisDrawing.Utility.GetReal("Podaj wartość typu Real: ")

Me.Show

End Sub

                                         

Należy pamiętać o tym, aby po ukryciu formularza VBA na czas pobierania od nas danych, ponownie go wyświetlić, ponieważ w przeciwnym przypadku może się okazać, że w tym formularzu znajduje się jeszcze kod programu, który nie zostanie wykonany, ponieważ program zakończył przedwcześnie swoje działanie.

Metoda Prompt

Metoda Prompt służy do wyświetlania informacji w linii poleceń AutoCAD-a. Metoda ta nie zwraca wartości.

Składnia tej funkcji wygląda następująco: object.Prompt Message

Powyższe przykłady ilustrują sposób wykorzystania metody Prompt:

Przykład nr 1:

Public Sub Przykład_Prompt()

              ' funkcja sub deklaruje nazwę, argumenty i kod, 

              ' który tworzy procedurę SUB

             

ThisDrawing.Utility.Prompt VbCr & "To jest przykładowa wiadomość"

              ' wyświetlenie informacji w linii poleceń AutoCAD-a,

              ' VbCr - znak powrotu karetki

             

End Sub  ' zakończenie procedury sub

 


Rys. 1 Działanie metody Prompt

Przykład nr 2:

 

Sub Przykład_Prompt()

ThisDrawing.Utility.Prompt vbCr & "Wciśnij dowolny  klawisz..."

End Sub

                                         

GetKeyword

Metoda GetKeyword służy do pobierania od użytkownika słowa kluczowego.

Składnia tej funkcji wygląda następująco: object.GetKeyword([Prompt])

AutoCAD zatrzymuje się w oczekiwaniu na wybór użytkownika. Parametr prompt określa łańcuch tekstowy, jaki zostaje wyświetlony w linii poleceń AutoCAD-a przed tym, jak zatrzymał się on w oczekiwaniu na wybór słowa kluczowego. Parametr Prompt jest parametrem opcjonalnym. Wprowadzony przez użytkownika łańcuch tekstowy nie może być dłuższy niż 511 znaków. Jeżeli nic nie zostanie wpisane i będzie wciśnięty klawisz Enter, jako wartość zwrotna zostanie zwrócony łańcuch pusty "". Można tego uniknąć poprzez wywołanie metody InitializeUserInput z parametrem 1, który na to nie pozwala.

InitializeUserInput 1, "[Opcja1] [Opcja2] [Opcja3]"

Listę akceptowanych słów kluczowych uzyskujemy poprzez wywołanie metody InitializeUserInput . Jeżeli użytkownik wpisze wyraz nie będący słowem kluczowym, AutoCAD wyświetla komunikat o błędzie i próbuje jeszcze raz, ponownie wyświetlając zachętę (jeśli takowa została określona).

Sub Przykład_GetKeyword1()

              'Deklaracja nazwy nowej procedury

              'Deklaracja zmiennej ListaSłówKluczowych jako zmienna

              'typu String zmienna ta będzie przechowywała listę słów

              'kluczowych 

             

Dim ListaSłówKluczowych As String

  

              'Przypisanie zmiennej ListaSłówKluczowych listy trzech

              'dostępnych opcji

             

ListaSłówKluczowych = "Szerokość Wysokość Głębokość"

 

              'ustalenie akceptowalnych słów kluczowych poprzez wywołanie

              'metody InitializeUserInput Bits[, Keyword] gdzie:

              'Bit = 1 = nie zezwala na wprowadzenie pustego łańcucha ""

             

ThisDrawing.Utility.InitializeUserInput 1, ListaSłówKluczowych

 

              'Zachęta do wybrania słowa kluczowego,

              'słowa kluczowe można wybrać również poprzez wybór

              'mnemonika.

              'W tym wypadku są  to litery S W G

                      

Dim ZwróconaWartość As String

ZwróconaWartość = ThisDrawing.Utility.GetKeyword _

("Wybierz opcję (Wysokość)(Szerokość)(Głębokość): ")

MsgBox "Wybrałęś " & ZwróconaWartość, , "Przykład GetKeyword 1"

End Sub

 

Wskazówka:

Aby program stał się bardziej przyjazny użytkownikowi, w linii poleceń można umieścić wartość domyślną, która zostanie wybrana, jeżeli użytkownik wciśnie Enter.

Sub Przykład_GetKeyword2()

 

              'nazwy nowej procedury

             

Dim ListaSłówKluczowych As String

 

              'ustalenie akceptowalnych słów kluczowych poprzez

              'wywołanie metody InitializeUserInput Bits[, Keyword]

              'gdzie:

              'Bit = 1 = nie zezwala na wprowadzenie pustego łańcucha ""

             

ThisDrawing.Utility.InitializeUserInput 0, "Linia Okrąg Łuk"

ZwróconaWartość = ThisDrawing.Utility.GetKeyword _

    (vbCrLf & "Enter an option (Linia/Okrąg/): ")

If keyWord = "" Then ZwróconaWartość = "Łuk"

MsgBox "Wybrałeś   " & ZwróconaWartość, , "Przykład GetKeyword 2"

End Sub

 

GetString

Metoda GetString służy do pobierania od użytkownika danych w postaci tekstu.

Składnia tej funkcji wygląda następująco: object.GetString (HasSpaces[, Prompt])

AutoCAD zatrzymuje się w oczekiwaniu na wprowadzenie przez użytkownika danych w postaci tekstu (string). Parametr HasSpaces określa, czy wprowadzany tekst może zawierać spacje. Jeżeli parametr HasSpaces ma wartość Prawda, łańcuch tekstowy może zawierać spacje i aby zakończyć wprowadzanie tekstu, musimy wcisnąć klawisz Enter. Jeżeli parametr HasSpaces ma wartość False, to wprowadzanie tekstu kończy wciśnięcie zarówno klawisza Enter, jak i klawisza Spacja. Jeżeli użytkownik wpisze więcej niż 132 znaki, wprowadzanie tekstu będzie kontynuowane aż do wciśnięcia Entera lub Spacji (jeśli parametr HasSpaces ma wartość Prawda), ale jako wynik zwracane są tylko 132 znaki. Parametr Prompt jest parametrem opcjonalnym i służy do wyświetlenia zachęty do wprowadzenia danych.

Przykład obrazujący różne sposoby pobierania od użytkownika wartości tekstowych.

Sub Przykład_GetString()

             

              'Deklaracja nazwy procedury

             

Dim returnString As String 

             

              'returnString służącej do 

              'przechowywania łańcucha znaków

             

returnString = ThisDrawing.Utility.GetString _

(False, "Wpisz tekst (spacja lub 

   kończy wprowadzanie danych): ")

             

              'przypisanie zmiennej returnString wartości

              ' będącej wynikiem działania metody GetString

             

MsgBox "Wpisano tekst:'" & returnString & "'", ,

   "Przykład metody GetString "

             

              'wykorzystanie okna informacyjnego do

              'wyświetlenia pobranego tekstu. Tekst

              'zachęty i wprowadzony tekst może zawierać spacje

             

returnString = ThisDrawing.Utility.GetString _

(True, "Wisz tekst ( kończy wprowadzanie danych):")

MsgBox "Wpisano tekst'" & returnString & "'", ,

   " Przykład metody GetString "

             

              'Tekst zachęty i wprowadzony tekst może

              'zawierać spacje ale nie może zawierać

              'pustego łańcucha znaków

             

Dim NieZero As Integer

             

              'Deklaracja zmiennej nie zero jako Integer

             

NieZero = 1

             

              'przypisanie zmiennej NieZero wartości 1

             

ThisDrawing.Utility.InitializeUserInput NieZero

             

              'użycie metody InitializeUserInput do określenia,

              'że łańcuch pusty nie zostanie zaakceptowany ponieważ

              'ThisDrawing.Utility.InitializeUserInput = NieZero = 1

             

returnString = ThisDrawing.Utility.GetString _

(True, " Wpisz tekst ( kończy

   wprowadzanie danych): ")

             

              'przypisanie zmiennej returnString wartości

              'będącej wynikiem działania metody  GetString

             

MsgBox "The string entered was '" & returnString &

   "'", , "GetString Example"

             

              'wykorzystanie okna informacyjnego do wyświetlenia

              'pobranego tekstu.

              'Tekst zachęty

             

End Sub

              'zakończenie procedury  Przykład_GetString

 

GetInteger

Metoda GetInteger służy do pobierania od użytkownika liczby całkowitej z zakresu -32,768 to +32,767.

Składnia tej funkcji wygląda następująco: object.GetInteger([Prompt])

AutoCAD zatrzymuje się w oczekiwaniu na podanie przez użytkownika liczby całkowitej. Parametr prompt jest parametrem opcjonalnym i określa tekst zachęty wyświetlanej w linii poleceń AutoCAD-a.

Jeśli zamiast liczby całkowitej zostanie zwrócone słowo kluczowe, AutoCAD wygeneruje informacje o błędzie.

Przykład

Sub Przykład_GetInteger1()

             

              'W tym przykładzie wyświetlona zostanie liczba

              'całkowita pobrana od użytkownika

              'Deklaracja zmiennej returnInt jako zmienna typu

              'integer, będzie ona wykorzystywana do

              'przechowywania wartości liczby całkowitej pobranej

              'od użytkownika

             

Dim returnInt As Integer

 

              'Zwrócenie wartości pobranej od użytkownika.

              'Prompt jest parametrem opcjonalnym.

              'Wyświetla zachętę w linii poleceń AutoCAD-a.

              'Składnia: object.GetInteger([Prompt])

             

returnInt = ThisDrawing.Utility.GetInteger

   ("Podaj liczbę całkowitą: ")

MsgBox "Podana liczbę całkowita to: " & returnInt

   & vbCrLf & _ "(Podaj następną liczbę bez zachęty.)", ,

      "Przykład GetInteger"

             

              'Zwrócenie wartości pobranej od użytkownika.

             

returnInt = ThisDrawing.Utility.GetInteger()

...

Zgłoś jeśli naruszono regulamin