안녕하세요..
전문가에게서 받은 리습인데 여기서 더 발전시킬수있나해서 여쭤봅니다.
첨부파일 보시면 객체 그룹 넙버링 선택 후 노랑색심볼근처로 이동시 자동으로 리드선이 가장가까운 노랑심볼과 자동으로 조인되는 리습입니다.
여기서 문제가 객체선택을 하나만하면 이상없습니다.
객체다중선택후 노랑심볼근처로 이동시 다중선택된 객체중에 하나의객체만 리드선이 자동조인되고 나머지객체리드선은 그대로입니다. 여기가 핵심입니다. 이부분을 도저히 못풀겠습니다.
선택한 객체 이동시 하나가아닌 선택한 객체전부 가까운 노랑심볼에 리드선이 자동조인되게. 수정좀 부탁드릴께요.
소중한 댓글 부탁드립니다.
(defun c:aaaaa ( / os os2 e n o1 o2 sp ep cp p1 p2 mi ma gr a b xp r _Objects )
(defun _objects ( ss / i re )
(if ss
(repeat (setq i (sslength ss))
(setq re (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) re))
)
)
)
(defun *error* (s) (princ s))
(if (setq os (_Objects (ssget “_:L” ‘((0 . “*LINE,CIRCLE,TEXT,MTEXT”) (8 . “Welding”))))) ; 이동할 객체선택
(progn
(setq weldLay “Level 11”)
(setq os2 (_Objects (ssget “_X” (list (cons 0 “LWPOLYLINE”) (cons 8 weldLay)))))
(foreach x os ; 선택객체에서 원과 라인을 각각의 변수에 저장
(setq n (vla-get-objectname x))
(cond
( (= n “AcDbCircle”) (setq o1 x))
( (= n “AcDbLine”) (setq o2 x))
)
)
(if (and o1 o2) ; 선택객체에서 원과 라인이 존재하면 실행됨
(progn
(while
(progn
(setq gr (grread t 15 0)
a (car gr)
b (cadr gr)
)
(cond
( (= 5 a) (redraw)
(setq os2
(vl-sort os2
‘(lambda ( o1 o2 )
(<
(distance (vlax-curve-getstartpoint o1) (trans b 1 0))
(distance (vlax-curve-getstartpoint o2) (trans b 1 0))
)
)
)
)
(vla-getboundingbox (car os2) ‘mi ‘ma)
(setq mi (vlax-safearray->list mi)
ma (vlax-safearray->list ma)
p2 (mapcar ‘(lambda (a b) (* 0.5 (+ a b))) mi ma) ; 용접심볼의 센터점
cp (vlax-get o1 ‘Center) ; 원 센터점
r (vlax-get o1 ‘radius)
xp cp
)
(foreach x os
(vlax-invoke x ‘move xp (trans b 1 0))
)
(setq xp (trans b 1 0))
(vlax-put o2 ‘startpoint p2)
(vlax-put o2 ‘endpoint (polar xp (angle xp p2) r))
t
)
( nil )
)
)
)
)
)
)
)(vl-load-com)
)
공유
아혹시 조용님이 보실까봐 … 보내주신파일은 확인중입니다. 타 사이트에서 받아온리습입니다.. 마지막에서 막혀서. 조용님파일 기대됩니다. ^^
봤습니다만
댓글 감사합니다. 안타깝게도 만드신분도 저기까지가 최선이라해서. 아 좋은 방법이 생각이안나네요ㅜㅜ
전체 이동시 전체 객체가 각각의 가까운 위치를 조인하는건가요?
아니면 2개를 선택하여 이동시 2개가 동시에 한군데를 가리켜야하는건가요?
전자라면 엄청 렉걸릴거구요.
후자라면 가능은 하지만 2개중 기준은 있어야겠지요.
피시님. 댓글 감사합니다. 선택한 갯수만큼만 2개선택시 두개만 3개선택시 3개가.
객체가 각각의 가까운 노랑 심볼에 조인하는게 맞습니다.
2개선택시 2개가 한군데 가리키는건아니네요.
거의 2개씩 이동을 시키고있지만 상황에따라 4개가될수도있구 전체가될수도있습니다.
렉이 어느정도 걸릴려나요? 사실 렉이걸려도 된다는데 너무 가슴이 벅차네요. 다들 안된다구 애기만들어서요. 꼭필요한기능인데. 도움좀 주실수있을까요 ??피시님.