Annonces

Les forums de la communauté Autodesk ont un nouveau look. Pour en savoir plus sur ce qui a changé, consultez le tableau des annonces de la communauté.

AutoCAD : Insérer un champ dans le texte de l'onglet de présentation

Blue8Burn
Advocate

AutoCAD : Insérer un champ dans le texte de l'onglet de présentation

Blue8Burn
Advocate
Advocate

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 : 

Blue8Burn_0-1664466058465.png 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

 

0 J'aime
Répondre
Solutions acceptées (2)
1 219 Visites
19 Réponses
Replies (19)

Luna1
Advocate
Advocate

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

0 J'aime

Blue8Burn
Advocate
Advocate

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.

 

0 J'aime

Blue8Burn
Advocate
Advocate
Qu'est-ce que tu entends par "réacteur d'évènement"
0 J'aime

Luna1
Advocate
Advocate

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

Luna1
Advocate
Advocate

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

patrick.emin
Alumni
Alumni

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.


Patrick Emin animateur de la communauté francophone


Vous avez trouvé un message utile? Alors donnez un "J'aime" à ce message!
Votre question a eu une réponse satisfaisante? Voulez vous avoir l'amabilité de cliquer sur le bouton
 APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Signez notre Livre d'Or
0 J'aime

Blue8Burn
Advocate
Advocate

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

 

 

0 J'aime

Luna1
Advocate
Advocate
Coucou,
Yes c'est bien le fonctionnement du programme. C'est bien que tu es pu remplacer la chaîne par le nom de ta propriété. Si cela répond bel et bien à ton besoin, merci d'approuver la solution 😉

Bisous,
Luna
0 J'aime

Blue8Burn
Advocate
Advocate

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

0 J'aime

Luna1
Advocate
Advocate

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

0 J'aime

Blue8Burn
Advocate
Advocate

En fait le code n'ajoute pas la valeur de PROPDESS : mon fichier :Blue8Burn_0-1665065214594.png , mon onglet : Blue8Burn_1-1665065249351.png , mon REV_EXE de propdess: Blue8Burn_2-1665065338621.pnget la fenêtre qui s'ouvre après avoir exécuté DPLOT : 

Blue8Burn_3-1665065408009.png

 

 

 

0 J'aime

Blue8Burn
Advocate
Advocate

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

0 J'aime

Luna1
Advocate
Advocate
Solution acceptée

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

Blue8Burn
Advocate
Advocate

Bonjour @Luna1,

 

Mercii beaucoup, quel boulot !! 🎩 🙂

En revanche j'ai le message d'erreur suivant: 

Blue8Burn_0-1665135110208.png

sais-tu d'où ça peut venir..?

J'imprime effectivement en PDF avec DWG To PDF.pc3 

 

Merci,

Bonne journée,

Blue

0 J'aime

Blue8Burn
Advocate
Advocate

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 🙂 !!

0 J'aime

Luna1
Advocate
Advocate
Solution acceptée

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.

Elunelly_0-1665146765705.png

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

Blue8Burn
Advocate
Advocate
Yes !! Ca fonctionne parfaitement !!
C'est top !!

Merci, merci beaucoup pour tout ça ! 🙂

Surement à bientôt ! 😉

Blue
0 J'aime

Luna1
Advocate
Advocate

Pas de soucis 😜

 

Bisous,
Luna

0 J'aime

benoit_marceau
Enthusiast
Enthusiast

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 .

0 J'aime