캐드 각인 리습 만드는데 애로사항 있습니다 !!
컨텐츠 정보
- 29 조회
- 8 댓글
- 0 추천
- 0 비추천
- 목록
본문
미리 만들어논 블록에 이름을 단순화 하여 리습 內
차트화 한 후에,
리습 실행 -> ABCD -> 엔터 -> A,B,C,D 블록이 어떠한 기준에 의하여 X 거리 값 만큼 이동 된 후에 생성
EX) ABCD 실행 ( 자간 1.0 ) -> A 1mm b 1mm c 1mm d 이런 순으로 블록 생성 하려 합니다.
현재 abc 입력시, 첨부 한 대표 이미지 처럼 나오는데, z값은 0이고, x,y 거리 값이 기준 없이 작성 되고 있습니다.
해당 a 글자 내에 보라색은 스플라인 이며, a 초록색 글자는 각개 라인이 끊어진 형태 입니다.
블록 기준점 또는 블록내에 point 삽입 하여 point와 2번째 삽입되는 블록 기준점 거리를 일정한 비율로 삽입 되게 하는게 목표 입니다…
리습에서 구현 가능 한지 자체도 의문입니다… 고수님들 많은 의견 부탁드립니다.
아래는 작성 한 리습 내용 입니다.
========================
(defun c:CreateBlocks (/ inputStr char height spacing pos blockName index pointPos)
(setq inputStr (getstring “n문구를 입력하세요 (예: GOCAD): “))
(setq height 1.0) ; 축척 (X 및 Y)
(setq spacing 0.5) ; X축 방향 자간 설정
(setq pos (getpoint “n첫 번째 블록의 배치 지점을 선택하세요: “))
;; 문자열의 각 문자에 대해 블록 삽입
(setq index 0)
(while (< index (strlen inputStr))
(setq char (substr inputStr (1+ index) 1)) ; 현재 문자 가져오기
(setq blockName (strcat "대원_2.0T_" char)) ; 블록 이름 생성
;; 블록 삽입
(command "INSERT" blockName pos height height 0) ; X, Y 축척과 각도 고정
;; 블록 내의 점 객체 위치 가져오기
(setq pointPos (list (car pos) (cadr pos) (caddr pos))) ; 초기 위치
;; 블록 내에서 점 객체의 위치를 찾습니다.
(setq pointObj (ssget "X" '((0 . "POINT")))) ; 모든 점 객체 선택
(if pointObj
(progn
(setq pointPos (cdr (assoc 10 (entget (ssname pointObj 0))))) ; 첫 번째 점의 위치 가져오기
)
)
;; 다음 블록의 위치 설정 (점 기준으로 X좌표를 증가)
(setq pos (list (+ (car pos) spacing) (cadr pointPos) (caddr pos))) ; X축 방향으로만 이동
(setq index (1+ index)) ; 인덱스 증가
)
(princ)
)
(princ "n리습이 로드되었습니다. 'CreateBlocks' 명령어를 사용하세요.")
===========================
다중 블록 삽입
리습
블록 간격 띄워 삽입
블록 다중 삽입
관련자료
캐드플러스님의 댓글
당연히 구상하는 프로그램과 다르죠. 하지만 방법은 비슷합니다. 파일 도면을 삽입한 결과 입니다. 크기에 상관없이 도면간 거리가 10mm 간격입니다.(변경하면 1mm 가능하죠) 제 프로그램은 폴더를 검색하고 폴더 내에 모든 파일을 삽입합니다.
1. 도면 파일 A.dwg, B.dwg, C.dwg, …..만든다. 2. 문자 입력은 그림에 대화 상자에서 A부터 Z까지 숫자 0에서 9까지 받아서 하나씩 분석. 3. 문자 입력과 같이 차례로 폴더에서(A.dwg, B.dwg, C.dwg,…..) 문자 파일을 삽입한다. 끝. ps. 대/소문자 구분 또는 구분없이 입력.