Program obracania o 90 stopni bloku prawym przycisk. myszy


Recommended Posts

Witam

Ostatnio stworzyłem program do obracania dowolnego bloku o 90 stopni.

po uruchomieniu w ZWCAD wybieramy blok, blok jest kopiowany, następnie po wciśnięciu prawego przycisku myszy jest obracany o 90 stopni i można wkleić

(razem z blokiem źródłowym po wciśnięciu esc obrót bloku źródłowego wraca do stanu pierwotnego)

wstępnie wszystko działa jak należy, lecz jest jedno ale :

jak wciskam prawy przycisk myszy, a wskaźnik pozostaje nieruchomo to obraz bloku jest niewidoczny. Dopiero minimalny ruch myszy pokazuje blok w miejscu wskaźnika myszy.

Jeżeli ktoś ma pomysł dlaczego tak się dzieje proszę o podpowiedź, ewentualnie jak to zmodyfikować by blok był zawsze widoczny.

poniżej kod programu lub w załączniku :

 

(defun c:xxx ()
 
(setq temperr *error*)
(setq *error* trap)
 
(setq ssetBlockSource(ssget "_:S:E" '((0 . "INSERT"))))
(setq punktsrod (vlax-safearray->list (vlax-variant-value (vla-get-InsertionPoint (vlax-ename->vla-object (ssname ssetBlockSource 0))))))
(setq blok(entget(ssname ssetBlockSource 0)))
(setq rotacja1(/ (* 180 (cdr(assoc 50 blok))) pi))
 
(setq currInsertionPoint(trans punktsrod 0 1 nil))
 
(while (= 1 1)
(setq info(getvar 'lastprompt))
 
(cond
((= info "Polecenie: ")
(progn
 
(command "" "_rotate" ssetBlockSource "" currInsertionPoint -90 "")
 
(command "" "_copy" ssetBlockSource "" "w" currInsertionPoint "@" "c")
 
)
)
((/= info "Polecenie: ")
(progn
 
(command "" "_copy" ssetBlockSource "" "w" currInsertionPoint "@" "c" pause "")
)
)
)
)
 
)
(defun trap (errmsg)
(setq *error* temperr)
(setq blok(entget(ssname ssetBlockSource 0)))
(setq rotacja2(/ (* 180 (cdr(assoc 50 blok))) pi))
 
(setq rotacja(rtos (- rotacja1 rotacja2) 2 2))
 
(command "_rotate" ssetBlockSource "" currInsertionPoint rotacja "")
 
(princ)
)




 

 

 

 

LISP_1.lsp

Link to comment
Share on other sites

"Wydaje mi się, że pod kursorem niczego nie ma, bo po naciśnięciu klawisza Enter wykonuje się kopiowania w innej części rysunku. Natomiast po ruchu myszką wraca podgląd.

Proszę oddalić rysunek i spróbować."

a to dziwne ponieważ u mnie niczego nie kopiuje (dodatkowo) w innej części rysunku, klawisz enter obraca tylko blok źródłowy to wszystko.

Jak coś mam wersję z 2019r. ZWCADA, może przez to, że ma Pan włączone śledzenie biegunowe, śledzenie lokalizacji lub coś innego ?.

Link to comment
Share on other sites

Dnia 21.01.2021 o 08:38, Adam_x napisał:

hmm Program ma wykonywać pętle, a jedyny sposób na wyjście z pętli jest klawisz ESC czyli program wchodzi w  *error* :)

Przyznam że nie rozumiem idei tegoż, jak też i zamysłu całości. Po co tak obrac bloki? Ale się nie znam pewnie. 

Link to comment
Share on other sites

Dnia 30.01.2021 o 22:11, kojacek napisał:

Tak nieco inaczej podchodząc do tematu:

https://kojacek.wordpress.com/2021/01/30/lisp-a-klawisze/

 

 

ggread2.gif

 

Witam

jak mam wstawić ze 100 gniazdek elektrycznych i wystarczy tylko obrót 90 stopni to chyba wolę jednak moją wersję :). nawet jakby zmienić na obrót 90 w tej wersji to pozostaje jeszcze kwestia wygody ja wolę myszką kliknąć :)

 

 

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...