고객서비스

  • 프로그램다운로드
  • 팻치다운로드
  • 인증코드신청
  • 아키오피스자료실
  • 아키오피스강좌
  • 아키오피스동영상강좌
  • FAQ
  • FAQ

질문과답변
제목 [리습]offset 다시질문!! & entity정보에 대해..
작성자 허묘분 분류 CAD관련
CAD제품 및 버전 운영체제
첨부파일
현재 제가 짜고 있는 리습은 건축 법규중 건축선에 대한 내용중 일부입니다. 그럼 내용을 전부 올립니다. (defun dtr (a) (* pi (/a 180.0))) (defun C:DIST (/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 temp_p1 temp_p2 per_p1 per)p2 dist river offp1 offp2 offp3 half1 half2) (setvar "cmdecho" 0) (command "layer" "m" "site" "") (command "color" "red" "") (command "linetype" "s" "center" "") (if (setq ent1 (entsel "\n>> 대지선을 선택하세요")) (if (setq ent2 (entset "\n>> 반대편 길을 선택하세요: ")) (progn (setq Alist (entget (car ent1)) Blist (entget (car ent2)) sp1 (cdr (assoc 10 Alist)) ep1 (cdr (assoc 11 Alist)) sp2 (cdr (assoc 10 Blist)) ep2 (cdr (assoc 11 Blist)) ang1 (angle sp1 ep1) temp_p1 (polar sp1 (+ ang1 (dtr 90)) 10.0) temp_p2 (polar ep1 (+ ang1 (dtr 90)) 10.0) per_p1 (inters sp2 ep2 sp1 temp_p1 nill) per_p2 (inters sp2 ep2 ep1 temp_p2 nill) dist (distance sp1 per_p1) ) ;여기까지는 지난번 알려주신대로 그대로... (if (>= dist 4000) (command "line" sp1 ep1 "") (progn (setq river (getstring "\n>> 도로의 끝에 강이나 철도등이 있습니까? ")) (if (= river "Y") (progn (setq offp1 (polar sp2 (+ ang1 (dtr 90)) 4000)) (command "offset" 4000 ent2 offp1 "") (setq ent3 (entlast)) (command "change" ent3 "" "p" "la (getvar "site") "") (command "color" ent3 "red "") ) (progn (setq half1 (polar sp2 (+ ang1 (dtr 90)) (/dist 2))) (setq half2 (polar ep2 (+ ang1(dtr 90)) (/dist 2))) (setq offp2 (polar half1 (+ ang1 (dtr 90)) 2000)) (setq offp3 (polar half2(+ ang1 (dtr 90)) 2000)) (command "line" offp2 offp3 "") ) ) ) ) ) (princ "\n>>길이 선택되지 않았습니다.") ) (princ "\n>>길이 선택되지 않았습니다..") ) (princ) ) 이렇게 짜다 보니 위의 (+ ang1 (dtr 90)) 때문에 첫번째 선이 두번째 선보다 위쪽과 왼쪽에 위치해 있을때만 성립하더군요... 저 참 멍청하죠? 그래서 (+ ang1 (dtr 90))대신 첫번째 선의 방향을 선택하는 다른 방법이 있는지 알고 싶습니다. 그래서 제가 offset에 대한 리습을 찾아보니 (setq (upoint 1 "Which side" nil (cadr ent))란 부분이 이해가 되지 않는군요.upoint나 udist는 무엇을 나타내는 함수인가요? 또한 리습을 공부하다보니 엔티티 정보에 대한 내용의 중요성을 깨닫게 되는군요. 엔티티 정보에서 추출해 쓰는 경우가 많더라구요. 따라서 엔티티 정보에 대해서도 좀 더 상세한 설명(특히 dxf code)을 해주셨으면 감사! 감사!

의견(1)

김남갑 1998-12-09
> 허묘분님 글... > 현재 제가 짜고 있는 리습은 건축 법규중 건축선에 대한 내용중 일부입니다. 그럼 내용을 전부 올립니다. > > (defun dtr (a) (* pi (/a 180.0))) > (defun C:DIST (/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 temp_p1 temp_p2 per_p1 per)p2 dist river offp1 offp2 offp3 half1 half2) (setvar "cmdecho" 0) > (command "layer" "m" "site" "") > (command "color" "red" "") > (command "linetype" "s" "center" "") > (if > (setq ent1 (entsel "\n>> 대지선을 선택하세요")) > (if > (setq ent2 (entset "\n>> 반대편 길을 선택하세요: ")) > (progn > (setq Alist (entget (car ent1)) > Blist (entget (car ent2)) > sp1 (cdr (assoc 10 Alist)) > ep1 (cdr (assoc 11 Alist)) > sp2 (cdr (assoc 10 Blist)) > ep2 (cdr (assoc 11 Blist)) > ang1 (angle sp1 ep1) > temp_p1 (polar sp1 (+ ang1 (dtr 90)) 10.0) > temp_p2 (polar ep1 (+ ang1 (dtr 90)) 10.0) > per_p1 (inters sp2 ep2 sp1 temp_p1 nill) > per_p2 (inters sp2 ep2 ep1 temp_p2 nill) > dist (distance sp1 per_p1) > ) > ;여기까지는 지난번 알려주신대로 그대로... > (if > (>= dist 4000) > (command "line" sp1 ep1 "") > (progn > (setq river (getstring "\n>> 도로의 끝에 강이나 철도등이 있습니까? ")) > (if > (= river "Y") > (progn > (setq offp1 (polar sp2 (+ ang1 (dtr 90)) 4000)) > (command "offset" 4000 ent2 offp1 "") > (setq ent3 (entlast)) > (command "change" ent3 "" "p" "la (getvar "site") "") > (command "color" ent3 "red "") > ) > (progn > (setq half1 (polar sp2 (+ ang1 (dtr 90)) (/dist 2))) > (setq half2 (polar ep2 (+ ang1(dtr 90)) (/dist 2))) > (setq offp2 (polar half1 (+ ang1 (dtr 90)) 2000)) > (setq offp3 (polar half2(+ ang1 (dtr 90)) 2000)) > (command "line" offp2 offp3 "") > ) > ) > ) > ) > ) > (princ "\n>>길이 선택되지 않았습니다.") > ) > (princ "\n>>길이 선택되지 않았습니다..") > ) > (princ) > ) > > 이렇게 짜다 보니 위의 (+ ang1 (dtr 90)) 때문에 첫번째 선이 두번째 선보다 위쪽과 왼쪽에 위치해 있을때만 성립하더군요... 저 참 멍청하죠? 그래서 (+ ang1 (dtr 90))대신 첫번째 선의 방향을 선택하는 다른 방법이 있는지 알고 싶습니다. > 그래서 제가 offset에 대한 리습을 찾아보니 (setq (upoint 1 "Which side" nil (cadr ent))란 부분이 이해가 되지 않는군요.upoint나 udist는 무엇을 나타내는 함수인가요? > 또한 리습을 공부하다보니 엔티티 정보에 대한 내용의 중요성을 깨닫게 되는군요. 엔티티 정보에서 추출해 쓰는 경우가 많더라구요. 따라서 엔티티 정보에 대해서도 좀 더 상세한 설명(특히 dxf code)을 해주셨으면 감사! 감사! - - - - - - - - - - - - - - - - - - - - - ; 마티.. 김남갑입니다. ; 먼저.. 함수 이름을 DIST로 하셨군요. ; 실행이 되던가요? 안될텐데.. 아니, 원래 오토캐드에 있는 DIST라는 명령어가 ; 실행 됐을텐데요. ; 오토캐드의 명령어와 부딪치는 이름으로는 함수이름을 정하지 마세요. (defun dtr (a) (* pi (/ a 180.0))) ; -> 함수와 변수는 반드시 띄어서 쓰세요. (defun C:DST (/ os ent1 ent2 ent3 Alist Blist sp1 ep1 sp2 ep2 ang1 temp_p1 temp_p2 per_p1 per p2 dist river offp1 offp2 offp3 half1 half2 q:layer q:color q:ltype ) (setvar "cmdecho" 0) (setq q:layer (getvar "clayer") q:color (getvar "cecolor") q:ltype (getvar "celtype") ) ; 아래에서 레이어, 칼라, 라인타입을 강제로 설정 할거지요? ; 이럴때는 원래것을 받아 두었다가 나중에 반드시 돌려 주어야 합니다. (if (tblsearch "layer" "site") (setvar "clayer" "site") (command ".layer" "m" "site" "") ) (setvar "cecolor" "1") (setvar "celtype" "center") ;-> 원래는 위에서 레이어, 칼라, 라인타입을 강제로 설정할 때, ; command 함수를 썼었지요? 시스템 변수를 쓰세요. 깔끔하게.. (if (setq ent1 (entsel "\n>> 대지선을 선택하세요: ")) (if (setq ent2 (entsel "\n>> 반대편 길을 선택하세요: ")) ; 요기도 스펠링이 틀렸네요. (progn ; entset이라고.. 호호.. (setq Alist (entget (car ent1)) Blist (entget (car ent2)) angK (angle (cadr ent1) (cadr ent2)) ; 새로 끼워넣은 부분... sp1 (cdr (assoc 10 Alist)) ep1 (cdr (assoc 11 Alist)) sp2 (cdr (assoc 10 Blist)) ep2 (cdr (assoc 11 Blist)) ang1 (angle sp1 ep1) temp_p1 (polar sp1 (+ ang1 (dtr 90)) 10.0) temp_p2 (polar ep1 (+ ang1 (dtr 90)) 10.0) per_p1 (inters sp2 ep2 sp1 temp_p1 nill) per_p2 (inters sp2 ep2 ep1 temp_p2 nill) dist (distance sp1 per_p1) ) ;여기까지는 지난번 알려주신대로 그대로... (if (>= dist 4000) (command "line" sp1 ep1 "") ; <- 왜 같은 곳에 선을 더 긋지요? 이상하네.. (progn (setq river (getstring "\n>> 도로의 끝에 강이나 철도등이 있습니까? ")) ; 위의 경우 소문자 y를 넣으면 어떻게 될까요? 저 아래 부분이 실행되겠죠? (if (or (= river "Y")(= river "y")) ; 그래서 이렇게 고쳤습니다. (progn ;(setq offp1 (polar sp2 (+ ang1 (dtr 90)) 4000)) (setq offp1 (polar sp2 angK 4000)) (command "offset" 4000 ent2 offp1 "") (setq ent3 (entlast)) (command "change" ent3 "" "p" "la (getvar "site") "") (command "color" ent3 "red "") ) (progn (setq half1 (polar sp2 angK (/ dist 2))) ; -> "/"과 "dist"를 붙여서 썼더군요, 이러면 에러가 납니다. (setq half2 (polar ep2 angK (/ dist 2))) (setq offp2 (polar half1 angK 2000)) (setq offp3 (polar half2 angK 2000)) (command "line" offp2 offp3 "") ) ) ) ) ) (princ "\n.. 길이 선택되지 않았습니다.") ; 메세지 처리는 >>표시 대신에 ..으로 표시하는게 보기가 좋지요? ) (princ "\n.. 길이 선택되지 않았습니다..") ) (princ) ) ;| <- (이 표시가 있는 부분 부터는 리습에서 인식을 못합니다.) 무슨 말씀을 하시는지 이제 알겠군요. (+ ang1 (dtr 90)) 라고 하셨으니 당연히 한 방향으로 Offset이 되지요. 방법은 여러가지가 있습니다만.... entsel함수로 엔티티를 지정했을 때는 엔티티 이름과 좌표가 동시에 리턴됩니다. 이 좌표를 사용해서 방향을 지정할 수도 있지요. 간단하게 생각나는대로 하면 이렇게 되겠네요. 위의 소스에서 ent1과 ent2에서 Pick한 좌표를 얻은 다음 각도를 얻어냅니다. (setq angK (angle (cadr pntA) (cadr pntB)) ) -> 이렇게요. 그래서 (+ ang1 (dtr 90)) 대신에 angK를 쓰면 되겠죠? 아,결과가 반대로 나온다면, (+ angK (dtr 180))이라고 써주면 되지요. 위의걸 다시 복사해서 써 보세요. 그리고... upoint나 udist는 사용자가 만든 함수입니다. upoint함수는 사용자로부터 좌표를 입력받는 함수같고, udist는 거리를 입력받는 함수로 보입니다. 따라서 이 두개의 함수는 로딩이 되어 있어야 합니다. 그렇지 않으면 아마, null function이라는 에러 메세지가 뜰겁니다. 그리고 DXF 코드와 엔티티 정보에 대한 강좌는 아마 오늘이나 내일중으로 올라 갈겁니다. 허묘분님 말씀대로 이 부분이 정말 중요하거든요. (이 부분 까지요.) -> |;
묻고답하기
번호 분류 제목 글쓴이 등록일 조회수
18 CAD관련 누구 재건축에 필요한 서류 아세요~~~? (1) 김민주 1998-12-29 14234
17 CAD관련 [질문] InerCAD 사용중에 안되는 부분 (2) 김경용 1998-12-27 15230
16 CAD관련 이너캐드 (1) 나석찬 1998-12-21 14121
15 CAD관련 [리습]지난번 offset 답장에 대하여... (1) 허묘분 1998-12-14 15876
14 CAD관련 이너캐드 (1) 나석찬 1998-12-09 15906
13 CAD관련 [리습]offset 다시질문!! & entity정보에 ... (1) 허묘분 1998-12-08 18850
12 CAD관련 리습에서 ucs변경을 쉽게할 수 없나요? (1) 김마리 1998-12-08 16622
11 CAD관련 inercad로 고은글 5.0은 볼수 없나요 (1) 윤지영 1998-12-08 19710
10 CAD관련 [질문]리습에서 offset의 방향에 대하여... (1) 허묘분 1998-12-08 14232
9 CAD관련 CAD R14에서 R12로 save하고자할때 font변 ... (2) 남석우 1998-12-07 12967