비밀번호를 잊으셨나요?

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

계정이 있나요? 로그인

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 112912
다음
진행 중
Lv.0
등록일: 2021-02-262021-02-26T09:24:25+09:00 2021-02-26T09:24:25+09:00카테고리: AutoCAD & CADian

리습) 폴리라인 절점마다 각도 치수 자동기입 가능할까요?

작업시 폴리선 변곡점마다 각도치수를 재야 하는데
dan(dimangular) 명령어로 일일히 찍어서 하기엔 양이 너무 많고 시간이 걸립니다.

검색과 구글링을 해보니 
닫힌 폴리라인 다각형 형태에서 클릭 한번으로 치수를 뽑아주는 리습은 있는데
선형치수가 아닌 각도치수를 뽑아주는 리습은 찾지 못했습니다.
1. 폴리라인 절점마다 각도 치수 생성
2. 폴리라인 클릭시 한번에 치수 자동 기입
3. 시작점->종점 기준으로 좌우각도 선택 기능(혹은 외각 치수 or 내각 치수 )
이정도의 기능이 가능한 리습이나 비슷한 리습 가지고 계신분 있을까요?
몇일동안 찾아보다 너무 답답한 나머지 리습파일분해해서 수정을 하려고 하는데
어디서부터 어떻게 건드려야 할지 막막하네요..
폴리선 각도 치수 한번에 뽑아주는 리습을 가지고 계신 분이나
수정하는데 도움 주실 고수분 계실까요..?
리습-DPL
출처-http://autolisp-exchange.com/

 Program Name: DPL – Dimension Polylines
; Created By:   Terry Miller (Email: terrycadd@yahoo.com)
;               (URL: http://web2.airmail.net/terrycad)
; Date Created: 5-20-08
; Function:     Dimensions Polyline shapes
;-------------------------------------------------------------------------------
; Revision History
; Rev  By     Date    Description
;-------------------------------------------------------------------------------
; 1    TM   5-20-08   Initial version
;-------------------------------------------------------------------------------
; c:DPL - Dimensions Polyline
;-------------------------------------------------------------------------------
(defun c:DPL (/ EntName^ EntPick@)
  (setvar "CMDECHO" 0)
  (if (setq EntPick@ (entsel "nSelect Polyline to dimension: "))
    (if (= (cdr (assoc 0 (entget (car EntPick@)))) "LWPOLYLINE")
      (progn
        (setq EntName^ (cdr (assoc -1 (entget (car EntPick@)))))
        (DimPL EntName^)
      );progn
    );if
  );if
  (if (not EntName^)
    (princ "nNo Polyline selected.")
  );if
  (princ)
);defun c:DPL
;-------------------------------------------------------------------------------
; DimPL - Function to dimension Polyline
; Arguments: 1
;   EntName^ = Polyline entity name
; Returns: Dimensions Polyline
;-------------------------------------------------------------------------------
(defun DimPL (EntName^ / Bottom@ Clayer$ CW# DiffAng DimPts: DimSpace~ EntList@
  Item LastAng~ LastPt Left@ List@ NW@ Osmode# P0 P1 P2 Pt Pts@ PtsLen Right@ SE@
  Top@ X~ X1~ X1Y1 X1Y2 X1Ys@ X2~ X2Y1 X2Y2 X2Ys@ XPts@ Y~ Y1~ Y1X1 Y1X2 Y1Xs@ Y2~
  Y2X1 Y2X2 Y2Xs@ YPts@)
  ;-----------------------------------------------------------------------------
  (defun DimPts: (Pts@ StartPt EndPt Type$ / Add Num1~ Num2~ Nums1@ Nums2@ P1 P2
    Pt Return@)
    (setq Add t)
    (foreach Pt (member StartPt (append Pts@ Pts@))
      (if Add
        (setq Return@ (append Return@ (list Pt)))
      );if
      (if (equal Pt EndPt)
        (setq Add nil)
      );if
    );foreach
    (foreach Pt Return@
      (if (member Type$ (list "Left" "Right"))
        (setq Nums1@ (append Nums1@ (list (cadr Pt))))
        (setq Nums1@ (append Nums1@ (list (car Pt))))
      );if
    );foreach
    (foreach Num1~ (vl-sort Nums1@ '<)
      (setq Nums2@ nil)
      (foreach Pt Return@
        (if (member Type$ (list "Left" "Right"))
          (if (= (cadr Pt) Num1~)
            (setq Nums2@ (append Nums2@ (list (car Pt))))
          );if
          (if (= (car Pt) Num1~)
            (setq Nums2@ (append Nums2@ (list (cadr Pt))))
          );if
        );if
      );foreach
      (if (member Type$ (list "Left" "Bottom"))
        (setq Nums2@ (vl-sort Nums2@ '<))
        (setq Nums2@ (reverse (vl-sort Nums2@ '<)))
      );if
      (foreach Num2~ (cdr Nums2@)
        (if (member Type$ (list "Left" "Right"))
          (setq Pt (list Num2~ Num1~))
          (setq Pt (list Num1~ Num2~))
        );if
        (setq Return@ (vl-remove Pt Return@))
      );foreach
    );foreach
    (cond
      ((= Type$ "Left")
        (vl-sort Return@ (function (lambda (P1 P2)(< (cadr P1)(cadr P2)))))
      );case
      ((= Type$ "Top")
        (vl-sort Return@ (function (lambda (P1 P2)(< (car P1)(car P2)))))
      );case
      ((= Type$ "Right")
        (vl-sort Return@ (function (lambda (P1 P2)(> (cadr P1)(cadr P2)))))
      );case
      ((= Type$ "Bottom")
        (vl-sort Return@ (function (lambda (P1 P2)(> (car P1)(car P2)))))
      );case
    );cond
  );defun DimPts:
  ;-----------------------------------------------------------------------------
  (setq EntList@ (entget EntName^))
  (if (= (cdr (assoc 0 EntList@)) "LWPOLYLINE")
    (progn
      (foreach List@ EntList@
        (if (= (car List@) 10)
          (if (not (equal (cdr List@) LastPt))
            (progn
              (setq Pts@ (append Pts@ (list (cdr List@))))
              (if (> (length Pts@) 2)
                (if (/= (angle LastPt (cdr List@)) LastAng~) (setq DiffAng t))
              );if
              (if (> (length Pts@) 1)
                (setq LastAng~ (angle LastPt (cdr List@)))
              );if
              (setq LastPt (cdr List@))
            );progn
          );if
        );if
      );foreach
      (if (equal (car Pts@) (last Pts@))
        (setq Pts@ (reverse (cdr (reverse Pts@))))
      );if
      (setq PtsLen (length Pts@))
    );progn
    (exit)
  );if
  (foreach Pt Pts@
    (setq X~ (atof (rtos (car Pt) 2 8))
          Y~ (atof (rtos (cadr Pt) 2 8))
          XPts@ (append XPts@ (list X~))
          YPts@ (append YPts@ (list Y~))
          Pts@ (cdr (append Pts@ (list (list X~ Y~))))
    );setq
  );foreach
  (setq XPts@ (vl-sort XPts@ '<)
        YPts@ (vl-sort YPts@ '<)
        X1~ (car XPts@)
        X2~ (last XPts@)
        Y1~ (car YPts@)
        Y2~ (last YPts@)
  );if
  (foreach Pt Pts@
    (if (= (car Pt) X1~) (setq X1Ys@ (append X1Ys@ (list (cadr Pt)))))
    (if (= (car Pt) X2~) (setq X2Ys@ (append X2Ys@ (list (cadr Pt)))))
    (if (= (cadr Pt) Y1~) (setq Y1Xs@ (append Y1Xs@ (list (car Pt)))))
    (if (= (cadr Pt) Y2~) (setq Y2Xs@ (append Y2Xs@ (list (car Pt)))))
  );foreach
  (setq X1Ys@ (vl-sort X1Ys@ '<)
        X2Ys@ (vl-sort X2Ys@ '<)
        Y1Xs@ (vl-sort Y1Xs@ '<)
        Y2Xs@ (vl-sort Y2Xs@ '<)
        X1Y1 (list X1~ (car X1Ys@))
        X1Y2 (list X1~ (last X1Ys@))
        X2Y1 (list X2~ (car X2Ys@))
        X2Y2 (list X2~ (last X2Ys@))
        Y1X1 (list (car Y1Xs@) Y1~)
        Y1X2 (list (last Y1Xs@) Y1~)
        Y2X1 (list (car Y2Xs@) Y2~)
        Y2X2 (list (last Y2Xs@) Y2~)
        Pts@ (member X1Y1 (append Pts@ Pts@))
  );setq
  (while (> (length Pts@) PtsLen)
    (setq Pts@ (reverse (cdr (reverse Pts@))))
  );while
  (setq SE@ (member X2Y2 Pts@) NW@ Pts@)
  (foreach Item SE@
    (setq NW@ (vl-remove Item NW@))
  );foreach
  (setq SE@ (append SE@ (list X1Y1))
        NW@ (append NW@ (list X2Y2))
        CW# 0
  );setq
  (foreach Pt (list Y2X1 Y2X2)
    (if (member Pt NW@) (setq CW# (1+ CW#)))
    (if (member Pt SE@) (setq CW# (1- CW#)))
  );foreach
  (foreach Pt (list Y1X1 Y1X2)
    (if (member Pt SE@) (setq CW# (1+ CW#)))
    (if (member Pt NW@) (setq CW# (1- CW#)))
  );foreach
  (if (< CW# 0)
    (setq Pts@ (append (list (car Pts@))(reverse (cdr Pts@))))
  );if
  (setq Left@ (DimPts: Pts@ Y1X1 Y2X1 "Left"))
  (setq Top@ (DimPts: Pts@ X1Y2 X2Y2 "Top"))
  (setq Right@ (DimPts: Pts@ Y2X2 Y1X2 "Right"))
  (setq Bottom@ (DimPts: Pts@ X2Y1 X1Y1 "Bottom"))
  ;-----------------------------------------------------------------------------
  (command "UNDO" "BEGIN")
  (setq DimSpace~ (* (getvar "DIMSCALE") (getvar "DIMTXT") 3))
  (setq Osmode# (getvar "OSMODE")) (setvar "OSMODE" 0)
  (setq Clayer$ (getvar "CLAYER"))
  (command "LAYER" "S" (GetDimLayer) "");<--Change to your Dim layer info
  (setq P0 (polar X1Y1 pi (* DimSpace~ 1.5))
        P1 (car Left@)
  );setq
  (foreach P2 (cdr Left@)
    (command "DIM1" "VER" P1 P2 P0 "")
    (setq P1 P2)
  );foreach
  (if (> (length Left@) 2)
    (progn
      (setq P0 (polar P0 pi DimSpace~))
      (command "DIM1" "VER" (car Left@) (last Left@) P0 "")
    );progn
  );if
  (setq P0 (polar Y2X1 (* pi 0.5) (* DimSpace~ 1.5))
        P1 (car Top@)
  );setq
  (foreach P2 (cdr Top@)
    (command "DIM1" "HOR" P1 P2 P0 "")
    (setq P1 P2)
  );foreach
  (if (> (length Top@) 2)
    (progn
      (setq P0 (polar P0 (* pi 0.5) DimSpace~))
      (command "DIM1" "HOR" (car Top@) (last Top@) P0 "")
    );progn
  );if
  (setq P0 (polar X2Y2 0 (* DimSpace~ 1.5))
        P1 (car Right@)
  );setq
  (if (and (> (length Right@) 2) DiffAng)
    (foreach P2 (cdr Right@)
      (command "DIM1" "VER" P1 P2 P0 "")
      (setq P1 P2)
    );foreach
  );if
  (setq P0 (polar Y1X2 (* pi 1.5) (* DimSpace~ 1.5))
        P1 (car Bottom@)
  );setq
  (if (and (> (length Bottom@) 2) DiffAng)
    (foreach P2 (cdr Bottom@)
      (command "DIM1" "HOR" P1 P2 P0 "")
      (setq P1 P2)
    );foreach
  );if
  (setvar "CLAYER" Clayer$)
  (setvar "OSMODE" Osmode#)
  (command "UNDO" "END")
  (princ)
);defun DimPL
;-------------------------------------------------------------------------------
; GetDimLayer - Returns the layer name that's on and has the most dimensions,
; or the current layer name if there's no dimensions.
;-------------------------------------------------------------------------------
(defun GetDimLayer (/ DimLayer$ EntList@ Index# Layer$ LayerInfo@ LayerList@ List@ Num# SS&)
  (setq Layer$ (getvar "CLAYER"))
  (if (setq SS& (ssget "X" '((0 . "DIMENSION"))))
    (progn
      (setq Index# -1)
      (while (< (setq Index# (1+ Index#)) (sslength SS&))
        (setq EntList@ (entget (ssname SS& Index#))
              DimLayer$ (cdr (assoc 8 EntList@))
              LayerInfo@ (tblsearch "LAYER" DimLayer$)
        );setq
        (if (and (= (cdr (assoc 70 LayerInfo@)) 0)(> (cdr (assoc 62 LayerInfo@)) 0))
          (if (assoc DimLayer$ LayerList@)
            (setq Num# (1+ (cdr (assoc DimLayer$ LayerList@)))
                  LayerList@ (subst (cons DimLayer$ Num#) (assoc DimLayer$ LayerList@) LayerList@)
            );setq
            (setq LayerList@ (append LayerList@ (list (cons DimLayer$ 1))))
          );if
        );if
      );while
      (if LayerList@
        (progn
          (setq Layer$ (car (car LayerList@))
                Num# (cdr (car LayerList@))
          );setq
          (foreach List@ (cdr LayerList@)
            (if (> (cdr List@) Num#)
              (setq Layer$ (car List@)
                    Num# (cdr List@)
              );setq
            );if
          );foreach
        );progn
      );if
    );progn
  );if
  Layer$
);defun GetDimLayer
;-------------------------------------------------------------------------------
(princ);End of DPL.lsp
  • 0
  • 6 6 답변
  • 111 조회
공유
  • Facebook

    관련 있는 질문들

    • 정말 부탁드립니다 오피스 베이스 도면 하나 받을 수 있을까요......................ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ
    • 캐드 기계설계 보조 프로그램을 찾고있습니다.
    • 오토리습 open함수 질문
    • 3D 작업중 화면이동시 좌표계가 계속 돌아감

    6 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. CATS_Developer Lv.19
      2021-02-26T10:19:56+09:00답변 등록 답변 등록 일시 2021-02-26 10:19 am

      https://cafe.naver.com/autocats

      리습은 아니지만 제가 한번 만들어 볼게요 ㅎㅎ

      아 혹시 CAD 2012 사용하시는건가요 ?
      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    3. [Deleted User]
      2021-02-26T15:46:17+09:00답변 등록 답변 등록 일시 2021-02-26 3:46 pm

      아이고 감사합니다 캣츠디벨로퍼님ㅠㅠ

      정확히는 zwCad 사용중인데 오토캐드 리습파일 적용 가능합니다
      혹시 버전에 따라 실행이 안되는건가요?
      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    4. CATS_Developer Lv.19
      2021-02-26T16:43:19+09:00답변 등록 답변 등록 일시 2021-02-26 4:43 pm

      네. 리습과 달리 버전이나 프로그램에 맞게 작업을 해야합니다.

      ZWCAD에서 사용할 수 있게 만들어 드려볼게요 ㅎㅎ
      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    5. [Deleted User]
      2021-02-26T17:54:17+09:00답변 등록 답변 등록 일시 2021-02-26 5:54 pm

      정말정말 감사합니다

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    6. CATS_Developer Lv.19
      2021-03-03T16:12:35+09:00답변 등록 답변 등록 일시 2021-03-03 4:12 pm
      감자캗님, 
      ZWCAD 버전용으로 https://cafe.naver.com/autocats/359 게시글에 올려뒀습니다.
      문의하신 기능은 PDIMANG 명령어 입니다.
      https://cafe.naver.com/autocats/377
      폴리선에 일괄로 각도 치수 표현하는 기능입니다.
      각도 위치 변경은 ‘MVAngDIM’ 입니다. 각도 치수를 ‘좌/우’로 움직일 수 있습니다.
      참고해주세요 ^^
      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    7. [Deleted User]
      2021-03-08T08:01:07+09:00답변 등록 답변 등록 일시 2021-03-08 8:01 am

      네 감사합니다 잘쓰도록 하겠습니다!

      • 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