비밀번호를 잊으셨나요?

비밀번호를 잊으셨나요? 비밀번호를 재설정하려면 이메일 주소를 입력해주세요.

계정이 있나요? 로그인

You must login to ask a question.

비밀번호를 잊으셨나요?

아직 계정이 없으신가요? 회원가입 하기

해당 질문을 신고하는 이유를 간단히 입력해주세요.

해당 답변을 신고하는 이유를 간단히 입력해주세요.

해당 유저를 신고하는 이유를 간단히 입력해주세요.

로그인회원가입

고캐드 – 캐드(CAD) 정보의 중심

고캐드 – 캐드(CAD) 정보의 중심 Logo 고캐드 – 캐드(CAD) 정보의 중심 Logo

고캐드 – 캐드(CAD) 정보의 중심 Navigation

  • Q&A
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 커뮤니티
    • 오늘의이슈
    • 자유게시판
    • 익명게시판
    • 건의게시판
  • 자료실
    • 자료요청
    • 일반파일
    • 도면샘플
    • 유틸리티
    • 기타
  • 작품 갤러리
    • 그래픽
    • 캐드도면
    • 3D모델
    • 기타
  • 뉴스&이벤트
    • 공지사항
    • 뉴스
    • 전시/행사
    • 이벤트
    • 기타
검색
질문하기

Mobile menu

닫기
질문하기
  • 홈
  • 카테고리
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 투표
  • 커뮤니티 그룹
  • Q&A
    • AutoCAD & CADian
    • Inventor & Solidworks
    • Revit & ArchiCAD
    • 자유질문
    • 기타
  • 커뮤니티
    • 오늘의이슈
    • 자유게시판
    • 익명게시판
    • 건의게시판
  • 자료실
    • 자료요청
    • 일반파일
    • 도면샘플
    • 유틸리티
    • 기타
  • 작품 갤러리
    • 그래픽
    • 캐드도면
    • 3D모델
    • 기타
  • 뉴스&이벤트
    • 공지사항
    • 뉴스
    • 전시/행사
    • 이벤트
    • 기타
홈/ 질문/Q 186608
다음
진행 중
익명
익명
등록일: 2023-07-252023-07-25T14:51:08+09:00 2023-07-25T14:51:08+09:00카테고리: AutoCAD & CADian

거리산출 리습 소수점 2째 자리 까지 반올림 내림 없이 표현 하고 싶습니다. 수정좀 부탁 드립니다.

; 십진법 형식의 각도를 라디안 형식으로 변화하는 함수
(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:DD1(/ !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)))
)

  • 1
  • 3 3 답변
  • 303 조회
공유
  • Facebook

    관련 있는 질문들

    • 에어컨 실외기 도면
    • cad에서 기준점 복사 후 다른 파일에 붙여넣기 시 블록참조객체의 길이가 줄어들어있어요
    • 캐드에서 복사해서 방향 옮길때 다른방향으로 가요.
    • 캐드에서 복사해서 방향 옮길때 다른방향으로 가요.

    답변을 남겨주세요
    응답 취소

    답변을 등록하기 위해서는 로그인이 필요합니다.

    비밀번호를 잊으셨나요?

    아직 계정이 없으신가요? 회원가입 하기

    3 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. 캐드플러스 Lv.17
      2023-07-26T09:54:24+09:00답변 등록 답변 등록 일시 2023-07-26 9:54 am

      프로그램을 돌려 보지 못해 잘 모릅니다만
      아마도 (rtos !sum 2 2) 이것 때문이 아닐까요?
      해석을 하면 !sum 변수값을 10진수로 소수점 2자리 까지 표시한다(단 소수점 3자리에서 반올림 함.)
      현재는
      (rtos 12.1234) -> “12.12”
      (rtos 12.1256) -> “12.13”
      이렇게 나올 겁니다.

      또다른 사용 예는
      ex)
      (RTOS 234.34567 2 1) -> “234.3”
      (RTOS 234.34567 2 2) -> “234.35”
      (RTOS 234.34567 2 3) -> “234.346”
      (RTOS 234.34567 2 4) -> “234.3457”
      (RTOS 234.34567 2) -> “234.3457” “234.34”

      (rtos 234.34567 2 2)
      -> “234.35”

      • 1
      • 댓글 달기
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
      • 허성욱 Lv.0
        2023-07-26T16:29:45+09:00에게 댓글을 달았습니다. 답변 등록 일시 2023-07-26 4:29 pm

        정말 감사합니다. 덕분에 잘 해결 되었습니다.

        • 0
        • 댓글 달기
        • 공유
          공유
          • 공유 Facebook
          • 공유 Twitter
        • 캐드플러스 Lv.17
          2023-07-26T17:19:24+09:00에게 댓글을 달았습니다. 답변 등록 일시 2023-07-26 5:19 pm
          (수정됨)

          앗 밑에 내용이 더 길었는데 누락이 되었습니다.
          댓글은 입력글자 수 한계가 있나 봅니다.

          해결은 되었다고 하지만 간단히 지금이라도….
          (rtos !sum 2 2) 이것 대신

          (substr tta 1 (- (strlen(setq tta(rtos !sum 2))) 2))

          • 0
          • 댓글 달기
          • 공유
            공유
            • 공유 Facebook
            • 공유 Twitter

    Sidebar

    질문하기
    공지사항

    • AI CAD의 미래! 캐디안 2025 1+1 프로모션 안내 2025-05-14

    Adv 234x60

    aalan

    Adv 234x60

    aalan

    Adv 120x600

    aalan

    Explore

    • 홈
    • 카테고리
      • AutoCAD & CADian
      • Inventor & Solidworks
      • Revit & ArchiCAD
      • 자유질문
      • 기타
    • 투표
    • 커뮤니티 그룹
    aalan

    Footer

    Support

    • 회사 및 서비스 소개
    • 자주 묻는 질문
    • 문의하기

    Guide

    • 제휴/협업 안내
    • 광고 서비스 안내

    Policy

    • 서비스 이용약관
    • 개인정보 처리방침
    • 광고성 정보 수신 동의

    Contents

    • 고밍스토리
    • 리습 시리즈

    정소프트 | 사업자등록번호 : 677-40-00198 | 대표 : 정은숙 | 이메일 : gocad.manager@gmail.com
    주소 : 서울특별시 강서구 양천로 400-12, 6층 614,615,617호(등촌동, 더리브골드타워)
    Copyright. 2012-2024 GOCAD All rights reserved

    링크 삽입/편집

    대상 URL을 입력하세요

    또는 기존의 콘텐츠에 링크

      검색어가 지정되지 않았습니다. 최근 항목 표시 검색하거나 위와 아래 화살키를 이용하여 항목을 선택하세요.