当然,它们很简单。我添加了第二个选项,可以旋转和移动选择集。
- (defun c:Test (/ obj block gr)
- ;; Alan J. Thompson, 06.22.10
- (if
- (and
- ;;(setq obj (AT:Entsel nil "\nSelect block: " '("LV" (0 . "INSERT")) nil))
- (setq obj (car (entsel "\nSelect block: ")))
- (eq "INSERT" (cdr (assoc 0 (entget obj))))
- ;;(setq block (vla-copy obj))
- (not
- (vl-catch-all-error-p
- (setq block (vl-catch-all-apply
- (function vla-copy)
- (list (vlax-ename->vla-object obj))
- )
- )
- )
- )
- )
- (while (and (eq 5 (car (setq gr (grread T 15 2)))) (vl-consp (cadr gr)))
- (vla-put-insertionpoint block (vlax-3d-point (trans (cadr gr) 1 0)))
- (vla-put-rotation block (+ (vla-get-rotation block) 0.02))
- )
- )
- (princ)
- )
- (defun c:Test2 (/ ss lst)
- ;; Alan J. Thompson, 06.22.10
- (if (setq ss (AT:SS->List (ssget "_:L") T))
- (while (and (eq 5 (car (setq gr (grread T 15 2)))) (vl-consp (cadr gr)))
- (if (> (length (setq lst (cons (vlax-3d-point (trans (cadr gr) 1 0)) lst))) 1)
- (foreach x ss
- (vla-move x (cadr lst) (car lst))
- (vla-rotate x (car lst) 0.015)
- )
- )
- )
- )
- (princ)
- )
- (defun AT:SS->List (SS VLA)
- ;; Convert selection set to list of ename or vla objects
- ;; SS - SSGET selection set
- ;; VLA - T for vla objects, nil for ename
- ;; Alan J. Thompson, 04.01.10
- (if (eq 'PICKSET (type SS))
- ((lambda (i / l)
- (while (setq e (ssname SS (setq i (1+ i))))
- (cond (VLA (setq l (cons (vlax-ename->vla-object e) l)))
- ((setq l (cons e l)))
- )
- )
- )
- -1
- )
- )
- )
|