Aller au contenu

Messages recommandés

Posté(e)

Salut,

 

Comme d'habitude la fonction de recherche ne renvoie pas vraiment

ce que je ... recherche. Et pourtant je suis presque sur d'avoir vu un post

sur ca.

 

Donc ma recherche/question est toute bête :

importer des mises en page depuis un gabarit et ce, en lisp ou vlisp ou commande.

 

J'ai un fichier gabarit (dwt) dans lequel j'ai aussi des mises en page, que je voudrai

donc importer dans le dessin en-cours. Afin de pouvoir lancer des impressions.

 

J'ai déjà fait une fonction qui copie les pc3 dans le répertoire de plotters.

 

Merci d'avance :)

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut

 

Un truc vite fait sans grosses verif

 

(defun c:iml(/  bou doc lay liste_lay lst lst_base res val
	ouvrir_dessin_dbx bda)
 (defun ouvrir_dessin_dbx(dwg / dbx doc lan rel)
   (and (setq dwg (findfile dwg))
     (progn
(vlax-for doc (vla-get-documents (vlax-get-acad-object))
  (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
    (setq dbx doc lan T)
  )
)
(and (not dbx)
  (setq dbx (vlax-create-object (if (< (setq rel (atoi (getvar "ACADVER"))) 16)
				  "ObjectDBX.AxDbDocument"
				  (strcat "ObjectDBX.AxDbDocument." (itoa rel))
				)
	    )
  )
  (vla-open dbx dwg)
)
     )
   )
   (list dbx lan)
 )

 (defun bda (titre lst / dcl fic fil res txt val)
   (setq fic (vl-filename-mktemp "exl" nil ".dcl")
  fil (open fic "w")
   )
   (foreach txt '(	"exl : dialog {"
		"  key = \"titre\";"
		"  alignment = centered;"
		"  is_cancel = true;"
		"  allow_accept = true;"
		"  width = 50;"
		"  : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}"
		"  spacer;"
		"  ok_cancel;"
		"}"
	 )
     (write-line txt fil)
   )
   (close fil)
   (setq dcl (load_dialog fic))
   (new_dialog "exl" dcl "")
   (set_tile "titre" titre)
   (start_list "sel")
   (mapcar 'add_list lst)
   (end_list)
   (action_tile "sel"    "(setq val $value)")
   (action_tile "accept" "(done_dialog 1)")
   (action_tile "cancel" "(done_dialog 0)")
   (setq res (start_dialog))
   (unload_dialog dcl)
   (vl-file-delete  fic)
   (list res val)
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
bou 1
 )
 (vla-startundomark doc)
 (and (setq fic (getfiled "Choisissez un gabatit" "" "dwt;dwg;dxf" 16))
   (progn
     (setq dbx (ouvrir_dessin_dbx fic))
     (vlax-for lay (vla-get-layouts (car dbx))
(setq lst_base (cons (cons (vla-get-taborder lay) lay) lst_base ))
     )
     (while (assoc bou lst_base)
(setq liste_lay (cons (vla-get-name (cdr (assoc bou lst_base))) liste_lay )
      bou (1+ bou)
)
     )
     (and (= (car (setq res (bda "Iml 1.00" (reverse liste_lay)))) 1)
   (setq res (cadr res))
(progn
  (while (not (eq res ""))
    (setq val (read res)
	  lst (cons (setq lay (cdr (assoc (1+ val) lst_base))) lst)
    )
    (vl-catch-all-apply 'vla-add (list (vla-get-layouts doc) (vla-get-name lay)))
    (setq res (substr res (+ 2 (strlen (itoa val))) (strlen res)))
  )
  (vla-copyobjects (car dbx)
		   (vlax-safearray-fill 
		     (vlax-make-safearray vlax-vbObject (cons 0 (1- (length lst))))
		     lst
		   )
		   (vla-get-layouts doc)
  )
  (or (cadr dbx) (vlax-release-object (car dbx)))
	)
     )
   )
 )
 (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)

Salut patrick_35 :)

 

tout d'abord merci.

 

Ton code fonctionne pour ce qu'il doit faire :D

Mais en fait ce n'est pas tout à fait ce que je voulais, je le conserve quand même.

 

Ta fonction importe la ou les présentations dans le dessin en-cours,

par contre autocad a un peu de mal, car si je veux aller sur une des présentations

ajoutées ca ne marche pas, il faut que je fasse un ctab.

 

En fait, je ne cherchais pas à ajouté une présentation, mais une mise en page

d'impression. Je pense pouvoir y arriver en me basant sur ta méthode ;) .

 

Ne poste pas de suite une réponse ;) si jamais je n'y arrive pas je redemanderai

de l'aide.

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Comme toujours quand le code commence à faire plusieurs lignes

on se dit oulà. Mais en fait c'est tout bête et super logique et pratique :D

 

J'ai simplement changer ces lignes :

(setq doc (vla-get-activedocument (vlax-get-acad-object))

bou 1

 )

par

(setq doc (vla-get-activedocument (vlax-get-acad-object))

bou 1
      cpt 0
 )

 

(setq lst_base (cons (cons (vla-get-taborder lay) lay) lst_base ))

par

(setq lst_base (cons (cons (setq cpt (1+ cpt)) lay) lst_base ))

 

et

 

les vla-get-layouts

par

vla-get-PlotConfigurations

 

Donc pour résumer le code :

- on demande de choisir le fichier d'importation

- on affiche les mises en page et on choisit celles à importer

- on récupère le choix

- puis on copie simplement les objets d'un fichier vers l'autre

 

Sauf que je ne sais pas pourquoi, mais il y a un petit bug chez moi :P

je me retrouve avec les mises en page choisies mais en double.

 

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut

 

Comme toujours quand le code commence à faire plusieurs lignes

on se dit oulà. Mais en fait c'est tout bête et super logique et pratique :D

Comme à chaque fois :D

 

Tu as dû remarquer que la liste lst_base se sert de l'ordre des onglets et que je me sert ensuite de cette ordre dans la sélection multiple.

 

Dans ta demande, tu souhaites recopier une présentation, c'est ce qui est fait avec un copyobjects (objets + mise en page)

Et si la présentation n'existe pas, alors on la créée.

 

Si tu souhaites uniquement la mise en page, regarde la fonction copyfrom

 

@+

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

  • 3 semaines après...
Posté(e)

Re,

 

Euh... pour copyform je ne vois pas trop. J'ai regardé ton lisp MPL,

pour voir, mais je ne suis pas plus avancé.

 

Je ne sais pas pourquoi, mais depuis aujourd'hui, je n'ai plus les mises en page

en double :casstet: .

 

Mais le nouveau problème c'est, que si je fais :

(command "_plot" "_n" (getvar "ctab") ma_mise_en_page "" "_n" "_n" "_y")

 

Autocad me rejette en me disant mise en page non trouvé(e)!

 

Pourtant si j'ouvre le gestionnaire de mise en page, que j'applique ma_mise_en_page

comme mise en page par défaut, alors :

(command "_plot" "_n" (getvar "ctab") "" "" "_n" "_n" "_y") => passe.

 

Donc, il me faut appliquer par défaut ma_mise_en_page avant de faire un plot.

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut

 

J'ai modifié le lisp

 

Si la présentation du fichier source n'existe pas, elle est ajoutée au dessin.

Si elle existe, seule la mise en page est recopiée. Il faut se méfier de l'aperçu que l'on a, il peut être faux.

Pour cela --> Gestionnaire de mise en page --> Modifier (sans rien faire d'autre) --> Ok

 

(defun c:iml(/  act bou doc lay liste_lay lst_base res val
	ouvrir_dessin_dbx bda)
 (defun ouvrir_dessin_dbx(dwg / dbx doc lan rel)
   (and (setq dwg (findfile dwg))
     (progn
(vlax-for doc (vla-get-documents (vlax-get-acad-object))
  (and (eq (strcase (vla-get-fullname doc)) (strcase dwg))
    (setq dbx doc lan T)
  )
)
(and (not dbx)
  (setq dbx (vlax-create-object (if (< (setq rel (atoi (getvar "ACADVER"))) 16)
				  "ObjectDBX.AxDbDocument"
				  (strcat "ObjectDBX.AxDbDocument." (itoa rel))
				)
	    )
  )
  (vla-open dbx dwg)
)
     )
   )
   (list dbx lan)
 )

 (defun bda (titre lst / dcl fic fil res txt val)
   (setq fic (vl-filename-mktemp "exl" nil ".dcl")
  fil (open fic "w")
   )
   (foreach txt '(	"exl : dialog {"
		"  key = \"titre\";"
		"  alignment = centered;"
		"  is_cancel = true;"
		"  allow_accept = true;"
		"  width = 50;"
		"  : list_box {label= \"Sélection\"; key=\"sel\"; height = 20; multiple_select=true;}"
		"  spacer;"
		"  ok_cancel;"
		"}"
	 )
     (write-line txt fil)
   )
   (close fil)
   (setq dcl (load_dialog fic))
   (new_dialog "exl" dcl "")
   (set_tile "titre" titre)
   (start_list "sel")
   (mapcar 'add_list lst)
   (end_list)
   (action_tile "sel"    "(setq val $value)")
   (action_tile "accept" "(done_dialog 1)")
   (action_tile "cancel" "(done_dialog 0)")
   (setq res (start_dialog))
   (unload_dialog dcl)
   (vl-file-delete  fic)
   (list res val)
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object))
bou 1
 )
 (vla-startundomark doc)
 (and (setq fic (getfiled "Choisissez un gabatit" "" "dwt;dwg;dxf" 16))
   (progn
     (setq dbx (ouvrir_dessin_dbx fic))
     (vlax-for lay (vla-get-layouts (car dbx))
(setq lst_base (cons (cons (vla-get-taborder lay) lay) lst_base ))
     )
     (while (assoc bou lst_base)
(setq liste_lay (cons (vla-get-name (cdr (assoc bou lst_base))) liste_lay )
      bou (1+ bou)
)
     )
     (and (= (car (setq res (bda "Iml 1.10" (reverse liste_lay)))) 1)
   (setq res (cadr res))
(progn
  (while (not (eq res ""))
    (setq val (read res)
	  lay (cdr (assoc (1+ val) lst_base))
    )
    (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-add (list (vla-get-layouts doc) (vla-get-name lay))))
      (vla-copyfrom (vla-item (vla-get-layouts doc) (vla-get-name lay)) lay)
      (progn
	(setq pos (vla-get-taborder (vla-item (vla-get-layouts doc) (vla-get-name lay))))
	(vla-copyobjects (car dbx)
			 (vlax-safearray-fill 
			   (vlax-make-safearray vlax-vbObject (cons 0 0))
			   (list lay)
			 )
			 (vla-get-layouts doc)
	)
	(vla-put-taborder (vla-item (vla-get-layouts doc) (vla-get-name lay)) pos)
      )
    )
    (setq res (substr res (+ 2 (strlen (itoa val))) (strlen res)))
  )
  (or (cadr dbx) (vlax-release-object (car dbx)))
	)
     )
   )
 )
 (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)

Salut lili

 

Je suis d'accord avec toi, mais je donne un exemple concret de manière à automatiser une tâche.

Tu peux par exemple programmer un bouton qui fait une mise en page automatique suivant tel model sans avoir à rechercher le gabarit, etc...

 

@+

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_35 :) ,

 

Pour compléter la réponse de patrick_35 à lili2006 :

Afin de faciliter, que ce soit plus rapide et pas une contrainte, on automatise

le maximum de choses qui sont "non intelligentes" ou répétitives.

 

En automatisant en lisp le chargement de mise en page (ou de présentation),

le dessinateur n'a pas à se prendre la tête avec ca et surtout perdre quelques

secondes, qui cumulées avec toutes les autres, multipliées par le nombre de

dessinateurs chiffre rapidement...

 

Je veux bien avouer une chose, c'est qu'avec cette méthode, le jour ou les lisps

ne fonctionnent pas, une bonne partie des dessinateurs seront .... perdus :P

car ils ne sauront plus comment faire

 

a+

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Bonjour à toutes et tous,

 

Merci de ce complément d'informations bseb67

 

Afin de faciliter, que ce soit plus rapide et pas une contrainte, on automatise

le maximum de choses qui sont "non intelligentes" ou répétitives.

 

je comprend tout à fait l'intérêt d'une telle démarche et c'est ce que j'essaye de faire également à mon petit niveau,...

 

Mise en place d'une charte graphique, avec les méthode de travail qui vont avec, gabarits, blocs,mise en page,...

Civil 3D 2025 - COVADIS_18.3b

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

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é