vms66 Posté(e) le 27 décembre 2011 Posté(e) le 27 décembre 2011 bonjour auriez vous une routine en lisp pour "eteindre" tous les calques?et une autre pour "allumer" un calque à partir de son nom? merci
lili2006 Posté(e) le 28 décembre 2011 Posté(e) le 28 décembre 2011 Bonjour à toutes et tous, Dans format => Outils de calques, tu va trouver ton bonheur,... Civil 3D 2025 - COVADIS_18.3c https://www.linkedin...3%ABt-95313341/
vms66 Posté(e) le 28 décembre 2011 Auteur Posté(e) le 28 décembre 2011 bonjour lilioui bien sur.....mais c'est dans une routine lisp que je voudrais insérer une commande pour eteindre tous les calques.....puis pour les allumer ensuite un par un dans un certain ordre ecris dans un fichier texte.... merci
bryce Posté(e) le 28 décembre 2011 Posté(e) le 28 décembre 2011 Bonjour, Pour désactiver tous les calques:(setq calques (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-for calque calques (vla-put-LayerOn calque :vlax-false) ) Pour activer un calque:(vla-put-LayerOn calque :vlax-true) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
vms66 Posté(e) le 28 décembre 2011 Auteur Posté(e) le 28 décembre 2011 Bonjour, Pour désactiver tous les calques:(setq calques (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (vlax-for calque calques (vla-put-LayerOn calque :vlax-false) ) Pour activer un calque:(vla-put-LayerOn calque :vlax-true) mercimais j'ai ce message d'erreur ; erreur: no function definition: VLAX-GET-ACAD-OBJECT je suis sous autocad2004et vlax je ne connait point du tout.....
bryce Posté(e) le 28 décembre 2011 Posté(e) le 28 décembre 2011 Pour utiliser les fonctions Visual Lisp, il faut d'abord les charger avec(vl-load-com) Si tu ne veux pas utiliser ces fonctions, tu devrais aussi pouvoir t'en tirer avec (command):(setq expert (getvar "expert") (setvar "expert" 1) (command "_-layer" "_off" "*" "") (setvar "expert" expert) Et pour activer un calque:(command "_-layer" "_on" "nomducalque" "") Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
(gile) Posté(e) le 28 décembre 2011 Posté(e) le 28 décembre 2011 Salut, Si tu ne veux pas utiliser l'interface COM (comme suggéré par Bryce), pour désactiver les calques, avec AutoLISP, il faut que la valeur du groupe DXF 62 (couleur du calque) soit négative.On peut donc parcourir la table des calques avec tblnext et modifier la liste DXF de chacun des calques (liste complète récupérée avec tblobjname) : (defun alloff (/ layer elst color) (while (setq layer (tblnext "layer" (not layer))) (setq elst (entget (tblobjname "layer" (cdr (assoc 2 l)))) color (cdr (assoc 62 l)) ) (if (< 0 color) (entmod (subst (cons 62 (- color)) (cons 62 color) elst)) ) ) ) Pour activer un calque d'après son nom : (defun layerOn (layername / layerelst color) (if (setq layer (tblobjname "layer" layername)) (progn (setq elst (entget layer) color (cdr (assoc 62 elst)) ) (entmod (subst (cons 62 (abs color)) (cons 62 color) elst)) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bryce Posté(e) le 28 décembre 2011 Posté(e) le 28 décembre 2011 (gile), je me permets de te corriger car je crois que tu as oublié de renommer certaines variables :(defun alloff (/ layer elst color) (while (setq layer (tblnext "layer" (not layer))) (setq elst (entget (tblobjname "layer" (cdr (assoc 2 layer)))) color (cdr (assoc 62 layer)) ) (if (< 0 color) (entmod (subst (cons 62 (- color)) (cons 62 color) elst)) ) ) ) Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
jujugeometre Posté(e) le 7 décembre 2020 Posté(e) le 7 décembre 2020 (gile), je me permets de te corriger car je crois que tu as oublié de renommer certaines variables :(defun alloff (/ layer elst color) (while (setq layer (tblnext "layer" (not layer))) (setq elst (entget (tblobjname "layer" (cdr (assoc 2 layer)))) color (cdr (assoc 62 layer)) ) (if (< 0 color) (entmod (subst (cons 62 (- color)) (cons 62 color) elst)) ) ) ) Bonjour, je debute en LISP depuis quelques jours, je cherche à manipuler les noms de calque et je me galérais avec la commande tblnext, du coup je suis tombé sur ce sujet qui m'a permis d'ajouter un préfixe. Par contre je ne comprends pas le (not layer) dans (tblnext "layer" (not layer)), j'avais compris que quel que soit l'argument passé derrière le nom de la table, ca réinitialisait la table à sa première valeur? (while (setq layer (tblnext "layer" (not layer))) (setq elst (entget (tblobjname "layer" (cdr (assoc 2 layer)))) old_nom (cdr (assoc 2 layer)) ) (if (/= "0" old_nom) (entmod (subst (cons 2 (strcat PREFIXE old_nom)) (cons 2 old_nom) elst)) );if );while Geometre - Autocad 2016 - Covadis v17.0
Olivier Eckmann Posté(e) le 8 décembre 2020 Posté(e) le 8 décembre 2020 Bonjour, La 1ère fois que l'on passe dans la boucle, la variable layer est égale à nil, donc (not layer) vaut T donc le tblnext avec le drapeau T te renvoie le 1er objet (le 1er calque). Lorsque tu passes une seconde fois dans la boucle (et toutes les autres fois), ta variable layer contient quelque chose (la définition du calque précédent) donc (not layer) vaut nil, donc tblnext appelé avec le drapeau nil te renvoie le calque suivant.C'est une astuce de programmation qui évite de déclarer une variable booléenne à mettre à T pour demander le 1er calque, puis le mettre à nil ensuite. Olivier
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