Aller au contenu

Activé ou inactivé un calque par une touche


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

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 :)

  • 3 mois après...
Posté(e)

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) 

  • 4 ans après...
Posté(e)
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é)

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité