아무리 고민해도 풀리지 않아 이 사이트에 글을 올려봅니다. 현재 각종 리습을 짜깁기해서 선에다가 글자를 삽입하고 그 글자 주변을 트림(실제로는 브레이크로 작용함)하는 리습을 만들었는데, 이게 한 선, 그러니까 한 객체에만 적용이 됩니다. 여러 선을 선택해서 거기에 한 번에 적용시키고 싶은데 어떻게 할 방법이 없을까요?
이하 짜깁기한 리습입니다.
(DEFUN C:ZT (/ tlen ss1 sn sn2 et n)
(setq osmo (getvar “OSMODE”))
(setq vL ‘(“osmode” “cmdecho”))
(setq ov (mapcar ‘getvar vL))
(mapcar ‘setvar vL ‘(50 0))
(setq cL (getvar ‘CLAYER))
(SETVAR “OSMODE” 0)
(prompt “n글자 삽입할 선 선택”)
(setq ss (ssget ‘((0 . “LINE”))))
(setq n (1- (sslength ss)))
(setq sn (ssname ss 0))
(setq ent (entget sn))
(setq et (cadr ent))
(setq lbeg (cdr (assoc ’10 ent)))
(setq lend (cdr (assoc ’11 ent)))
(setq angle1 (angle lbeg lend)) ; 라디안 각도
(setq angle2 (* angle1 (/ 180 pi))) ; 라디안 각도를 우리가 쓰는 각도로 변환
(setq sc1 (getint “n1. 축척 80 ~ 100 2. 축척 150 3. 축척 200 4. 축척 250 5. 축척 300 6. 축척 400: “))
(setq st1 (getstring “n삽입할 글자는?”))
(setq st2 (strlen st1)) ; 입력받은 글자에서 글자수를 구한다.
(if (= sc1 1) ; 축척 80 ~ 100일 경우
(progn
(if (= st2 1) ; 글자수 1일 경우
(progn
(SETQ p3 (LIST (CAR lbeg) (CADR lend)))
(SETQ D1 (DISTANCE lbeg p3))
(SETQ D2 (DISTANCE lend p3))
(SETQ AG1 (ANGLE lbeg p3))
(SETQ AG2 (ANGLE lend p3))
(setq angle1 (angle lbeg lend)) ; 라디안 각도
(setq angle2 (* angle1 (/ 180 pi))) ; 라디안 각도를 우리가 쓰는 각도로 변환
(if (<= angle2 180) ; 선이 가로일 때
(progn
(setq L:1 “1”)
(setq EXLR (* (ATOF L:1) 135))
(IF (< D1 D2)
(PROGN
(SETQ TXP (POLAR lend AG2 (/ D2 2)))
(SETQ BK1 (POLAR lend AG2 (- (/ D2 2) EXLR)))
(SETQ BK2 (POLAR lend AG2 (+ (/ D2 2) EXLR)))
(IF (> D1 EXLR)
(PROGN (SETQ R EXLR))
(PROGN (SETQ R (- D1 (/ D1 4))))
)
)
(PROGN
(SETQ TXP (POLAR lbeg AG1 (/ D1 2)))
(SETQ BK1 (POLAR lbeg AG1 (- (/ D1 2) EXLR)))
(SETQ BK2 (POLAR lbeg AG1 (+ (/ D1 2) EXLR)))
(IF (> D2 EXLR)
(PROGN (SETQ R EXLR))
(PROGN (SETQ R (- D2 (/ D2 4))))
)
)
)
)
)
(if (>= angle2 270) ; 선이 세로일 때
(progn
(setq L:1 “1”)
(setq EXLR (* (ATOF L:1) 159))
(IF (< D1 D2)
(PROGN
(SETQ TXP (POLAR lend AG2 (/ D2 2)))
(SETQ BK1 (POLAR lend AG2 (- (/ D2 2) EXLR)))
(SETQ BK2 (POLAR lend AG2 (+ (/ D2 2) EXLR)))
(IF (> D1 EXLR)
(PROGN (SETQ R EXLR))
(PROGN (SETQ R (- D1 (/ D1 4))))
)
)
(PROGN
(SETQ TXP (POLAR lbeg AG1 (/ D1 2)))
(SETQ BK1 (POLAR lbeg AG1 (- (/ D1 2) EXLR)))
(SETQ BK2 (POLAR lbeg AG1 (+ (/ D1 2) EXLR)))
(IF (> D2 EXLR)
(PROGN (SETQ R EXLR))
(PROGN (SETQ R (- D2 (/ D2 4))))
)
)
)
)
)
)
)
(COMMAND “BREAK” BK1 BK2)
(command “-layer” “m” “NOTE” “c” “7” “” “”)
(command “text” “j” “MC” TXP “215” “0” st1)
(setvar “OSMODE” osmo)
(command “layer” “s” “pipe” “”)
(setvar “OSMODE” osmo)
)
)
(princ)
)
질문 자체해결 완료. 수정된 리습을 첨부파일에 올려놓도록 하겠습니다. 더 좋게 개선할 수 있는 방법이 있다면 댓글로 달아주셨으면 합니다.
간혹 오류가 나서 작동 안되는 경우도 있지만 그럭저럭 쓸 수는 있겠다고 판단했습니다. 두글자까지 지원하며 오류가 날 경우 osnap 설정도 함께 초기화되기 때문에 os 명령어로 재설정 부탁드리겠습니다.
대단 하십니다 혹시 여기서만 정보를 얻으시나요??.gif)