(defun c:tt (/ kht-intersect s1 as1 ss1
osm jin1 jin2 c1 a1 aa1
centerpoint sss5
)
(defun kht-intersect (en1 en2 / a b x ex ex-app)
(vl-load-com)
(setq En1 (vlax-ename->vla-object En1))
(setq En2 (vlax-ename->vla-object En2))
(setq a (vla-intersectwith en1 en2 acExtendNone))
(setq a (vlax-variant-value a))
(setq b (vlax-safearray-get-u-bound a 1))
(if (/= b -1)
(progn
(setq a (vlax-safearray->list a))
(repeat (/ (length a) 3)
(setq
ex-app (append ex-app
(list (list (car a) (cadr a) (caddr a)))
)
)
(setq a (cdr (cdr (cdr a))))
)
ex-app
)
nil
)
)
(command “ucs” “”)
(PRINC “Select Pline :”)
(setq s1 (ssget))
(terpri)
(setq as1 (ssname s1 0))
(princ “Select intersection Targets :”)
(setq ss1 (ssget))
(setq osm (getvar “osmode”))
(setvar “osmode” 0)
(if (/= #jin1 nil)
(progn
(setq #jin11 (rtos #jin1 2 0))
(setq jin1 (getdist (strcat “ngab distance is ” “<” #jin11 “>” ” :”))))
(setq jin1 (getdist “ngab distance is :”))
)
(cond ((and (= jin1 nil) (/= #jin1 nil)) (setq jin1 #jin1)))
(cond ((/= jin1 nil) (setq #jin1 jin1)))
(setq jin2 0.4)
(setq c1 0)
(repeat (sslength ss1)
;(setq a1 (entget (ssname ss1 c1)))
(setq aa1 (ssname ss1 c1))
(setq JIN111 (kht-intersect as1 aa1))
;(SETQ centerpoint (CAR JIN111))
(mapcar ‘(lambda (centerpoint)
(progn
(command “circle” centerpoint jin1 “”)
(setq sss5 (ssget “L”)) ;circle
(command “trim”
sss5
“”
(list (ssname ss1 c1) centerpoint)
“”
)
(command “erase” sss5 “”)
) ;end progn
) ;end lambda
JIN111
) ;end mapcar
(setq c1 (1+ c1))
)
(setvar “osmode” osm)
(princ)
)
제가 즐겨쓰는 리습 중 하나가 크로스 되는 배관의 상하위치를 표시하도록 지정한 간격만큼 자르는 리습이 있는데 원래는 잘 먹혔었는데 전혀 무반응입니다. 처음에 라인 선택하고 2번째 라인 선택하고 간격지정하고 엔터하면 적용이 되는데 지금 확인해보니 제가 새로그린 라인에서는 명령어가 듣는데 기존에 작업했던
그림에서는 먹히지가 않네요. 왜그런건가요? 리습바이러스 체크도 해봤는데 정상입니다.
; 경고: unwind skipped on 예외
; 오류: 오류가 발생함: 0xC0000005 (액세스 위반)
cad2016년에서 이런 에러가 나네요.ㅠ 2012에서는 정상 작동 됩니다.
수정했어요~