아래와 같은 리습을 추가하니 객체 스냅이 켜져있지만 체크가 다 해제되는 상황이 발생합니다. 리습에 문제가 있는건지 캐드 자체의 설정을 바꿔야하는건지 조언부탁드립니다. (defun c:twc(/ myerror os ss n ptx pty pyxy kw k en tx a) ;start --- Internal error handler ----------------------------- (defun myerror(S) (if (/= s "Function cancelled")(princ (strcat "nError:" s))) (setvar "osmode" os) (setvar "blipmode" bl) (setq *error* olderr)(princ) ) (setq olderr *error* *error* myerror) ;end----------------------------------------------------------- (setq os (getvar "osmode")) (prompt " 문자 좌우 정렬...") (setq ss (ssget '((0 . "text")))) (terpri) (setq n (sslength ss)) (setq ptx (car (getpoint "n기준점 선택 ")))(terpri) (setvar "osmode" 0) (setq a "자리맞추기 선택[왼쪽(L)/중심(C)/오른쪽(R)] : ") (initget "mL mC mR") (setq kw (getkword a)) (if (= kw nil) (setq kw "ml")) (if (= kw "ml") (setq sn 10) (setq sn 11)) (command "justifytext" ss "" kw) (terpri) (setq k 0) (while (<= 1 n) (setq en (ssname ss k)) (setq ptxy (cdr (assoc 10 (entget en))) ) (setq pty (cadr ptxy)) (setq pt2 (list ptx pty)) (entmod (subst (cons sn pt2) (assoc sn (entget en))(entget en))) (setq n (- n 1)) (setq k (+ k 1)) ) (setvar "osmode" os) (princ) )
따스한어묵Lv.0
리습 사용 시 객체스냅 체크가 다 꺼집니다
공유
리습에서는 오스냅 사용하는 위치가 중요합니다.
사용자 입력 이후에 오스냅을 꺼는것이 가장 좋습니다.
어제도 똑같은 내용으로 댓글 달았는데….
(defun c:twc(/ myerror os ss n ptx pty pyxy kw k en tx a)
;start — Internal error handler —————————–
(defun myerror(S)
(if (/= s “Function cancelled”)(princ (strcat “nError:” s)))
(setvar “osmode” os) (setvar “blipmode” bl)
(setq *error* olderr)(princ) )
(setq olderr *error* *error* myerror)
;end———————————————————–
(setq os (getvar “osmode”));;;;;;;;;;;;;;;;;;;;;;;;;;;;1. 오스냅 값을 가져오는 위치은 어디든 무방합니다.
(prompt ” 문자 좌우 정렬…”)
(setq ss (ssget ‘((0 . “text”)))) (terpri)
(setq n (sslength ss))
(setq ptx (car (getpoint “n기준점 선택 “)))(terpri);;;;;;;;;;;;;;;;;;2. 여기에서 사용자 입력.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setvar “osmode” 0);;;;;;;;;;;;3. 사용자 입력 다음에 하면 꺼지만…..
(setq a “자리맞추기 선택[왼쪽(L)/중심(C)/오른쪽(R)] : “)
(initget “mL mC mR”)
(setq kw (getkword a));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4. 여기에서 또 사용자 입력이 있습니다.
(if (= kw nil) (setq kw “ml”))
(if (= kw “ml”) (setq sn 10) (setq sn 11))
(setvar “osmode” 0) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5. 여기에서 오스냅을 꺼면 프로그램 흐름상 좋습니다.
(command “justifytext” ss “” kw) (terpri);;;;;;;;;;;;<- 오스냅 on, off에 따라 영향줌….
(setvar "osmode" os);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6. 오스냅 영향 위에 오토캐드 명령에서만 받기 때문에 여기서 다시 돌려주면 됩니다.
(setq k 0)
(while (<= 1 n)
(setq en (ssname ss k))
(setq ptxy (cdr (assoc 10 (entget en))) )
(setq pty (cadr ptxy))
(setq pt2 (list ptx pty))
(entmod (subst (cons sn pt2) (assoc sn (entget en))(entget en)))
(setq n (- n 1))
(setq k (+ k 1))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setvar "osmode" os);;;;여기에 있어도 프로그램상 무방합니다만….
(princ)
)
또 답변 달아주셔서 감사해요 ㅠ
명령중에 esc 누르면 돌아오지 않는건가요..?