V I S U A L I Z Z A D I S C U S S I O N E |
arri |
Inserito il - 16 settembre 2010 : 10:41:45 Evitare la cancellazione di entità nella sessione corrente di AutoCAD
LockObjects -> blocca
UnLockObjects -> sblocca
(defun c:LockObjects ( / ss ) (vl-load-com) ;; © Lee Mac 2010 (if (setq ss (ssget)) ( (lambda ( i / e hand ) (while (setq e (ssname ss (setq i (1+ i)))) (if (not (vl-position (setq hand (vla-get-Handle (vlax-ename->vla-object e)) ) *locked* ) ) (setq *locked* (cons hand *locked*)) ) ) (if (not (vl-some (function (lambda ( reactor ) (eq "ObjectLock" (vlr-data reactor)) ) ) (cdar (vlr-reactors :vlr-editor-reactor)) ) ) (vlr-editor-reactor "ObjectLock" (list (cons :vlr-commandEnded 'ObjectLockCallBack) ) ) ) ) -1 ) ) (princ) )
(defun c:UnLockObjects ( / ss ) (vl-load-com) ;; © Lee Mac 2010
(if *locked* (if (setq ss (ssget)) ( (lambda ( i / e hand ) (while (setq e (ssname ss (setq i (1+ i)))) (if (vl-position (setq hand (vla-get-Handle (vlax-ename->vla-object e)) ) *locked* ) (setq *locked* (vl-remove hand *locked*)) ) ) ) -1 ) ) (princ "\n** No Objects Locked **") )
(princ) )
(defun c:DisableLock ( / reactor ) (vl-load-com) ;; © Lee Mac 2010 (if (setq reactor (vl-some (function (lambda ( reactor ) (if (eq "ObjectLock" (vlr-data reactor)) reactor) ) ) (cdar (vlr-reactors :vlr-editor-reactor)) ) ) (vlr-remove reactor) (princ "\n** Object Lock not Running **") )
(princ) )
(defun ObjectLockCallBack ( reactor arguments ) (if (wcmatch (strcase (car arguments)) "ERASE,EXPLODE") (mapcar (function (lambda ( handle ) (or (entget (handent handle)) (entdel (handent handle))) ) ) *locked* ) ) (princ) ) |
4 U L T I M E R I S P O S T E (in alto le più recenti) |
n/a |
Inserito il - 19 settembre 2010 : 10:13:53 Mi e' venuto in mente un possibile utilizzo pratico di questo lisp.
Puo' servire ad inchiodare temporaneamente certi oggetti al loro posto, mentre si cancellano altri giacenti sullo stesso layer.
Se infatti bloccassi tutto un layer col lucchetto o con LAYLCK, non potrei eliminare nulla.
Altre idee? 
|
n/a |
Inserito il - 16 settembre 2010 : 11:11:18 | Messaggio inserito da arri sono bloccati solo alla cancellazione |
Ho capito, ma in quali casi potrebbe essere utile?
A mio modesto avviso, il Lisp e' uno strumento che serve a processare dati, ad operare una certa modifica ripetitiva in una frazione di secondo invece che in ore, mentre quello in esame e' un puro esercizio accademico, seppur mirabile.
 |
arri |
Inserito il - 16 settembre 2010 : 11:03:40 sono bloccati solo alla cancellazione, il lisp è per imparare le possibilità infinite di AutoCAD 
P.S. sì e questo
mentre quello in esame e' un puro esercizio accademico, seppur mirabile. |
n/a |
Inserito il - 16 settembre 2010 : 10:58:11 Francamente me ne sfugge l'utiiita'...
Se lo uso per impedire al mio collega "nuovo arrivato" di cancellare pezzi del mio disegno, e' sufficiente che costui chiuda e apra di nuovo il DWG protetto, e l'effetto del Lisp e' perso.
Inoltre gli oggetti non sono bloccati (come farebbe indurre il comando LockObjects) in quanto possono essere spostati, e il bloccaggio puo' essere aggirato facendo un _WBLOCK di tutto tranne il pezzo bloccato.
Eeeh, 'sti yankee...
 |