문자 회전 각도 +180 리습 요청
컨텐츠 정보
- 172 조회
- 0 추천
- 0 비추천
- 목록
본문
아래는 아키모아에서 구한 문자를 라인 중앙으로 이동하는 리습입니다.
문제는 선 그린 방향에 따리 문자가 뒤집힙니다 ^^;;
( 선을 왼쪽에서 오른쪽으로 그린 선은 문자가 라인 중앙 위로..오른쪽에서 왼쪽으로 그린 선은 문자가 라인 중앙 아래쪽으로 뒤집힘)
일일이 수정하기 번거로워 리습 요청 드립니다.
문자와 라인 선택시 라인 중간점 기준으로 180도 문자 회전
문자만 선택시 문자자리를 중간 중심으로 변경후 회전각도 +180
(추가 : 아래 리습 참고로 문자 노드점 기준으로 라인 근처점으로 이동 가능할까요?)
(defun c:xz ( / _mrDivision _mrDistance _mrRecursive acDoc os ss L o ang )
(defun _mrDivision ( ss / _MidPoint tLst lLst )
(defun _MidPoint ( o / mi mx )
(vla-getboundingbox o 'mi 'mx)
(list
(mapcar '(lambda (x) (* x 0.5))
(mapcar '+ (vlax-safearray->list mi)(vlax-safearray->list mx))
) o
)
)
(foreach e (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq o (vlax-ename->vla-object e))
(if (eq (vla-get-objectname o) "AcDbText")
(setq tLst (append tLst (list (_MidPoint o))))
(setq lLst (append lLst (list (_MidPoint o))))
)
)
(list tLst lLst)
)
(defun _mrDistance ( p L )
(cadar
(vl-sort
(mapcar '(lambda (x) (list (distance p (car x)) x)) L)
(function (lambda (x1 x2)(< (car x1) (car x2))))
)
)
)
(defun _mrRecursive ( L1 L2 / p )
(if (and L1 L2)
(cons
(list (car L1)(setq p (_mrDistance (caar L1) L2)))
(_mrRecursive (cdr L1)(vl-remove-if '(lambda (x)(equal x p 0.1)) L2))
)
)
)
(vl-load-com)
(setq acDoc (vla-get-activedocument (vlax-get-acad-object)))
(setq os (getvar 'osmode))
(vla-startundomark acDoc)(setvar 'osmode 0)
(and
(setq ss (ssget '((0 . "text,line"))))
(setq L (_mrDivision ss))
(= (length (car L))(length (cadr L)))
(foreach x (_mrRecursive (car L)(cadr L))
(setq o (cadar x))
(setq ang (vlax-get (cadadr x) 'Angle))
(vlax-put o 'Alignment acAlignmentCenter)
(vlax-put o 'TextAlignmentPoint (polar (caadr x) (+ ang (* pi 0.5)) (* (vlax-get o 'Height) 0.2)))
(vlax-put o 'Rotation ang)
)
)
(setvar 'osmode os)(vla-endundomark acDoc)(princ)
)