성심 성의껏 질문을 작성하여 주세요, 대충하시면 답변도 대충작성합니다.^^
① CAD 종류 : 오토캐드
② VERSION : 2016
③ 운영 체제 : 윈도우10
④ 질문내용 및 스크린샷(이미지 및동영상)
![](https://t1.daumcdn.net/cfile/cafe/99E9E24C5D9BF94015)
명령어를 치면 기본적으로 1번처럼 되는데 2번처럼 되기를 원합니다
블록사이에 있는 원내부만 트림이 되게끔 할 방법이 있을까요
명령어 331
(defun c:331 ( / *error* trim-blk rotate-bbox sv-cmd
sv-osm acad-doc ss cnt)
(defun *error* (msg)
(vla-EndUndoMark acad-doc)
(setvar 'cmdecho sv-cmd)
(setvar 'osmode sv-osm)
)
(defun trim-blk (pts / ln-set ln-obj sp ep tmp int-lst ct)
(if(setq ln-set(ssget "cp" pts '((0 . "*LINE,ARC"))))
(progn
(setq pts(reverse(cons(car pts)(reverse pts))))
(repeat(setq ct(sslength ln-set))
(setq ln-obj (vlax-ename->vla-object
(ssname ln-set
(setq ct(1- ct))
)
)
sp (vlax-curve-getStartPoint ln-obj)
ep (vlax-curve-getEndPoint ln-obj)
tmp pts
int-lst '()
)
(while(>(length tmp)1)
(if(setq int(inters sp ep(car tmp)(cadr tmp)nil))
(if(inters sp int (car tmp)(cadr tmp))
(setq int-lst(cons int int-lst))
)
)
(setq tmp(cdr tmp))
)
(if(=(length int-lst)2)
(vl-cmdf "_.break"
(list
(vlax-vla-object->ename ln-obj)
(car int-lst)
)
(cadr int-lst)
)
)
)
)
)
)
(defun rotate-bbox (blk-obj / mspace blk-rot blk-pt blk-bbox
p1 p2 p3 p4 x tmp)
(setq mspace (vla-get-modelspace acad-doc)
blk-rot (vlax-get-property blk-obj 'Rotation)
blk-pt (vlax-get-property blk-obj 'InsertionPoint)
)
(vlax-put-property blk-obj 'Rotation 0.0)
(setq blk-bbox (vla-getBoundingBox blk-obj 'p1 'p3)
p1 (vlax-safearray->list p1)
p3 (vlax-safearray->list p3)
p1 (list(car p1)(cadr p1))
p3 (list(car p3)(cadr p3))
p2 (list(car p1)(cadr p3))
p4 (list(car p3)(cadr p1))
)
(vlax-put-property blk-obj 'Rotation blk-rot)
(foreach x '(p1 p2 p3 p4)
(vla-rotate
(vla-addpoint mspace(vlax-3d-point(eval x)))
blk-pt
blk-rot
)
(set x(vlax-ename->vla-object(entlast)))
)
(foreach x '(p1 p2 p3 p4)
(setq tmp(eval x))
(set x
(vlax-safearray->list
(vlax-variant-value
(vlax-get-property(eval x)'Coordinates)
)
)
)
(vla-delete tmp)
)
(list p1 p2 p3 p4)
)
(setq sv-cmd (getvar "cmdecho")
sv-osm (getvar "osmode")
acad-doc (vla-get-activedocument
(vlax-get-Acad-Object)
)
)
(setvar 'cmdecho 0)
(setvar 'osmode 0)
(vla-StartUndoMark acad-doc)
(if(setq ss(ssget '((0 . "INSERT"))))
(repeat(setq cnt(sslength ss))
(trim-blk
(rotate-bbox
(vlax-ename->vla-object
(ssname ss
(setq cnt(1- cnt))
)
)
)
)
)
)
(vla-EndUndoMark acad-doc)
(setvar 'cmdecho sv-cmd)
(setvar 'osmode sv-osm)
(princ)
)
※ 유의사항
- ①말머리 : 말머리를 달아야 구분이 쉽겠죠^^(필수 선택)
- ②Screenshot : 이해를 돕기위해 삽입요망.
- ③파일 첨부 : 상위버전에서 테스트할 파일이 아니면 가급적 하위버전으로 저장후 첨부.
해당리습/해당파일(DWG) 도 같이 첨부하여 주세요.
- ④제 목 : 질문 내용 반영(개략적인 내용), 예) 해치를 만들고 싶어요, pline을 연결할려면?
금지어(만들어주세요? 해주세요? 안되는데 이렇게 변경해주세요? 등등)
- ⑤질문글 삭제금지 : 질문후 댓글이 달린글은 삭제금지.
여러 리플러들이 소중한 시간을 내어서 고민한후 댓글을 작성한 이상 "강력조치" 토록 하겠음.
※ 정답만이 댓글은 아닙니다. 그 답이 맞던 틀리던 그건 그 댓글로서 존중되어야 합니다.
회원님들이 글을 읽었다는것과 댓글을 달았다는건 그만큼 관심을 가지고 있고 또 그 답을 해주기 위해
검색도 해보고 도움말도 보고 고민도 하는 일련의 과정을 거치면서 나오기 때문이죠.
이에 대한 고마움과 감사함을 모르는 테러행위(?)는 없었으면 합니다.
첫댓글 스샷 도면이 있어야 할 듯...상황 만들어서 해보니 1번 처럼 되지 않는 거 같은데..뭔가 다른 이유가 있을 거 같네요...
스샷 도면 첨부 바랍니다.
스샷도면은 아니지만 새로 만들어서 추가했습니다
부연설명을 하자면 원(닫힌공간) 내부만 선이 트림이 되면 좋겠습니다
1번은 살짝 잘못되었는데 원 양쪽의 흰색 선까지 블록이기에 블록의 경계(?)에서 내접한 부분의 객체만 삭제가 된것입니다