(gile) Posté(e) le 16 juillet 2008 Posté(e) le 16 juillet 2008 Salut, J'ai essayé de faire une routine générique pour déverrouiller et re-verrouiller des calques.Ce n'est sûrement pas la routine que tout le monde attendait mais c'était l'occasion de jouer avec la fonction defun-q. Cette fonction permet de définir une fonction tout comme defun, mais au lieu de générer un objet de type SUBR ou USUBR elle génère une liste. Cette particularité permet de redéfinir la fonction dans sa propre définition.Dans le cas présent, il s'agit de redéfinir la valeur de la variable lst (en début de routine) à chaque appel de la fonction pour y stocker les calques qui auront été déverrouillés ou la vider au re-verrouillage des dits calques.On peut voir la fonction/liste en entrant !layerunlock à la ligne de commande ou layerunlock dans la console Visual LISP. La fonction requiert un argument (layername) qui peut être :- soit un nom de calque à déverrouiller (possibilité d'utiliser les caractères génériques pour traiter plusieurs calques)- soit une liste de noms de calques à verrouiller (ne tient pas compte de la casse)- soit nil pour re-verrouiller tous les calque précédemment déverrouillés avec layerunlock. Exemples :(layerunlock "0") déverrouille le calque "0"(layerunlock '("calque1" "calque2") déverrouille les claques "calque1" et "calque2"(layerunlock "*") déverrouille tous les calques verrouillés(layerunlock nil) re-verrouille les calques prédemment déverrouillés. ;;; LAYERUNLOCK (gile) ;;; Déverrouille ou reverrouille les calques spécifiés ;;; ;;; Argument ;;; layername : ;;; - un nom de calque (caractères génériques acceptés : "*" pour tous) ;;; - une liste de nom de calques (ne tient pas compte de la casse) ;;; - ou nil pour reverrouiller les calques prédemment déverrouillés (defun-q layerunlock (layername / lst layers lay) ;; initialisation de la variable lst (setq lst nil) (setq layers (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) (cond ((= (type layername) 'STR) (vlax-for l (vla-get-Layers (vla-get-ActiveDocument (vlax-get-acad-object)) ) (and (wcmatch (strcase (vla-get-Name l)) (strcase layername)) (= (vla-get-Lock l) :vlax-true) (setq lst (cons l lst)) (vla-put-Lock l :vlax-false) ) ) ) ((vl-consp layername) (foreach n layername (and (not (vl-catch-all-error-p (setq lay (vl-catch-all-apply 'vla-item (list layers n) ) ) ) ) (= (vla-get-Lock lay) :vlax-true) (setq lst (cons lay lst)) (vla-put-Lock lay :vlax-false) ) ) ) ((null layername) (foreach l lst (vla-put-Lock l :vlax-true) ) (setq lst nil) ) ) ;; Redéfinition de layerunlock (setq layerunlock (cons (car layerunlock) (cons (list 'setq 'lst (list 'quote lst)) (cddr layerunlock) ) ) ) lst ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 16 juillet 2008 Posté(e) le 16 juillet 2008 Salut (gile),merci pour cet exemple et ton explication.J'en comprends le système...... pas encore l'utilité.... (mais je n'ai fait que survoler).... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 16 juillet 2008 Auteur Posté(e) le 16 juillet 2008 Salut Bred, Tu vois, j'ai vu ton message ;) En fait je me suis inspiré d'une routine certainement plus utile : ai_sysvar qui se trouve dans le fichier AutoCAD.mnl des versions antérieure à 2007 et dans acad200Xdoc.lsp depuis 2007. Je pense que cette méthode peut-être utilisée pour faire des routines de protection (mot de passe, clé), je fais quelques essais et ça semble fonctionner aussi après compilation/cryptage du fichier. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant