Wyjątki to sytuacje gdzie zachowanie odbiega od przewidywanego przez programistę.

Sytuacje takie mogą mieć miejsce np:
 - gdy chcemy odczytać zawartość pliku, który jest w tym samym czasie używany, lub został usunięty,
 - gdy Użytkownik zostanie poproszony o wskazanie punku a on zamiast tego przerwie działanie programu wciskając klawisz [ESC]. Wówczas przerwane zostanie działanie całego programu, co czasem nie jest pożądane
 - gdy chcemy przeprowadzić operację dzielenia a Użykownik jako dzielną poda 0. lub gdy wyciągamy pierwiastek z podanej przez Użytkownika liczby, którą Użytkownik wpisze jako liczbę ujemną. Albo zamiast liczby podał tekst
 - gdy chcemy pobrać z kolekcji element o podanej nazwie, który nie istnieje

Oczywiście większość tych sytuacji możemy zweryfikować w inny sposób, np. porównująć ze przewidywanymi wartościami, może się jednak okazać, że części sytuacji nie przewidzimy, a funkcje, o których za chwilę, przechwycą KAŻDY wyjątek.

 

Wyjątki

 

Polecenie do uruchomienia skryptu LISP: Pisz

 

Kod źródłowy z opisem

 

;;; Wyjątki
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: Pisz
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/121-wyjatki-obsluga-sytuacji-nieprzewidywalnych.html

(vl-load-com)
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD*))
(setq *Model* (vla-get-Modelspace *Rysunek*))
(defun XGetdist (tresc domyslny / Wynik )
;----------------------------------------------------------
;funkcja prosi użytkownika o podanie odległości (może byc wpisanie wartości na klawiaturze
;lub wskazanie pary punktów
;Argumenty: komunikat, zachętę, który sie wyświetli w linii poleceń w chwili uruchomienia funkcji
;Wynik: wartość liczbowa jeśli Użytkownik wpisze wartość z klawiatury
; wartość liczbowa - odległość pomiędzy parą punktów jeśli użytkownik wskaże parę punktów
; wartość liczbowa domyślna jeśli Użytkownik na klawiaturze wciśnie [ENTER] [SPACJA]
; nil - jeśli Użytkownik na klawiaturze wciśnie [ESC]
;----------------------------------------------------------
(setq Odl(vl-catch-all-apply 'getdist (list tresc ))) ;wykonanie funkcji getdist proszącej
; o wskazanie odległości (z klawiatury lub przez podanie pary punktów) zwraca odległość lub obiekt błędu
(if (vl-catch-all-error-p Odl) ; sprawdzenie czy zwrócony został obiekt błędu
(progn ; wystąpił błąd
(prompt (vl-catch-all-error-message Odl)) ;wyświetla w pasku poleceń komumikat błędu
(setq Wynik nil )
)
(progn ; Użytkownik określił odległość poprawnie lub [ENTER]/[SPACE]
(if (null Odl)
(setq Wynik domyslny )
(setq Wynik Odl)
)
)
)
Wynik
)
(defun XGetString (tresc / Wynik )
;----------------------------------------------------------
;funkcja prosi użytkownika o podanie tekstu
;Argumenty: komunikat, zachętę, który sie wyświetli w linii poleceń w chwili uruchomienia funkcji
;Wynik: tekst kótry Użytkownik wpisze z klawiatury
; nil - jeśli Użytkownik na klawiaturze wciśnie [ESC]
;----------------------------------------------------------
(setq Odl(vl-catch-all-apply 'getstring (list tresc ))) ;wykonanie funkcji getstring proszącej
; o podanie treści tekstu zwraca wpisaną treść lub obiekt błędu
(if (vl-catch-all-error-p Odl) ; sprawdzenie czy zwrócony został obiekt błędu
(progn ; wystąpił błąd
(prompt (vl-catch-all-error-message Odl)) ;wyświetla w pasku poleceń komumikat błędu
(setq Wynik nil )
)
(progn ; Użytkownik wpisał tekst poprawnie
(if (null Odl)
(setq Wynik domyslny )
(setq Wynik Odl)
)
)
)
Wynik
)
(defun XGetpoint (tresc P0 domyslny / )
;----------------------------------------------------------
;Funkcja prosi Użytkownika o podanie punktu, jeśli Użytkownik wciśnie na klawiaturze spację lub enter,
;funkcja zwróci współrzędne punku domyślnego przekazane jako argument funkcji
;Argumenty: komunikat, zachętę, który sie wyświetli w linii poleceń w chwili uruchomienia funkcji
;Wynik: współrzędne punku - jeśli Użytkownik je poda
; współrzędne punku domyślnego - jeśli Użytkownik na klawiaturze wciśnie [ENTER] [SPACJA]
; nil - jeśli Użytkownik na klawiaturze wciśnie [ESC]
;----------------------------------------------------------
(if (not(null P0))
(setq Odl(vl-catch-all-apply 'getpoint (list P0 tresc ))) ;wykonanie funkcji getpoint proszącej o
; wskazanie punktu) zwraca współrzędne punktu lub obiekt błędu
(setq Odl(vl-catch-all-apply 'getpoint (list tresc )))
)
(if (vl-catch-all-error-p Odl) ; sprawdzenie czy zwrócony został obiekt błędu
(progn ; wystąpił błąd
(prompt (vl-catch-all-error-message Odl)) ;wyświetla w pasku poleceń komumikat błędu
(setq Wynik nil )
)
(progn ; Użytkownik wskazał punkt lub [ENTER]/[SPACE]
(if (null Odl)
(setq Wynik domyslny )
(setq Wynik Odl)
)
)
)
Wynik
)
(defun C:Pisz ( / TextSize TekstWys Px Tresc Text LastPx )
;----------------------------------------------------------
;funkcja prosi Użytkownika o podanie wysokości tekstu a następnie punktów wstawienia i treści tekstów
;Argumenty: brak
;Wynik: brak
;----------------------------------------------------------
(setq TextSize (getvar "TextSize"))
(setq TekstWys (XGetdist "\nPodaj wysokość tekstu" TextSize))
(setq Px (XGetpoint "\nWskaż punkt" nil (list 0 0 0) ))
(while (not(null Px))
(setq Tresc (XGetString "\nPodaj treść: \n"))
(setq Text (vlax-invoke-method *Model* 'AddText Tresc (vlax-3d-point Px) TekstWys))
(setq LastPx (list (car Px) (-(cadr Px) (* TekstWys 1.2)) (caddr Px) ))
(setq Px (XGetpoint "\nWskaż punkt" LastPx LastPx))
)
(print )
)

 

Wykonanie w ZWCAD 2023

wyjatki