;——————————————————————————–
아직도 질문에 대한 답을 얻고 지워버리는 분이 계시는군요.
처음 만들어 보시려는 다른 분들도 같은 문제일 때 참고하도록 올린 것이라서
답변만 변형하여 다시 올립니다.
;——————————————————————————–
질문내용요점 : 너무 많아서 파일로 부터 데이터를 반복하여 받아 SOLID BOX를 그리는 리습
;——————————————————————————–
너무 상세히 만들려고 하면 어렵습니다.
캐드를 사용할 때 나오는 순서를 그대로 옮기세요.
데이타와 그리는 순서를 분리하여 생각 하십시오.
점을 찍고나면 엔터를 칠 필요가 없는데 이런 곳에는 엔터 표시하지 마시고요.
box 엔터 c 엔터 중심점 모서리점 높이 —– 작업순서
사용데이타 —– X Y Z B W H —- 중심점 X Y Z 가로 세로 높이 B W H
;——————————그리는부분—————————–
1. 맨 처음 해야 할일은 명령어를 정하는 것입니다. — defun c:명칭()
(defun c:sol_box()
(princ)
);defun
2. 다음에는 자신이 결정한 작업을 괄호로 싸고 중간에 넣으세요.
(defun c:sol_box()
(box 엔터 c 엔터 중심점 모서리점 높이)
(princ)
);defun
3. 작업에 command 함수를 넣고 문자입력은 “”로 둘러싸서 처리하세요.
좌표나 숫자는 그대로 사용하시고 —엔터는 아무것도 없는 “”로
(defun c:sol_box()
(command “box” “c” 중심점 모서리점 높이)
(princ)
);defun
4. 작업에 점을 찍거나 숫자를 넎는 부분을 본인 마음에 드는 문자로 표시하세요 .
중심점 – p0 모서리점-p1 높이 H —-입력 3개소
(defun c:sol_box()
(command “box” “c” p0 p1 H)
(princ)
);defun
5. 위의 입력을 (setq 문자 ?? )로 작업전에 넣어 주세요 .—??로 표시한 곳이 숫자입력부분입니다.
중심점 – p0 모서리점-p1 높이 H —-입력 3개소
(defun c:sol_box()
(setq p0 ‘(0 0 0) )
(setq p1 ‘(4 5) )
(setq H 5)
(command “box” “c” p0 p1 H)
(princ)
);defun
여기까지가 작업부분의 코딩입니다.
임의의 좌표와 숫자를 넣고 실행시키면 원점에 8*10*5의
박스가 생기게 됩니다
(setq file_r (open 파일명 “r”))
(while (setq txt_ (read-line file_r))
……………………………
);while
(close file_r)
txt_ 에 한줄씩 반복하여 읽게됩니다.
7. 만든코드를 ….. 중간 부분에 넣어주시면 됩니다.
(defun c:sol_box()
(setq file_r (open 파일명 “r”))
(while (setq txt_ (read-line file_r))
(setq p0 ??)
(setq p1 ??)
(setq H ??)
(command “box” “c” p0 p1 H)
);while
(close file_r)
(princ)
);defun
8.남은 문제는 txt_를 숫자로 바꿔주는 것이죠.
저는 리스트로 바꾸는 것을 좋아 합니다. 한줄을 통째로 기억하세요.
(setq list_num (read (strcat “(” txt_ “)”)))
제가 결정한 데이타 파일의 입력방법은 x y z w b h 6개의 숫자이므로
순서대로 0 1 2 3 4 5입니다.
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
9.좌표계산
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
10.좌표계산을 결합하면 아래와 같습니다.
(defun c:sol_box()
(setq file_r (open 파일명 “r”))
(while (setq txt_ (read-line file_r))
(setq list_num (read (strcat “(” txt_ “)”)))
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
(command “box” “c” p0 p1 H)
);while
(close file_r)
(princ)
);defun
11.데이타 파일을 만들고 파일명 에 위치를 기록해야 합니다.
저는 임의로 “c:\sol_box.txt”로 만들었습니다.
리습에서는 디렉토리구분문자를 \두개를 사용해야 합니다.
12. 완성되엇지만 command를 사용할 때는 오스냅을 꺼줘야합니다.
이것도 세줄을 외우시기 바랍니다.
(setq os_n (getvar “osmode”))
(setvar “osmode” 0)
……………………………………..
(setvar “osmode” os_n)
13.맨 마지막으로는 setq 에서 사용한 변수를 지우기 위하여 defun 으로 만든 함수명의 괄호안에
/를 하고 뒤에 사용한 변수명을 넣어주면 됩니다.
(defun c:sol_box(/ os_n file_r txt_ list_num x y z w b h p0 p1 )
(setq os_n (getvar “osmode”))
(setvar “osmode” 0)
(setq file_r (open “c:\sol_box.txt” “r”))
(while (setq txt_ (read-line file_r))
(setq list_num (read (strcat “(” txt_ “)”)))
(setq x (nth 0 list_num ) y (nth 1 list_num ) z (nth 2 list_num )
w (nth 3 list_num ) b (nth 4 list_num ) h (nth 5 list_num ) )
(setq p0 (list x y z)) ;—-좌표 (x y z)
(setq p1 (list (+ x (/ w 2.0))(+ y (/ b 2.0)))) ;—-좌표 (x+w/2 y+b/2)
(command “box” “c” p0 p1 H)
);while
(close file_r)
(setvar “osmode” os_n)
(princ)
);defun
제가 아는 장황한 설명을 마칩니다.
xcshLv.0
txt파일 좌표 데이타를 입력 여러개의 SOLID BOX를 그리는 리습
공유
*******************************************************************************************
시샵입니다
1. 다시 한번 말씀드립니다
2. 고캐드는, 설계인들의 정보교환을 위한 커뮤니티입니다
3. 질문하시는 분들이 답을 얻으셨다고, 글을 지우는건
매우 이기적일 뿐만 아니라, 답글을 하신 분들께 기본적인 예의가 아닙니다
4. 누차 이미 공지드렸듯이, 이런 분들은, 발견즉시,
– 아이디 영구 강퇴시키며,
– 재가입 도 허용하지 않겠습니다
5. 자신의 소중한시간을 내어 정성스런 답글을 주신 “” xcsh ” 님깨
고캐드를 대신해 시샵으로서 무한한 감사와 , 심심한 위로의 말씀을 드립니다
시샵 올림
저야 자주달지 않아서 이런 경우가 간혹이지만
댓글 많이 달아주시는 분들은 섭섭한 경우가 많을 것 같습니다.
상큼메론90 님 , 스피돌0116님, 수야12님 댓글 감사합니다.
편안한 밤을 지내시고 활기찬 내일을 꿈꾸시길 바랍니다.
황당한 것이라도 많은분들이 자신의 생각을 올려주는 것이 관념을 깨는데 도움이 됩니다.
회원여려분들 앞으로도 저에게 많은 깨우침 주시기 바랍니다.
아 지웠는군요 … 젠장 저도 샘플 리습 하나 올려달라기에 만들었는데.. 안보이길래 게시판 오류인줄
알았네요 ^^;; (참 약간 어이가 없네요….)
2시간 이상 걸렸을 듯 하네요.