TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoLISP
 Evitare la cancellazione di entità

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

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...


TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 9,07 secondi.