도면에 선 중심에 텍스트로 간선을 표현하는데요.
텍스트가 너무 많아서 일일이 트림해주는데 시간이 엄청 소요됩니다.
이걸 한번에 할수 있는 리습 없을까요.
예시는 일정한 위치에 있어서 트림하기 쉽지만(서클과 브레이크 만 있어도 간단하게 가능)
실제로는 여기저기 불규칙하게 분포되어 있다보니 누락되는 부분도 많고 시간도 오래걸려서요.
찾다보니 교차된 선 중심으로 트림해 주는거나
글자중심으로 하나씩 트림해 주는건 찾았는데
텍스트 중심으로 멀티 트림해주는 리습은 없는거 같아서요.
하다하다 너무 찾고싶은데 직접 만들기는 힘드니 이렇게 문의드립니다.
혹시 필요하실까 찾은 리습 공유합니다.
글자 중심 개별트림(BY 하루)
(defun c:tlt(/ os ss k en ed ins th ang @p2 @x p1 p2)
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os)
(princ))
;-<*error* end
(setq os (getvar “osmode”))
(setq ss (ssget (list (cons 0 “text,mtext”))))
(setq k 0)
(setvar “osmode” 0)
(command “undo” “be”)
(repeat (sslength ss)
(setq en (ssname ss k))
(setq ed (entget en))
(setq ins (cdr (assoc 11 ed))
th (cdr (assoc 40 ed))
ang (cdr (assoc 50 ed)))
(setq @p2 (cadr (textbox ed)))
(setq @x (car @p2))
(setq p1 (polar ins ang (+ (/ th 3) (/ @x 2)))
p2 (polar ins (+ ang pi) (+ (/ th 3) (/ @x 2))))
(command “break” p1 p2)
(setq k (1+ k))
);repeat
(command “undo” “e”)
(princ)
);defun
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os)
(princ))
;-<*error* end
(setq os (getvar “osmode”))
(setq ss (ssget (list (cons 0 “text,mtext”))))
(setq k 0)
(setvar “osmode” 0)
(command “undo” “be”)
(repeat (sslength ss)
(setq en (ssname ss k))
(setq ed (entget en))
(setq ins (cdr (assoc 11 ed))
th (cdr (assoc 40 ed))
ang (cdr (assoc 50 ed)))
(setq @p2 (cadr (textbox ed)))
(setq @x (car @p2))
(setq p1 (polar ins ang (+ (/ th 3) (/ @x 2)))
p2 (polar ins (+ ang pi) (+ (/ th 3) (/ @x 2))))
(command “break” p1 p2)
(setq k (1+ k))
);repeat
(command “undo” “e”)
(princ)
);defun
하나의 선 중심 원하는 치수만큼 트림(BY 상큼메론90)
(defun C:MBR (/ P1 P2 P3 P4 P5 P6 P7 SS1 SS2 INDEX1 INDEX2 ENAME1 ENAME2 ELIST1 ELIST2 BRKLEN OFFDISDAT)
(setq OSMDE (getvar “osmode”))
(setvar “osmode” 0)
(setq PCKBX (getvar “pickbox”))
(setq OFFDISDAT (getstring (strcat “n자르기 할 거리입력: <” OFFDISNUM “>: “)))
(if (/= OFFDISDAT “”)
(setq OFFDISNUM OFFDISDAT)
)
(setq BRKLEN (atof OFFDISNUM))
(prompt “n기준선 모두 선택.”)
(while (or (not SS1) (= 0 (sslength SS1)))
(setq SS1 (ssget ‘((0 . “LINE”))))
)
(setq INDEX1 0)
(repeat (sslength SS1)
(progn
(setq ENAME1 (ssname SS1 INDEX1))
(setq ELIST1 (entget ENAME1))
(setq P1 (cdr (assoc 10 ELIST1)))
(setq P2 (cdr (assoc 11 ELIST1)))
(prompt “n자르기할 라인 모두 선택”)
(while (or (not SS2) (= 0 (sslength SS2)))
(setq SS2 (ssget ‘((0 . “LINE”))))
)
(setq INDEX2 0)
(repeat (sslength SS2)
(progn
(setq ENAME2 (ssname SS2 INDEX2))
(setq ELIST2 (entget ENAME2))
(setq P3 (cdr (assoc 10 ELIST2)))
(setq P4 (cdr (assoc 11 ELIST2)))
(setq P5 (inters P1 P2 P3 P4 onseg))
(setq P6 (polar P5 (angle P3 P4) BRKLEN))
(setq P7 (polar P5 (angle P4 P3) BRKLEN))
(command “draworder” ENAME2 “” “F”)
(if (= BRKLEN 0)
(command “break” P5 “@”)
(command “break” P6 “none” P7)
)
)
(setq INDEX2 (1+ INDEX2))
)
)
(setq INDEX1 (1+ INDEX1))
)
(setvar “osmode” OSMDE)
(princ (strcat “n” (itoa (sslength SS2)) ” 개 Line이 자르기 되었습니다.”))
(princ)
)
(setq OFFDISNUM “0”)
;;==========================================================================
공유하신 TLT 리습 에러나네요. 사용방법을 잘모르겠어요. 그리고 체크하신 보조프로그램 드림에 ITL 명령에 문자 선택해 선자르는게 있는데… 이게 올리신 그림같은 기능인데 원하는 길이로 자르지는 않네요
잘은 모르겠찌만 텍스트에 박스치는 리습있는데
트림으로 안에를 짜르는법을 모르겠네요
이번에 드림 구매 했는데 아주 유사한 기능이네요;; 세부조정이 조금더 됬으면 좋았을텐데 아쉽지만 이걸로 써도 무방하겠습니다. 감사합니다.
지금까지는 서클로 글자 중심으로 원 그려서 자르는 작업을 했었는데… 이게 포인트가 한 도면에 수백개씩 되다보니 일일이 원그리고 자르고 삭제하기가 너무 힘들어서요..