Aller au contenu

Nettoyer les plans ArchiCAD


BIM G CO

Messages recommandés

Pour ceux qui récupère sous AutoCAD des fichiers provenant d'ArchiCAD, voici les pistes (quelques unes sont éparpillés sur ce site):

[surligneur] Enlever le "\\A1;" des Textes Multilignes[/surligneur]

(defun c:ArchiCAD_A1 (/ sel a b c)
(setq sel (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-StartUndoMark sel)
 (vlax-for b (vla-get-Blocks sel)
   (vlax-for a	b
     (if (and
    (= "AcDbMText" (vla-get-ObjectName a))
    (= (strcat (chr 92) "A1;")
       (substr (vla-get-TextString a) 1 4)
    )
  )
(progn
  (setq c (vla-get-TextString a))
  (setq c (substr c 5 (strlen c)))
  (vla-put-textstring a c)
)
     )
   )
   (vla-EndUndoMark sel)
 )
 (vla-regen sel acActiveViewport)
 (princ)
)

[Edité le 30/5/2008 par Maximilien]

[surligneur] Enlever les formatage des Textes Multilignes[/surligneur]

Attention c'est violent

(defun c:ArchiCAD_Ac (/ sel a b c)
 (setq sel (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-StartUndoMark sel)
 (vlax-for b (vla-get-Blocks sel)
   (vlax-for a	b
     (if (and
;; Object de type texte Multilignes
    (= "AcDbMText" (vla-get-ObjectName a))
;; Ceux qui commence par "{\"
    (= (strcat (chr 123) (chr 92))
       (substr (vla-get-TextString a) 1 2)
    )
;; Ceux qui finissent par "}"
    (= (chr 125)
       (substr (vla-get-TextString a)
	       (strlen (vla-get-TextString a))
	       1
       )
    )
  )
(progn
  (setq c (vla-get-TextString a))
;; Enlève le dernier caractère
  (setq c (substr c 2 (- (strlen c) 2)))
;; Boucle pour enlever tous les blocs de caractères du "\"  jusqu'au ";" (formatage)
  (while (and (vl-string-position (ascii ";") c)
	      (= (substr c 1 1) (chr 92))
	 )
    (setq c (substr c
		    (+ 2 (vl-string-position (ascii ";") c))
		    (strlen c)
	    )
    )
  )
  (vla-put-textstring a c)
)
     )
   )
   (vla-EndUndoMark sel)
 )
 (vla-regen sel acActiveViewport)
 (princ)
)

[surligneur]Effacer les WipeOuts inclus dans les blocs[/surligneur]

[surligneur]Effacer les Hachures type Solid inclus dans les blocs[/surligneur]

Pour les hachures il me reste à voir l'effacement selon la supercifie des hachures (un coup de VLisp Array)

Merci à Tramber, Patrick_35 et (gile) ici

 

Oui Patrick_35 les deux routines précédentes proviennent de tes encouragements.

 

[surligneur]S'occuper des blocs plus ou moins corrects[/surligneur]

Les plans provenant d'ArchiCAD sont composés de plusieurs blocs imbriqués les uns aux autres.

Penser donc à faire un Contrôle des erreurs

_.audit _yes

 

[surligneur]Si c'est pour "monochromiser" ces plans on peut rendre les blocs en couleur Dubloc[/surligneur]

Merci à LUDWIG, Patrick_35, Tramber, Bonuscad et Rebcao. ici

 

 

[Edité le 30/5/2008 par Maximilien]

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Salut maximilien!

 

Chez nous on récupère comme fond de plan architecte sur les projets sur lesquels on travaille

des fichiers fait par archicad. Et pour être franc, c'est de la vrai m..... :mad: , car on se retrouve avec

des blocs non présents dans le dessin (malgré purge, explosion de toutes les entités, effacement de

toutes les entités dans le dessin et repurge), ces blocs sont encore là.

La seule chose pour ne plus les avoir c'est un wbloc du dessin.

 

Si on pouvait développer tout une suite de fonctions pour nettoyer ces plans, je suis partant pour

y participer.

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Rien n'interdit d'utiliser un morceau du lisp

 

Voici ce que j'utilise dans mes lisps

 

  ;-------------------------------------------------------------------------
 ; Récuperer la valeur String d'un Mtext
 ; Extrait du lisp de Custom Stuff StripMtext v3.07
 ; http://www.users.qwest.net/~sdoman/
 ; Modifié par Patrick_35 pour correction d'un bug+formattage des caractères spéciaux
 ;-------------------------------------------------------------------------

 (defun UnFormat (Mtext Formats / All Format1 Format2 Format3 Pos Text Str)
   (and
     Mtext
     Formats
     (= (type Mtext) 'STR)
     (= (type Formats) 'STR)
     (setq Formats (strcase Formats))
     (setq Text "")
     (setq All T)
     (if (= Formats "*")
(setq Formats "S"
      Format1 "\\[LO`~]"
      Format2 "\\[ACFHQTW]"
      Format3 "\\P"
)
(progn
  (setq Format1 "" Format2 "" Format3 "")
  (foreach item '("L" "O" "~")
    (if (vl-string-search item Formats)
      (setq Format1 (strcat Format1 "`" item))
      (setq All nil)
    )
  )
  (if (= Format1 "")
    (setq Format1 nil)
    (setq Format1 (strcat "\\[" Format1 "]"))
  )
  (foreach item '("A" "C" "F" "H" "Q" "T" "W")
    (if (vl-string-search item Formats)
      (setq Format2 (strcat Format2 item))
      (setq All nil)
    )
  )
  (if (= Format2 "")
    (setq Format2 nil)
    (setq Format2 (strcat "\\[" Format2 "]"))
  )
  (if (vl-string-search "P" Formats)
    (setq Format3 "\\P")
    (setq Format3 nil All nil)
  )
  T
)
     )
     (while (/= Mtext "")
(cond
  ((wcmatch (strcase (setq Str (substr Mtext 1 2))) "\\[\\{}]")
    (setq Mtext (substr Mtext 3)
	  Text   (strcat Text Str)
    )
  )
  ((and All (wcmatch (substr Mtext 1 1) "[{}]"))
    (setq Mtext (substr Mtext 2))
  )
  ((and Format1 (wcmatch (strcase (substr Mtext 1 2)) Format1))
    (setq Mtext (substr Mtext 3))
  )
  ((and Format2 (wcmatch (strcase (substr Mtext 1 2)) Format2))
    (setq Mtext (substr Mtext (+ 2 (if (vl-string-search ";" Mtext)(vl-string-search ";" Mtext) 0))))
  )
  ((and Format3 (wcmatch (strcase (substr Mtext 1 2)) Format3))
    (if
      (or
	(= " " (substr Text (if (zerop (strlen Text)) 1 (strlen Text))))
	(= " " (substr Mtext 3 1))
      )
      (setq Mtext (substr Mtext 3))
      (setq Mtext (substr Mtext 3) Text (strcat Text " "))
    )
  )     
  ((and (vl-string-search "S" Formats)(wcmatch (strcase (substr Mtext 1 2)) "\\S"))
    (setq Str   (substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
	  Text  (strcat Text (vl-string-translate "#^\\" "/^\\" Str))
	  Mtext (substr Mtext (+ 4 (strlen Str)))
    )
  )
  (1
    (setq Text (strcat Text (substr Mtext 1 1))
	  Mtext (substr Mtext 2)
    )
  )
)
     )
   )
   (while (setq Pos (vl-string-search "\\U+" Text))
     (setq Str (substr Text (1+ pos) 7)
    Text (vl-string-subst (chr (hexdec (substr Str 4))) Str Text))
   )
   (vl-string-trim " " Text)
 )

 

Et l'appelle de la fonction

(unformat (vla-get-textstring Mon_Mtext) "*")

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Lien vers le commentaire
Partager sur d’autres sites

Cher bseb67

 

Les utilisateurs ArchiCAD ont deux moyens d'exporter leur fichier en DWG.

 

1°/ La méthode de l'espace Objet AutoCAD (donc pas de cartouche): tous les éléments composant les plans sont éparpillé dans cet espace.

2°/ La méthode de l'espace papier AutoCAD : seul le(s) espace(s) papier(s) présente(nt) des objets.

 

La méthode 1°/ n'est pas "trop" complexe. L'utilisateur AutoCAD n'est pas perdu. Il faut juste demander au dessinateur sur ArchiCAD d'organiser son espace Objet et légender chacun de ses éléments éparpillés.

 

La méthode 2°/ nécessite une rigueur telle qu'il est parfois plus souhaitable de redemander au dessinateur ArchiCAD qu'il fasse ses envois selon la méthode 1. Autrement faire un fichier de chacune des présentations (WBLOC attention l'échelle sera à revoir sur chacun d'eux). Recréer un fichier englobant tous les wblocs en superposant les références externes qu'il faudra lier par la suite. Ne pas insérer chacun des Wblocs en blocs car il y a de très gros risques de neutralisation de blocs et d'avoir un plan illisible et inexploitable.

 

Par habitude je demande aux utilisateurs ArchiCAD une seule version par dossier selon la méthode 2 pour récupérer le cartouche mais les suivants doivent absolument nous parvenir selon la méthode 1. Il a parfois été nécessaire de leur montrer le résultat qu'on reçoit sur AutoCAD pour qu'il comprennent cet handicap d'incompatibilité d'espace.

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Cher Patrick_35,

 

J'utilise le premier message comme récapitulatif.

Faire une suite de lisp comme toi ou (gile) ? Pourquoi pas. Mais cela peut attendre tant que ce site est en vie.

 

Ce sujet n'est pas seulement pour nettoyer le formatage des textes multilignes. Mais pour lister une suite de routines Lisp (AutoLisp ou VisuaLisp) pour nettoyer des plans provenants d'exports de fichiers du concurrent ArchiCAD.

 

Je ne veux pas lancer la pierre ou en quelque manière que ce soit maugréer sur ce logiciel de CFAO mais lister toutes les routines pour rendre le(s) dessin(s) exporté plus exploitable pour les AutoCADiens.

 

Beaucoup de ces routines proviennent directement d'ici (je mets en place au fur et à mesure)

 

 

Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier

Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To

GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office

 

PlaquetteDeplianteMars2024.pdf

Lien vers le commentaire
Partager sur d’autres sites

Salut Maximilien,

 

J'avais fait un petit truc pour nettoyer wipeouts, images raster et hachures SOLID, ici.

 

Si tu ne veux supprimer ces objets que dans les blocs (même imbriqués) mais conserver ceux directement insérés dans les espaces objet et papier, tu peux préférer cette version.

 

(defun c:PurgeArchiCad (/ cnt)
 (setq	cnt 0)
 (vlax-for bloc (vla-get-Blocks
	   (vla-get-ActiveDocument (vlax-get-acad-object))
	 )
   (or	(wcmatch (vla-get-Name bloc) "`**_Space*")
(vlax-for ent bloc
  (if (or
	(= (vla-get-ObjectName ent) "AcDbWipeout")
	(= (vla-get-ObjectName ent) "AcDbRasterImage")
	(and (= (vla-get-ObjectName ent) "AcDbHatch")
	     (= (vla-get-PatternName ent) "SOLID")
	)
      )
    (progn
      (vla-delete ent)
      (setq cnt (1+ cnt))
    )
  )
)
   )
 )
 (princ (strcat "\n\t" (itoa cnt) " objets supprimés"))
 (princ)
) 

[Edité le 30/5/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é