Aller au contenu

Insertion d'un bloc à partir d'un fichier source DWG


Messages recommandés

Posté(e)

Bonjour,

j'ai un fichier contenant des blocs que j'insère via les palettes.

Je me retrouve donc avec un groupe de 5 palettes qui commence à être surchargée à mon gout (à chaque fois 1 type de raccords x 8 ou 9 diamètres).

 

J'envisageais de créer un code par type de raccord qui irait me chercher le bloc dans le bon diamètre et que je mettrais dans une palette (gain = 1 palette au lieu de cinq).

Seulement je ne sais pas comment aller chercher les blocs dans le fichier source à la manière des palettes.

Est-ce possible ou dois je obligatoirement créer un fichier par bloc?

 

Je précise que mis à part ce problème de récupération de bloc je sais faire le reste.

 

Merci.

Posté(e)

Un fichier par bloc ?

Ca me semble beaucoup plus facile en effet. Car sinon, comment aller chercher la définition d'un bloc dans un dessin ? lourd en prog.

 

Donc, tu peux concatener la racine de ton chemin avec le code ce qui reviendrait à enregistrer chacun de tes groupes de blocs dans un dossier portant le nom de code.

 

Tu envisages de mettre un expression lisp dans la palette ? C'est possible tu sais.

 

Donc à chaque clic, la routine te poserais la question du code ou plutôt la question du diamètre ? Le code, hein, je crois ?

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Bonjour,

 

En effet, la solution d'enregistrer tout les blocs dans un dossier me semble le plus pratique à condition de déclarer dans les options le dossier dans les Chemin de recherche de fichiers support.

 

Du coup tu peux oublier les chemins,

 

(defun c:l2t nil

(command "_.-LAYER" "e" "31_moburba" "")

(command "_-insert" "chrl2t" pause "" "" pause)

(command "_.-layer" "e" "0" "")

(princ)

)

 

ici m’insère le bloc chrl2t

Posté(e)

Un petit lisp qui te rendra service

 

;btowb=>bloc to wbloc
    ;---------------------------
    ;récuperer les blocs internes d'un fichier pour les passer en blocs externes (wbloc)
    ;--------------------------
(defun c:btowb ()
    ; pour definier les noms longs à changer suivant la version d'autocad et de windows
    ;si nom_long = t alors nom long ok
    ;si nom_long = nil alors pas de nom long
 (setq nom_long t) ;on liste tous les blocs internes contenus dans le fichier
 (setq lst_bloc nil)
 (setq bloc (tblnext "BLOCK" t))
 (while (/= bloc nil)
   (if	(/= (substr (cdr (assoc 2 bloc)) 1 1) "*")
     (if (/= (wcmatch (cdr (assoc 2 bloc)) "*|*") t)
(setq lst_bloc (append lst_bloc (list (cdr (assoc 2 bloc)))))
     )
   )
   (setq bloc (tblnext "BLOCK"))
 )
 (setq nb_bloc (length lst_bloc))
 (prompt (strcat "\n" (itoa nb_bloc) " blocs trouves"))
    ;on défini si la création est totale ou si on passe les noms un par un
 (setq compte 0)
 (setq option nil)
 (initget "p t")
 (setq option (getkword "\ncréation pas à pas ou tout: "))
 (if (= option "t")
   (progn (repeat nb_bloc (creation_bloc) (setq compte (1+ compte))))
   (progn (repeat nb_bloc
     (setq choix nil)
     (initget "O N")
     (setq
       choix (getkword
	       (strcat "\nbloc " (itoa (1+ compte)) " = " (nth compte lst_bloc) " > O/N : ")
	     )
     )
     (if (= choix "O")
       (creation_bloc)
     )
     (setq compte (1+ compte))
   )
   )
 )
 (princ)
)

    ;---------------
    ;sous programme creation de bloc
    ;--------------

(defun creation_bloc ()
 (setq existe nil) ;on verifie que le bloc n'existe pas sinon on pose la question de le remplacer
 (setq existe (findfile (strcat (nth compte lst_bloc) ".dwg")))
 (if (= existe nil)
   (if	(= nom_long t)
     (vl-cmdf "wbloc" (nth compte lst_bloc) (nth compte lst_bloc))
     (vl-cmdf "wbloc" (substr (nth compte lst_bloc) 1 8) (nth compte lst_bloc))
   )
   (progn (initget "O N")
   (setq efface	(getkword (strcat "\nle bloc "
				  (nth compte lst_bloc)
				  " éxiste déja, désirez vous le remplacer O/N:"
			  )
		)
   )
   (if (= efface "O")
     (if (= nom_long t)
       (vl-cmdf "wbloc" (nth compte lst_bloc) "o" (nth compte lst_bloc))
       (vl-cmdf "wbloc" (substr (nth compte lst_bloc) 1 8) "o" (nth compte lst_bloc))
     )
   )
   )
 )  ;(princ)
)

 

Merci à l'Auteur si il se reconnais :D

Posté(e)

Merci à vous deux pour vos réponses.

 

Tu envisages de mettre un expression lisp dans la palette ? C'est possible tu sais.

 

Donc à chaque clic, la routine te poserais la question du code ou plutôt la question du diamètre ?

 

C'est exactement ça.

Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot!

Mais avec le lisp que me présente Fraid, j'ai l'impression que cela va être un jeu d'enfant.

Posté(e)

Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot!

 

S'ils sont tous disposés sur ton dessin, c'est cliquer sur chacun en selection unique et taper W suivi d'ENTREE, quelques minutes pour 50 blocs en modifiant le chemin de temps en temps.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Ce que je redoutais et que je voulais éviter, c'est d'avoir à sortir tout mes blocs en fichiers blocs => gros boulot!

 

Charge le LISP suivant dans le dessin contenant les blocs, lance WBLOCKALL, choisis le répertoire dans lequel enregistrer les fichiers dans la boite de dialogue, et c'est tout...

 

;; Commande WBLOCKALL
;; Crée un fichier dwg pour chaque bloc de la collection dans le répertoire spécifié.

(defun c:wblockall (/ dirname block name filename)
 (if (setq
dirname	(DirBox
	  "Sélectionner le répertoire pour les fichiers bloc."
	  ""
	  0
	)
     )
   (while (setq block (tblnext "BLOCK" (not block)))
     (setq name (cdr (assoc 2 block)))
     (if (findfile (setq filename (strcat dirname "\\" name ".dwg")))
(command "_.-wblock" filename "_yes" name)
(command "_.-wblock" filename name)
     )
   )
 )
 (princ)
)

;;; DirBox -Patrick_35-

(defun DirBox (Message Chemin Drapeau / rep sh)
 (vl-load-com)
 (setq sh (vlax-create-object "Shell.Application"))
 (if (setq
rep (vlax-invoke sh 'browseforfolder 0 Message Drapeau Chemin)
     )
   (setq rep (vlax-get-property (vlax-get-property rep 'self) 'path))
   (setq rep nil)
 )
 (vlax-release-object sh)
 rep
)

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

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é