리습 사용 시 객체스냅 체크가 다 꺼집니다
컨텐츠 정보
- 83 조회
- 3 댓글
- 0 추천
- 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")) (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) )autocad
관련자료
캐드플러스님의 댓글
리습에서는 오스냅 사용하는 위치가 중요합니다. 사용자 입력 이후에 오스냅을 꺼는것이 가장 좋습니다. 어제도 똑같은 내용으로 댓글 달았는데….
(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) )