Aller au contenu

insertion en masse


grand_sapin

Messages recommandés

Bonjour à toutes et à tous

 

Je me charge en ce moment de monter une charte graphique et plus précisément une charte symbolique.

 

J'ai 3 collègues qui ont de la bouteille et donc possède chacun environs un millier de blocs différents !!! :casstet:

 

Etant donné que je n'ai aucunement l'envie ni le temps de les inserer un à un dans un seul et même dessin, existe-t-il un système pour les inserer tous dans un seul dessin en les sélectionnant ????

 

Merci de vos réponses

 

Sapin

Lien vers le commentaire
Partager sur d’autres sites

Tes "blocs" sont sous quelle forme ?

 

S'il s'agit de fichier tu peux passer par un SCRIPT... avec l' Autosript d' Eric par exemple.

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Ceci ?

((lambda ( / prefix)
(setq
	prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier dessin TEMOIN" "" "dwg" 16)) "\\")
)
(foreach dwg (vl-directory-files prefix "*.dwg" 1)
	(command "_.-insert" (strcat "\"" prefix dwg "\"") pause "" "" "")
)
(prin1)
))

 

Tu sélectionneras un fichier dans un dossier (il servira de référence pour déterminer le dossier)

J'ai mis une pause pour le point d'insertion, mais on pourrait imaginer un point incrémenté d'une certaine valeur (mais ça je ne peux pas deviner l'encombrement du bloc, ou alors un (BoundingBox) du dernier bloc inséré. A voir....) ;)

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

Oui et Non !

 

Un SCRIPT n'est pas la même chose qu' un programme LISP ! Merci à toi Bonuscad ! le Lispeur Fou.

 

Un programme LISP fait appel à un langage plus ou moins complexe pour les novices... et NON utilisable par les LT siens, je sais tu as posté dans le Forum 2005, mais je pense toujours aux pauvres LT siens qui de base ne peuvent profiter de ce langage...

 

Par contre le SCRIPT est plus basique (c'est un enchainement de commandes en claires) mais peut également faire appel à une structure plus ou moins sophistiqué... et surtout il est universel toutes les versions peuvent utiliser du SCRIPT.

 

Christian

 

[Edité le 24/3/2006 par rebcao]

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

Grand_Sapin, Mon Beau Sapin .....

 

Un petit + pour l'encombrement des blocs ET acceptera les blocs avec attributs (par défaut, bien sûr) ;)

 

((lambda ( / prefix pt_ins last_pt obj ll ur lg)
(setvar "cmdecho" 0)
(setvar "attreq" 0)
(vl-load-com)
(setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier DWG TEMOIN" "" "dwg" 16)) "\\"))
(setq pt_ins (getpoint "\nPoint d'insertion pour le 1er Bloc? <0.0,0.0,0.0>: "))
(if (null pt_ins) (setq pt_ins '(0.0 0.0 0.0)))
(setq last_pt nil)
(foreach dwg (vl-directory-files prefix "*.dwg" 1)
	(command "_.-insert" (strcat "\"" prefix dwg "\"") "_none" pt_ins "1.0" "1.0" "0.0")
	(setq Obj (vlax-ename->vla-object (entlast)))
	(vla-GetBoundingBox Obj 'll 'ur)
	(setq ll (safearray-value ll))
	(setq ur (safearray-value ur))
	(if last_pt
		(progn
			(command "_.move" (entlast) "" "_none" (list (car ll) (cadr pt_ins) (caddr pt_ins)) "_none" pt_ins)
			(setq lg (distance (list (car ll) (cadr pt_ins) (caddr pt_ins)) pt_ins))
		)
		(setq lg 0.0)
	)
	
	(setq pt_ins (list (+ lg (car ur)) (cadr pt_ins) (caddr pt_ins)))
	(setq last_pt pt_ins)
)
(command "_.zoom" "_all")
(command "_.zoom" "_extents")
(setvar "attreq" 1)
(setvar "cmdecho" 1)
(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

Salut Bonus

Juste pour remplacer la commande _.insert en vlisp

(setq obj (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0.0 0.0 0.0)) "MON_BLOC" 1 1 1 0)) et qui evitera le (vlax-ename->vla-object (entlast))

et pour l'effacer (vla-delete obj)

 

@+

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

Merci Patrick_35

 

J'ai essayé ta suggestion, mais y a un blème

; erreur: Erreur Automation Etendus nuls

 

Comme je suis pas parfaitement à l'aise avec ActiveX, et notamment avec les message d'erreurs, c''est quoi qui coince?

 

Où puis-je consulter ces erreurs dans Autocad (dans l'éditeur vlisp je supposes, moi qui utilise Utra-Edit) :casstet:

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 suis surpris

Je viens de refaire un essai et ça fonctionne !

Le bloc existe dans le dessin ou pas ?. Si non, il manque peut-être l'extension .dwg ?

C'est un bloc dynamique ?

ah, une précision, l'insertion se fait dans l'eo

 

@+

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

Le bloc existe dans le dessin ou pas ?

 

Ben non, puisque que la routine sert justement à insérer des DWG d'un dossier. Donc ce ne sont pas des blocs interne au dessin, du moins pas avant leur insertion.

 

Le nom du bloc dans ce cas comprend AUSSI le chemin d'accés du Dwg.

 

Ceci explique cela?

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

Non, j'ai une routine qui importe des blocs qui ne sont pas dans le dessin via le vla-insert

En reprenant une partie de ton code et qui fonctionne

((lambda ( / prefix dwg)
 (setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier DWG TEMOIN" "" "dwg" 16)) "\\"))
 (foreach dwg (vl-directory-files prefix "*.dwg" 1)
   (vla-InsertBlock (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0.0 0.0 0.0)) (strcat prefix dwg) 1 1 1 0)
 )
))

 

Sinon, je ne vois pas

 

@+

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

Merci Patrick_35,

 

J'ai trouvé mon erreur, je transmettais la même chaine que je soumettais à (command)

à savoir (strcat "\"" prefix dwg "\"") au lieu de (strcat prefix dwg) :red:

 

Merci pour le tuyau. ;)

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

Merci pour ton complément Bonus

 

J'avais pas vu que le sujet avit continué de vivre alors que je l'avais mis dans la catégorie "résolu"

 

A plus tard et encore merci

 

(par contre j'ai pas compris un seul mot de la conversation Bonus - Patrick35, ça veut dire qu'il faut VRAIMENT que je m'y mette !!!!!))

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous

Etant interressé par cette routine ,je l'ai testée ,elle insère tous les blocs d'un répertoire

avec un pas constant horizontal dans le sens de X. j'aimerai pouvoir les insérer suivant une longueur max définie et continuer l'insertion en se décallant verticalement en Y et ainsi de suite.

pour etre plus précis faire rentrer n blocs dans un format (A4 ou A3 exct... au choix) avec autant de formats prédéfinis que nécessaire. Pour plus de clareté on peut créer le format par un rectangle.

Le but recherché est le mème que "grand_sapin" excepté que j'aimerai ensuite les imprimer

proprement et rajouter au-dessus de chaque bloc son nom dwg avec le contenu des attributs s'ils en possède.

Si quelqu'un peut m'aider sur ce sujet ,je le remercie d'avance .

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Après réflexion, ta demande n'est pas si simple, j'ai réfléchi dessus et suis arrivé à quelque chose.

 

Je ne pense pas que ça te conviendra, mais je te livre ce que j'ai pu obtenir.

Le gros problème est d'avoir l'encombrement du bloc suivant, donc je me suis simplement assuré que le point d'insertion suivant serait contenu dans le format A4.

 

Voilà si tu veux continuer à bosser dessus, pour moi c'est bon :casstet:

 

Voilà l'ébauche, bonne chance

 

 

(defun c:cahier_bloc ( / old_osmd prefix pt_ins pt_tmp lst_dwg n dx dy loop key pt pt_last obj ll ur lg)
(setvar "cmdecho" 0)
(setvar "attreq" 0)
(setq old_osmd (getvar "osmode"))
(setvar "osmode" 0)
(vl-load-com)
(setq prefix (strcat (vl-filename-directory (getfiled "Sélectionner un fichier DWG TEMOIN" "" "dwg" 16)) "\\"))
(setq pt_ins (getpoint "\nPoint d'insertion pour le 1er Bloc? <0.0,0.0,0.0>: "))
(if (null pt_ins) (setq pt_ins '(0.0 0.0 0.0)))
(setq
	lst_dwg (vl-directory-files prefix "*.dwg" 1)
	next_ins pt_ins
	delta_x 0.0
	delta_y 0.0
	last_pt nil
)
(initget "A4 A3")
(setq dx (if (eq (getkword "\nQuel format [A4/A3]? : ") "A3") 420 210) dy (* 210 (sqrt 2)))
(foreach dwg lst_dwg
	(setq Obj
		(vla-InsertBlock
			(vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object)))
			(vlax-3d-point next_ins)
			(strcat prefix dwg)
			1
			1
			1
			0
		)
	)
	(vla-GetBoundingBox Obj 'll 'ur)
	(setq
		ll (safearray-value ll)
		ur (safearray-value ur)
	)
	(command "_.move" (entlast) "" "_none" ll "_none" next_ins)
;(setvar "cecolor" "3")
;(command "_.rectang" ll ur)
;(setvar "cecolor" "256")
;(command "_.move" (entlast) "" "_none" ll "_none" next_ins)
	(setq
		next_ins (list (+ (car ur) (car next_ins)) (cadr next_ins) (caddr next_ins))
		last_pt next_ins
		delta_x (+ (- (car ur) (car ll)) delta_x)
		delta_y (max (- (cadr ur) (cadr ll)) delta_y)
	)
	(if (> delta_x dx)
		(if (> delta_y dy)
			(setq
				next_ins (list (+ (car pt_ins) dx) (cadr pt_ins) (caddr pt_ins))
				delta_x 0.0
				delta_y 0.0
				pt_ins next_ins
			)
			(setq
				next_ins (list (car pt_ins) (+ (cadr pt_ins) delta_y) (caddr pt_ins))
				delta_x 0.0
				pt_ins next_ins
			)
		)
		(setq next_ins (list (+ (car pt_ins) delta_x) (cadr pt_ins) (caddr pt_ins)))
	)
;		(command "_.text" "_justify" "_tleft" (list (car pt_ins) (+ (cadr pt_ins) dy)) "5.0" "0.0" dwg)
)
(command "_.zoom" "_all")
(command "_.zoom" "_extents")
(setvar "osmode" old_osmd)
(setvar "attreq" 1)
(setvar "cmdecho" 1)
(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

Salut Bonus

Puisque que ton objet est en vlisp, tu pourrais aussi faire

(vla-move ojb (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point next_ins))

au lieu de

(command "_.move" (entlast) "" "_none" ll "_none" next_ins)

 

(je vais y arriver, je vais y arriver!!! Notre super Bonus reussira bientôt à se mettre au vlisp....)

 

@+

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

(je vais y arriver, je vais y arriver!!! Notre super Bonus reussira bientôt à se mettre au vlisp....)

 

Tu m'as déjà bien inspiré, ce n'est pas encore un reflexe, mais ça va venir. Je suis un peu plus long qu'avant pour assimiler, c'est lâge :P

 

Faut dire qu'y en a une floppée de ces fonctions (vl-...)

Je trouve que certaines fonctions apportent peu (quelques lignes de lisp basiques en moins)

Mais d'autres simplifient énormément la vie, du moins évitent d'écrire des sous-fonctions évoluées.

 

 

Mais (gile) les réécris pour LT-Extender ;)

 

D'autres exemples de votre part vont encore me faire évoluer. Tu l'as beaucoup utiliser pour faire de l'échange avec excel, mais là c'est pas le domaine qui m'interresse le plus, du moins je l'évite car je n'aimes pas trop être lié aux évolutions et au parc des Soft de MicroSoft (patch DLL et compagnie, y a déjà assez avec ceux d'Autodesk)

 

Merci sergeluc, ravi de t'avoir aider pour pouvoir continuer ton dévellopement.

 

 

 

 

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

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é