;;===============================================================
; 문자 정렬하기(2006.11.주말농부)
; ->다중선택된 문자를 기준점을 정하여 좌우로 정렬하는 명령어
; ->문자의 시작점이나 끝점을 맞추어 정렬할 때 사용
; ->수정 보완(2007.1)
; ->상하정렬 추가(2009.2)
;;—— Text Arrange ——————————————-
(defun c:ta(/ os ss n k pt pt1 pt1x pt2 ptx pty pyxy kw k en ed tx a)
;->*error* start
(defun *error* (msg)(princ “error: “)(princ msg)
(setvar “osmode” os)(setvar “blipmode” bl)
(princ))
;-<*error* 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)
(if (= ptx nil)
(progn
(setq ss (@ta_lst ss))
(setq pt (dxf 10 (entget (ssname ss 0))))
(setq pty (cadr pt))
(setq k 1)
(repeat (- n 1)
(setq en (ssname ss k))
(setq ed (entget en))
(setq pt1 (dxf 10 ed))
(setq pt1x (car pt1))
(setq pt2 (list pt1x pty))
(vl-cmdf “move” en “” pt1 pt2)
(setq k (+ k 1)) )
)
(progn
(setq a “자리맞추기 선택[왼쪽(L)/중심(C)/중간(M)/오른쪽(R)] <왼쪽>: “)
(initget “Left Center Middle Right”)
(setq kw (getkword a))
(if (= kw nil) (setq kw “Left”))
(if (= kw “Left”) (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)) )
)
);if end
(setvar “osmode” os)
(princ))
;;================================================================
; 새로운 선택세트 만들기(2009.2.12 주말농부)
; ->x좌표가 작은순서로 선택세트을 재정렬하는 리습
;;—————————————————————-
(defun @ta_lst (ss / ssn n ss-x1 en en1y ss-x1 ss-x2 ss-x3 e1 e2)
(setq ssn (sslength ss))
(setq n 0)
(setq ss-x1 ‘())
(repeat ssn
(setq en (ssname ss n))
(setq en1x (list en (car (cdr (assoc 10 (entget en)) ) ) ))
(setq ss-x1 (cons en1x ss-x1))
(setq n (+ n 1))
)
(setq ss-x2 (vl-sort ss-x1 ‘(lambda (e1 e2) (< (cadr e1) (cadr e2)))) )
;;;새로운 선택세트 만들기
(setq n 0 ss-x3 (ssadd))
(repeat ssn
(setq ss-x3 (ssadd (car (nth n ss-x2)) ss-x3))
(setq n (+ n 1))
)
ss-x3)
주말농부님 리습을 다운받았는데요.
좌우정렬은 잘되는데 상하정렬은 안되서 질문드립니다.
상하정렬은 엔터로 하면된다고 말씀하셧는데요,
엔터로 하면 캐드에서
좌우정렬점 선택(상하)->
error: no function definition: DXF; error: An error has occurred inside the
*error* functionAutoCAD variable setting rejected: “blipmode” nil
이렇게 뜹니다.
왜그럴까요?! 도움 부탁드립니다!
공유
(defun dxf (code ed / pt) (setq pt (cdr (assoc code ed))) pt ) 이 부분을 정확히 어디에 넣어야 되나요..ㅠ.ㅜ
리습 만드는건 도저히 모르겠네요.
저 부부을 넣어서 풀로 명령어를 댓글로 답변 가능하신분 부탁 드릴께요..
답변감사드립니다!
저도 검색을 해봤는데, (defun dxf (code ed / pt) (setq pt (cdr (assoc code ed))) pt ) 이 구문을 마지막에 넣으면 됩니다. 감사합니다!^^
(defun dxf ($dxfno $entget)
(cdr (assoc $dxfno $entget))
);;추가하면 될거 같은 ㅠㅠ
dxf 서브함수가 없네요..