CADxp: controle des calques en lisp - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

controle des calques en lisp

#1 L'utilisateur est hors-ligne   vms66 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 13
  • Inscrit(e) : 02-mai 09

Posté 27 décembre 2011 - 22:26

bonjour

auriez vous une routine en lisp pour "eteindre" tous les calques?
et une autre pour "allumer" un calque à partir de son nom?

merci
0

#2 L'utilisateur est hors-ligne   lili2006 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 12085
  • Inscrit(e) : 21-décembre 05

Posté 28 décembre 2011 - 09:48

Bonjour à toutes et tous,

Dans format => Outils de calques, tu va trouver ton bonheur,...
AutoCAD MAP 3D 2020 - Covadis 17.0f
Forum : http://genie-civil.bbactif.com/
0

#3 L'utilisateur est hors-ligne   vms66 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 13
  • Inscrit(e) : 02-mai 09

Posté 28 décembre 2011 - 12:29

bonjour lili
oui 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
0

#4 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2161
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 28 décembre 2011 - 12:57

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)

0

#5 L'utilisateur est hors-ligne   vms66 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 13
  • Inscrit(e) : 02-mai 09

Posté 28 décembre 2011 - 13:10

Voir le messagebryce, le 28 décembre 2011 - 12:57 , dit :

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)




merci
mais j'ai ce message d'erreur
; erreur: no function definition: VLAX-GET-ACAD-OBJECT

je suis sous autocad2004
et vlax je ne connait point du tout.....
0

#6 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2161
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 28 décembre 2011 - 13:18

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

0

#7 L'utilisateur est en ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11291
  • Inscrit(e) : 02-septembre 05

Posté 28 décembre 2011 - 13:36

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 -
Développements sur mesure pour AutoCAD
Image IPB
0

#8 L'utilisateur est hors-ligne   bryce 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2161
  • Inscrit(e) : 03-mars 06
  • Location68 Mulhouse

Posté 28 décembre 2011 - 14:12

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

0

#9 L'utilisateur est hors-ligne   vms66 

  • Member
  • PipPip
  • Groupe : Membres
  • Messages : 13
  • Inscrit(e) : 02-mai 09

Posté 28 décembre 2011 - 15:00

merci
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)