Aller au contenu

Assembler plusieurs dwg en 1 seul


Messages recommandés

Posté(e)

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

Posté(e)

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

Posté(e)

Marrant cette demande ... totalement l'opposé de celle que j'avais demandé :D

Raph.

Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !

Posté(e)

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

Posté(e)

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

Posté(e)

Tu remplaces

(setq lay (itoa tot))
(while (< (strlen lay) 3)
  (setq lay (strcat "0" lay))
)

par

(setq lay (vl-filename-base ele))

et même supprimer ces lignes

tot 1

(setq tot (1+ tot))

 

@+

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

Posté(e)

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

Posté(e)

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

Posté(e)

Merci Patrick ton lisp fonctionne bien, mais sur tout les onglets à la fois !

 

Il faudrait qu'il ne lance la commande que sur les onglets selectionnés.

 

Merci encore de ta rapidité.

Philippe

  • 2 ans après...
Posté(e)

Bonjour,

 

Je suis un débutant sur les routines lisp, et j'aimerais savoir comment utiliser la routine lisp proposée par Patrick_35 sous autocad et si possible aussi sous Intelliplus.

 

Merci d'avance;

  • 1 an après...
Posté(e)

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/

Posté(e)

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

Posté(e)

Un grand merci à toi Patrick_35 je vais tester ça ;)

 

merci bien

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/

  • 9 mois après...
Posté(e)

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

  • 4 ans après...
Posté(e)

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

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é