Aller au contenu

Redéfinition d\'un bloc


Messages recommandés

Posté(e)

Bonsoir à tous,

 

Une petite question de faisabilité sur autocad 2008?

 

Est-il possible à partir d'un dessin "A" dwg comportant plusieurs blocs comme une sorte de bibliothèque, de redéfinir un dessin "B" comportant les mêmes nom de bloc?.

 

D'avance merci pour vos lumières.

 

 

Posté(e)

Salut,

Je te proposes une manip :

- Si tu veux, tu supprimes tous les blocs dans A (pas obligé, mais plus propre)

- Surtout tu ne purges pas !!!!

- Tu enregistres ce A sous C par exemple.

- Tu fais un copie Windows de tout B (Ctrl+C)

- Tu vas dans C, et tu colle (Ctrl+V)

 

Ainsi, ton dessin C sera égal au B, mais comme C contiens la définitions des blocs de A dans sa collection, C aura les blocs = A.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Merci pour ta réponse Bred

 

C'est la première idée que j'ai eu, cependant ça m'oblige à renommer tous mes schémas existants.

J'ai fait la manique en insérant B en tant que bloc dans A et ensuite je l'ai décomposé, j'avais ainsi tous les blocs redéfinis et à jours.

Cependant je pensais qu'il y avait une routine ou un lien que l'on pouvais faire, en gardant mon fichier A comme référence ou bibliothèques.

je vais continuer à chercher.

 

 

 

 

Posté(e)

moi j'utilise la palette outils

comme ca

1 ouvrir designcenter (ctrl+2)

sélectionner le fichier A qui contient les blocs

ouvrir la palette outil (ctrl+3)

créer éventuellement un onglet

faire glisser les blocs en question du designcenter sur la palette outils

et voila le tour est joué

 

 

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

C'est aussi une solution, le soucis c'est que j'ai plus de 500 bloc dans mon dessin 'A', ce qui veut dire que quand je veux redéfinir les blocs dans d'autres schémas, il me faut les faire un par un.

En fait je pensais un peu comme un système de Xref, quand on modifie le Xref, sur les autres schéma il est remis à jour.

 

[Edité le 3/4/2009 par Danylo]

Posté(e)

Bjr à tous,

 

Une petite astuce qui peut répondre à ton besoin ...

 

Tu crées ton plan B vierge et tu y insères ton plan A

comme pour un bloc "banal" (insérer - bloc - ...)

MAIS au moment de choisir le point d'insertion

tu fais Echap !

 

Et tu te retrouves sur ton plan B avec tous les blocs de A

mais aussi tous ses calques ... Un petit coté pratique, non ?

Posté(e)

Merci thry0

 

Ton astuce est intéressante mais ne fonctionne pas dans ce cas, le but étant de redéfinir des blocs déjà existants dans le dessin "B". Mon schéma "B" comporte déjà des blocs nommés... en insérant le bloc bibliothèque , je ne redéfinis pas les blocs de mon dessin courant "B".

 

 

 

Posté(e)

Salut,

je n'ai pas le temps de regarder quelque chose de plus élaboré.

j'ai fait ça en récupérant 2/3 vieux lisp qui traines...

j'ai testé qu'un fois ça a l'air de fonctionner.

 

- tu charges le lisp dans le plan ou tu as les bons blocs.

- tu lances "cwb" qui vas te créer sous C: les fichiers de tes blocs

- ti mets dans les fichiers support le chemin direct à C:

- tu ouvres le plan dans lequel tu veux mettre le blocs à jour

- tu recharges le lisp

- tu lances "mjb"

 

... et normalement ça devrais insérer les blocs dans C: et mettre à jours le plan...

 

Attention, si tu veux re-créer une liste de bloc, tu dois supprimer la liste existante.

 

;;; Mise à jour des blocs - BRED -
; créés wblocs à partir des blocs de la collection
(defun c:cwb (/ ACDOC B BLOCKS I LST-B-C NBT P S X)

(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
     Blocks (vla-get-Blocks AcDoc)
     lst-b-c nil
     attdia (getvar "attdia")
     attreq (getvar "attreq"))  

 (setvar "attdia" 0)
 (setvar "attreq" 0)
 
(vlax-for o Blocks (if (not (vl-string-search "*" (vla-get-name o)))
	     (setq lst-b-c (append (list o) lst-b-c))))

(repeat (setq i (length lst-b-c))
 (setq b (nth (setq i (1- i)) lst-b-c))
 (command "_-INSERT" (vla-get-name b) "_none" '(0 0 0) "1" "1" 0)
 (setq b (vlax-ename->vla-object (entlast))
p (vla-explode b)
p (vlax-safearray->list (vlax-variant-value p))
s (ssadd))
 (mapcar '(lambda (x) (ssadd (vlax-vla-object->ename x) s)) p)
 (setq NBT (strcat "C:\\" (vla-get-name b) ".dwg"))
 (command "wbloc" NBT "" '(0 0 0) s "")
 (vla-delete b)
 )

 (setvar "attdia" attdia)
 (setvar "attreq" attreq)
 
 (princ (strcat "\n" (rtos (length lst-b-c)) " Wblocs Créés"))
 (princ)
 )
;;; Prog d'insertion pour Mise à Jour.
(defun c:mjb (/ nb)

 (setvar "cmdecho" 0)  
 (setvar "attdia" 0)
 (setvar "attreq" 0)
 
 (setq lst (list_bloc_plan)
nb (length lst)) 
 
 (Foreach n lst
   (if (findfile (strcat n ".dwg"))
     (progn
(command "-inserer" (strcat n "=") '(0 0 0) 1 1 0)
(command "_erase" (entlast) "")
(princ (strcat "\n Patientez : Mise à Jour des Blocs [" (rtos nb)"]"))
(setq nb (- nb 1))
)
     )
   )
 
 (vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))
 
 (setvar "cmdecho" 1)
 (princ (strcat "\ Mise à Jour de " (rtos (length lst)) " Blocs !"))
 (princ)
)

;;; ROUTINE lister tout les noms des blocs/sous-blocs présent dans un dessin
(defun list_bloc_plan (/ ACDOC BLOCKS LIST_BLOC)
 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))
Blocks (vla-get-Blocks AcDoc)
list_Bloc nil)
 (vlax-for o Blocks
   (if (not (vl-string-search "*" (vla-get-name o)))
     (setq list_Bloc (append (list (vla-get-name o)) list_Bloc))))
 list_Bloc
)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

RE bonjour tout le monde

 

Bonjour BRED

 

En lançant le lisp j'ai un petit message d'erreur qui apparait

 

"Commande: cwb ; erreur: no function definition: VLAX-GET-ACAD-OBJECT"

 

Posté(e)

Bonjour à toutes et tous,

 

Et comme ça ?

 

;;; Mise à jour des blocs - BRED -

; créés wblocs à partir des blocs de la collection

(defun c:cwb (/ ACDOC B BLOCKS I LST-B-C NBT P S X)

[b][color=#FF0000] (vl-load-com)[/color][/b]

(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

     Blocks (vla-get-Blocks AcDoc)

     lst-b-c nil

     attdia (getvar "attdia")

     attreq (getvar "attreq"))  



 (setvar "attdia" 0)

 (setvar "attreq" 0)

 

(vlax-for o Blocks (if (not (vl-string-search "*" (vla-get-name o)))

	     (setq lst-b-c (append (list o) lst-b-c))))



(repeat (setq i (length lst-b-c))

 (setq b (nth (setq i (1- i)) lst-b-c))

 (command "_-INSERT" (vla-get-name b) "_none" '(0 0 0) "1" "1" 0)

 (setq b (vlax-ename->vla-object (entlast))

p (vla-explode b)

p (vlax-safearray->list (vlax-variant-value p))

s (ssadd))

 (mapcar '(lambda (x) (ssadd (vlax-vla-object->ename x) s)) p)

 (setq NBT (strcat "C:\\" (vla-get-name b) ".dwg"))

 (command "wbloc" NBT "" '(0 0 0) s "")

 (vla-delete b)

 )



 (setvar "attdia" attdia)

 (setvar "attreq" attreq)

 

 (princ (strcat "\n" (rtos (length lst-b-c)) " Wblocs Créés"))

 (princ)

 )

;;; Prog d'insertion pour Mise à Jour.

(defun c:mjb (/ nb)



 (setvar "cmdecho" 0)  

 (setvar "attdia" 0)

 (setvar "attreq" 0)

 

 (setq lst (list_bloc_plan)

nb (length lst)) 

 

 (Foreach n lst

   (if (findfile (strcat n ".dwg"))

     (progn

(command "-inserer" (strcat n "=") '(0 0 0) 1 1 0)

(command "_erase" (entlast) "")

(princ (strcat "\n Patientez : Mise à Jour des Blocs [" (rtos nb)"]"))

(setq nb (- nb 1))

)

     )

   )

 

 (vla-PurgeAll (vla-get-ActiveDocument (vlax-get-acad-object)))

 

 (setvar "cmdecho" 1)

 (princ (strcat "\ Mise à Jour de " (rtos (length lst)) " Blocs !"))

 (princ)

)



;;; ROUTINE lister tout les noms des blocs/sous-blocs présent dans un dessin

(defun list_bloc_plan (/ ACDOC BLOCKS LIST_BLOC)

 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))

Blocks (vla-get-Blocks AcDoc)

list_Bloc nil)

 (vlax-for o Blocks

   (if (not (vl-string-search "*" (vla-get-name o)))

     (setq list_Bloc (append (list (vla-get-name o)) list_Bloc))))

 list_Bloc

) 

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

merci à lili d'avoir corriger.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)
Marche super bien,

... attention quand même, c'est du bricolage fais en 2 minutes.

Je n'ai pas vérifié les déclarations et modifications de variables, ni testé avec des cas spécifiques.

 

(en plus c'est un mélange entre de l'auto-lisp et du v-lisp, c'est mal écrit, c'est laid, pas très fin et pas convivial.... désolé pour mes maitres lispeur du forum de proposer un truc comme ça... mais je suis vraiment trop pris en ce moment pour passer plus de temps....)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Bon soir tout le monde

 

Ton lisp fonctionne bien, j'ai noté quelques erreur (dont j'ignore la cause), que certains blocs au moment de l'export sur le C:, n'avaient plus leur point d'insertion sur 0,0,0.

J'ai recommencé l'opération une deuxième fois, ça a très bien fonctionner.

Peut être est ce un problème de variable...

Dans tous les cas merci pour ton aide Bred

 

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é