비밀번호를 잊으셨나요?

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

계정이 있나요? 로그인

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 108386
다음
Lv.0
등록일: 2017-05-112017-05-11T10:08:07+09:00 2017-05-11T10:08:07+09:00카테고리: AutoCAD & CADian

리습수정 부탁드려요(거리산출)

 리습 사용하여 거리산출하고 있습니다.
사용하다보니, 산출한 길이가 반올림되었으면 하는데
수정을 해봐도 오류가 나고 안되네요 ㅠㅠ

(예)
 0.1 ~0.4 = 0.5
0.5 = 0.5
0.6~0.9 = 1.0
1.0 = 1.0  
이런식으로 0.5 단위로 산출이 가능할까요?






&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)))
)

  • 0
  • 445 조회
공유
  • Facebook

    관련 있는 질문들

    • 선배님들 덕트 엘보 작성 리습좀 봐주세요
    • insert 삽입할때 레이어도 같이 변경가능할까요?
    • 캐드 파일을 PDF로 변환 할 때 문제점 도와주세요 ㅠ
    • 질문오토캐드 라인타입이 너무 많은데 어떻게 정리하나요..

    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