Aller au contenu

algorithme de trie x y


x_all

Messages recommandés

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 lignes

je 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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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

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é