Aller au contenu

TRIER NOM PRESENTATION


PHILPHIL

Messages recommandés

Bonjour

j'essaie   de trier des noms de présentation en fonction des 4 à 2 caracteres en partant de la fin du nom

exemple de nom de présentation :

"******-a-11 1-X PL011-" = "011"

le programme a fonctionné une fois

puis apres plus rien

j'ai ca comme erreur :

Erreur Automation Valeur de la propriété TabOrder non valable

il  semble que le numero de la fenetre ne se mette pas a jour dans la base tant que l'on a pas fermé le fichier, et meme la les numeros n'ont pas l'air de forcement se suivrent

genre "0" pour model  ca ok

mais ensuite  des nombre entiers qui ne se suivent pas forcement tant qu'il n'y en a pas deux pareils,  VRAI ou FAUX ?

comment vérifier ca ?
 

(defun c:verifier_order_layout ( / acdoc leslayouts layoutsname )
  (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq leslayouts (vla-get-layouts acdoc))
  (vlax-for layout leslayouts (setq layoutsname (cons (vla-get-name layout) layoutsname)))
  (setq nblayouts (length layoutsname))
  (setq i 1)
  (foreach name layoutsname
    (setq layout (vla-item leslayouts name))
    (setq nb1 (vla-get-taborder layout))
    (princ (strcat "\n" (itoa i) " SUR " (itoa nblayouts) " : " name " " (rtos nb1 2 0)))

    (princ)
    (setq i (1+ i))
  )(princ)
)

 

et sinon comment renuméroter chaque fenetre dans ce cas la en etant sur que les numero se suivent ?

 

(defun c:cnptrier4a2fin ( / acdoc leslayouts
;;;                         layouts i layout
                         )
  (setq acdoc (vla-get-activedocument (vlax-get-acad-object)))
  (setq leslayouts (vla-get-layouts acdoc))
 
  (setq layouts    (getlayouts nil t)
        layoutsold layouts
  )
  (setq layouts (vl-sort layouts
                         '(lambda (a b) (< (atoi (substr a (- (strlen a) 3) 3)) (atoi (substr b (- (strlen b) 3) 3))))
                )
  )
  (setq i (vla-get-taborder (vla-item leslayouts (nth 0 layouts))))
  (foreach name layouts
    (setq layout (vla-item leslayouts name))
    (vla-put-taborder layout i)
    (setq i (1+ i))
  )
  (getlayouts "POUR VERIFICATION DES NOMS DE PRESENTATION" t)
)

merci

 

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Pour l'un de mes programmes, j'utilise ceci pour remettre les présentations dans l'ordre :
 

(defun get-init-layout-pos (/ i tabs lay-list lay Init_Pos-list)

	(vl-load-com)
	(setq i 0
	      tabs (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
	      lay-list (layoutlist)
	)
	(foreach lay (reverse lay-list)
		(setq Init_Pos-list (cons (cons lay (vla-get-taborder (vla-item tabs lay))) Init_Pos-list))
	)
	Init_Pos-list

)

(defun set-layout-pos (/ i d tabs Init_Pos lay-list lay lay-move)

	(vl-load-com)
	(setq i 0
	      d 0
	      tabs (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
	      lay-list (layoutlist)
	      Init_Pos (get-init-layout-pos)
	)
	(foreach lay lay-list
		(vla-put-taborder (vla-item tabs lay) (setq i (1+ i)))
		(if (/= (cdr (assoc lay Init_Pos)) i)
			(setq d (1+ d)
			      lay-move (cons lay lay-move)
			)
		)
	)
	(prompt (strcat "\nUn total de "
			(itoa (length lay-list))
			" présentations ont été prises en compte."
			"\nSur les "
			(itoa (length lay-list))
			", "
			(itoa (length lay-move))
			" présentations ont changé de position."
			"\nVoici la liste des présentations ayant été déplacé :"
			(DXF_List lay-move "\"\n  - \"" "left" t nil)
			"\n"
		)
	)

)

A voir si cela peut t'aider...
Tu peux également essayer de regarder sur CadTutor ou TheSwamp pour avoir plus d'idées/exemples pour l'adapter au mieux à tes besoins :3

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

En effet, LeeMac est une pointure et référence en terme de développements UserFriendly ! J'avais complètement oublié ce programme :3

Par contre, il n'est pas une référence pour "récupérer" des bouts de codes de ses programmes ou du moins, pas lorsqu'on débute (à côté de personnes comme LeeMac ou (gile), nous sommes toutes et tous des débutants xD) donc à voir selon tes besoins :3

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

bonjour 

merci

j'utilise  tabsort  de LEE mac, oui

 

Luna  comment sélectionnes tu les présentations pour ton bout de lisp 

set-layout-pos

 

phil

 

 

 

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Je ne les sélectionnes pas il me semble (mais chat fonctionne >w<)

Je peux te proposer ceci :

(defun GetTabOrder->list (/ layout-list layout)

	(vlax-for layout (vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
		(setq layout-list (cons (cons (vla-get-name layout) (vla-get-taborder layout)) layout-list))
	)
	(vl-sort layout-list '(lambda (l1 l2) (< (cdr l1) (cdr l2))))

)

(defun SetTabOrder (lst / layout layout-list)

	(if (and
		(= (length lst) (length (setq layout-list (cdr (GetTabOrder->list)))))
		(mapcar
			'(lambda (layout)
			 	(vla-put-taborder
					(vla-item
						(vla-get-layouts (vla-get-activedocument (vlax-get-acad-object)))
						(car layout)
					)
					(cdr layout)
				)
			 )
			lst
		)
	    )
		T
		nil
	)

)

(defun List->SetTabOrder (f / layout i)

	(setq i 0)
	(mapcar
		'(lambda (layout)
			(cons layout (setq i (1+ i)))
		 )
		(vl-sort
			(mapcar 'car (cdr (GetTabOrder->list)))
			f
		)
	)

)

Il n'est pas possible de spécifier une liste tronquée lorsqu'on re-définit le tab-order des layouts (sinon si tu places une présentation entre la 2 et 3, tu auras 2 fois une présentation avec un tab-order de 3) donc c'est pour cela que je n'ai pas d'argument de liste.
Cependant avec les 3 fonctions ci-dessus, tu peux spécifier la manière dont tu souhaites trier tes présentations depuis la fonction (List->SetTabOrder) (la fonction de tri correspond à la fonction que (vl-sort) utilise comme argument donc avec une ' !) et s'applique sur la liste de l'ensemble des présentations (donc une liste d'atomes de type string). En terme d'utilisation, c'est comme ceci :

(settaborder (list->settaborder '>)) ;; return T if successful, nil if not.
;; Les présentations ont été trié dans l'ordre décroissant (alphanumérique de base de la fonction (vl-sort)) à partir du nom de ces dernières

(settaborder (list->settaborder '<)) ;; return T if successful, nil if not.
;; Les présentations ont été trié dans l'ordre croissant (alphanumérique de base de la fonction (vl-sort)) à partir du nom de ces dernières

(settaborder (list->settaborder '(lambda (l1 l2) (< (substr x (- (strlen l1) 2)) (substr x (- (strlen l2) 2)))))) ;; return T if successful, nil if not.
;; Les présentations ont été trié dans l'ordre croissant (alphanumérique de base de la fonction (vl-sort)) à partir des 3 derniers caractères du nom des présentations

Je pense que cela devrait répondre à ton besoin pour l'insérer dans ton programme et ajuster le tri de la liste correctement.
Pour info le (cdr (GetTabOrder->list)) c'est pour éjecter la présentation "Model" de la liste car elle doit être à 0 impérativement donc on n'y touche pas :3
Si jamais tu ne sais pas ce que tu tri, je te laisse regarder ce que retourne (GetTabOrder->list) et (mapcar 'car (cdr (GetTabOrder->list))) :3

Bisous,
Luna

 

Lien vers le commentaire
Partager sur d’autres sites

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é