사진처럼 폴리라인으로 그린 도형에 자동으로 치수선을 뽑아주는 리습을 사용중인데요
자동으로 생성되는 도형에서 치수선까지의 거리가 너무 가깝습니다.
DIM설정에서 [원점에서 간격띄우기] 항목이나 [고정 길이 치수보조선] 항목을 건드려도
보여지는 길이만 조정될 뿐이고 원점에서 치수까지의 길이는 바뀌지 않아서 질문합니다.
이렇게 내측으로 일정간격 들어오게 설정되었으면 하거든요
현재는 정렬 리습으로 수작업중입니다. .
리습에서 변경할 수 있는건지 궁금합니다.
———————————————————————————————————————–
(defun c:pdim ( / ListClockwise-p ch plSet pLlst vLst oldOsn cAng cDis cPt )
———————————————————————————————————————–
(defun c:pdim ( / ListClockwise-p ch plSet pLlst vLst oldOsn cAng cDis cPt )
(defun ListClockwise-p ( lst / z vlst )
(vl-catch-all-apply ‘minusp
(list
(if
(not
(equal 0.0
(setq z
(apply ‘+
(mapcar
(function
(lambda (u v)
(- (* (car u) (cadr v)) (* (car v) (cadr u)))
)
)
(setq vlst
(mapcar
(function
(lambda (a b) (mapcar ‘- b a))
)
(mapcar (function (lambda (x) (car lst))) lst)
(cdr (reverse (cons (car lst) (reverse lst))))
)
)
(cdr (reverse (cons (car vlst) (reverse vlst))))
)
)
) 1e-6
)
)
z
(progn
(prompt “nnChecked vectors are colinear – unable to determine clockwise-p of list”)
nil
)
)
)
)
)
(vl-catch-all-apply ‘minusp
(list
(if
(not
(equal 0.0
(setq z
(apply ‘+
(mapcar
(function
(lambda (u v)
(- (* (car u) (cadr v)) (* (car v) (cadr u)))
)
)
(setq vlst
(mapcar
(function
(lambda (a b) (mapcar ‘- b a))
)
(mapcar (function (lambda (x) (car lst))) lst)
(cdr (reverse (cons (car lst) (reverse lst))))
)
)
(cdr (reverse (cons (car vlst) (reverse vlst))))
)
)
) 1e-6
)
)
z
(progn
(prompt “nnChecked vectors are colinear – unable to determine clockwise-p of list”)
nil
)
)
)
)
)
(initget 1 “Outside Inside”)
(setq ch (getkword “nChoose on which side to put dimensions [Outside/Inside] : “))
(princ “n<<< Select LwPolyline(s) for dimensioning >>> “)
(if (setq plSet (ssget ‘((0 . “LWPOLYLINE”))))
(progn
(setq pLlst (vl-remove-if ‘listp
(mapcar ‘cadr(ssnamex plSet)))
oldOsn (getvar “OSMODE”)
); end setq
(setvar “OSMODE” 0) (setvar “CMDECHO” 0)
(command “_.undo” “_be”)
(foreach pl pLlst
(setq vLst (mapcar ‘(lambda( x ) (trans x 0 1))
(mapcar ‘cdr (vl-remove-if-not ‘(lambda( x ) (= 10 (car x)))
(entget pl)
)
)
)
); end setq
(if (equal (logand (cdr (assoc 70 (entget pl))) 1) 1)
(setq vLst (append vLst (list (car vLst))))
); end if
(if (not (ListClockwise-p vLst)) (setq vLst (reverse vLst)))
(while (< 1 (length vLst))
(setq cAng (angle (car vLst) (cadr vLst))
cDis (/ (distance (car vLst) (cadr vLst)) 2.0)
)
; (if (>= (caar vLst) (caadr vLst))
; (setq cAng (- cAng pi))
; ); end if
(if (eq ch “Inside”)
(setq cPt (polar (polar (car vLst) cAng cDis) (- cAng (* 0.5 pi)) (* 2.5 (getvar “DIMTXT”)))); end setq
(setq cPt (polar (polar (car vLst) cAng cDis) (+ cAng (* 0.5 pi)) (* 2.5 (getvar “DIMTXT”)))); end setq
); end if
(command “_.dimaligned” (car vLst) (cadr vLst) cPt)
(setq vLst (cdr vLst))
); end while
); end foreach
(command “_.undo” “_e”)
(setvar “OSMODE” oldOsn) (setvar “CMDECHO” 1)
); end progn
); end if
(princ)
); end of c:pdim
(setq ch (getkword “nChoose on which side to put dimensions [Outside/Inside] : “))
(princ “n<<< Select LwPolyline(s) for dimensioning >>> “)
(if (setq plSet (ssget ‘((0 . “LWPOLYLINE”))))
(progn
(setq pLlst (vl-remove-if ‘listp
(mapcar ‘cadr(ssnamex plSet)))
oldOsn (getvar “OSMODE”)
); end setq
(setvar “OSMODE” 0) (setvar “CMDECHO” 0)
(command “_.undo” “_be”)
(foreach pl pLlst
(setq vLst (mapcar ‘(lambda( x ) (trans x 0 1))
(mapcar ‘cdr (vl-remove-if-not ‘(lambda( x ) (= 10 (car x)))
(entget pl)
)
)
)
); end setq
(if (equal (logand (cdr (assoc 70 (entget pl))) 1) 1)
(setq vLst (append vLst (list (car vLst))))
); end if
(if (not (ListClockwise-p vLst)) (setq vLst (reverse vLst)))
(while (< 1 (length vLst))
(setq cAng (angle (car vLst) (cadr vLst))
cDis (/ (distance (car vLst) (cadr vLst)) 2.0)
)
; (if (>= (caar vLst) (caadr vLst))
; (setq cAng (- cAng pi))
; ); end if
(if (eq ch “Inside”)
(setq cPt (polar (polar (car vLst) cAng cDis) (- cAng (* 0.5 pi)) (* 2.5 (getvar “DIMTXT”)))); end setq
(setq cPt (polar (polar (car vLst) cAng cDis) (+ cAng (* 0.5 pi)) (* 2.5 (getvar “DIMTXT”)))); end setq
); end if
(command “_.dimaligned” (car vLst) (cadr vLst) cPt)
(setq vLst (cdr vLst))
); end while
); end foreach
(command “_.undo” “_e”)
(setvar “OSMODE” oldOsn) (setvar “CMDECHO” 1)
); end progn
); end if
(princ)
); end of c:pdim
1 답변