면적 구하는 리습을 사용 하고 있었는데 2013까지는 잘 사용 했었는데
2015로 업그레이드 하고 단축키 실행을 하니깐 cad가 다운이 되어 버리네요
;;===================================================================
;; 면적계산
;;===================================================================
(defun C:V2( / dum TT ar po v2-error old-error)
(defun v2-error (a)
(if dum (progn (redraw dum 4)(entdel dum)))
(setq v2-error nil *error* old-error)
(princ (strcat “n” a))
)
(graphscr)
(setvar “cmdecho” 0 )
; dimzin 환경변수는 rtos 함수에 영항을 줄수 있기때문에 0 으로 설정한다.
(setvar “dimzin” 0)
; 에러핸들러를 설정한다.
(setq old-error *error* *error* v2-error)
; 가장중요한 부분..
; bpoly 함수를 이용하여 해당면의 boundary 형성하는 polyline 를 만들고
; 그 polyline 의 엔티티네임을 리턴받는데 boundary 형성을 실패하거나
; 선택한 면이 bonudary 를 만들기에 부적절한 구조일때는 nil 를 리턴한다.
; 그러므로 boundary 가 만들어지면…
(if (setq dum (bpoly (getpoint “n Select pick point … : “)))
(progn
; area 명령으로 면적을 구한다. 구한값은 직접적으로 리턴받지 못한다.
(command “AREA” “o” dum)
; 사용자에게 구한면이 어떤면인가를 redraw 함수를 이용하여 boundary 를 점선으로 표시한다.
(redraw dum 3)
; 사용자에게 구한면의 면적을 command line 에 출력한다.
; area 명령으로 구한 면적은 시스템변수 “area” 에 저장되므로
; (getvar “area”) 로 읽고 단위가 M2 이므로 1000000 을 나눈다.
(princ (strcat “area (단위 M2) ==>”(setq ar (rtos (/ (/ (getvar “AREA”) 1000.0)1000.0) 2 4))))
; 이문은 좀 복잡해 보인다. getpoint 로 사용자로 부터 한점을 입력받고 ssget 으로 그점에
; 텍스트가 존재한다면
(if (setq TT (ssget (setq po(getpoint “n>>(Select change Text) or (Pick point!)”)) ‘((0 . “TEXT”))))
; 그 텍스트의 내용을 면적값으로 교체하고
(command “CHANGE” TT “” “” “” ar)
; 텍스트가 존재하지 않으면 그 점에 면적값을 출력한다.
(progn
(setvar “cmdecho” 1)
(command “text” po “” “” ar)
)
)
(command “redraw”)
; 점선으로 표시된 doundary 를 원래대로 표시하고
(redraw dum 4)
; doundary polyline 을 삭제한다.
(entdel dum)
) ;**progn
(alert “bed pickpoint”)
) ;**if
(setvar “dimzin” 8)
(setvar “cmdecho” 0 )
(princ)
)
공유
리습에는이상이 없는데요 2015가 아니라 뭐라고 말씀을 못하겠네요