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à
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 16 settembre 2010 : 10:41:45  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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  Mostra Profilo  Rispondi Quotando
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...

Torna all'inizio della Pagina

arri
Utente Master


Regione: Lombardia


14951 Messaggi

Inserito il - 16 settembre 2010 : 11:03:40  Mostra Profilo Invia a arri un Messaggio Privato  Rispondi Quotando
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
Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 16 settembre 2010 : 11:11:18  Mostra Profilo  Rispondi Quotando
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.

Torna all'inizio della Pagina

n/a
deleted

Prov.: Estero
Città: Sieradz (PL)


5926 Messaggi

Inserito il - 19 settembre 2010 : 10:13:53  Mostra Profilo  Rispondi Quotando
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?

Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 1,8 secondi.