리습인거같은데
캐드에서 제가 몇파이 이상 혹은 길이가 몇미리 이상되는것을 남겨두고 지워지는 거라든지
이런 파일을 구하고 싶은데 ..
리습으로 하는거 맞나요?!! 들어보기만해서 ..
정리를 하자면 내가 지정한 값만 남겨두고 지워지는..
예를들면 5파이 이상은 지워지던가..
길이가 15미리 이하인건 지울수있는그런 리습..
도와주세요~~~~~~ㅠ
루비언니Lv.0
리습에 관한 질문이 있습니다.
공유
(defun c:E300(/ ss sslen ssno smember smemdia smem kjh num data OS sss ) ;;;;;;;;; 300파이 이상만 삭제
(defun *error* (msg)(princ “error: “)(princ msg) (setvar “osmode” os) (princ) )
(setq os (getvar “osmode”))
(setq sss (ssadd))
(prompt “n 300파이 이상 삭제하기.. 범위 선택.. (종료는 엔터키) “)
(while (/= (setq ss (ssget)) nil)
(progn
(setq sslen (sslength ss)
ssno 0
num 0)
(while (/= sslen ssno)
(setq smember (ssname ss ssno))
(setq ssno (+ ssno 1))
(setq smem (cdr (assoc 0 (entget smember))))
(if
(= “CIRCLE” SMEM) ;circle이라면
(progn
(setq smemdia (cdr (assoc 40 (entget smember))))
(if
(< smemdia 125) ;반지름이 지정한 반지름보다 작다면 내비두고
(SETQ smemdia 0)
(PROGN
(setq sss (ssadd smember sss))
;(command “erase” smember “”) ;크다면 삭제한다
(setq num (+ num 1)) ;변수값 조정
) ; PROGN END
) ; IF END
) ;PROGN END
) ;end of if
) ;end of while
) ;end of progn
(command “erase” sss “”)
(setq data (strcat (rtos num 2 0) ” 개의 ‘Entity’가 삭제됨… – (나가기는 스페이스바)”))
(princ data)
(princ)
) ;end of while
(PROMPT “Auto Circle Regulation – 완료”)
(PRINC)
) ;end of defun
;;;;;;;;;;;;;;;;;;;;;;;;
제가 만들어서 쓰고 있는 300파이 이상 홀 삭제 리습입니다.
변형해서 사용하시면 될 듯합니다.
메모장에다가 만들어야하느건가요???…….
저는 5파이까지만.. 오파이를 길이로재면 15.7 이여서 이 이하는 삭제하고싶은데 ..
길이는 15.7이하는 삭제하고 싶은데 .. 부탁드릴게요ㅠㅠ
(defun c:E1(/ cir cirr ss sslen ssno smember cdia smemdia smem kjh num data OS sss ) ;;;;;;;;; 선택한 원만 남기고 삭제
(defun *error* (msg)(princ “error: “)(princ msg) (setvar “osmode” os) (princ) )
(setq os (getvar “osmode”))
(setq sss (ssadd))
(setq cir (car (entsel “n 필터링할 홀을 클릭.. “)))
(setq cirr (entget cir))
(setq cdia (cdr (assoc 40 cirr)))
(prompt “n 필터링 범위를 선택.. (종료는 엔터키) “)
(while (/= (setq ss (ssget)) nil)
(progn
(setq sslen (sslength ss)
ssno 0
num 0)
(while (/= sslen ssno)
(setq smember (ssname ss ssno))
(setq ssno (+ ssno 1))
(setq smem (cdr (assoc 0 (entget smember))))
(if
(= “CIRCLE” SMEM) ;circle이라면
(progn
(setq smemdia (cdr (assoc 40 (entget smember))))
(if
(AND (< smemdia (+ cdia 0.05)) (> smemdia (- cdia 0.05))) ;;;;;;;;;;(= smemdia cdia) ;반지름이 지정한 반지름과 같다면
()
(setq sss (ssadd smember sss))
;(command “erase” smember “”) ;같지 않다면 삭제한다
)
(setq num (+ num 1)) ;변수값 조정
)
(progn
(setq sss (ssadd smember sss))
;(command “erase” smember “”) ;circle이 아니면
(setq num (+ num 1)) ;무조건 삭제하고 변수값 조정
)
) ;end of if
) ;end of while
) ;end of progn
(command “erase” sss “”)
(setq data (strcat (rtos num 2 0) ” 개의 ‘Entity’가 삭제됨… – (나가기는 스페이스바)”))
(princ data)
(princ)
) ;end of while
(PROMPT “Auto Circle Regulation – 완료”)
(PRINC)
) ;end of defun
;;;;;;;;;;;;;;;;;;;;;;;;
원하나를 선택해서 같은 지름의 원만 남겨놓고 나머지는 지우는 리습입니다.
선택한 원보다 작은 원만 지우길 원하신다면
(AND (< smemdia (+ cdia 0.05)) (> smemdia (- cdia 0.05))) <-요 부분을
(< smemdia cdia ) <-요렇게 바꾸면 됩니다.
메모장에 붙여넣기하시되 저장할 때 확장자를 .LSP로 저장하시고
캐드에서 로드해서 쓰시면 됩니다. (이건 네이버 상세 검색하시길 바랍니다.)