I'm using it for the array command.
but I couldn't combine two lispis.
(defun c:arrv ( / ss->list copyv dx gr nl nx obs obx p0 pd pw px vx ) (vl-load-com)
;; © Lee Mac 2011 found at the swamp
(defun ss->list ( ss / i l )
(if ss
(repeat (setq i (sslength ss))
(setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
)
)
)
(defun copyv ( ob n v / i b l ) (setq i 1 b (vlax-3D-point '(0. 0. 0.)))
(repeat n
(foreach obj ob
(vla-move (car (setq l (cons (vla-copy obj) l))) b (vlax-3D-point (mapcar '* v (list i i i))))
)
(setq i (1+ i))
)
l
)
(if
(and
(setq obs (ss->list (ssget '((0 . "~VIEWPORT")))))
(setq p0 (getpoint "\nBase Point: "))
(setq px (getpoint "\nArray Vector: " p0))
(setq pw (trans p0 1 0)
pd (trans p0 1 3)
vx (trans (mapcar '- px p0) 1 0) dx (distance '(0. 0. 0.) vx)
)
(not (equal dx 0.0 1e-14))
(princ "\nArray Endpoint: ")
)
(while (= 5 (car (setq gr (grread 't 13 0)))) (redraw)
(setq obx (car (mapcar 'vla-delete obx))
nx (fix (setq nl (/ (caddr (trans (setq gr (mapcar '- (cadr gr) p0)) 1 vx)) dx)))
obx (copyv obs (abs nx) (mapcar (if (minusp nx) '- '+) vx))
)
(grvecs (list -3 '(0. 0. 0.) (mapcar '* (trans vx 0 3) (list nl nl nl)))
(list
(list 1. 0. 0. (car pd))
(list 0. 1. 0. (cadr pd))
(list 0. 0. 1. (caddr pd))
(list 0. 0. 0. 1.)
)
)
)
)
(redraw) (princ)
)