프로그램
캐드 분류

리습 사용 시 객체스냅 체크가 다 꺼집니다

컨텐츠 정보

  • 22 조회
  • 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

관련자료

댓글 3 / 1 페이지

상큼메론90님의 댓글

(setvar "osmode" 0) 이 부분에서 오스냅이 0 (오스냅 전부 해제)으로 되었다가

(setvar "osmode" os) 이 부분에서 리습 실행전으로 오스냅을 되돌립니다.

리습 끝나면 원래대로 오스냅이 돌아오는 구조입니다.

.

캐드플러스님의 댓글

리습에서는 오스냅 사용하는 위치가 중요합니다. 사용자 입력 이후에 오스냅을 꺼는것이 가장 좋습니다. 어제도 똑같은 내용으로 댓글 달았는데….

(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) )

전체 7,232 / 1 페이지
번호
제목
이름

최근글


새댓글


알림 0