bseb67 Posté(e) le 22 décembre 2009 Posté(e) le 22 décembre 2009 Salut, Comme d'habitude la fonction de recherche ne renvoie pas vraimentce que je ... recherche. Et pourtant je suis presque sur d'avoir vu un postsur 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 voudraidonc 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...
Patrick_35 Posté(e) le 22 décembre 2009 Posté(e) le 22 décembre 2009 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 23 décembre 2009 Auteur Posté(e) le 23 décembre 2009 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ésentationsajouté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 paged'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 redemanderaide l'aide. a+ Tous pour lisp, Lisp pour tous!Avec Revit, cela ne vas trop vite...
bseb67 Posté(e) le 23 décembre 2009 Auteur Posté(e) le 23 décembre 2009 Comme toujours quand le code commence à faire plusieurs ligneson 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-layoutspar 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...
Patrick_35 Posté(e) le 23 décembre 2009 Posté(e) le 23 décembre 2009 Salut Comme toujours quand le code commence à faire plusieurs ligneson 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bseb67 Posté(e) le 13 janvier 2010 Auteur Posté(e) le 13 janvier 2010 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 pageen 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_pagecomme 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...
Patrick_35 Posté(e) le 15 janvier 2010 Posté(e) le 15 janvier 2010 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 15 janvier 2010 Posté(e) le 15 janvier 2010 Bonjour à toutes et tous, Pardonnez mon ignorance, mais quel est l'intérêt de ce lisp ? Reproduire en lisp la commande "Insertion => Présentation => Issue d'un gabarit" ? Merci d'avance, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Patrick_35 Posté(e) le 15 janvier 2010 Posté(e) le 15 janvier 2010 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lili2006 Posté(e) le 15 janvier 2010 Posté(e) le 15 janvier 2010 Re, Salut Patrick, Merci pour ces précisions, @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
bseb67 Posté(e) le 18 janvier 2010 Auteur Posté(e) le 18 janvier 2010 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 automatisele 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 quelquessecondes, qui cumulées avec toutes les autres, multipliées par le nombre dedessinateurs chiffre rapidement... Je veux bien avouer une chose, c'est qu'avec cette méthode, le jour ou les lispsne 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...
lili2006 Posté(e) le 18 janvier 2010 Posté(e) le 18 janvier 2010 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 automatisele 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/
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant