CAFE

★ CAD/LISP/분과 Q&A

[[Lisp]]spline을 pline으로 변환하는 stp 리습사용시 라인이 지워지는 현상 수정부탁드립니다.

작성자컴이|작성시간09.05.24|조회수1,414 목록 댓글 2

 

※성심 성의껏 질문을 작성하여 주세요, 대충하시면 답변도 대충작성합니다.^^

① CAD 종류   : AutoCAD

② VERSION   : 2002

③ 분        과   : 기계

④ 파일  첨부  :

첨부파일 stp.lsp

 

⑤ 질문  내용  : 주말농부님께서 제작하신 리습인데요... 1년동안 너무 감사하게 잘 사용했습니다. 그런데 욕심히 과해서 그런지 불편한 부분을 감히 부탁드립니다.

이미 몇분이서 질문을 올리셨는데요. 직선에 가까운 스플라인을 변환시 선 자체가 지워져버리는 현상입니다.

특히 일러스트에서 작업한 파일을 dwg나 dxf로 저장한 후 stp 명령으로 스플라인을 아크로 변환하는 작업을 많이 하는데  직선에 가까운 선들이 많게는 수십개나 지워져버려 일일이 라인을 새로 그려줘야 합니다.

리습 명령어는 거의 문외한이라 고수님들의 손길을 부탁드립니다.

 

 ;;=========================================================================
;  스플라인을 아크로 (2007.6.1 주말농부)
;  ->스플라인(spline)을 arc로 이루어진 폴리라인(pline)으로 바꾸기
;;------spline to pline----------------------------------------------------
(defun c:stp(/ os ss a ea n en en_dis dis dis1 point_list point tem cla la ed)
;->*error* start
 (defun *error* (msg)(princ "error: ")(princ msg)
 (setvar "osmode" os) (if la (setvar "clayer" cla))
 (princ))
;-<*error* end
   (vl-load-com)
   (setq os (getvar "osmode"))
   (setq cla (getvar "clayer"))
   (setvar "osmode" 0)
   (prompt " spline 을 pline<arc>으로...")(terpri)
(if (setq ss (ssget '((0 . "spline")))) (progn
   (if (= cdw nil) (setq cdw 10))
   (setq a (strcat "\n분할 갯수<" (rtos cdw 2 0) ">:"))
   (setq ea (getint a))
   (if (= ea nil) (setq ea cdw) (setq cdw ea) )
   (setq n 0)
   (repeat (sslength ss)
      (setq en (ssname ss n))
      (setq ed (entget en)
            la (cdr (assoc 8 ed)))
      (setvar "clayer" la)
      (setq en_dis (vlax-curve-getDistAtPoint en (vlax-curve-getEndPoint en)))
      (setq dis (/ en_dis (* ea 2.0)))
      (setq dis1 dis point_list '())
      (repeat (- (* ea 2) 1)
         (setq point_list
              (append point_list (list (vlax-curve-getPointAtDist en dis))))
         (Setq dis (+ dis dis1))
      )
      (setq point_list (append point_list (list (vlax-curve-getEndPoint en))))
      (command "pline" (vlax-curve-getstartPoint en) "a")
      (repeat ea
         (command "s")
         (setq point (car point_list))
         (command point)
         (setq point_list (cdr point_list))
         (setq point (car point_list))
         (command point)
         (setq point_list (cdr point_list))
      )
      (command "" )
      (setq n (+ n 1))
   )
   (initget "Yes No")
   (setq tem (getkword "\n원본을 지우시겠습니까? <Y>:"))
   (if (or (= tem nil) (= tem "Yes")) (command "erase" ss "") )
))
   (setvar "clayer" cla)
   (setvar "osmode" os)
(prin1))

 


 

 

⑥ Screenshot : 

 

 

※ 유의사항

 - Screenshot : 이해를 돕기위해 삽입요망.

 - 파일 첨부 : 상위버전에서 테스트할 파일이 아니면 가급적 하위버전으로 저장후 첨부.

                       해당리습도 같이 첨부하여 주세요.

 - 제       목 : 질문 내용 반영(개략적인 내용),       예) 해치를 만들고 싶어요..

 - 질문글 삭제금지 : 질문후 댓글이 달린글은 삭제금지.

    여러 리플러들이 소중한 시간을 내어서 고민한후 댓글을 작성한 이상 "강력조치" 토록 하겠음. 

 

 

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자3:16 | 작성시간 09.05.25 요 리습이 스플라인을 폴리선으로 바꿔주는거지만..실은.호들의 연결로 바꿔주는건데요....선이 거의 직선이라면...호로 표현이 안될껍니다...그래서...없어지는 현상이 나타날수두 있겠단 판단이 듭니다...고수과일님들이 봐주셔야 할꺼 같습니다.
  • 답댓글 작성자cadori | 작성시간 09.05.27 아 ... 호로 변경되니까 ... 없어질 수도 있겠네여 ^^;
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼