Aller au contenu

Triage des blocs incrémentés depuis MicroStation Atlas V3


DenisHen

Messages recommandés

Bonjour à la communauté.

 

Voilà, j'ai trié les Lisps que j'ai créés et je suis tombé sur celui-là. Il pourrait être très utile à certains. Je m'explique :

 

Lors d'un import ou d'une lecture d'un DWG issus de MicroStation Atlas V3, souvent, les mêmes blocs sont incrémentés, par exemple, le bloc "égout", s'il est utilisé 3 fois dans MicroStation Atlas V3, le DWG qu'il créera aura 3 noms de bloc différents pour le même bloc utilisé, "égout", "égout_01" et "égout_02", cette routine sert à supprimer ces extension incrémentés ("*_xx") pour ne retrouver que 3 blocs nommés "égout".

 

;;; ***********************************************************
;;; Routine de traitement des blocs incrémentés issus d'une V3 
;;; Version sans liste de blocs                                
;;; ***********************************************************
(defun c:RemplBlkV3 (/ ss i ent elst BlkNom Resultat index NouvBlkNom)
 (princ "\n\tDéveloppé par Denis H. (1.0)")
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (princ "\nRemplacement des blocs incrémentés...")
 (setq ss nil
       i  0
 ) ;_ Fin de setq
 (if (setq ss (ssget "_X" '((0 . "INSERT"))))
   (progn
     (while (setq ent (ssname ss i))
       (setq i      (1+ i)
             elst   (entget ent)
             BlkNom (cdr (assoc 2 elst))
       ) ;_ Fin de setq
       (setq Resultat (vl-string->list BlkNom))
       (if (/= (vl-string-search "_" (vl-list->string (reverse Resultat))) nil)
         (progn (setq index (- (length Resultat) (vl-string-search "_" (vl-list->string (reverse Resultat)))))
                (setq NouvBlkNom
                       (if (eq (type (read (substr BlkNom (1+ index)))) 'INT)
                         (substr BlkNom 1 (1- index))
                         BlkNom
                       ) ;_ Fin de if
                ) ;_ Fin de setq
                (princ (strcat "\nAncien bloc: " BlkNom " -> Nouveau bloc: " NouvBlkNom))
                (if (/= NouvBlkNom BlkNom)
                  (progn (setq elst (subst (cons 2 NouvBlkNom) (assoc 2 elst) elst)) ;
                         (entmod elst)
                  ) ;_ Fin de progn
                ) ;_ Fin de if
         ) ;_ Fin de progn
       ) ;_ Fin de if
     ) ;_ Fin de while
   ) ;_ Fin de progn
 ) ;_ Fin de if
 (if (eval 'c:CtrlSvGrd)
   (c:CtrlSvGrd)
   (princ "La commande c:CtrlSvGrd n'est pas disponible")
 ) ;_ Fin de if
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

J'ai écris ce code avec l'aide de plusieurs membres de CadXP... Un grand merci à eux...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

salut Denis,

c'est une routine très utile,

ça ne devrait plus l'être, car ustation permet les "cellules partagées"

qui suppriment ce problème.

mais tout le monde n'a pas encore pris en compte cette possibilité ...

 

Il m'arrive d'avoir ce problème également avec les plans archi (all_plan, archicad ? je ne sais pas)

 

a+

gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

Salut Gégé.

 

Effectivement, j'ai eu trop souvent ce problème, et vu que je l'ai, en partie "résolue", j'ai préféré partager cette petite routine.

 

A+

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut Fraid, et merci pour ta remarque, qui souligne un oubli de ma part pour ne pas l'avoir supprimé de mon code.

 

Cette commande (CtrlSvGrd) effectue une sauvegarde (ou enregistrement) toutes les X commandes de mes différents LISP qui y font appel.

 

Si cela intéresse quelqu'un, voici la description des deux commandes et leur code :

 

CtrlSvGrd : fait appel au control (Ctrl) des sauvegardes (SvGrd ou enregistrement) du fichier dessin. Il sauvegarde ou pas le fichier toutes les X commandes LISP qui y font appel (définies par CtrlSvGrdParam).

CtrlSvGrdParam : défini le nombre d'appel à CtrlSvGrd qui lance la commande sauvegarde (ou enregistrement) du fichier dessin.

 

;;;*****************************************
;;; Sauvegarde toutes les n opérations LiSP 
;;;*****************************************
(defun c:CtrlSvGrd (/ SvGrd)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (setq SvGrdParam (vlax-ldata-get "DenisH" "SauveGardeParam" 0))
 (if (= SvGrdParam 0)
   (progn (setq SvGrdParam 20) (vlax-ldata-put "DenisH" "SauveGardeParam" SvGrdParam)) ;_ Fin de progn
 ) ;_ Fin de if
 (setq SvGrd (vlax-ldata-get "DenisH" "SauveGarde" 0))
 (if (>= SvGrd SvGrdParam)
   (progn (princ "\nSauvegarde incrémentielle...\tCompteur à zéro.")
          (command "_qsave")
          (vlax-ldata-put "DenisH" "SauveGarde" 0)
   ) ;_ Fin de progn
   (progn (setq SvGrd (+ SvGrd 1))
          (vlax-ldata-put "DenisH" "SauveGarde" SvGrd)
          (princ (strcat "\nIncrémentation sauvegarde = " (itoa SvGrd) "/" (itoa SvGrdParam)))
   ) ;_ Fin de progn
 ) ;_ Fin de if
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun
;;;***************************
;;; Paramètre des sauvegardes 
;;;***************************
(defun c:CtrlSvGrdParam (/)
 (princ "\n\tDéveloppé par Denis H. (1.0)")
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (setq SvGrd (getstring "\nTapez le nombre d'opérations entre les sauvegardes :" ""))
 (vlax-ldata-put "DenisH" "SauveGardeParam" (atoi SvGrd))
 (vla-endundomark doc)
 (princ)
) ;_ Fin de defun

 

Bonne journée à tous.

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é