;;; Oznaczanie współrzędnej Z wskazanego punktu
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: OznaczZ
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/327-oznaczanie-wspolrzednej-z-wskazanego-punktu.html

(defun XGetpoint (tresc P0 domyslny / Px Wynik )
;----------------------------------------------------------
;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 Px(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 Px(vl-catch-all-apply 'getpoint (list tresc )))
)
(if (vl-catch-all-error-p Px) ; sprawdzenie czy zwrócony został obiekt błędu
(progn ; wystąpił błąd
(prompt (vl-catch-all-error-message Px)) ;wyświetla w pasku poleceń komumikat błędu
(setq Wynik nil )
)
(progn ; Użytkownik wskazał punkt lub [ENTER]/[SPACE]
(if (null Px)
(setq Wynik domyslny )
(setq Wynik Px)
)
)
)
Wynik
)(defun MText:GetTextSize ( / textsize styletxtsize)
(setq textsize(getvar "TextSize")) ; odczyt aktualnej wielkości tekstu(setq styletxtsize
(cdr(assoc 40 ; pobranie definicji stylu tekstu
(tblsearch "style" ; wyszukanie stylu tekstu o podanej nazwie
(getvar "textstyle")))) ; pobranie aktualnego stylu tekstu
(if (> styletxtsize 0.0) (setq textsize styletxtsize)) ; jeśli w stylu jest ustawiona wielkość , przypisują ją do wartości zwracanej przez funkcję
textsize ; funkcja zwraca wielkość tekstu zdefiniowaną powyżej
)(defun C:OznaczZ ( / )
(setq px (XGetpoint "Wskaż punkt" nil nil ))
(if px (progn
(setq locPx (trans px 1 0 )) 
; funkcja przelicza współrzędne punktu pomiędzy układami współrzędnych
; pierwszy parametr to oznacza układ z którego przeliczamy 1 = układ aktualny
; drugi parametr to układ doecelowy 0 = układ globalny
(setq LastDimZin (getvar "DIMZIN")) 
; zapamiętuje wartość zmiennej systemowej "dimzin", aby przywrócić ją na końcu działania funkcji
(setvar "dimzin" 1) 
; ustawia zminną systemową aby nie ucinało 0 w formacie tekstu jeśli w jednostkach ustawimy np 0.000 a zmienna ta będzie miała inną wartość niż 1, wyświetli się 0 a nie 0.000
(setq TxtEntity(entmake (list ; tworzenie tekstu
(cons 0 "MTEXT")
(cons 100 "AcDbEntity")
(cons 100 "AcDbMText")
(cons 10 locPx) ; określenie współrzędnych
(cons 40 (MText:GetTextSize) ) ; obliczenie wielkości tekstu ze stylu tekstu, lub jeśli tam ustawione 0, to ze zmiennej systemowej
(cons 1 ; określenie treści napisu, podajemy jedynie współrzędną z
(rtos ; zamiana wartości liczby rzeczywistej
(caddr locPx) ; trzeci element z listy, tutaj współrzędna Z
(getvar "LUNITS") ; format wyświetlanych liczb, określany w funkcji Units
(getvar "LUPREC") ; dokładność wyświetlania, określana w funkcji Units
))
(cons 7 (getvar "textstyle")) ; ustawienie aktualnego stylu tekstu
))
)
(setq PtEntity(entmake (list (cons 0 "POINT") (cons 10 locPx) ))) ; utworzenie punktu w określonych współrzędnych 
(setvar "dimzin" LastDimZin) 
; przywrócenie wartości zmiennej systemowej, żeby nie zmieniać nic na stałe w ustawieniach programu bez wiedzy Użytkownika
))
(princ) ; wyświetlenie pustego wiersza, żeby na koniec działania funkcji nic się nie wyświetlało w pasku poleceń
)