비밀번호를 잊으셨나요?

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

계정이 있나요? 로그인

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 102942
다음
진행 중
Lv.0
등록일: 2014-12-152014-12-15T10:37:57+09:00 2014-12-15T10:37:57+09:00카테고리: AutoCAD & CADian

챔퍼리습 관련 검토부탁드립니다.

제가 다른분에게 물어봐서 일단 어느정도 리습은 만들어 놨습니다.
제가하고자 하는 리습이 뭐냐면.. 일단 chamfer는 챔퍼인데 좀 다른방식으로 챔퍼를 하는 리습입니다.
챔퍼를 할경우 객체1과 객체2를 클릭하면 제가 원하는 chamfer에대한 대각선 라인을 그릴수 있습니다.
그치만 chamfer명령어는 블록안에 들어가있는 라인이나, arc, spline등에는 먹히지 않습니다.
그래서 저는 캐드작업할때 circle명령어의 ‘ttr’명령을 이용해서 원을 그린후, 그원과 객체1 ,객체2사이의 교차점이 생깁니다. 이 두 교차점을 이어서 라인을 그은 후 원을 삭제하는 방식으로 작업을 하는데요.
이 작업을 하나의 명령어로 만들어 내고 싶습니다.
 저는 설계할때 챔퍼가 무조건 CHAMFER5 CHAMFER10 두가지입니다.
그렇기때문에 명령어 중간에 챔퍼 몇으로 할것이냐? 라는 질문은 필요없고
두개의 명령어를 만들어서 하나는 챔퍼5 하나는 챔퍼 10의 명령어를 만들고 싶네요
(예를들면 챔퍼5는 TF , 챔퍼10은 TD~~~ 그리고 챔퍼5는 파이10짜리원, 챔퍼10은 파이20짜리 원이 되겠네요)
 사진 세장 첨부드립니다…

그리고 아래는 제가 다른분께 질문해서 작성해 주신 리습인데 .. 이게 원까지만 그려진 후에
p2:error: bad argument type: lentityp nil 에러가 뜬후에 되지 않는데 리습이 정상 작동 하게끔 만들고 싶습니다… 리습 고수분들 검토부탁드립니다.. 감사합니다..


(defun c:hh(/ _Line _intersect  flag1 flag2 p1 p2 p3 p4 cir e1 e2) ; dist는 전역변수입니다 여기에 설정하면 안되요 ^^;;
 (defun _Line (p1 p2)
  (entmakex (list (cons 0 “LINE”)
                  (cons 10 p1)
                  (cons 11 p2))))
                 
 (defun _intersect (obj1 obj2 / interxy)
 (setq interxy (vlax-invoke obj1 ‘intersectwith obj2 acextendnone))
 interxy
)                
 (setq flag1 1 flag2 2)
  (or  dist (setq dist 5))
 
  ;(setq dist(cond((getreal (strcat “n챔퍼 값:<“(rtos dist)”>:”)))(dist)))
 
 (setvar ‘OSMODE  512)
 (while flag1
  (setq p1(osnap (getpoint  “np1:”) “_nea”))
  (if p1 (setq flag1 nil))
 )
 (while flag2
   (setq p2(osnap (getpoint   “np2:”) “_nea”))
   (if p2 (setq flag2 nil))
 )
 (command “_.circle” “ttr” p1 p2 “10”)
 (setq cir(entlast))
 (setq e1(car(nentselp (trans p1 1 0 ))) e2(car(nentselp(trans p2 1 0))))


 (setq obj1(vlax-ename->vla-object e1)
       obj2(vlax-ename->vla-object e2)
       obj3(vlax-ename->vla-object cir)
 )
 (setq p3 (_intersect obj1 obj3) p4(_intersect obj2 obj3))
 (_Line p3 p4)
 (entdel cir)
  ;osmode 복귀 구문 넣을것..
 (princ)
) 


(vl-load-com)       

  • 0
  • 13 13 답변
  • 72 조회
공유
  • Facebook

    관련 있는 질문들

    • 오토캐드 2016 맞춤법 검사기 끄는 방법 아시나요
    • 캐드에서 여러도면을 한번에 배치출력 할 수 있는 방법이 있나요
    • step파일, iges 파일을 열어서 볼 수 있는 방법이 있을까요?
    • 캐디안으로 도면을 열때 한글이 ???로 표시되는 문제

    13 답변

    • 작성 순
    • 최신 순
    • 공감 순
    1. aalan
    2. 수야12 Lv.21
      2014-12-15T12:23:43+09:00답변 등록 답변 등록 일시 2014-12-15 12:23 pm

      따라지님 말로는 중학교 수준의 수학이라는데 헐~~ 난 초등 저학년에서 멈춤 ㅜ.ㅜ;;;

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    3. [Deleted User]
      2014-12-15T12:53:17+09:00답변 등록 답변 등록 일시 2014-12-15 12:53 pm

      ㅜㅜ 이게 생각처럼 간단치가 않은것 같네요 ㅜㅜ

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    4. [Deleted User]
      2014-12-15T12:55:42+09:00답변 등록 답변 등록 일시 2014-12-15 12:55 pm

      여기 안되면 저기 올리시고 저기 안되면 여기 올리시고emoticon

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    5. [Deleted User]
      2014-12-15T13:05:05+09:00답변 등록 답변 등록 일시 2014-12-15 1:05 pm

      제가 이렇게저렇게 바꿔가면서 시도해보는데 너무 안되서요..
      여기 계신분이 저기도 계시고 그런거 알지만 그래도 더 많은분 보시면 도움얻을수 있을까 해서요. 제가 공부해서 만들기에는 너무 수준이 높은지라 질문글 또 올리게 되었네요… 안좋게 보이셨으면 죄송합니다

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    6. [Deleted User]
      2014-12-15T13:37:29+09:00답변 등록 답변 등록 일시 2014-12-15 1:37 pm

      다른건 다 그렇다쳐도
      블록안에있는건
      해당블록을 한번 파괴해도 된다는건가요.

      수정해버리면 동일한 블록명으로 된건 다 수정될텐데
      그걸 다 새로 지정하라는건가요?

      좀 현실성 있는걸 말씀해주세요.

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    7. [Deleted User]
      2014-12-15T13:49:14+09:00답변 등록 답변 등록 일시 2014-12-15 1:49 pm

      전 블록을 파괴해도 된다고 한적 없고 그렇기때문에 그걸 다 새로지정할 필요도 없는데요 ..?
      CIRCLE , TTR명령어는 객체가 블록이든 원이든 상관없이 탄젠트 오스냅이 걸리기때문에
      전 이걸 수작업으로 할떄에도 블록은 건드리지 않아요 ..
      객체가 블록일지라도 TANGENT오스냅은  잡히잖아요 ? 그 TANGENT ,TANGENT , RADIUS를 이용해서 원을 그리는걸 말하는거얘요..

      설명이 부족해 죄송합니다..

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    8. [Deleted User]
      2014-12-15T14:58:39+09:00답변 등록 답변 등록 일시 2014-12-15 2:58 pm

      ;꼼수로~ 혹 사용하시다 오류나도 몰러유~ ㅋㅋㅋ
      (defun c:hh(/ *error* _Line r os p1 p2 es tmp circle ip n a360 ang ag pt sp ep)
       (defun *error* ( msg )
        (if os (setvar ‘osmode os))
        (if (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”))
          (princ (strcat “n오류: ” msg))
        )
        (princ)
       )
       (defun _Line (p1 p2)
        (entmakex (list (cons 0 “LINE”) (cons 10 p1) (cons 11 p2)))
       )
       (setq r 10) ;반지름
       (setq os (getvar ‘osmode))
       (setvar ‘osmode 512)
       (while (null (setq p1 (osnap (getpoint  “np1:”) “_nea”))))
       (while (null (setq p2 (osnap (getpoint  “np2:”) “_nea”))))
       (setq tmp (entlast) es (cons (car (nentselp p2)) (cons (car (nentselp p1)) es)))
       (setvar ‘osmode 0)
       (command “_.circle” “ttr” p1 p2 (rtos r))
       (if (null (equal tmp (setq circle (entlast))))
        (progn
         (setq ip (cdr (assoc 10 (entget circle))) a360 (+ pi pi) ang 0 ag (/ pi 180))
         (while (and (or (null sp) (null ep)) (< ang a360))
          (if (and
            (progn
             (redraw circle 1)
             (setq pt (osnap (polar ip ang r) “_int”))
             (redraw circle 2)
             pt
            )
            (equal (distance pt ip) r 1e-8)
            (member (car (nentselp pt)) es)
           )
           (cond
            ((null sp) (setq sp pt))
            ((null (equal pt sp)) (setq ep pt))
           )
          )
          (setq ang (+ ang ag))
         )
         (if (and sp ep)
          (_Line sp ep)
         )
         (entdel circle)
        )
       )
       (setvar ‘osmode os)
       (princ)
      )

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    9. [Deleted User]
      2014-12-15T15:25:10+09:00답변 등록 답변 등록 일시 2014-12-15 3:25 pm

      우와!!!!  뭐하남님  정말 감사드립니다 .ㅜㅜㅜㅜ 맞아요 제가 이렇게 라인그어지는걸 말한건데요 그대로네요 ..
      UCS WORLD 상태에서만 원위치에 라인이 그어지는데 이건 변경 불가할까요 ??
      UCS변경하는 일이 일할떄 너무 많아서요 ㅜㅜ… UCS가 어디에있든 관계없이 작도 되도록은 불가능할까요 ?
      회사 직원분들이 이 리습보고 엄청 좋아하시네요 ㅜㅜㅜ
      정말 감사드립니다 !!

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    10. [Deleted User]
      2014-12-15T15:54:19+09:00답변 등록 답변 등록 일시 2014-12-15 3:54 pm

      ;ucs는 수정했습니다. 허나 솔직히 말하자면 이런식은 선이 겹치거나 근처에 교차점이 있으면 오류가 납니다. 나중에 공부하셔서 잘 만들어보세요 ㅋ
      (defun c:hh(/ *error* _Line r os p1 p2 es tmp circle ip n a360 ang ag pt sp ep)
       (defun *error* ( msg )
        (if os (setvar ‘osmode os))
        (if (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”))
          (princ (strcat “n오류: ” msg))
        )
        (princ)
       )
       (defun _Line (p1 p2)
        (entmakex (list (cons 0 “LINE”) (cons 10 p1) (cons 11 p2)))
       )
       (setq r 10) ;반지름
       (setq os (getvar ‘osmode))
       (setvar ‘osmode 512)
       (while (null (setq p1 (osnap (getpoint  “np1:”) “_nea”))))
       (while (null (setq p2 (osnap (getpoint  “np2:”) “_nea”))))
       (setq tmp (entlast) es (cons (car (nentselp p2)) (cons (car (nentselp p1)) es)))
       (setvar ‘osmode 0)
       (command “_.circle” “ttr” p1 p2 (rtos r))
       (if (null (equal tmp (setq circle (entlast))))
        (progn
         (setq ip (trans (cdr (assoc 10 (entget circle))) 0 1) a360 (+ pi pi) ang 0 ag (/ pi 180))
         (while (and (or (null sp) (null ep)) (< ang a360))
          (if (and
            (progn
             (redraw circle 1)
             (setq pt (osnap (polar ip ang r) “_int”))
             (redraw circle 2)
             pt
            )
            (equal (distance pt ip) r 1e-8)
            (member (car (nentselp pt)) es)
           )
           (cond
            ((null sp) (setq sp pt))
            ((null (equal pt sp)) (setq ep pt))
           )
          )
          (setq ang (+ ang ag))
         )
         (if (and sp ep)
          (_Line (trans sp 1 0) (trans ep 1 0))
         )
         (entdel circle)
        )
       )
       (setvar ‘osmode os)
       (princ)
      )

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    11. [Deleted User]
      2014-12-15T16:16:35+09:00답변 등록 답변 등록 일시 2014-12-15 4:16 pm

      감사드립니다 ㅜㅜ.. 덕분에 사용할수 있게되었네요
      뭐하남님  말씀대로 근처에 교차점 있을경우는 잘안되는군요 .. ㅜㅜ
      일단은 만들어주신대로 사용해봐야겠네요
      정말감사드립니다 ^^

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    12. [Deleted User]
      2014-12-15T17:05:49+09:00답변 등록 답변 등록 일시 2014-12-15 5:05 pm

      ;마지막으로 보완을 좀 했숨다…
      (defun c:hh (/ *error* _Copynested _Line r os p1 p2 es tmp circle ip nen1 nen2 n a360 ang ag tmp1 tmp2 pt sp ep)
      (vl-load-com)
       (defun *error* ( msg )
        (if os (setvar ‘osmode os))
        (if (not (wcmatch (strcase msg t) “*break,*cancel*,*exit*”))
          (princ (strcat “n오류: ” msg))
        )
        (princ)
       )
       (defun _Copynested (en mat / _fixdxfdata ent)
        (defun _fixdxfdata (ent) (vl-remove-if ‘(lambda ( pair ) (member (car pair) ‘(5 6 8 102 330))) ent))
              (if
                  (setq en
                      (cond
                          ((= “VERTEX” (cdr (assoc 0 (setq ent (entget en)))))
                              (entmakex (_fixdxfdata (entget (setq en (cdr (assoc 330 ent))))))
                              (setq en (ennext en) ent (entget  en))
                              (while (/= “SEQEND” (cdr (assoc 0 ent)))
                                  (entmakex (_fixdxfdata ent))
                                  (setq en (ennext en)
                                        ent (entget  en)
                                  )
                              )
                              (cdr (assoc 330 (entget (entmakex (_fixdxfdata ent)))))
                          )
                          ((entmakex (_fixdxfdata ent)))
                      )
                  )
                  (if mat (vla-transformby (vlax-ename->vla-object en) (vlax-tmatrix mat)))
              )
              en
          )
       (defun _Line (p1 p2)
        (entmakex (list (cons 0 “LINE”) (cons 10 p1) (cons 11 p2)))
       )
       (setq r 10) ;반지름
       (setq os (getvar ‘osmode))
       (setvar ‘osmode 512)
       (while (null (setq p1 (osnap (getpoint  “np1:”) “_nea”))))
       (while (null (setq p2 (osnap (getpoint  “np2:”) “_nea”)))) 
       (setq tmp (entlast) nen1 (nentselp p1) nen2 (nentselp p2))
       (setvar ‘osmode 0)
       (command “_.circle” “ttr” p1 p2 (rtos r))
       (if (null (equal tmp (setq circle (entlast))))
        (progn
         (setq ip (trans (cdr (assoc 10 (entget circle))) 0 1) a360 (+ pi pi) ang 0 ag (/ pi 180))
         (setq tmp1 (_Copynested (car nen1) (caddr nen1)) tmp2 (_Copynested (car nen2) (caddr nen2)) es (list tmp1 tmp2))
         (while (and (or (null sp) (null ep)) (< ang a360))
          (if (and
            (progn
             (redraw circle 1)
             (setq pt (osnap (polar ip ang r) “_int”))
             (redraw circle 2)
             pt
            )
            (equal (distance pt ip) r 1e-8)
            (member (car (nentselp pt)) es)
           )
           (cond
            ((null sp) (setq sp pt))
            ((null (equal pt sp 1e-8)) (setq ep pt))
           )
          )
          (setq ang (+ ang ag))
         )
         (if (and sp ep)
          (_Line (trans sp 1 0) (trans ep 1 0))
         )
         (mapcar ‘entdel (list tmp1 tmp2 circle))
        )
       )
       (setvar ‘osmode os)
       (princ)
      )

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    13. [Deleted User]
      2014-12-15T20:43:04+09:00답변 등록 답변 등록 일시 2014-12-15 8:43 pm

      감사합니다 뭐하남님 ^^
      수정해주신 리습 사용중에 간혹
      오류: bad argument type: lentityp nil
      라는 오류뜰때가 있는데 이런경우는 어떤경우인가요 ? 어떤점이 수정된지 몰라 다시한번만 더 질문드립니다 .ㅜㅜ 죄송합니다..

      • 0
      • 공유
        공유
        • 공유 Facebook
        • 공유 Twitter
    14. [Deleted User]
      2014-12-15T20:45:00+09:00답변 등록 답변 등록 일시 2014-12-15 8:45 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