아래 리습은 현재 도면에있는 전체레이어를 TXT파일로 내보내는 리습입니다.
문의드리고 싶은내용은
현재 도면에서 켜진레이어만 txt 파일로 내보내는 방법을 알고싶습니다.
아키모아에도 질문글이 있으나 여기에도 문의드려봅니다.
(defun c:laout(/ la_wr1 n path la)
(prompt “n>> 레이어명/색상/라인타입 으로 OUT”)
(setq path (strcat (getvar “DWGPREFIX”) “layerlist.txt”))
(@la-lst)
(setq la_wr1 (open path “w”))
(setq n 0)
(repeat (length la-lst)
(setq la (nth n la-lst))
(write-line la la_wr1)
(setq n (+ n 1))
)
(close la_wr1)
(princ “n”)(princ path) (princ ” 을 생성하였습니다.”)
(princ)
)
;; 레이어 목록 만들기
(defun @la-lst(/ ed $la $co $lt txt ed1)
(command “layer” “t” “*” “”)
(setq ed (tblnext “layer” t))
(setq $la (cdr (assoc 2 ed)));layer name
(setq $co (cdr (assoc 62 ed)));layer name
(setq $lt (cdr (assoc 6 ed)));layer name
(setq txt (strcat $la “/” (rtos $co 2 0) “/” $lt))
(setq la-lst (list txt))
(setq ed1 (tblnext “layer”))
(while ed1
(setq $la (cdr (assoc 2 ed1)));layer name
(setq $co (cdr (assoc 62 ed1)));layer name
(setq $lt (cdr (assoc 6 ed1)));layer name
(setq txt (strcat $la “/” (rtos $co 2 0) “/” $lt))
(setq la-lst (append la-lst (list txt)))
(setq ed1 (tblnext “layer”))
)
la-lst
)
감사합니다. 알려주신데로 적용해보도록 하겠습니다.
;;위에서 레이어 목록 만들기 함수를 기존 프로그램을 존중하여 최대한 적용, 단순화 하였습니다.
;;만약 제가 만들면 변수를 매개 변수와 지역변수만 사용하여 메모리를 절약 하겠습니다.
(defun @la-lst(/ ed $la $co $lt txt ed1)
(command “layer” “t” “*” “”) ;4
(setq la-lst nil) ;la-lst변수가 전역 변수 이므로 두번 연속 실행하면 리스트가 누적되므로 변수값 초기화.
(setq sw t) ;스위치 켜기..
(while (setq ed1 (tblnext “layer” sw)) ;무한 반복문
(setq $la (cdr (assoc 2 ed1)));layer name ;12
(setq $co (cdr (assoc 62 ed1)));layer name ;13
(setq $lt (cdr (assoc 6 ed1)));layer name ;14
(setq txt (strcat $la “/” (rtos $co 2 0) “/” $lt)) ;15
(setq la-lst (append la-lst (list txt))) ;16
(setq sw nil) ;스위치 끄기
) ;end of whill.
la-lst ;18 검색한 레이어 리스트 최종 결과값 리턴.
)
(defun c:laout(/ la_wr1 n path la)
(prompt “n>> 레이어명/색상/라인타입 으로 OUT”) ; 1 prompt..
(setq path (strcat (getvar “DWGPREFIX”) “layerlist.txt”)) ; 2 현재 도면파일 폴더에 “layerlist.txt” 파일명 지정.
(@la-lst) ; ;3 아래쪽 ;; 레이어 목록 만들기 호출.
(setq la_wr1 (open path “w”)) ; ; 19 “2번 줄에서 만든 파일명 오픈.
(setq n 0) ;20 리스트 수량 만큼 카운터 준비.
(repeat (length la-lst) ;21 레이어 리스트 수량 만큼 반복 실행.
(setq la (nth n la-lst)) ;22 0번째 리스트 부터 이름, 색, 선종류 가져오기.
(write-line la la_wr1) ;23 txt 파일으 쓰기.
(setq n (+ n 1)) ; 24 수량 카운터.
) ; end of. repeat.
(close la_wr1) ;25 txt 파일 닫기
(princ “n”)(princ path) (princ ” 을 생성하였습니다.”) ;26 프롬프트
(princ)
)
;; 레이어 목록 만들기
(defun @la-lst(/ ed $la $co $lt txt ed1)
(command “layer” “t” “*” “”) ;4
(setq ed (tblnext “layer” t)) ;5 첫번 레이어 부터 정보 검색
(setq $la (cdr (assoc 2 ed)));layer name ;6 첫번 레이어 이름 가져오기.
(setq $co (cdr (assoc 62 ed)));layer name ;7 첫번 레이어 색상 가져오기.
(setq $lt (cdr (assoc 6 ed)));layer name ;8 첫번 레이어 선종류 가져오기.
(setq txt (strcat $la “/” (rtos $co 2 0) “/” $lt)) ;9 첫번 가져온 레이어 “이름 “, “색상”, “선종류” 을 문자로 합치기.
(setq la-lst (list txt)) ;10 첫번 리스트로 만들기.
(setq ed1 (tblnext “layer”)) ;11 두번째 레이어 검색.
(while ed1 ;무한 반복문
(setq $la (cdr (assoc 2 ed1)));layer name ;12
(setq $co (cdr (assoc 62 ed1)));layer name ;13
(setq $lt (cdr (assoc 6 ed1)));layer name ;14
(setq txt (strcat $la “/” (rtos $co 2 0) “/” $lt)) ;15
(setq la-lst (append la-lst (list txt))) ;16
(setq ed1 (tblnext “layer”)) ;17
) ;end of whill.
la-lst ;18 검색한 레이어 리스트 최종 결과값 리턴.
)