Aller au contenu

Nettoyage automatise d'un DWG avec AutoCAD MAP 2022 / Express Tools / Covadis


passi54

Messages recommandés

Bonjour à tous

Je reçois de plus en plus de dwg de clients (AutoCAD, Revit, Allplan,...) où tout est décomposé Hachures y compris.

Bien entendu pas dans des calques séparés, ça serait trop facile ! Je me suis déja créé un raccourcis pour dégrouper et purger tout ce qu'y était possible de faire. Mais je cherche de l'aide pour pouvoir sélectionner toutes les polylignes, lignes, arcs du dwg et de les trier en fonction de leurs longueurs dans les calques identiques avec en extension par exemple  "Long. de 0 a 1", "Long. de 1 a 2",.... Cela me permettrai de pouvoir nettoyer rapidement toutes les hachures décomposées. A moins que vous avez déja une solution pour un cas similaire.

Vous remerciant par avance pour votre aiguillage.

Bonne journée

Lien vers le commentaire
Partager sur d’autres sites

Hello

Juste pour Info, j utilise souvent 2 superbes Routines Lisp pour trier / preparer des DWGs "bordeliques" provenant de l exterieur

quand le DWG a de multiples types d objets sur le MEME Calque et/ou de Multiples Objets avec la Couleur FORCEE !

Bye, lecrabe

 

Voici la Routine "TRI" de notre regrette Patrick_35 qui "eclate" le DWG sur de multiples calques en fonction du Type d Entite !

 


;;
;; Tri des entites par calque et transfert dans des sous-calques
;;
;; Si Calque nomme A alors : A__TEXT, A__LINE, A___CIRCLE, A__HATCH, A__POLYLINE, etc
;; 
;; Par Patrick_35 le 23/03/2009 pour Patrice B.
;;
;; Nouvelle version 1.1 qui separe XREF & BLOC et fonctionne sur AutoCAD >= 2000
;;
;; Par VDH-Bruno : Nouvelle version 1.1A 
;; qui traite SEULEMENT la Selection et NON PAS TOUT le DWG ... 
;; 
 
(defun c:TRI (/ doc ent lay lck nom ori pro sel tot txt)
  (vl-load-com)
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vla-startundomark doc) 

  (if (ssget) ;; Selection partiel
    ;; (ssget "X") ;; Selection total 

    (progn
      (vlax-for ent (setq sel (vla-get-activeselectionset doc))
        (cond
          ((and (eq (vla-get-objectname ent) "AcDbBlockReference")
                (vlax-property-available-p ent 'path)
            )
            (setq nom "Xref")
          )
          (T
            (setq txt (substr (vla-get-objectname ent) 5)
                  tot 2
            )
            (while (and (> (vl-string-elt txt tot) 90)
                        (< tot (1- (strlen txt)))
                   )
              (setq tot (1+ tot))
            )
            (and (eq (1- (strlen txt)) tot)
              (setq tot (1+ tot))
            )
            (setq nom (substr txt 1 tot))
          )
        )
        (setq ori (vla-item (vla-get-layers doc) (vla-get-layer ent))
              lck (vla-get-lock ori)
        )

;;      (or (wcmatch (vla-get-layer ent) (strcat "* - " nom))
;;          (and (vl-catch-all-error-p (setq lay (vl-catch-all-apply 'vla-item (list ;; (vla-get-layers doc) (setq txt (strcat (vla-get-layer ent) " - " nom))))))

        (or (wcmatch (vla-get-layer ent) (strcat "*__" nom))
            (and (vl-catch-all-error-p (setq lay (vl-catch-all-apply 'vla-item (list (vla-get-layers doc) (setq txt (strcat (vla-get-layer ent) "__" nom))))))

                 (setq lay (vla-add (vla-get-layers doc) txt))
                 (foreach pro '('color 'freeze 'layeron 'linetype 'lineweight 'material 'plottable 'viewportdefault)
                   (and (vlax-property-available-p lay (eval pro))
                     (vlax-put lay (eval pro) (vlax-get ori (eval pro)))
                   )
                 )
            )
            (vla-put-lock lay :vlax-false)
            (vla-put-lock ori :vlax-false)
            (vla-put-layer ent txt)
            (vla-put-lock lay lck)
            (vla-put-lock ori lck)
        )
      )
      (princ (strcat "\nTravail sur " (itoa (vla-get-count sel)) " objet(s). "))
      (vla-delete sel)
    )
    (princ "\nDessin vide! ")
  ) 

  (vla-endundomark doc) 
  (princ) 
) 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

Et voici la routine "E2LBC" qui "eclate" le DWG sur de Multiples Calques en fonction de la Couleur (Support des Couleurs ACI, RGB, RAL, Pantone, etc) des Entites

Bye, lecrabe

 

  
;; 
;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/separate-hatches-on-multiple-layers-depending-on-color-or-name/td-p/9402333
;;
;; Routine: E2LBC__Entities_to_Layer_By_Color__dlanorh by dlanorh for Patrice B.
;; 
;; Move selected Entities on separate layers depending on Color
;;
;; --- Interrogation Entite/Objet en Lisp --- 
;; (entget (car (entsel)) '("*"))
;; 

(vl-load-com) 

(defun LM:True->RGB ( c ) (mapcar '(lambda ( x ) (lsh (lsh (fix c) x) -24)) '(8 16 24)))

(defun rh:lst2str ( lst del / str ) (setq str "")  (mapcar '(lambda (x) (setq str (strcat str x del))) lst) (vl-string-right-trim del str))

(defun rh:layer_props ( lyr lst / v ) (setq v (mapcar '(lambda (x) (vlax-get-property lyr x)) lst)))

(defun rh:strlen3 ( str ) (if (< (strlen str) 3) (while (< (strlen str) 3) (setq str (strcat "0" str))) str) str)

;; Entities to layer by color
(defun c:E2LBC ( / c_doc c_lyrs l_props ss cnt ent elst lyr l_vals cstr clst clr nlyr lobj)

  (setq c_doc (vla-get-activedocument (vlax-get-acad-object))
        c_lyrs (vla-get-layers c_doc)
        l_props (list 'truecolor 'linetype 'lineweight);Layer properties list
  );end_setq

  (prompt "\nSelect Entities : ")
  (setq ss (ssget))

  (cond (ss
          (repeat (setq cnt (sslength ss))
            (setq ent (ssname ss (setq cnt (1- cnt)))
                  elst (entget ent)
                  lyr (cdr (assoc 8 elst));Layer
                  l_vals (rh:layer_props (vla-item c_lyrs lyr) l_props);Layer properties
                  cstr ""
                  clst nil
            );end_setq

            (foreach x '(62 420 430) (setq clst (cons (cdr (assoc x elst)) clst)))
            (setq clr (vl-some '(lambda (x) x) clst))
            (cond ( (not clr) (setq cstr "256"))                ;No Color set (bylayer)
                  ( (and (= (type clr) 'INT) (<= clr 256))      ;ACI (0-256)
                    (setq cstr (rh:strlen3 (itoa clr)))
                  )
                  ( (= (type clr) 'STR) (setq cstr clr))        ;Color Book
                  (t (setq clr (mapcar 'itoa (LM:True->RGB clr));RGB
                           cstr (rh:lst2str (mapcar 'rh:strlen3 clr) "_")
                     );end_setq
                  )
            );end_cond
            (setq nlyr (strcat lyr "__" cstr))

            (cond ( (not (tblsearch "layer" nlyr)) (setq lobj (vla-add c_lyrs nlyr)) (mapcar '(lambda (x y) (vlax-put-property lobj x y)) l_props l_vals)))
            (vlax-put-property (vlax-ename->vla-object ent) 'layer nlyr)
          );end_repeat
        )
        (t (alert "NO Entities Selected ! "))
  );end_cond

  (princ) 
);end_defun 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Alors pour le dwg avant un pré-nettoyage il fait plus 3 mo. Je ne sais pas si le site permet le partage de fichier volumineux (et c'est le plus petit car le RDC avec Am-Ext. 8mo !).

Merci pour tes Lisp, je vais les essayer de ce pas !👍

Lien vers le commentaire
Partager sur d’autres sites

Hello

Malheureusement je pense que ces 2 Lisp ne vont pas t aider beaucoup sur le DWG "nettoye" que tu nous as envoyé !?

A voir sur d autres DWGs !?

Je vais transférer ton Sujet sur le forum AutoCAD MAP ...

Bye, lecrabe

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @passi54

Il est vrai que celui qui a sauvegardé ce fichier avant de le livrer est un pervers.
Pour les hachures décomposées on pourrait utiliser quelque chose dans ce style :2024-02-09_12-31-44.gif.94332b3bfd3844253203fa87caa6dcd4.gif

C'est un petit LSP que je viens d'écrire basé sur le choix d'une ligne "exemple" et qui va supprimer de ce calque toutes les lignes ayant la même direction.

C'est un début, mais pas satisfaisant, car certaines hachures sont passées en "polyligne", on peut continuer à filtrer si ça t'intéresse comme principe.

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Il faudrait simplement se tourner vers le Fournisseur de ce .DWG CATASTROPHIQUE et avoir quelques explications sur l'origine du PLAN !

Après il peut arriver, que c'est simplement lié aux OPTIONS D'EXPORTATION vers un .DWG pour ceux qui utilisent un logiciel autre qu'AutoCAD ! Et bien souvent, la personne qui a généré les EXPORTS DWG ne soupçonne même pas ces options et leur intérêt !

C'est évident que ce .DWG ne provient pas d'AutoCAD, il n'y a qu'à voir le NOM des CALQUES et la DESCRIPTION des calques qui n'est que rarement renseigné sur AutoCAD.

Je dirais que c'est de l'ARCHICAD ! Ils ont le chic de coter une valeur EXPOSANT pour la précision des textes de COTATION !!!!!!

Mais, j'ai bien connu un "FRAPADINGUE" qui s'amusait à DECOMPOSER les BLOCS sous prétexte que :  C'EST MOI QUI L'AI FAIT, je veux pas qu'on me "pirate" ma BIBLIOTHEQUE

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Je viens d'essayer les 2 Lisps sur mon fichier RDC, et ça marche très bien !

Ca me permet deja de très bien trier ! Un plus serait de pouvoir aussi trier par la longueur ... 

Mais c'est déja pas mal comme ça ! Merci beaucoup !

Lien vers le commentaire
Partager sur d’autres sites

Didier merci pour ton retour.

Oui pour ce fichier là on pourrait utiliser ce moyen, c'est pas mal mais au RDC j'ai des murs dans tout les sens et les hachures aussi et là ça va etre compliqué !

Hormis par un filtre de longueur je vois que ça...

Christian je suis déja rentré en contacte avec l'Archi mais rien à faire c'est leur protocole ! Il ne fournisse même pas la maquette 3D (IFC).

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é