PHILPHIL Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Curlygoth Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 j'ai une base de : (mais attention c'est du VBA) Mon site Web (en cours de construction) : Site DA-CODE de @didier
Luna Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 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
Olivier Eckmann Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 Bonjour, Sinon, il y a le programme de LeeMac : http://lee-mac.com/tabsort.html Olivier
Luna Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 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
PHILPHIL Posté(e) le 23 avril 2021 Auteur Posté(e) le 23 avril 2021 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 FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Luna Posté(e) le 23 avril 2021 Posté(e) le 23 avril 2021 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
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