Autore |
Discussione  |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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) )
|
|
n/a
deleted
Prov.: Estero
Città: Sieradz (PL)
5926 Messaggi |
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...
 |
 |
|
arri
Utente Master
Regione: Lombardia
14951 Messaggi |
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. |
Modificato da - arri in data 16 settembre 2010 13:17:23 |
 |
|
n/a
deleted
Prov.: Estero
Città: Sieradz (PL)
5926 Messaggi |
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.
 |
 |
|
n/a
deleted
Prov.: Estero
Città: Sieradz (PL)
5926 Messaggi |
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? 
|
 |
|
|
Discussione  |
|