비밀번호를 잊으셨나요?

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

계정이 있나요? 로그인

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 96649
다음
진행 중
물1
물1Lv.0
등록일: 2012-11-152012-11-15T16:49:28+09:00 2012-11-15T16:49:28+09:00카테고리: AutoCAD & CADian

길이 구하는 리습 수정

아래는 도면에서 두점간의 길이를 구하고, 더하여 합을 내는 리습입니다.
도면을 가지고 물량산출할때 상당히 유용한 리습입니다.
그런데 구해져 나오는 답이 mm단위 입니다.
해서 이것을 M단위로 표시할수 있었으면 합니다.
라인위에 표시하는 값도 M단위로 표시하였으면 합니다.
가령 800.00 = 0.8
소수 둘째자리에서 무조건 올림하는 것으로 하였으면 합니다.(810 = 0.9)
고수님들 부탁드립니다.

; 십진법 형식의 각도를 라디안 형식으로 변화하는 함수
(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 1.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 1.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
  • 1 1 답변
  • 216 조회
공유
  • Facebook

    관련 있는 질문들

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

    1 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. Jack_Lee Lv.0
      2016-10-28T17:43:01+09:00답변 등록 답변 등록 일시 2016-10-28 5:43 pm

      좋은 자료 감솨여~!(__)~!

      • 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