willy95 Posté(e) le 17 août 2017 Posté(e) le 17 août 2017 Bonjour, Pour me simplifier la vie j'aimerai pouvoir activer ou inactiver un calque avec un nom bien précis avec une simple lettre (un peu comme un raccourci clavier), j'ai écris ces quelques lignes pour me dépanner mais j'aimerai avoir juste à taper "K" pour activer et "K" pour désactivé. Quelqu'un peut-il m'aider sur ce sujet ? (Defun C:KK (/) (Command "_-Layer" "IN" "moncalque" "")) (Defun C:K (/) (Command "_-Layer" "AC" "moncalque" "")) Merci par avance
VDH-Bruno Posté(e) le 17 août 2017 Posté(e) le 17 août 2017 Bonjour, Pour me simplifier la vie j'aimerai pouvoir activer ou inactiver un calque avec un nom bien précis avec une simple lettre (un peu comme un raccourci clavier), j'ai écris ces quelques lignes pour me dépanner mais j'aimerai avoir juste à taper "K" pour activer et "K" pour désactivé. Bonjour, Une solution parmi d'autres est de jouer avec le code de groupe dxf 62, définie dans la table des calques, si le code 62 (Numéro de couleur du calque) est positif, le calque est actif sinon il est désactivé. Pour l'exemple: (defun C:K (/ e dxf) (and (setq e (tblobjname "LAYER" "moncalque")) (setq dxf (entget e)) (entmod (append dxf (list (cons 62 (- (cdr (assoc 62 dxf)))))) ) ) (princ) ) A+ Apprendre => Prendre => Rendre
willy95 Posté(e) le 17 août 2017 Auteur Posté(e) le 17 août 2017 C'est génial, ce code réponds exactement à mon souhait et fonctionne parfaitement. Un GRAND MERCI à toi "VDH-Bruno" pour cette réponse parfaite et super rapide. PS : Je comprends l'idée mais l'écriture et la recherche dans la liste est encore trop complexe pour moi :)
willy95 Posté(e) le 22 novembre 2017 Auteur Posté(e) le 22 novembre 2017 Bonjour à tous, Comment puis-je rajouter le Verrouillage du calque quand il est actif seulement ? Merci pour vos réponse
willy95 Posté(e) le 22 novembre 2017 Auteur Posté(e) le 22 novembre 2017 Le Code de "Gile" ci-dessous correspond presque, mais je souhaite verrouiller dès que le calque est actif. (defun exclusive (l1 l2) (if l1 (if (member (car l1) l2) (exclusive (cdr l1) l2) (cons (car l1) (exclusive (cdr l1) l2)) ) ) ) (setq lst1 (entget (tblobjname "LAYER" "Calque"))) (entmod (subst (cons 70 (Boole 6 4 (cdr (assoc 70 lst1)))) (assoc 70 lst1) lst1 ) ) (setq lst2 (entget (tblobjname "LAYER" "Calque"))) (exclusive lst1 lst2)
willy95 Posté(e) le 5 avril 2022 Auteur Posté(e) le 5 avril 2022 Le 17/08/2017 à 10:41, VDH-Bruno a dit : Bonjour, Une solution parmi d'autres est de jouer avec le code de groupe dxf 62, définie dans la table des calques, si le code 62 (Numéro de couleur du calque) est positif, le calque est actif sinon il est désactivé. Pour l'exemple: (defun C:K (/ e dxf) (and (setq e (tblobjname "LAYER" "moncalque")) (setq dxf (entget e)) (entmod (append dxf (list (cons 62 (- (cdr (assoc 62 dxf)))))) ) ) (princ) ) A+ La même chose mais avec GELER et LIBERER est-il possible ? (plutôt que inactivé)
(gile) Posté(e) le 5 avril 2022 Posté(e) le 5 avril 2022 Oui. Il faut jouer sur le code binaire 1 du groupe DXF 70 (voir l'aide, comme toujours). Pour faire une bascule Geler/Libérer, on peut utiliser la fonction boole (voir l'aide, encore). Pour jouer avec les codes binaires et les opérations de bit à bit, voir ce sujet. (defun C:K (/ dxf flags) (and (setq dxf (entget (tblobjname "LAYER" "moncalque"))) (setq flags (assoc 70 dxf)) (entmod (subst (cons 70 (boole 6 (cdr flags) 1)) flags dxf)) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
willy95 Posté(e) le 5 avril 2022 Auteur Posté(e) le 5 avril 2022 Merci beaucoup, j'imaginais bien qu'il s'agissait d'un code binaire mais ne sachant pas faire, merci encore.
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