x_all Posté(e) le 21 juin 2015 Posté(e) le 21 juin 2015 bonjour je voudrai classer des blocs (des rectangles) dans l'ordre naturel de lecture c'est à dire le premier en haut à gauche et le dernier en bas à droite. j'ai du mal à concevoir la moulinette qui va classer tout ça... je commence par trier suivant le Y puis je détermine si les blocs sont sur la même ligne avec une tolérance en fonction de la hauteur du bloc (on peut admettre qu'il n'y a pas plus de 80% de recouvrement)j'ai donc les blocs dans l'ordre des Y avec un N°de lignesje fait alors un trie en X des lignes. (j'en suis là même si je rame un peu pour l'écrire en lisp) je me demande si c'est pertinent, et s'il n'y a pas plus simple. merci pour vos lumières quelques trucs sur autocad
(gile) Posté(e) le 22 juin 2015 Posté(e) le 22 juin 2015 Salut, Un exemple avec vl-sort (pas testé). ;; blkList = la liste des blocs ;; on transforme la liste des blocs pour optimiser l'accès aux coordonnées Y et Y ;; chaque élément devient une sous liste (X Y bloc) (setq blkCoordList (mapcar '(lambda (blk / pt) (setq pt (cdr (assoc 10 (entget blk)))) (list (car pt) (cadr pt) blk) ) blkList ) ) ;; on trie les blocs par Y décroissant et par X croissant en cas d'égalité ;; ici avec une tolérance de 0.001, à toi d'adapter selon tes besoins (setq blkCoordList (vl-sort blkCoordList '(lambda (a B) (if (equal (cadr a) (cadr B) 0.001) (< (car a) (car B)) (> (cadr a) (cadr B)) ) ) ) ) ;; on "nettoye" la liste des coordonnées (setq sortedBlkList (mapcar 'caddr blkCoordList)) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 22 juin 2015 Auteur Posté(e) le 22 juin 2015 comme d'habitude c'est éblouissant... en fait tu combine les 2 tri dans un seul vl-sort avec une condition pour les lignes... algorithmiquement parlant c'est quand même pas pareil sans doute aussi pour ça que ça me prend 50 lignes.bon la conclusion, c'est que je suis pas au point avec vl-sort.. enfin surtout avec la fonction de test qu'on met derrière. donc si je comprend bien, si 2 pts consécutifs sont sur une même rangée, on les classe par x, si non on classe par y... c'est juste l'inverse de ce que je faisait , mais c'est aussi beaucoup plus simple :) je vais ruminer tout ça car ces quelques lignes m'impose de revoir pas mal de mon raisonnement une fois de plus merci beaucoup pour ton temps et tes conseils... quelques trucs sur autocad
x_all Posté(e) le 22 juin 2015 Auteur Posté(e) le 22 juin 2015 plop ben un grand merci encore (gile), grâce à ta fonction de tri j'ai pu finaliser le truc même si il a fallu revoir pas mal de choses. la routine et quelques explications ici pour ceux qui en auront l'utilité. Cette fonction permet d'imprimer un carnet de A4 et de numéroter les pages, on peu aussi s'en servir pour imprimer une image ou un dessin en mosaïque sur une imprimante A4 quelques trucs sur autocad
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