我写这个Lisp程序是为了工作。我个人一直在使用它。你可以试着重新制作它来满足你的需要,或者只是按原样使用。
- ;|************************************************************************
- **************************************************************************
- ********************A different approach at DRAWORDER*********************
- ******************************By: ZRABOIN*********************************
- **************************************************************************
- ************************************************************************|;
- (defun c:ndo( / cord goto adoc obj obj1 obj2 ent)
- (vl-load-com)
- (setq cord (vla-addobject
- (vla-GetExtensionDictionary
- (vla-get-modelspace
- (setq adoc (vla-get-activedocument
- (vlax-get-acad-object))))) "ACAD_SORTENTS" "AcDbSortentsTable"))
- (initget "1 2 3 4 5 6")
- (setq goto (cond ((getkword "\nWould you like to (1)-Bringtofront (2)-Sendtoback (3)-Sendbehind (4)-Bringabove (5)-SwapObjects (6)-Special ?: <bringtoFront> ")) ("1")))
- (cond
- ((and (= goto "1")
- (setq ent (mkar)))
- (vla-Movetotop cord ent))
- ((and (= goto "2")
- (setq ent (mkar)))
- (vla-Movetobottom cord ent))
- ((and (= goto "3")
- (setq ent (mkar)))
- (setq obj (entsel "\nSelect Reference Object: "))
- (setq obj (vlax-ename->vla-object (car obj)))
- (vla-Movebelow cord ent obj))
- ((and (= goto "4")
- (setq ent (mkar)))
- (setq obj (entsel "\nSelect Reference Object: "))
- (setq obj (vlax-ename->vla-object (car obj)))
- (vla-Moveabove cord ent obj))
- ((and (= goto "5")
- (setq obj1 (vlax-ename->vla-object(car(entsel))))
- (setq obj2 (vlax-ename->vla-object(car(entsel)))))
- (vla-SwapOrder cord obj1 obj2))
- ((and (= goto "6")
- (setq obj (mksar)))
- (vla-setRelativeDrawOrder cord obj)
- )
- )
- (vla-regen adoc acActiveViewport)
- )
- ;******************************Make Array**********************************************************************
- (defun mkar ( / ss arobj)
- (if (setq ss (ssop))
- (setq ss (mapcar 'vlax-ename->vla-object (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
- arobj (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (- (length ss) 1))) ss)))
- )
- ;******************************Make Array Multiple Selections**************************************************
- (defun mksar ( / ss s1 arobj)
- (while (setq s1 (ssop))
- (setq ss (append (vl-remove-if '(lambda (z) (member z ss)) (vl-remove-if 'listp (mapcar 'cadr (ssnamex s1)))) ss)))
- (setq arobj (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (- (length ss) 1))) (mapcar 'vlax-ename->vla-object ss)))
- )
- ;******************************Selection Set Options************************************************************
- (defun ssop ( / ssmeth s1 ss)
- (initget "1 2 3 4")
- (setq ssmeth (cond ((getkword "\nSelect by: (1)-Specified Objects (2)-Layer (3)-Blockname (4)-Similar - <Specified Objects> : ")) ("1")))
- (setq curt (getvar "ctab"))
- (cond ((= ssmeth "1")
- (setq ss(ssget)))
- ((= ssmeth "2")
- (if (setq ss (entsel "\nSelect an object on the layer you want: "))
- (ssget "X" (list (cons 410 curt) (cons 8 (cdr (assoc 8 (entget (car ss)))))))))
- ((= ssmeth "3")
- (if (setq ss (entsel "\nSelect a block: "))
- (if (= (cdadr (setq ss (entget (car ss)))) "INSERT")
- (setq ss (ssget "X" (list (cons 410 curt) (cons 2 (cdr (assoc 2 ss)))))))
- ))
- ((= ssmeth "4")
- (if (setq ss (entsel "\nSelect an object: "))
- (progn
- (if (= (cdadr (setq ss (entget (car ss)))) "INSERT")
- (setq s1 (cons 2 (cdr (assoc 2 ss))))
- (setq s1 (cons 0 (cdr (assoc 0 ss)))))
- (setq ss (ssget "X" (list s1 (cons 410 curt) (cons 8 (cdr (assoc 8 ss)))))))
- )))
- )
|