[AutoCAD LT 2024 - LISP]La fonction (LAYOUTLIST)

reb_c1
Advisor
Advisor

[AutoCAD LT 2024 - LISP]La fonction (LAYOUTLIST)

reb_c1
Advisor
Advisor

Bonjour à Toutes et à Tous,

 

En utilisant la fonction   (LAYOUTLIST) je remarque que l'ordre ne correspond pas à l 'ordre réel des PRESENTATIONS ??? La fonction retourne la liste suivante :

 

   ("003-0-A3H" "ETAGE" "REZ" "SOUS-SOL" "TOITURE")

 

Et voici l'ordre réel des PRESENTATIONS :

   liste_folios.png

 

Je vous remercie.
Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime
Répondre
Solutions acceptées (1)
476 Visites
10 Réponses
Replies (10)

_gile
Mentor
Mentor
Solution acceptée

Salut,

La fonction layoutlist renvoie toujours la liste des noms de présentation dans l'ordre alphabétique.

Pour avoir la liste dans l'ordre des onglets, il faut la trier à l'aide de la propriété TabOrder (code DXF 71) des objets Layout, ceux-ci sont contenus dans le dictionnaire "ACAD_LAYOUT", lui même contenu dans le dictionnaire racine (namedobjdict).

(setq layouts (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_LAYOUT"))))
(vl-sort (layoutlist)
	 '(lambda (l1 l2)
	    (< (cdr (assoc 71 (dictsearch layouts l1)))
	       (cdr (assoc 71 (dictsearch layouts l2)))
	    )
	  )
)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

reb_c1
Advisor
Advisor

Salut Grand Maitre Gilles, @_gile  😊

 

Je te remercie pour cette précision et pour le source... ça ne s'invente pas !

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime

reb_c1
Advisor
Advisor

Re,

 

En utilisant ton source, AutoCAD LT 2024 me retourne une erreur :

 

       erreur: type d'argument incorrect: lentityp

 

Quid ?

 

Je te remercie.

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime

_gile
Mentor
Mentor

Si c'est la première ligne qui génère cette erreur, c'est que le dictionnaire "ACAD_LAYOUT" n'existe pas. Je ne pense pas que ce soit possible.

Sinon, c'est peut-être qu'une présentation n'est pas "vue" parce qu'elle n'a pas encore été activée.

Essaye avec vlisp (ActiveX)

(setq layouts (vla-get-layouts (vla-get-ActiveDocument (vlax-get-acad-object))))
(vl-sort (layoutlist)
	 '(lambda (l1 l2)
	    (< (vla-get-TabOrder (vla-item layouts l1))
	       (vla-get-TabOrder (vla-item layouts l2))
	    )
	  )
)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

reb_c1
Advisor
Advisor

Super, ça fonctionne mais LAYOUTS n'est pas une liste ?

 

Quelle est la subtilité pour obtenir la liste ? Il me retourne #<VLA-OBJECT IAcadLayouts 000001e08ac13bc8>

 

Je te remercie.

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime

_gile
Mentor
Mentor

Non, 'layouts' est le dictionnaire des présentations (le contenant des objets Layout). Dans le premier cas c'est le ENAME de ce dictionnaire, dans le second le VLA-OBJECT de ce dictionnaire.

Les objets Layout sont à la fois un espace  (équivalent à une définition de bloc) et une configuration de traçage.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

_gile
Mentor
Mentor

Une fonction qui renvoie une liste de paires pointées (NomOnglet . Ename) triée dans l'ordre des onglets.

(defun getLayouts (/ dxf layouts)
  (setq dxf (dictsearch (namedobjdict) "ACAD_LAYOUT"))
  (while (setq dxf (member (assoc 3 dxf) dxf))
    (setq layouts (cons (cons (cdar dxf) (cdadr dxf)) layouts)
	  dxf	  (cddr dxf)
    )
  )
  (vl-sort layouts
	   '(lambda (l1 l2)
	      (< (getpropertyvalue (cdr l1) "TabOrder")
		 (getpropertyvalue (cdr l2) "TabOrder")
	      )
	    )
  )
)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

reb_c1
Advisor
Advisor

Merci Mon Brave Gilles @_gile   😊

 

Je regarde tout ça, mais déjà on avance bien...

 

Christian


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime

reb_c1
Advisor
Advisor

Re,

ça nous donne effectivement une liste, mais elle ne correspond pas à l'ordre affiché dans le dessin ! Alors que le source précédent du message N° 5  affiche le bon ordre !

 

Merci.

Christian

 


Formateur Indépendant, Consultant, AutoCAD, AutoCAD LT, REVIT MEP, INVENTOR -
www.rebcao.fr

Christian REB

0 J'aime

_gile
Mentor
Mentor

@reb_c1 wrote:

ça nous donne effectivement une liste, mais elle ne correspond pas à l'ordre affiché dans le dessin ! Alors que le source précédent du message N° 5  affiche le bon ordre !


Curieux, c'est exactement le même algorithme de tri.

_gile_0-1705408127038.png

 

Peux-tu attacher un dessin, que j'essaye de reproduire ce que tu décris.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime