Ten LISP pozwala łatwo przenieść początek układu współrzędnych do nowego miejsca na rysunku.

 

Uklad współrzędnych

 

Polecenie do uruchomienia skryptu LISP: XUCS

 

Kod źródłowy z opisem

 

;;; Układy współrzędnych
;;; zwcad.pl
;;; Polecenie do uruchomienia skryptu LISP: XUCS
;;; Opis: https://www.zwcad.pl/materialy-edukacyjne/kurs-lisp/przyklady-lisp/119-uklady-wspolrzednych.html
(vl-load-com
(setq *ZWCAD* (vlax-get-acad-object))
(setq *Rysunek* (vla-get-activedocument *ZWCAD*))
(setq *Model* (vla-get-Modelspace *Rysunek*))
(defun UCS3Pts (P0 Px Py / )
;----------------------------------------------------------
;Funkcja ustawia aktualny układ współrzędnych na podstawie trzech punktów
;Argumenty:
; P0 - środek nowego układu współrzędnych
; Px - Kierunek osi X nowego układu
; Py - Kierunek osi Y nowego układu
;Wynik :brak
;----------------------------------------------------------
; najprostrzy sposób na ustawienie układu współrzędnych do trzech punktów to użycie wbudowanego
; w ZWCAD polecenia _UCS.
(command "_UCS" "_n" "3" P0 Px Py)
; jesli natomiast chcemy utworzyć nazwany układ współrzędnych konieczne jest dodanie nowej pozycji
; do kolekcji układów współrzędnych
(setq UCSs (vlax-get-property *Rysunek* 'UserCoordinateSystems))
(setq NewUCS(vlax-invoke-method UCSs 'Add (vlax-3d-point P0) (vlax-3d-point Px) (vlax-3d-point Py) "test" ) )
(vlax-put-property *Rysunek* 'ActiveUCS NewUCS)
; takie rozwiązanie posiada pewne ograniczenia:
; 1. Aby utworzyć układ współrzędnych musimy nadać mu nazwę. Jeśli układ o takiej nazwie już istnieje
; (został utworzony wcześniej ) jego ustawienia zostaną nadpisane.
; 2. Kąt rozpięty na wskazanych punktach musi być kątem prostym, W innym wypadku utworzenie układu
; współrzędnych nie powiedzie się.
nil
)
(defun PobierzUCS ( / )
;----------------------------------------------------------
;funkcja pobiera aktualny układ współrzędnych
;Argumenty: brak
;Wynik: lista: - Środek układu współrzędnych
; - Kierunek osi X
; - Kierunek osi Y
;----------------------------------------------------------
; Najłatwiejszym rozwiązaniem wydaje się być pobranie aktualnego układu współrzędnych
;! (setq ActiveUCS (vlax-get-property *Rysunek* 'ActiveUCS ))
; rozwiązanie takie jest dobre, ale w sytuacji, gdy aktywny jest nazwany ujkład współrzędnych, jeśli nie
; został żaden zdefiniowany funkcja zwróci błąd
; możemy jednak posłużyć się innym rozwiązaniem, czyli pobrać ze zmiennych systemowych współrzędne środka
; układu współrzędnych i kierunki osi X oraz Y
(list (getvar "UCSOrg") (getvar "UCSXDir") (getvar "UCSYDir"))
)
(defun C:XUCS ( / )
;----------------------------------------------------------
;Funkcja prosi Użytkownika o wskazanie trzech punktów. Następnie dopasowuje do nich układ współrzędnych.
; Pierwszy - Środek układu współrzędnych
; Drugi - Kierunek osi X
; Trzeci - Kierunek osi Y
;Argumenty: brak
;Wynik: brak
;----------------------------------------------------------
; jeśli żaden nazwany układ współrzędnych nie został utworzony przez użytkownika, kolekcja jest pusta.
(setq UCSs (vlax-get-property *Rysunek* 'UserCoordinateSystems))
(setq IloscUCS (vla-get-count UCSs ))
;Mimo to, jakiś układ jest aktualny i NIE ZAWSZE jest to układ globalny.
; Jeśli chcemy utoworzyć elementy na innym układzie współrzędnych powinniśmy na zakończenie powrócić do
; bierzącego układu, konieczne jest więc zapisanie stanu aktualnego układu współrzędnych, zmiana aktualnego
; na rządany a następnie przywrócenie poprzedniego układu.
(setq LastUCS (PobierzUCS))
(setq P0 (getpoint "Początek nowego układu współrzędnych"))
(setq Px (getpoint P0 "Kierunek osi X" ))
(setq Py (getpoint P0 "Kierunek osi Y"))
; funkcja getpoint zwraca wsółrzędne punku wskazanego przez użytkownika. Współrzędne te określone są w
; jednostkach aktualnego układu współrzędnych.
;Do tworzenia obiektów rysunkowych potrzebne są współrzędne w jednosktach układu globalnego.
;Przeliczenie pomiędzy układami możemy dokonać posługując się funkcją trans
(setq P0Glob (trans P0 1 0))
(setq PxGlob (trans Px 1 0))
(setq PyGlob (trans Py 1 0))
(UCS3Pts P0Glob PxGlob PyGlob)
(print "" )
)

 

Wykonanie w ZWCAD 2023

uklad wspolrzednych

 

Wykonanie w ZWCAD 2015

LISP XUCS 2015