CAFE

★ CAD/LISP/분과 Q&A

[[Lisp]]레이어별로 길이를 산출근거처럼 표현하는 리습이 캐드 2024 버젼에서는 에러가 납니다.

작성자스르르르|작성시간24.03.20|조회수1,225 목록 댓글 4

※ 말머리 필수 (말머리 누락시 통보없이 게시 글이 삭제될 수 있습니다.)

 

※ 회원정보는 최소한 '운영진 공개'로 지정

 

  <캐드 / 윈도우 종류 및 버전 :  오토캐드 2024  /  윈도우 11  >

 

해당 관련 리습은 예전에 일초님이 만드셨고, 아임피러님이 일부수정하여 주셨던 리습으로

line등을 선택하면 레이어별로 구분하여 산출근거식처럼 만들어 주는 리습입니다.

 

이 파일을 예전 캐드2008버젼에서는 잘 사용하였었는데 캐드2018이후인가 버젼부터는

명령을 실행시키면  - ErrNo 52: 기능을 취소함 - 이라고 뜨고 정상적인 명령 수행이 안됩니다.

지금 사용하는 캐드는 캐드2024를 사용하고 있습니다.

 

아래 리습에서 어느 부분을 수정하여야 최신 캐드버젼에서도 실행가능하도록 할수 있는지 조언 부탁드립니다.

;;=================================================================================================
;; [一初] 선택한 객체의 길이를 레이어별로 표시하는리습  2011.10.06.
;; [아임피러] 미터(m)로 표현한 선길이를 소숫점1자리에서 반올림 한후 같은 숫자끼리 합산하여 산출근거로 표현   2016.11.12.
;;-------------------------------------------------------------------------------------------------------------------------------------------------------------
(defun c:elsl (/ os lt lay sslist ss index layerlist linelist linenumlist ent old8 dist txtlist txt totoalstr totoal subtotoal maxlen1 maxlen2 pt dist1)
(command "_.undo" "_begin")
(princ "\n Eltity Length Sum")
(setvar "cmdecho" 0)
(setq os (getvar "osmode"))
(setq lt (getvar "ltscale"))
(setq lay (getvar "clayer"))
(setq th (getvar "textsize"))
(setq sslist nil)
(setq ss (ssget ":L" (list (cons 0 "LINE,CIRCLE,ARC,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE"))))
(if ss
(progn
(setq index 0)
(setq layerlist nil)
(setq linelist nil)
(setq linenumlist nil)
(repeat (sslength ss)
(setq ent (ssname ss index))
(setq old8 (cdr (assoc 8 (entget ent))))
(command "lengthen" ent "")
(setq dist (atof (rtos (GETVAR "PERIMETER") 2 8)))
(setq dist1 (rtos (/ dist 1000.0) 2 1))
(setq dist (atof dist1))
(if (assoc old8 layerlist)
(progn
(setq linelist (cdr (assoc old8 layerlist)))
(if (assoc dist linelist)
(progn
(setq linelist (subst (cons dist (+ (cdr (assoc dist linelist)) 1)) (assoc dist linelist) linelist))
);end progn
(progn
(setq linelist (append linelist (list (cons dist 1))))
);end progn
);end if
(setq layerlist (subst (cons old8 linelist) (assoc old8 layerlist) layerlist))
);end progn
(progn
(setq layerlist (append layerlist (list (cons old8 (list (cons dist 1))))))
);end progn
);end if
(setq index (1+ index))
);end repeat
(setq txtlist (list (list "레이어종류" "객체수" "산출근거")))
(setq maxlen1 0.0)
(setq maxlen2 0.0)
(setq totoalstr "")
(setq totoal 0.0)
(foreach x layerlist
(setq txt "")
(setq subtotoal 0.0)
(foreach xx (cdr x)
(setq txt (strcat txt "+" (rtos (car xx)  2 1) "x" (rtos (cdr xx) 2 0) "ea"))
(setq subtotoal (+ subtotoal (* (car xx)  (cdr xx))))
);end foreach
(setq totoalstr (strcat totoalstr "+" (rtos subtotoal 2 1)))
(setq totoal (+ totoal subtotoal))
(setq txt (strcat "(" (substr txt 2) ")=" (rtos subtotoal 2 1) "m"))
(if (> (strlen (car x)) maxlen1) (setq maxlen1 (strlen (car x))))
(if (> (strlen (itoa (length (cdr x)))) maxlen2) (setq maxlen2 (strlen (itoa (length (cdr x))))))
(setq txtlist (append txtlist (list (list (car x) (itoa (length (cdr x))) txt))))
);end foreach
(setvar "osmode" 111)
(setq pt (getpoint "\n 텍스트 삽입점 : "))
(if pt
(progn
(setvar "osmode" 0)
(foreach x txtlist
(if (tblsearch "layer" (nth 0 x))
(setvar "clayer" (nth 0 x))
(setvar "clayer" lay)
);end if
(command "text" pt (* lt 2.5) 0.0 (nth 0 x)) 
(command "text" (list (+ (car pt) (* maxlen1 2.0)) (cadr pt)) (* lt 2.5) 0.0 (nth 1 x))
(command "text" (list (+ (car pt) (* maxlen1 2.0) (* maxlen2 4.0)) (cadr pt)) (* lt 2.5) 0.0 (nth 2 x))
(setq pt (list (car pt) (- (cadr pt) (* lt 5.0))))
);end foreach
(setvar "clayer" lay)
(command "text" pt (* lt 2.5) 0.0 "TOTAL")
(command "text" (list (+ (car pt) (* maxlen1 2.0)) (cadr pt)) (* lt 2.5) 0.0 "=")
(command "text" (list (+ (car pt) (* maxlen1 2.0) (* maxlen2 4.0)) (cadr pt)) (* lt 2.5) 0.0 (strcat "(" (substr totoalstr 2) ")=" (rtos totoal 2 1) "m"))
);end progn
);end if
(setvar "osmode" os)
);end progn
);end if
(command "_.undo" "_end")
(princ)
)

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자스르르르 작성자 본인 여부 작성자 | 작성시간 24.03.20 자체해결하였습니다.
    약 20번째줄의 (command "lengthen" ent "") 구문을 삭제하니 해결되었습니다.
  • 작성자주왕 | 작성시간 24.03.20 약 20번째줄의 (command "lengthen" ent "") 구문을 삭제 계산값이 모두 0으로 나오는데 ..........무슨 차이지?
  • 답댓글 작성자스르르르 작성자 본인 여부 작성자 | 작성시간 24.03.21 주왕님 댓글보고 다시 시도해보니 잘 안되네요.
    제가 뭔가 착각했었나봅니다. 혹시 해결방법 아시는분은 도움 부탁드립니다.
  • 작성자별밤이 | 작성시간 25.11.09 (command "lengthen" ent "" "" "") 버전이 높아질수록 이렇게 바낌요
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼