Aller au contenu

Eclater 1 dwg en 3 dwg selon calques


balyoa

Messages recommandés

Bonjour,

 

Merci mais je sais je le fais actuellement avec wbloc. Mais je suis obligé d'appliquer des filtres de calques puis de faire un wbloc, et ce autant de fois que j'ai besoin de générer des fichiers différents. Je cherche justement à automatiser tout cela. Sinon je dois appliquer 3 filtres différents, et pour chacun lancer un wbloc, le tout est assez long, surtout sur un nombre de dwg originaux important.

 

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

Salut balyoa,

Comment est architecturer ton dwg, Est ce qu'il s'agit dun plan électrique dont un calque est égal à un folio, si c'est le cas j'ai la réponse à ta question.

 

Par contre, j'ai formulé une demande similaire ( ici http:// http://www.cadxp.com/sujetXForum-22846.htm ) mais pour des plans architecturer différement si quelqu'un à une réponse à me donner, je suis preneur

 

Merci d'avance pour vos réponses.

 

J'attend des précisions Balyoa

Lien vers le commentaire
Partager sur d’autres sites

Et non mon dwg n'est pas structuré en folios. Je dois agis directement sur la liste des calques pour faire ma sélection, et générer un nouveau dwg issu de cette sélection. Une solution serait d'inclure la commande wbloc dans un lisp, mais je ne connais pas le lisp. Si certains développeurs connaissent une solution à ce problème, nous sommes donc 2 à être preneurs.

 

Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Le problème n'est pas tant l'utilisation de la commande WBLOC dans un LISP (ou dans un script s'il faut traiter plusieurs fichiers) que le choix automatique des objets à sélectionner.

 

Automatiser une tache suppose de "travailler en aveugle" (sans intervention de l'utilisateur), donc d'avoir des critères objectifs et précis pour faire une sélection, ces critères devant être identiques dans tous les fichiers à traiter.

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un code lisp (sans gestion d'erreur), il crée les fichiers par calque "NomDuFichier$NomDuCalque.dwg"

Il est facile de supprimer les fichiers non-voulus.

 

((lambda ( / def_lay nam_lay js)
(setq def_lay (tblnext "LAYER" T))
(setq nam_lay (cdr (assoc 2 def_lay)))
(cond
	((setq js (ssget "_X" (list (cons 8 nam_lay))))
		(command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "")
	)
)
(while (setq def_lay (tblnext "LAYER"))
	(setq nam_lay (cdr (assoc 2 def_lay)))
	(cond
		((setq js (ssget "_X" (list (cons 8 nam_lay))))
			(command "_.-wblock" (strcat (getvar "dwgname") "$" nam_lay) "" "*0.0,0.0,0.0" js "")
		)
	)
)
(prin1)
))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

 

Hello

 

J'abonde dans le sens de Gilles, on pourrait imaginer un programme Lisp/V-Lisp qui traiterait automatiquement par une commande WBLOC (exécuter sur le calque ZERO et dans l'onglet Objet et dans le SCG et etc ...), tous les calques d'un dessin dont le préfixe du nom de calque serait : RES_ASS*, RES_AEP*, RES_EDF*, RES_GDF*, CADA*, BATIM*, etc

 

A mon avis il faut inclure le calque ZERO dans le WBLOC !?

 

et il faudrait peut être aussi demander quels autres calques, il faut inclure obligatoirement

pour chaque WBLOC exécuté ...

 

Qu'en pensez vous ?

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Entretemps, j'ai construis rapidement un truc pour faire un script sur un dossier.

Toujours sur le principe précédent, (qui ne te convient pas)

Mais avec le résultat en fichier rien n'empêche de regrouper plusieurs fichiers en un seul par un INSERER en cochant le mode "décomposé" surtout si à chaque fois les nom de calque sont différents. Ca fait peut être un peu moins de boulot.

 

Voici quand même le générateur de script:

 

(defun c:make_script ( / prefix file_scr)
(setq
	prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16)) "\\")
	file_scr (open (strcat prefix "open_folder.scr") "w")
)
(foreach dwg (vl-directory-files prefix "*.dwg" 1)
	(write-line "_.open" file_scr)
	(write-line (strcat "\"" prefix dwg "\"") file_scr)

;;
;;debut partie personnalisable
;;
(write-line "((lambda ( / def_lay nam_lay js)" file_scr)
(write-line "(setq def_lay (tblnext \"LAYER\" T))" file_scr)
(write-line "(setq nam_lay (cdr (assoc 2 def_lay)))" file_scr)
(write-line "(cond" file_scr)
	(write-line "((setq js (ssget \"_X\" (list (cons 8 nam_lay))))" file_scr)
		(write-line "(command \"_.-wblock\" (strcat (getvar \"DWGPREFIX\") (getvar \"dwgname\") \"$\" nam_lay) \"\" \"*0.0,0.0,0.0\" js \"\")" file_scr)
	(write-line ")" file_scr)
(write-line ")" file_scr)
(write-line "(while (setq def_lay (tblnext \"LAYER\"))" file_scr)
	(write-line "(setq nam_lay (cdr (assoc 2 def_lay)))" file_scr)
	(write-line "(cond" file_scr)
		(write-line "((setq js (ssget \"_X\" (list (cons 8 nam_lay))))" file_scr)
			(write-line "(command \"_.-wblock\" (strcat (getvar \"DWGPREFIX\") (getvar \"dwgname\") \"$\" nam_lay) \"\" \"*0.0,0.0,0.0\" js \"\")" file_scr)
		(write-line ")" file_scr)
	(write-line ")" file_scr)
(write-line ")" file_scr)
(write-line "(prin1)" file_scr)
(write-line "))" file_scr)
;;
;;fin partie personnalisable
;;

	;(write-line "_.qsave" file_scr)
	(write-line "_.close" file_scr)
	(write-line "_yes" file_scr)
)
(close file_scr)
(princ (strcat "\Vous pouvez lancer le SCRIPT :" prefix "open_folder.scr"))
(prin1)
)

 

NB: Si tu utilise MAP, le rajout de \"_no\" sera nécessaire à la fin de wblock

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Je ne peux filtrer que sur le nom de calques, et oui certains ont un préfixe commun.

 

Si tu dois entrer toi même les noms de calque pour chaque filtre et ce pour chaque fichier, l'automatisation se réduit à la commande WBLOC ce qui ne présente pas grand intérêt.

 

Il te reste la solution proposée par bonuscad...

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

Lien vers le commentaire
Partager sur d’autres sites

Et bien, donne donc les 3 listes de noms de calques (séparés par des virgules) et 3 suffixes pour les 3 dwg à générer.

Il sera alors possible de faire un petit LISP que tu pourra appeler depuis un script (regarde SuperAutoScript) pour traiter tous les fichiers.

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

Lien vers le commentaire
Partager sur d’autres sites

Admettons que je souhaite sélectionner dans le fichier "1.dwg" source, les calques nommés A, B, C pour générer le fichier "1s.dwg", les calques D, E, F pour générer le fichier "1h.dwg" et les calques G, H, I pour générer le fichier 1t.dwg.... et ainsi de suite pour les fichiers "2.dwg", "3.dwg", etc.....

 

A quoi ressemblerait le script ?

 

Merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Voilà un LISP, pas testé, donc à essayer d'abord dans un fichier.

 

Il faut remplacer [surligneur]"A,B,C"[/surligneur] [surligneur]"D,E,F"[/surligneur] [surligneur]"G,H,I"[/surligneur] par les noms de calques. Chaque série est entre guillemets les noms de calques séparés par de virgules.

Tu peux aussi remplacer [surligneur]"s"[/surligneur] [surligneur]"h"[/surligneur] [surligneur]"t"[/surligneur] par les suffixes que tu veux (l'ordre des calques et des suffixes doit correspondre).

 

Si tu veux traiter plusieurs fichiers, dans SuperAutoScript tu sélectionnes les fichiers à traiter et, dans la case script, tu mets juste : WBlockByLayerList

 

(defun c:WBlockByLayerList (/ acdoc layers clayer frozen)
 (vl-load-com)
 (setq	acdoc  (vla-get-ActiveDocument (vlax-get-acad-object))
layers (vla-get-Layers acdoc)
 )
 (setq clayer (getvar "CLAYER"))
 (vlax-for l layers
   (and
     (= (vla-get-Freeze l) :vlax-true)
     (setq frozen (cons l frozen))
     (vla-put-Freeze l :vlax-false)
   )
 )
 (setvar "CLAYER" "0")
 (mapcar '(lambda (lays suff)
     (if (ssget "_X" (list '(410 . "Model") (cons 8 lays)))
       (progn
	 (vla-WBlock
	   acdoc
	   (strcat (getvar "DWGPREFIX")
		   (vl-filename-base (getvar "DWGNAME"))
		   suff
		   ".dwg"
	   )
	   (setq ss (vla-get-ActiveSelectionSet acdoc))
	 )
	 (vla-delete ss)
       )
     )
   )
  '([surligneur]"A,B,C"[/surligneur]
    [surligneur]"D,E,F"[/surligneur]
    [surligneur]"G,H,I"[/surligneur]
    )
  '([surligneur]"s"[/surligneur] [surligneur]"h"[/surligneur] [surligneur]"t"[/surligneur])
 )
 (setvar "CLAYER" clayer)
 (foreach l frozen (vla-put-Freeze l :vlax-true))
 (princ)
)

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

Lien vers le commentaire
Partager sur d’autres sites

dans la case script, tu mets juste : WBlockByLayerList

 

Sans avoir testé, je pense qu'il faudra d'abords s'assurer que le fichier lisp soit bien enregistré dans un dossier de recherche d'Autocad.

 

Dans la case script, il faudra aussi d'abords le chargé, puis l'exécuter.Ce qui pourrait être (sans aucun tests):

 

(load "WBlockByLayerList.lsp")

WBlockByLayerList

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Tu as raison Bruno, je voulais dire qu'avec SuperAutoScript, il n'est pas nécessaire de s'occuper de l'ouverture, enregistrement et fermeture des fichiers.

Mais bien sûr il faut charger le LISP avant de l'exécuter soit comme tu le dis, soit en utilisant un chargement automatique.

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour à tous,

ma problématique est la même que Balyoa sauf que mon plan est architecturé différement :

- 5 colonnes et autant de ligne que nécessaire

- Décalage entre colonnes 500

- Décalage entre lignes 400

- Sens de lecture du bas à gauche vers le haut à droite

Donc ma demande est : Est-il possible de 'éclater mon fichier dwg en autant de fichiers que de folios présent dans le fichier de base.

J'ai essayé avec un script mais le probléme est de l'étendre aux autres folios.

 

 Exemple du script:
_copybase

0,0

-1,-1

420,296



_new

"chemin du gabarit"

_pasteclip

0,0

_zoom _e

_save

"Chemin d'enregistrement du fichier"

_close

delai

5000

_copybase

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

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é