프로그램
캐드 분류

닫힌폴리라인 및 커브로 합/빼기/교차 리습을 만들어 쓰는중인데 질문드립니다.

컨텐츠 정보

본문

안녕하세요 LISP 을 전문적으로는 배우지 못하고 그냥 사람들이 제작한것들을 짜집기해서 명령어 위주로 조합해서 사용하고있는데요
캐드의 region 객체들이 union subtract intersect 가 되는 것을보고 
폴리라인이나 스플라인들을 region 으로 변경한후
region 끼리 합/차/교차 명령어를 실행한뒤
다시 폴리라인이나 스플라인으로 변경하는 명령어를 만들고있습니다.
그러던중 풀리지않는곳이있어 질문드립니다.
현재 제작한 코드는 아래에 있습니다.
문제가되는부분은 빨간부분으로
영역객체를 닫힌폴리라인이나 닫힌스플라인으로 변환하는 방법을 몰라 검색해보니
단순히 EXPLODE 후 JOIN 을 통해서 변환을 한다고 하더라구요
그래서 
(vl-cmdf "explode" (ssget "P"))
(vl-cmdf "join" (ssget "p") "")
를 써봤지만
EXPLODE 후에 (ssget "P")에서 객체를 다불러들이지 못하는 현상이있습니다.
제 짧은 지식으로는 해결할 방법을 찾기가 힘들어서 질문드립니다~!
(DEFUN C:BU(/ acadObj Doc ssa ssb n en ssi ni eni)
(vl-load-com)
(setq acadObj (vlax-get-acad-object))
(setq Doc (vla-get-ActiveDocument acadObj))
(vla-startundomark Doc)
(prompt "nUNION")
(setq ssa (ssget))
(setq n (sslength ssa))
(if (> n 1)
(progn
(setq ssb (ssadd))
(while (<= 1 n)
(setq n (- n 1))
(setq en (ssmemb (ssname ssa n) ssa))
(vl-cmdf "region" en "")
  (ssadd (entlast) ssb)
)
(vl-cmdf "union" ssb "")
(vl-cmdf "explode" (ssget "P"))
  (setq ssi (ssget "P"))
  (if (= "REGION" (cdr (assoc 0 (entget (ssmemb (ssname ssi 0) ssi)))))
(progn
(setq ni (sslength ssi))
  (while (<= 1 ni)
(setq ni (- ni 1))
(setq eni (ssmemb (ssname ssi ni) ssi))
(vl-cmdf "explode" eni "")
(vl-cmdf "join" (ssget "p") "")
)
)
(vl-cmdf "join" (ssget "p") "")   
)
  (prompt "nSuccess")  
)
  (prompt "nFail")
)
(vla-endundomark Doc)
  (princ)
)

관련자료

댓글 3 / 1 페이지

수야12님의 댓글

리습은 볼줄 알지만 캐드를 모르는 입장에서 설명 하기가 애매한데 레기온이 뭔지 몰라서…

일단  레기온 이후에 엔트라스트 구문으로 마지막에 생성된 레기온(?) 객체를 선택합니다 

벅전님의 댓글

REGION 은 영역 객체의 영어표기 입니다. REGION 명령어는 닫힌 커브들을 영역객체로 바꿔주는 명령어구요. 캐드상에 유니온명령어가 영역객체들만 적용됐기때문에 

1.폴리라인들을 영역객체로 바꾸고
2.바꾼객체를 유니온하고 난 후

벅전님의 댓글

아 검색중에 찾았습니다. 

(initcommandversion 2) 를 추가하니 다 잡히네요 신경써주셔서 감사합니다!
전체 68 / 1 페이지
RSS
번호
제목
이름

최근글


새댓글


알림 0