지형관련 CONTOUR 도면을 받았는데,
이건 뭐 안습인 상황입니다. 컨투어 라인 하나만 선택해도,
매우 촘촘한 PLINE 정점 때문에 도무지 수정작업을 할 수가 없네요.
혹시 정점을 강제로 축소하는 LISP이 있나요?
도움 부탁드립니다.
공유
비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.
해당 질문을 신고하는 이유를 간단히 입력해주세요.
해당 답변을 신고하는 이유를 간단히 입력해주세요.
해당 유저를 신고하는 이유를 간단히 입력해주세요.
참고하세요..
http://m0useb.blog.me/220195874269
ArchiOffice(Xpress) 사용하시는 것 같은데…XVERT(등고선 정점 줄이기) 명령을 이용하면 정점을 줄일 수 있습니다.
http://autoc.tistory.com/87 이 리습 사용해보세요.
;;;명령어-scon
;;; 1.반드시 Autocad Map 의 도면정비(Drawing Cleanup)서
;;; 직선화(Simplify Object)만 실행한다.(공차값 0.5정도)
;;; arc를 삭제한 폴리선(arc 부분에만 버텍스 추가한다)을 다시 생성한다.
;;; 예)caa001 —> new_caa001
;;; caa002 —> new_caa002
(setq VtxList ‘())
(cond
((= “LWPOLYLINE” (CDR (ASSOC 0 EntList)))
(foreach x EntList
(if (= (car x) 10)
(setq VtxList (append VtxList (list (cdr x))))
)
)
)
((= “POLYLINE” (CDR (ASSOC 0 EntList)))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 EntList)))))
(WHILE (/= “SEQEND” (CDR (ASSOC 0 AA)))
(setq VtxList (append VtxList (list (cdr (ASSOC 10 AA)))))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 AA)))))
)
)
)
VtxList
)
(setq VtxList ‘())
(cond
((= “LWPOLYLINE” (CDR (ASSOC 0 EntList)))
(foreach x EntList
(if (= (car x) 42)
(setq VtxList (append VtxList (list (cdr x))))
)
)
)
((= “POLYLINE” (CDR (ASSOC 0 EntList)))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 EntList)))))
(WHILE (/= “SEQEND” (CDR (ASSOC 0 AA)))
(setq VtxList (append VtxList (list (cdr (ASSOC 42 AA)))))
(SETQ AA (ENTGET (ENTNEXT (CDR (ASSOC -1 AA)))))
)
)
)
VtxList
)
(p1 p2 arc / delta chord direction radius center slength)
(setq delta (* (atan arc) 4)
chord (distance p1 p2)
direction (angle p1 p2)
radius (/ chord (sin (/ delta 2)) 2)
center (polar p1 (+ direction (/ (- pi delta) 2)) radius)
radius (abs radius)
slength (abs (* delta radius))
)
(list center radius slength)
)
(setq x_val (/ (+ (car pt1_xy)
(car pt2_xy)
)
2
)
)
(setq y_val (/ (+ (cadr pt1_xy)
(cadr pt2_xy)
)
2
)
)
(list x_val y_val)
)
(princ “n 도면정비를 하셨나요 ?????”)
(setq OldVarList (list “OSMODE” “CLAYER”))
(setq OldVarValue (mapcar ‘getvar OldVarList))
(setvar “cmdecho” 0)
(command “undo” “be”)
(setvar “osmode” 0)
(princ ” Processing…… Please wait !!!!”)
(terpri)
(setq rep_no (sslength con_ss))
(setq count 0)
(if (/= rep_no nil)
(progn
(repeat rep_no
(setq en (ssname con_ss count))
(setq 10_value (Get_PolyVtx (entget en)))
(if (= (cdr (assoc 70 (entget en))) 1)
(setq 10_value (append 10_value (list (nth 0 10_value))))
)
(setq get_layer (cdr (assoc 8 (entget en))))
(setq get_elev (cdr (assoc 38 (entget en))))
(setq set_layer (strcat “new_” get_layer))
(command “layer” “m” set_layer “s” set_layer “”)
(setq 42_value (Get_bulge (entget en)))
(setq chk_no (- (length 10_value) 1))
(setq chk_count 0
poly_list ‘()
)
(repeat chk_no
(setq poly_list
(append poly_list (list (nth chk_count 10_value)))
)
(if (/= (nth chk_count 42_value) 0)
(progn
(setq p1 (nth chk_count 10_value))
(setq p2 (nth (+ chk_count 1) 10_value))
(setq arc (nth chk_count 42_value))
(setq ret_val (bulge->arc p1 p2 arc))
;arc 의 중심점을 구한다.
(setq center_pt (nth 0 ret_val))
;arc 의 반지름을 구한다.
(setq radius_val (nth 1 ret_val))
;직선의 중간점을 구한다.
(nth chk_count 10_value)
(nth (+ chk_count 1) 10_value)
)
)
(setq
mid_pt- (Get_mid_pt (nth chk_count 10_value) mid_pt)
)
(setq mid_pt+ (Get_mid_pt
mid_pt
(nth (+ chk_count 1) 10_value)
)
)
(setq add_pt_ang (angle center_pt mid_pt))
;;; (setq add_pt_ang- (angle center_pt mid_pt-))
;;; (setq add_pt_ang+ (angle center_pt mid_pt+))
(setq add_pt (polar center_pt add_pt_ang radius_val))
;;; (setq add_pt- (polar center_pt add_pt_ang- radius_val))
;;; (setq add_pt+ (polar center_pt add_pt_ang+ radius_val))
;;; (setq poly_list
;;; (append poly_list (list add_pt-))
;;; )
(setq poly_list
(append poly_list (list add_pt))
)
;;; (setq poly_list
;;; (append poly_list (list add_pt+))
;;; )
)
)
(setq poly_list (append poly_list (list (nth chk_no 10_value))))
;버텍스를 추가한 폴리선을 새롭게 그린다.
(command “pline”)
(foreach n poly_list (command n))
(command “”)
(setq last_pl (entlast))
(command “CHANGE” last_pl “” “P” “e” get_elev “”)
)
)
)
(mapcar ‘setvar OldVarList OldVarValue)
(princ)
)
컹..