Rekomendowane odpowiedzi

Opublikowano

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

Opublikowano
10 godzin temu, kojacek napisał:

Co to za konstrukcja ???:

(while (= 1 1)

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

Opublikowano

"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 ?.

Opublikowano
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. 

Opublikowano
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ąć :)

 

 

 

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie