快一点。我明天会把它清理干净并发布一些代码。
编辑:
啊,去他妈的,这里(提前警告,这太草率了):
- (defun _bboxAndMid (obj / a b l)
- (vla-getboundingbox obj 'a 'b)
- (list (car (setq l (mapcar 'vlax-safearray->list (list a b))))
- (apply '(lambda (a b) (mapcar '(lambda (a b) (/ (+ a b) 2.)) a b)) l)
- (cadr l)
- )
- )
- (defun ss->lst (ss / i l)
- (if (eq (type ss) 'PICKSET)
- (repeat (setq i (sslength ss))
- (setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
- )
- )
- )
- (defun c:Test (/ lst p1 g p2 a d)
- (if (and (setq lst (ss->lst (ssget "_:L")))
- (setq p1 (getpoint "\nSpecify first point: "))
- )
- (while (eq 5 (car (setq g (grread T 15 0))))
- (redraw)
- (grdraw p1 (polar (setq p2 (cadr g)) (angle p1 p2) 10000000.) 1 -1)
- (setq p1 (trans p1 1 0)
- p2 (trans p2 1 0)
- a (angle p1 p2)
- d (/ (distance p1 p2) (float (length lst)))
- )
- (vla-move (car lst) (vlax-3d-point (cadr (_bboxAndMid (car lst)))) (vlax-3d-point p1))
- (mapcar
- '(lambda (o1 o2 / l)
- (vla-move o2
- (vlax-3d-point (cadr (_bboxAndMid o2)))
- (vlax-3d-point
- (polar (cadr (setq l (_bboxAndMid o1)))
- a
- (+ d (distance (car l) (caddr l)))
- )
- )
- )
- )
- lst
- (cdr lst)
- )
- )
- )
- (redraw)
- (princ)
- )
|