침실2_CAD

Auto CAD- LISP 객체 길이 합을 구하는 리습(LLE 수정)

다식군! 2020. 7. 14. 18:30
반응형

리습을 사용하는 사람이라면 대부분 사용하는 리습인 "LLE 리습"을 종종 사용하는데, 

전체 길이를 구하고 나서, 명령행에 표시된다.

이걸 수정해 봤다.

LISP EXP.
(defun c:lle ()   defun함수 시작 / 명령어LLE
(vl-load-com) 
(setq ent (ssget '((0 . "LINE,CIRCLE,ARC,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))) 
(setq n 0 dis 0) 
(repeat (sslength ent) 
(setq en (vlax-ename->vla-object (ssname ent n))) 
(setq ep (vlax-curve-getEndParam en)) 
(setq dis (+ dis (vlax-curve-getDistAtParam en ep))) 
(setq n (1+ n)) 
)
기존 LLE 함수
(setq pt0 (getpoint "\n 글자 입력 위치......?"))
(setq txt_H (getint "\n 글자 높이 지정......?"))
글자위치/높이 입력 받음
(setq pt1 (list(car pt0) (- (cadr pt0) (* txt_H 2)) 0)) 겹치지않게 새로운 점을 추가
(command "-TEXT" "J" "MC" pt1 txt_H "0" (strcat "길이합계=" (rtos dis) "(mm)")) 총길이를 -TEXT 명령으로 쓰기
(prompt (strcat " 길이합계 = " (rtos dis))) 명령행에 표시
(command "-TEXT" "J" "MC" pt0 txt_H "0" (strcat "길이합계=" (rtos (/ dis 1000) 2 3)"(M)")) 총길이(dis)/1000 으로 단위환산(미터) 
(princ)  
) defun함수 종료

LLE 길이합계 m, mm 2줄 text 작성_수정2.lsp
0.00MB

(defun c:lle () 
	(vl-load-com) 
	(setq ent (ssget '((0 . "LINE,CIRCLE,ARC,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))) 
	(setq n 0 dis 0) 
		(repeat (sslength ent) 
		(setq en (vlax-ename->vla-object (ssname ent n))) 
		(setq ep (vlax-curve-getEndParam en)) 
		(setq dis (+ dis (vlax-curve-getDistAtParam en ep))) 
		(setq n (1+ n)) 
		)

	(setq pt0 (getpoint "\n 글자 입력 위치......?"))
	(setq txt_H (getint "\n 글자 높이 지정......?"))
	(setq pt1 (list(car pt0) (- (cadr pt0) (* txt_H 2)) 0))


	(command "-TEXT" "J" "MC" pt1 txt_H "0" (strcat "길이합계=" (rtos dis) "(mm)"))
	(prompt (strcat " 길이합계 = " (rtos dis)))
	(command "-TEXT" "J" "MC" pt0 txt_H "0" (strcat "길이합계=" (rtos (/ dis 1000) 2 3)"(M)"))

  (princ)
  
)

starcat : 문자합치기

pt1의 ruddn pt0점의 x좌표, pt0의 Y좌표에 글자높이의 2배를 뺀 좌표임

rtos는 실수를 문자로 변경하는 함수

참고-------->[Auto CAD]<LISP> 변환 함수(atoi, itoa, atof, rtos)

반응형