안녕하세요
DD1 사용시에 찍는 점 간의 거리가 산출이 안되는데요..
dal 명령어를 사용할 때에는 치수가 제대로 나오는것 같은데
DD1리습으로 사용할때에는 어떤 파일에서는 ‘0’으로 표기되고
어떤 파일은 표기가 안됩니다.. 해결 방법이 있을까요?
비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.
해당 질문을 신고하는 이유를 간단히 입력해주세요.
해당 답변을 신고하는 이유를 간단히 입력해주세요.
해당 유저를 신고하는 이유를 간단히 입력해주세요.
글세요?
누가 알 수 있을까요?
내 머리속 생각을 알아 맞혀 보라는것과 같은것 아닐까요?
dd1 리습을 보여주고 질문해야 어떤 답변을 받을 수 있지 않을까요?
죄송합니다 제가 캐드 초보라 질문을 잘못했군요..
일단 도면이 국내 형식이 아닌거 같아서..
리습 명령어를 실행했을때.. 실제는 20M 가 나와야 되는데…
0.05로 표기 되는 것 같습니다. 아래 리습을 수정해서 20m 로 역산 가능하게끔
수정이 가능할까요?
; 십진법 형식의 각도를 라디안 형식으로 변화하는 함수
(defun @dtr(&angle) (setq &angle (* pi (/ &angle 180.0))))
; 라디안 형식의 각도를 십진법 형식으로 변화하는 함수
(defun @rtd(&angle) (setq &angle (* 180.0 (/ &angle pi))))
; angle 함수 사용시 각도 변환의 번거로움을 피하기 위해 만든 함수
(defun @angle(&pt1 &pt2) (@rtd (angle &pt1 &pt2)))
; polar 함수 사용시 angle을 degree 각도로 쉽게 입력하기 위해 만든 함수
(defun @polar (&pt &angle &dist) (polar &pt (@dtr &angle) &dist))
;┌───────────────────────────────────────────────────────┐
;│■ 클릭한 두 점 사이의 거리를 구하고 최종 결과값을 출력하는 프로그램 │
;│ ▶ 소숫점의 수치가 0.2 이하인 경우 내림으로 하고 0.8 이상인 경우 올림으로 함 │
;│ 하지만 1보다 작은 0.2 즉, 200mm 이하인 경우 0으로 할수는 없으므로 그대로 0.2로 출력되게 함 │
;│ ▶ 총거리의 합이 나타날 위치를 클릭하면 구간별 거리값을 나타낸 문자의 1.5배 크기로 출력됨 │
;└───────────────────────────────────────────────────────┘
(defun C:DD2(/ !layer !addtext !end !pt1 !pt2 !dist !text !sum !TextSize !ssadd)
(setq !layer “라인거리산출”)
(if (tblsearch “layer” !layer)
(setvar “clayer” !layer)
(command “layer” “m” !layer “c” 7 !layer “”)
)
(command “-style” “거리” “hy울릉도m” 0 1 0 “n” “n”) ; 스타일 작성
(setq !addtext “” !end “N” !sum 0 !TextSize (getvar “userr1”) !ssadd (ssadd))
(if (= !TextSize 0)
(setq !TextSize (getreal (strcat “n문자 크기를 입력하세요<” (rtos (getvar “userr1”)) “>: “)))
)
(setvar “userr1” !TextSize)
(while (= !end “N”)
(initget 128)
(setq !pt1 (getpoint (strcat “n문자 크기<” (rtos (getvar “userr1”)) “> / 시작점: “)))
(if (= ‘STR (type !pt1))
(progn
(setq !TextSize (atof !pt1))
(setvar “userr1” !TextSize)
(setq !pt1 (getpoint “n시작점: “))
)
)
(setq !pt2 (getpoint !pt1 “n다음점: “))
(while !pt2
(setq !dist (distance !pt1 !pt2))
(setq !text (rtos (/ !dist 1000.0) 2 1))
(if (<= (rem (atof !text) 1) 0.2) ; 소숫점 이하 수치가 0.2보다 작거나 같을 경우
(progn
(if (<= (atof !text) 0.2) ; 원래값이 0.2보다 작거나 같은 경우 0으로 하면 안되므로
(setq !text (rtos (atof !text) 2 1)) ; 구해진 값 그대로 출력되게 함
(setq !text (rtos (atof !text) 2 0)) ; 나머지의 경우에는 수치를 잘라 정수로 만듬(내림 효과)
)
(setq !addtext (strcat !addtext “+” !text))
)
(if (>= (rem (atof !text) 1) 0.8) ; 소숫점 이하 수치가 0.8보다 크거나 같을 경우
(progn
(setq !text (rtos (+ (atoi !text) 1) 2 0)) ; 소숫점 이하 수치를 자르고 1을 더해 정수로 만듬(올림 효과)
(setq !addtext (strcat !addtext “+” !text))
)
(setq !addtext (strcat !addtext “+” !text)) ; 위 두 가지 경우에 해당되지 않을 경우 소숫점 이하까지 구함
)
)
(command “text” “m” (@polar !pt1 (@angle !pt1 !pt2) (/ !dist 2)) !TextSize 0 !text)
(command “line” !pt1 !pt2 “”)
(setq !ssadd (ssadd (entlast) !ssadd))
(setq !sum (+ !sum (atof !text)))
(setq !pt1 !pt2)
(setq !pt2 (getpoint !pt1 “n다음점: “))
)
(setq !end (strcase (getstring “종료할까요?(Y/N) <N>: “)))
(if (= !end “”)
(progn
(setq !end “N”)
(command “pedit” (entlast) “y” “j” !ssadd “” “w” (/ !TextSize 10.0) “x”) ; line을 pline 객체로 바꾸고 두께를 문자 크기의 10분의 1로 변경함
(setq !ssadd (ssadd))
)
)
)
(command “pedit” (entlast) “y” “j” !ssadd “” “w” (/ !TextSize 10.0) “x”)
(command “text” (getpoint “n결과값을 출력할 위치를 클릭하세요: “) (* !TextSize 1.5) 0 (strcat (rtos !sum 2 2) ” = ” (substr !addtext 2)))
)
;┌───────────────────────────────────────────────────────┐
;│■ 클릭한 두 점 사이의 거리를 구하고 최종 결과값을 출력하는 프로그램 │
;│ ▶ DD1과 달리 소숫점 이하까지 모든 수치가 그대로 출력되게 함 │
;│ ▶ 총거리의 합이 나타날 위치를 클릭하면 구간별 거리값을 나타낸 문자의 1.5배 크기로 출력됨 │
;└───────────────────────────────────────────────────────┘
(defun C:DD2(/ !addtext !end !pt1 !pt2 !dist !text !sum !TextSize !ssadd)
(setq !layer “라인거리산출”)
(if (tblsearch “layer” !layer)
(setvar “clayer” !layer)
(command “layer” “m” !layer “c” 7 !layer “”)
)
(command “-style” “거리” “hy울릉도m” 0 1 0 “n” “n”) ; 스타일 작성
(setq !addtext “” !end “N” !sum 0 !TextSize (getvar “userr1”) !ssadd (ssadd))
(if (= !TextSize 0)
(setq !TextSize (getreal (strcat “n문자 크기를 입력하세요<” (rtos (getvar “userr1”)) “>: “)))
)
(setvar “userr1” !TextSize)
(while (= !end “N”)
(initget 128)
(setq !pt1 (getpoint (strcat “n문자 크기<” (rtos (getvar “userr1”)) “> / 시작점: “)))
(if (= ‘STR (type !pt1))
(progn
(setq !TextSize (atof !pt1))
(setvar “userr1” !TextSize)
(setq !pt1 (getpoint “n시작점: “))
)
)
(setq !pt2 (getpoint !pt1 “n다음점: “))
(while !pt2
(setq !dist (distance !pt1 !pt2))
(setq !text (rtos (/ !dist 1000.0) 2 1))
(setq !addtext (strcat !addtext “+” !text))
(command “text” “m” (@polar !pt1 (@angle !pt1 !pt2) (/ !dist 2)) !TextSize 0 !text)
(command “line” !pt1 !pt2 “”)
(setq !ssadd (ssadd (entlast) !ssadd))
(setq !sum (+ !sum (atof !text)))
(setq !pt1 !pt2)
(setq !pt2 (getpoint !pt1 “n다음점: “))
)
(setq !end (strcase (getstring “종료할까요?(Y/N) <N>: “)))
(if (= !end “”)
(progn
(setq !end “N”)
(command “pedit” (entlast) “y” “j” !ssadd “” “w” (/ !TextSize 10.0) “x”) ; line을 pline 객체로 바꾸고 두께를 문자 크기의 10분의 1로 변경함
(setq !ssadd (ssadd))
)
)
)
(command “pedit” (entlast) “y” “j” !ssadd “” “w” (/ !TextSize 10.0) “x”)
(command “text” (getpoint “n결과값을 출력할 위치를 클릭하세요: “) (* !TextSize 1.5) 0 (strcat (rtos !sum 2 2) ” = ” (substr !addtext 2)))
)