;;; 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  )
	)
	