Aller au contenu

Assembler plusieurs dwg en 1 seul


Slowhand91

Messages recommandés

Bonjour,

 

Je cherche a réunir plusieurs fichiers dwg en un seul.

 

A savoir chaque fichier représente un folio (en espace objet) d'un schéma electrique.

 

Le but est d'obtenir un seul fichier (un carnet) composé de plusieurs onglets, chaque onglet repésentant le folio concerné.

 

Si j'ai Folio01.dwg, Folio02.dwg ... Folioxx.dwg j'obtiendrai donc Carnet.dwg composé de x onglets 01,02...xx

 

Sachant que les folios du schéma sont situés tous dans le même répertoire.

 

Merci d'avance de vos idées.

 

 

Philippe

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Un lisp vite fait

 

(defun c:grf(/ dirbox doc lay obj sel tot)
 (defun dirbox(txt / cdl rep)
   (if (setq cdl (vlax-create-object "Shell.Application"))
     (progn
(and (setq rep (vlax-invoke cdl 'browseforfolder 0 txt 512 ""))
     (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
)
(vlax-release-object cdl)
     )
   )
   rep
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
tot 1
 )
 (vla-startundomark doc)
 (and (setq rep (dirbox "Sélectionnez le répertoire pour grouper les folios"))
      (setq lst (vl-directory-files rep "*.dwg" 1))
   (progn
     (setq rep (vl-string-translate "\\" "/" rep))
     (or (eq (substr rep (strlen rep) 1) "/") (setq rep (strcat rep "/")))
     (foreach ele (acad_strlsort lst)
(setq lay (itoa tot))
(while (< (strlen lay) 3)
  (setq lay (strcat "0" lay))
)
(and (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list (vla-get-layouts doc) lay)))
     (ssget "x" (list (cons 410 lay)))
  (progn
    (vlax-map-collection (setq sel (vla-get-activeselectionset doc)) 'vla-delete)
    (vla-delete sel)
  )
)
(vla-put-activelayout doc (vla-item (vla-get-layouts doc) lay))
(setq obj (vla-insertblock (vla-get-paperspace doc)
			   (vlax-3d-point '(0.0 0.0 0.0))
			   (findfile (strcat rep ele))
			   1 1 1 0
	  )
)
(vl-catch-all-apply 'vla-explode (list obj))
(vla-delete obj)
(setq tot (1+ tot))
     )
     (vla-purgeall doc)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

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

Salut,

 

"erreur: structure incorrecte de la liste en entrée"

 

Ce message signifie qu'il y a un problème d'appariement de parenthèses.

Essaye de refaire un copier/coller du code en prenant soin de prendre tout le code et rien que le code.

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

Lien vers le commentaire
Partager sur d’autres sites

En effet, tout simplement un mauvais copier coller, merci beaucoup à vous 2 (Patrick et Gilles).

 

La routine marche parfaitement bien.

 

Je sais pas si cela est possible, mais peut on récupérer le nom des fichiers pour la création des onglets, à savoir 001.dwg donnerait l'onglet 001 et 052.dwg donnerait l'onglet 052 afin de pouvoir gérer les éventuels trous dans les fichiers.

 

Merci encore et longue vie à ce magnifique site.

 

 

Philippe

Lien vers le commentaire
Partager sur d’autres sites

Parfait, cela correspond tout a fait a ce que je voulais.

 

Merci beaucoup pour ce lisp !!!!!!!

 

J'en profite pour vous poser une question a propos des onglets.

 

J'aimerais pouvoir appliquer n'importe quelle commande à tous les onglets et non pas seulement à l'onglet actif.

 

Par exemple, je selectionne les onglets que je veux modifier et je tape la commande "zoom etendue" et la commande s'effectue sur les onglets selectionnes.

Ou alors, toujours en selectionnant les onglets que je veux modifier je tape la commande "effacer tout".

Ou la commande "filter" afin d'appliquer un filtre, ect...

 

Philippe

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

(defun c:mcd(/ cde def doc lay pos rep)
 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (and	(setq rep (getstring T "\nCommande à effectuer : "))
(/= rep "")
   (progn
     (setq def (vla-get-activelayout doc))
     (if (setq pos (vl-string-search " " rep))
(progn
  (setq cde (list (substr rep 1 pos))
	rep (substr rep (+ 2 pos))
  )
  (while (setq pos (vl-string-search " " rep))
    (setq cde (cons (substr rep 1 pos) cde)
	  rep (substr rep (+ 2 pos))
    )
  )
  (setq cde (reverse (cons rep cde)))
)
(setq cde (list rep))
     )
     (vlax-for lay (vla-get-layouts doc)
(vla-put-activelayout doc lay)
(eval (cons 'vl-cmdf cde))
     )
     (vla-put-activelayout doc def)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

Exemple :

commande : mcd

Commande à effectuer : zoom et

 

@+

 

[Edité le 5/3/2010 par Patrick_35]

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

J'ai modifié le lisp mcd, car j'avais une erreur

 

Pour ce qui est des onglets, à moins d'avoir une dll par notre cher (gile) tu as la fonction (crpSelectedLayouts) qui le permet

 

Je verrai un peu plus tard

 

@+

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

  • 2 ans après...
  • 1 an après...

Bonjour,

 

j'ai personnalisé le lisp "grf" pour copier dans l'espace objet ("modelspace" au lieu de "paperspace") mais

 

J'aurai besoin d'épurer le 1er lisp "grf" de ce topic, pour supprimer le code qui crée des onglets d'EP

 

Qui serait capable d'éditer le lsp ? Merci

pas mal... merci. Moi qui 'aime pas trop les programmes "fait maison", là je suis surpris ça marche

[sEE.Ex V4.R1A & XELEC V7.20A] Dongle Perso... FORUM SEE ELECTRICAL EXPERT : http://seexp.free.fr/

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

j'ai personnalisé le lisp "grf" pour copier dans l'espace objet ("modelspace" au lieu de "paperspace") mais

 

J'aurai besoin d'épurer le 1er lisp "grf" de ce topic, pour supprimer le code qui crée des onglets d'EP

 

Qui serait capable d'éditer le lsp ? Merci

Le lisp modifié mais non testé et à affiner

(defun c:grf(/ bg dirbox doc hd ele lst obj rep x y)
 (defun dirbox(txt / cdl rep)
   (if (setq cdl (vlax-create-object "Shell.Application"))
     (progn
       (and (setq rep (vlax-invoke cdl 'browseforfolder 0 txt 512 ""))
            (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
       )
       (vlax-release-object cdl)
     )
   )
   rep
 )

(vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (and (setq rep (dirbox "Sélectionnez le répertoire pour grouper les folios"))
      (setq lst (vl-directory-files rep "*.dwg" 1))
   (progn
     (setq rep (vl-string-translate "\\" "/" rep)
    x 0.0
    y 0.0
     )
     (or (eq (substr rep (strlen rep) 1) "/") (setq rep (strcat rep "/")))
     (foreach ele (acad_strlsort lst)
       (setq obj (vla-insertblock (vla-get-modelspace doc)
                                  (vlax-3d-point (list x Y 0.0))
                                  (findfile (strcat rep ele))
                                  1 1 1 0
                 )
       )
(vla-getboundingbox obj 'bg 'hd)
(setq bg (vlax-safearray->list bg)
      hd (vlax-safearray->list hd)
)
(setq x (+ x (- (car hd) (car bg)) 10.0))
       (vl-catch-all-apply 'vla-explode (list obj))
       (vla-delete obj)
     )
     (vla-purgeall doc)
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

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

  • 9 mois après...

Bonjour,

 

je suis nouveau dans le monde "LISP".

Je suis en train d'utiliser ce routine que je trouve très utile.

Une fois le lisp lancé (Autocad 2014) , il va créer plusieurs onglets vides dans mon fichier.

 

L’objective de ce lisp n'est pas t-il de créer pour chaque fichier DWG une onglet avec le dessin?

 

il est où l'erreur?

 

merci en avance,

 

M

Lien vers le commentaire
Partager sur d’autres sites

  • 4 ans après...

Salut

 

 

Un lisp vite fait

 

 

(defun c:grf(/ dirbox doc lay obj sel tot)

 (defun dirbox(txt / cdl rep)

   (if (setq cdl (vlax-create-object "Shell.Application"))

     (progn

(and (setq rep (vlax-invoke cdl 'browseforfolder 0 txt 512 ""))

     (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))

)

(vlax-release-object cdl)

     )

   )

   rep

 )


 (vl-load-com)

 (setq doc (vla-get-activedocument (vlax-get-acad-object))

tot 1

 )

 (vla-startundomark doc)

 (and (setq rep (dirbox "Sélectionnez le répertoire pour grouper les folios"))

      (setq lst (vl-directory-files rep "*.dwg" 1))

   (progn

     (setq rep (vl-string-translate "\\" "/" rep))

     (or (eq (substr rep (strlen rep) 1) "/") (setq rep (strcat rep "/")))

     (foreach ele (acad_strlsort lst)

(setq lay (itoa tot))

(while (< (strlen lay) 3)

  (setq lay (strcat "0" lay))

)

(and (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list (vla-get-layouts doc) lay)))

     (ssget "x" (list (cons 410 lay)))

  (progn

    (vlax-map-collection (setq sel (vla-get-activeselectionset doc)) 'vla-delete)

    (vla-delete sel)

  )

)

(vla-put-activelayout doc (vla-item (vla-get-layouts doc) lay))

(setq obj (vla-insertblock (vla-get-paperspace doc)

			   (vlax-3d-point '(0.0 0.0 0.0))

			   (findfile (strcat rep ele))

			   1 1 1 0

	  )

)

(vl-catch-all-apply 'vla-explode (list obj))

(vla-delete obj)

(setq tot (1+ tot))

     )

     (vla-purgeall doc)

   )

 )

 (vla-endundomark doc)

 (princ)

)

 

 

@+

 

 

Bonjour,

 

Je pense être dans le même cas ...

J'ai un DWG d'origine que j'utilise et j'aimerais assembler plusieurs DWG dans ce DWG d'origine.

Directement dans l'espace papier. Est-ce possible ?

 

Merci d'avance

 

Bien à vous

NIICO

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é