안녕하세요 리습 만드록있는 초보입니다.
최근 치수를 측정하는 리습을 만들었는데, 여러 객체를 선택해서 치수를 측정하는방법이 어려워 블럭을 만든 후 치수를 측정하는 프로그램을 만들었습니다.
FILLET이 적용된 부분은 FIILET을 마우스 휠로 확대를 한 후 치수 리습을 상용하면 정확한 치수가 표시됩니다.
하지만 신기하게 도면을 마우스휠로 축소시킨 후 치수 리습을 사용하면 사진과같이 원 호의 4분점에 치수가 찍혀버립니다. 무슨 문제일가요? 리습 코드 올리겠습니다.
(defun c:dd ()
(prompt “n select objects. “)
(setq MI (ssget))
(setq d (rtos (getvar “cdate”) 1 15))
(setq d1 (substr d 1 15))
(setq p1 “0,0”) ;; 블록의 기준점을 0,0으로 잡음
(command “block” d1 “o” “c” p1 MI “”)
(prompt “n select objects. “)
(setq obj (ssget)) ; 사용자로부터 개체 선택
(setq entname (ssname obj 0))
(setq vlentname (vlax-ename->vla-object entname))
(vla-getboundingbox vlentname ‘minpoint ‘maxpoint)
; Safearray를 리스트로 변환
(setq p1 (vlax-safearray->list minpoint))
(setq p2 (vlax-safearray->list maxpoint))
; (setq objxmin (car p1))
; (setq objxmax (car p2))
; (setq objymin (cadr p1))
; (setq objymax (cadr p2))
(setq xdimpos (list (car p2) (- (cadr p1) 20)))
(setq ydimpos (list (-(car p1) 20) (cadr p2)))
(command “dimlinear” p1 (list (car p2) (cadr p1)) xdimpos)
(command “dimlinear” p1 (list (car p1) (cadr p2)) ydimpos)
(princ)
)
도움주시면 감사합니다.
command문을 사용하여 좌표를 입력할 때엔 객체 스냅의 영향을 받습니다. 이를 해결하려면, 좌표 입력 전 “none”을 입력해서 객체 스냅을 꺼야 해요
정말 덕분에 해결되서 너무 감사합니다!!
죄송하지만 질문 하나 더 하겠습니다 ..!!
여러가지 객체를 선택해서 array 리습 , dim리습 등을 만들어서 사용하고있습니다.
여기에서 제가 항상 객체를 여러가지 선택하면 각각의 객체마다 array/ dim 이 적용되기때문에
항상 block을 처리 후 사용하는중입니다.
혹시 여러가지 객체들을 하나의 객체로 작용되게 하는방법 있을까요??
예를들어 array의경우 드래그로 객체를 선택후 배열이 가능한데 리습으로 사용할경우 선택된 객체 모두 다 개별로 적용이 되더라구요 ㅜㅜ 해결 가능한 방법을 아시면 알려주시면 정말 감사하겠습니다!
기초부터 닦으세요.
기초가 하나도 없으니 “해주세요” 밖엔 못하는 겁니다.
아하!! 감사합니다 그런개념이 있군요ㅠㅠ
none
(command “dimlinear” p1 (list (car p2) (cadr p1)) xdimpos)
(command “dimlinear” p1 (list (car p1) (cadr p2)) ydimpos)
(princ)
)
이라고 넣으면 되는건가요? none을 어떻게 넣어서 객체스냅을 끄는지 방법 알려주실 수 있을까요?
아!! 해결했습니다 command “osmode” “0” 으로 해결했습니다~
“none”은 명령 수정자(Command Modifier)예요. m2p(mtp)나 end, perp처럼 사용하는 겁니다.
때문에 아래처럼 좌표를 입력하는 단계 전에 입력하는 거예요.
(command “line” pt1 pt2 “”)
(command “line” “none” pt1 “none” pt2 “”)