- ; Spacing selection set by layer
- (defun C:test ( / lnm SS b L p acDoc Lyrs ln d ln ll ur pl )
- (setq lnm "frame") ; <- Adjust the layer name here, to copy along the spacing
- (cond
- ( (not (and (setq SS (ssget "_:L-I")) (princ "\nSelect objects to space by their layer: ")))
- (princ "\nNothing selected.")
- )
- (
- (not
- (progn
- (vlax-for o (setq SS (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))))
- (if (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-GetBoundingBox (list o 'll 'ur))))
- (setq b (append b (mapcar 'vlax-safearray->list (list ll ur))))
- )
- (setq L (cons (list (vla-get-Layer o) o) L))
- ); vlax-for
- (vla-Delete SS)
- (and
- (or
- (and b (setq b (mapcar '(lambda (a b) (/ (+ a b) 2.)) (apply 'mapcar (cons 'min b)) (apply 'mapcar (cons 'max b)))))
- (setq b (getpoint "\nSpecify base point: "))
- )
- (setq p (getpoint b "\nSpecify direction and spacing: "))
- )
- ); progn
- ); not
- (princ "\nSpacing not specified.")
- )
- (p
- (setq acDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
- (vla-EndUndoMark acDoc) (vla-StartUndoMark acDoc)
- (mapcar '(lambda (x) (cond ((member x Lyrs)) ((setq Lyrs (cons x Lyrs))))) (mapcar 'car L))
- (
- (lambda ( x )
- (and acDoc (tblsearch "LAYER" x) (member lnm Lyrs) (eq (vla-get-Lock (vla-item (vla-get-Layers acDoc) x)) :vlax-false) (setq ln x) )
- )
- lnm
- )
- (mapcar
- '(lambda (x)
- (cond
- (d (setq d (+ d (distance b p))) )
- ( (setq d (distance b p)) )
- )
- (mapcar
- '(lambda (o)
- (if (= x (car o))
- (progn
- (apply 'vla-Move (append (list (cadr o)) (setq pl (mapcar 'vlax-3D-point (list '(0. 0. 0.) (polar '(0. 0. 0.) (angle b p) d))))))
- (if ln (mapcar '(lambda (fr / c) (if (= (car fr) ln) (progn (setq c (vla-Copy (cadr fr))) (apply 'vla-Move (append (list c) pl))))) L))
- )
- )
- )
- L
- )
- )
- (vl-remove ln (acad_strlsort Lyrs))
- )
- (vla-EndUndoMark acDoc)
- )
- ); cond
- (princ)
- ); defun
- (vl-load-com) (princ)
|