Bonjour,
je cherche une solution pour insérer un champs dans le texte de l'onglet de présentation.
J'ai une 10aine d'onglet qui se termine tous par la révision du plan, comme ceci :
ici rev02.
Dans mes cartouches cette rev est un champs qui appelle une valeur de PROPDESS.
Je voudrais ne pas modifier à la mains mes onglets et faire appelle à un champs, est-ce possible ?
J'utilise le lisp "TabSort" pour les modifier, mais je souhaiterais que ça soit automatique..
Merci,
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Insérer un champs dans le texte de l'onglet de présentation
Résolu ! Accéder à la solution.
Résolu par Luna1. Accéder à la solution.
Résolu par Luna1. Accéder à la solution.
Coucou,
D'après la demande, ce n'est pas possible !
Il n'y a pas d'autres moyen que d'utiliser un LISP pour renommer régulièrement les cartouches (ou bien créer un réacteur d'évènement) mais étant donné que c'est déjà ce que tu fais, difficile à dire.
Car si je comprends bien, tous tes onglets possèderont la même valeur, donc quel intérêt si 100% des onglets possède une info commune ? Le nom des onglets n'a d'importance que pour le dessinateur à mes yeux, c'est au cartouche de renseigner l'utilisateur du PDF sur l'ensemble des infos que l'on désire lui transmettre.
Bref, en l'état je dirais qu'il n'y a pas de solution miracle.
Bisous,
Luna
Merci Luna,
En fait j'utilise la commande publier pour imprimer mes plans, et Autocad nomme le pdf comme suit: "nom du fichier-nom de l'onglet" et souvent il arrive qu'on oublie de modifier le nom de l'onglet, donc le pdf est mal nommé...
Alors j'essais de trouver une solution pour que ce soit automatique, afin de limiter les erreurs.
Je me doutais bien que c'était lié à l'impression des PDF ^^'
Un réacteur d'évènement c'est de la programmation qui, comme son nom l'indique, réagit à un évènement. C'est un programme qui s'exécute en fonction de l'évènement qu'on lui a spécifié. Mais c'est un domaine que je ne maîtrise pas encore suffisamment pour te proposer quoi que se soit de toutes façons, je ne faisais que réfléchir à haute voix si tu préfères.
S'il s'agit uniquement d'un soucis lors de l'impression, on peut essayer de voir pour créer une commande qui permet d'imprimer la présentation courante en lui ajoutant l'information renseignée dans PROPDESS à la fin. Et on utilise les valeurs de mise en page déjà renseignée (donc valeurs par défaut de la commande _-PLOT).
Si on fait cela, je vais avoir besoin du nom de la propriété PROPDESS (il s'agit bien d'une propriété personnalisée ?).
Bisous,
Luna
Je peux proposer ceci pour commencer :
(defun c:DPLOT (/ *error* fid doc sum rev fil)
(defun *error* (msg)
(setvar "FILEDIA" fid)
(princ msg)
)
(setq
fid (getvar "FILEDIA")
doc (vla-get-ActiveDocument (vlax-get-acad-object))
sum (vla-get-SummaryInfo doc)
rev (vla-get-RevisionNumber sum)
fil (strcat (getvar "DWGPREFIX") (substr (getvar "DWGNAME") 1 (- (strlen (getvar "DWGNAME")) 4)) "-" (getvar "CTAB"))
)
(if (and (= "" rev) (not (setq rev nil)))
(vl-catch-all-apply 'vla-GetCustomByKey (list sum "Revision" 'rev)) ; <-- Remplacer "Revision" par le nom de la propriété personnalisée
)
(setvar "FILEDIA" 0)
(if (setq fil (getfiled "Rechercher un fichier de tracé" (if rev fil (strcat fil "_" rev)) "pdf" 1))
(command-s "_-PLOT" "_No" "" "" "" fil "_No" "_Yes")
)
(setvar "FILEDIA" fid)
(princ)
)
Cela permet (en théorie) d'imprimer selon la mise en page en cours de la présentation courante dans un fichier (nouveau ou existant) en rajoutant le numéro de révision renseigné dans PROPDESS. J'ai utilisé la propriété "RevisionNumber" des propriétés de dessin comme valeur par défaut, et si elle est vide, cela recherche parmi les propriétés personnalisées (par défaut j'ai pris "Revision" mais il faudra remplacer la chaîne de caractère par le nom de ta propriété personnalisée si tu en as une, sinon tant pis).
Bisous,
Luna
Bonjour @Blue8Burn
Parmi les réponses qui vous ont été données, si une (ou plusieurs) d'entre elles apporte une solution à votre problème ou vous a permis de mieux l'analyser et le comprendre, voulez vous avoir l'amabilité de cliquer sur le bouton APPROUVER LA SOLUTION en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.
Bonjour @Luna1,
désolé j'étais en vacances 🙂
Merci beaucoup pour ce code je viens de le tester, Ma propriété perso s'appelle "REV_EXE" et je l'ai remplacé.
Le code imprime juste la présentation en cours et me demande l'emplacement, j'ai la possibilité de le renommer aussi. J'ai appelé la cmd DPLOT, c'est bien ça ?
Merci,
Blue
Le code correspond juste à faire clique droit sur l'onglet et imprimer, ya pas plus.
En fait je ne comprends pas ce que fait le code 😕
Du coup est-ce qu'il est possible de modifier le code afin d'imprimer plusieurs présentations en même temps et de reprendre l'info "REV_EXE" des propriétés du dessin .
Merci,
Blue
Coucou,
Le code en l'état actuel permet de rajouter la valeur de "REV_EXE" qui est dans les propriétés customs de PROPDESS sur la commande _PLOT (CTRL+P), et c'est tout. Ce que je peux essayer de voir étant donné que tu dis que le PDF est nommé "nom du fichier-nom de l'onglet" (cela signifie que tu imprimes plusieurs onglets en fichier séparés), c'est de créer une boucle pour _-PLOT plusieurs onglets sur un seul lancement de la commande.
Le problème de la commande _-PUBLISH comme tu le désires, c'est l'utilisation de fichiers .dsd, sujet que je ne maîtrise pas bien. J'avais travaillé vite fait sur ce sujet >>ici<< mais je n'ai pas écrit le code, juste corrigé quelques erreurs de programmation. N'ayant que peu de temps en ce moment, je ne peux pas vraiment étudier la question de la commande PUBLISH par la programmation (car j'utilise la commande PUBLISH tous les jours mais je n'ai jamais eut à créer de fichier DSD à ce jour) et s'il y a un moyen d'utiliser la commande -PUBLISH sans spécifier de fichier DSD...
Désolée donc de ne pas pouvoir faire plus pour l'instant >w<
Bisous,
Luna
En fait le code n'ajoute pas la valeur de PROPDESS : mon fichier : , mon onglet : , mon REV_EXE de propdess: et la fenêtre qui s'ouvre après avoir exécuté DPLOT :
Je n'utilise pas de fichiers .dsd non plus avec la fonction _PUBLISH 😉
En tout cas merci pour tes retours, ils m'aident beaucoup.
Je me mets doucement à la programmation, j'espère pouvoir y arriver bientôt 😉
Bonne fin de journée!
A plus
Blue
Bon j'ai retravaillé la commande pour imprimer plusieurs onglet (en utilisant la commande _-PLOT et non _-PUBLISH !) dans des fichiers PDF séparés avec la dénomination par défaut AutoCAD ("nom du dessin-nom de l'onglet") + la valeur de "REV_EXE" si existante dans le .dwg dans les propriétés personnalisée du dessin.
En terme de fonctionnement, c'est totalement différent puisque tu devras spécifier une liste de présentation (celles que tu veux imprimer), puis spécifier un dossier dans lequel tu souhaites imprimer tout ce beau monde. Il n'est malheureusement pas possible avec cette méthode d'affichage des dossiers (méthode BrowseForFolder du Shell Windows) de spécifier un dossier par défaut car il te serait alors impossible de remonter à la racine... (cf. ce fil de discussion le mentionnant >>ici<<)
Une fois que tu as fait cela, le programme fait le reste pour imprimer ta liasse de plans PDF (j'ai testé en ajoutant une propriété de dessin personnalisée nommée "REV_EXE" ayant pour valeur "00" et cela fonctionne très bien).
(defun c:DPLOT (/ *error* BrowseForFolder ListBox fcd fid dwg doc sum lay fol rev fil)
(defun *error* (msg)
(setvar "FILEDIA" fid)
(princ msg)
)
(defun BrowseForFolder (/ ShlObj Folder FldObj Out_Fld) ; BonusCAD
(setq
ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application")
Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0)
)
(vlax-release-object ShlObj)
(if Folder
(progn
(setq
FldObj (vlax-get-property Folder 'Self)
Out_Fld (vlax-get-property FldObj 'Path)
)
(vlax-release-object Folder)
(vlax-release-object FldObj)
)
)
Out_Fld
)
(defun ListBox (title msg lst value flag / tmp file DCL_ID choice tlst)
(setq
tmp (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
tlst lst
)
(write-line
(strcat "ListBox:dialog{width=" (itoa (+ (apply 'max (mapcar 'strlen (mapcar 'vl-princ-to-string lst))) 5)) ";label=\"" title "\";")
file
)
(write-line
":edit_box{key=\"filter\";}"
file
)
(if (and msg (/= msg ""))
(write-line (strcat ":text{label=\"" msg "\";}") file)
)
(write-line
(cond
((= 0 flag) "spacer;:popup_list{key=\"lst\";}")
((= 1 flag) "spacer;:list_box{height=15;key=\"lst\";}")
(t "spacer;:list_box{height=15;key=\"lst\";multiple_select=true;}")
)
file
)
(write-line ":text{key=\"count\";}" file)
(write-line "spacer;ok_cancel;}" file)
(close file)
(setq DCL_ID (load_dialog tmp))
(if (not (new_dialog "ListBox" DCL_ID))
(exit)
)
(set_tile "filter" "*")
(set_tile "count" (strcat (itoa (length lst)) " / " (itoa (length lst))))
(start_list "lst")
(mapcar 'add_list lst)
(end_list)
(set_tile "lst" (if (member value lst) (itoa (vl-position value lst)) (itoa 0)))
(action_tile
"filter"
"(start_list \"lst\")
(mapcar 'add_list (setq tlst (vl-list-search $value lst)))
(end_list)
(set_tile \"count\" (strcat (itoa (length tlst)) \" / \" (itoa (length lst))))"
)
(action_tile
"accept"
"(or (= (get_tile \"lst\") \"\")
(if (= 2 flag)
(progn
(foreach n (str2lst (get_tile \"lst\") \" \")
(setq choice (cons (nth (atoi n) tlst) choice))
)
(setq choice (reverse choice))
)
(setq choice (nth (atoi (get_tile \"lst\")) tlst))
)
)
(done_dialog)"
)
(start_dialog)
(unload_dialog DCL_ID)
(vl-file-delete tmp)
choice
)
(and
(setq
fcd "" ; "DWG To PDF.pc3" -> force une imprimante | "" = risque accru car les questions sont différentes en fonction des imprimantes si pas PDF
fid (getvar "FILEDIA")
dwg (substr (getvar "DWGNAME") 1 (- (strlen (getvar "DWGNAME")) 4))
doc (vla-get-ActiveDocument (vlax-get-acad-object))
sum (vla-get-SummaryInfo doc)
)
(setq lay (ListBox "Sélection des présentations" "Veuillez sélectionner une ou plusieurs présentations :" (layoutlist) (getvar "CTAB") 2))
(setq fol (BrowseForFolder))
(or (vl-catch-all-apply 'vla-GetCustomByKey (list sum "REV_EXE" 'rev)) T) ; <-- Remplacer "REV_EXE" par le nom de la propriété personnalisée
(setq rev (if rev (strcat "_" rev) ""))
(setvar "FILEDIA" 0)
(foreach layout lay
(setq fil (strcat fol "\\" dwg "-" layout rev ".pdf"))
(command-s "_-PLOT" "_No" layout "" fcd fil "_No" "_Yes")
T
)
(setvar "FILEDIA" fid)
)
(princ)
)
Il y a un nouveau paramètre modifiable pour ton utilisation en cas de besoin : fld.
Cette variable stocke le nom de l'imprimante utilisée pour imprimer les plans. Donc la valeur actuelle "" permet d'utiliser l'imprimante définie dans le gestionnaire de mise en page pour chaque présentation indépendamment. Si jamais tu veux forcer l'impression avec une imprimante en particulier, il suffit d'écrire le nom de l'imprimante (comme par exemple "DWG To PDF.pc3" en respectant la casse) à la place des "" (mais conserve les guillemets évidemment car c'est une chaîne de caractères !). Attention tout de même car l'exécution de la commande _-PLOT diffère en fonction des imprimantes utilisées (selon que tu imprimes en PDF, ou sur une imprimante papier) !!
Bisous,
Luna
Yes!! J'ai ajouté le "str2lst" au lisp et ça fonctionne !!
"
(defun str2lst (str sep / pos)
(if (setq pos (vl-string-search sep str))
(cons (substr str 1 pos)
(str2lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
)
"
Juste 1 chose encore si tu veux bien:
- est-ce possible de ne pas ouvrir les PDF après impression stp ?
En tout cas merci c'est vraiment top 🙂 !!
Yes pardon j'avais oublié la fonction (str2lst) nécessaire à la fonction (ListBox)...
Pour ce qui est de ne pas ouvrir les PDF après impression, la réponse est Non pour moi car il s'agit de la commande AutoCAD et je n'ai pas vu de question concernant l'ouverture ou non du fichier après impression. Donc je ne peux rien faire via la programmation pour cela. En revanche ce paramètre est défini dans les options PDF du fichier .pc3 (voir ci-dessous) où il faut décocher la case "Afficher les résultats dans le visualiseur" depuis la boîte de dialogue Tracer.
Je ne sais pas cependant si cela est une propriété du fichier .pc3 (et auquel cas, il te suffirait de modifier ton fichier .pc3 pour ne plus afficher après impression) ou si c'est spécifié ailleurs (et auquel cas, je ne vois pas comment décocher cette case autrement que comme montré ci-dessus)...
Bisous,
Luna
Bonjour , intéressant , perso j'ai pris le partie inverse , c'est le nom de l'onglet qui alimente mon cartouche avec un champs.A chaque modif , je change dans l'onglet , c'est tous. le pdf = nom du fichier + nom onglet . la contrainte c'est que je ne peux avoir qu'une présentation par onglet. les champs c'est Coouuuull .
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.