Sélectionner les Pline ou autre selon leur longueur

Bonjour à la communauté.
Je récupère souvent des PDF pour en faire des DWG. En général, ça se passe bien, mais parfois, je me retrouve avec des « millions » de toutes petites lignes qui se suivent, ou polylignes qui retracent un pointillé. Mais je n’en n’ai pas besoin. Et même le paramètre d’Import de transformer les « tirets colinéaires » en ligne unique ne fonctionne pas.
Et les DWG font de temps en temps 10Mo, 20Mo, voir plus( une fois, j’en avais un de plus de 5Go, et le PDF faisait 2 ou 3 Mo), alors que 500Ko devraient être suffisant, vu le contenu des dessins.
Donc, ma question serait : Comment faire pour supprimer toutes les entités (lignes, arc, polylignes…) qui font moins de 50mm, par exemple.
Une petite capture parle souvent mieux :

Je n’ai pas AutoCAD MAP, qui peut supprimer les superpositions, il me semble.
J’ai tenté un Lisp, mais je ne sais pas comment m’y prendre pour ce sujet.
Si quelqu’un aurait une solution, un bout de code, une astuce, je suis preneur…
Bien à toi la communauté.
Denis…

Je te ferais un petit Lisp (dès que je sors du dentiste) :blush: :tooth:

Voilà:

[!Note]
Tu enlèveras ligne 11, les objets que tu ne veux pas effacer. AutoCAD les considère au sens programmation du terme, c’est-à-dire ayant une longueur même fermés.

SUPPRCOURTES.lsp (1,7 Ko)

(defun c:SUPPRCOURTES ( / maxLen ss i ent len count)
  ;; Charge les extensions Visual LISP nécessaires
  (vl-load-com)
  
  ;; Demande à l'utilisateur de spécifier la longueur maximale
  (setq maxLen (getdist "\nSpécifiez la longueur maximale des entités à supprimer : "))

  (if maxLen
    (progn
      ;; Sélectionne automatiquement toutes les entités du dessin ayant une géométrie mesurable
      (setq ss (ssget "X" '((0 . "LINE,POLYLINE,LWPOLYLINE,ARC,CIRCLE,SPLINE,ELLIPSE"))))
      (setq count 0)

      (if ss
        (progn
          (setq i 0)
          ;; Parcourt chaque entité de la sélection
          (while (< i (sslength ss))
            (setq ent (ssname ss i))

            ;; Calcule la longueur totale de l'entité
            (setq len (vl-catch-all-apply 
                        'vlax-curve-getDistAtParam 
                        (list ent (vlax-curve-getEndParam ent))
                      )
            )

            ;; Vérifie s'il n'y a pas d'erreur de calcul et si la longueur est INFÉRIEURE OU ÉGALE au seuil
            (if (and (not (vl-catch-all-error-p len))
                     (<= len maxLen))
              (progn
                ;; Supprime l'entité
                (entdel ent)
                (setq count (1+ count))
              )
            )
            (setq i (1+ i))
          )
          ;; Affiche le résultat final
          (princ (strcat "\nTerminé. " (itoa count) " petite(s) entité(s) supprimée(s)."))
        )
        (princ "\nAucune entité géométrique trouvée dans le dessin.")
      )
    )
    (princ "\nAction annulée.")
  )
  (princ)
)

(princ "\nScript mis à jour chargé. Tapez 'SUPPRCOURTES' pour lancer la commande.")
(princ)

Hello

Un Lisp c tres pratique !

Mais franchement, tu aurais pu selectionner les objets concernes, Bouton droit, Selection rapide, Type d objet = Polyligne DONT La longueur est < a xx Unites !

A repeter eventuellement pour les Polylignes 3D !?

A repeter eventuellement pour les simples Lignes

Bye, Pat

Certes, c’est une façon de faire quoique un peu plus longue, mais je viens de penser à une façon, à mon avis, encore plus rapide et ne passant pas par le Lisp, c’est tout simplement d’utiliser l’assistant d’AutoCAD en lui posant la question.

Salut Patrice.

Je n’utilise JAMAIS la sélection rapide, sans JAMAIS savoir pourquoi :wink:. Juste que je n’y pensais probablement pas.

Maintenant, je vais l’utiliser, c’est effectivement très efficace ! :+1:

Un grand merci !

Denis…

C’est parfait ! ! !

Un très grand merci !

Denis…