Тема: LISP. Поворот рисунка во вьюпорте
Программа наподобие alignspace, но не изменяет масштаб, что
важно для меня. Первая разворачивает рисунок на восток(направо). Вторая на север(наверх). Нужно зайти во въюпорт и запустить прогу. Выбрать две точки. Разворот идёт вокруг первой точки.
Вторая разворачивается или на север или на восток. Если прогу запустили до того как войти во вьюпорт то она может смасштабировать по предыдущему вьюпорту.
;;;;;;;;povorot na vostok (napravo) (defun c:vv( / Lay pLay spis_Lay nameset nameVP msht msht_str ptp p1p p1 p2 myline p1_p p1_New) (setq snp (getvar "Osmode")) (setvar "Osmode" 1536) (command "_.pspace") (setq Lay (getvar "CTAB")) (setq spLay (cons 410 Lay)) (setq spis_Lay (list '( 0 . "VIEWPORT") spLay '(68 . 2))) (setq nameset (ssget "X" spis_Lay)) (setq nameVP (ssname nameset 0)) (setq msht (acet-ms-to-ps 1 nameVP)) (setq msht_str (strcat (rtos msht) "XP")) (command "_.mspace") (setq p1 (reverse(cdr(reverse(getpoint "pick"))))) (setq p2 (reverse(cdr(reverse(getpoint "second pick"))))) (setq ptp (trans p1 1 2)) (setq p1p (trans ptp 2 3)) ;pervaya tochka v paperspace (command "LINE" p1 p2 "") (setq myline (entlast)) (command "ucs" "_ob" myline) (entdel myline) (command "plan" "_c") (command "zoom" "_s" msht_str) (setq p1_p (trans p1p 3 2)) (setq p1_New (trans p1_p 2 1)) (command "pan" '(0 0 0) p1_New) (command "_.pspace") (setvar "Osmode" snp) ) ;;;povorachivaet na sever(naverh) (defun c:nn( / Lay pLay spis_Lay nameset nameVP msht p3 msht_str ptp p1p p1 p2 myline p1_p p1_New dist ugol ugol_new deltaX deltaY new_X new_Y) (setq snp (getvar "Osmode")) (setvar "Osmode" 1536) (command "_.pspace") (setq Lay (getvar "CTAB")) (setq spLay (cons 410 Lay)) (setq spis_Lay (list '( 0 . "VIEWPORT") spLay '(68 . 2))) (setq nameset (ssget "X" spis_Lay)) (setq nameVP (ssname nameset 0)) (setq msht (acet-ms-to-ps 1 nameVP)) (setq msht_str (strcat (rtos msht) "XP")) (command "_.mspace") (setq p1 (reverse(cdr(reverse(getpoint "pick"))))) (setq p2 (reverse(cdr(reverse(getpoint "second pick"))))) (setq dist (distance p1 p2)) (setq ugol (angle p1 p2)) (setq ugol_new (- ugol (/ pi 2.0))) (setq deltaX (* (cos ugol_new) dist)) (setq deltaY (* (sin ugol_new) dist)) (setq new_X (+ (car p1) deltaX)) (setq new_Y (+ (cadr p1) deltaY)) (setq p3 (list new_X new_Y)) (setq ptp (trans p1 1 2)) (setq p1p (trans ptp 2 3)) ;pervaya tochka v paperspace (command "LINE" p1 p3 "") (setq myline (entlast)) (command "ucs" "_ob" myline) (entdel myline) (command "plan" "_c") (command "zoom" "_s" msht_str) (setq p1_p (trans p1p 3 2)) (setq p1_New (trans p1_p 2 1)) (command "pan" '(0 0 0) p1_New) (command "_.pspace") (setvar "Osmode" snp) )
Пожалуйста критика. Только не смертельная.