Aller au contenu

[CAD MAP 3D] Exporter Propriétés du dessin personnalisées


drault

Messages recommandés

Bonjour,

 

Je souhaite relancer une réponse apportée part Giles concernant un lisp pour importer les propriétés personnalisées, depuis un fichier source, vers celui ouvert.

Est-il possible d'exporter vers plusieurs fichier plutôt que d'importer fichier après fichier ?

[EDIT]:la commande PROPULATE ne prend en compte que 10 paramètres...j'en ai 20 et ne marche pas pour exporter

 

Merci,

 

belle fin de journée,

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je ne répond pas à la question, mais je propose une réponse qui la contourne. Et ne connaissant pas le lisp en question pas sur que ce soit possible.

Mais tu peux aussi utiliser SuperAutoScript de @Eric qui ouvrira (et fermera) chaque fichier et fera l'importation via le lisp.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Merci, très utile pour du batch action mais dans ce cas, le script à besoin d'ouvrir une fenêtre dans un fichier pour que l'on puisse pointer la source des propriétés à importer.

Après test, ça ne marche pas

Voici le LISP:

;; IMPOROP (gile)
;; Importe dans le dessin courant les propriétés personnalisées d'un fichier (dwg ou dwt)

(defun c:improp (/ target filename doc odbx source)
  (or *acdoc*
      (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  )
  (setq target (vla-get-SummaryInfo *acdoc*))
  (if
    (setq filename (getfiled "Choisir le fichier source"
                             (getvar 'dwgprefix)
                             "dwg;dwt"
                             0
                   )
    )
     (progn
       (if
         (not
           (and
             (setq
               doc (GetItem
                     (vla-get-Documents (vlax-get-acad-object))
                     (strcat (vl-filename-base filename) ".dwg")
                   )
             )
             (= filename (vla-get-FullName doc))
           )
         )
          (setq doc  (OpenDrawingDBX filename)
                odbx T
          )
       )
       (setq source (vla-get-SummaryInfo doc)
             n      -1
       )
       (foreach p
                '(Author Comments HyperlinkBase KeyWords Subject Title)
         (if (/= "" (setq prop (vlax-get source p)))
           (vlax-put target p prop)
         )
       )
       (repeat (vla-NumCustomInfo source)
         (vla-GetCustomByIndex source (setq n (1+ n)) 'key 'val)
         (vla-AddCustomInfo target key val)
       )
       (and odbx (vlax-release-object doc))
     )
  )
  (princ)
)

;;; Accéder à un dessin fermé

(defun OpenDrawingDBX (filename / objdbx release)
  (setq objdbx
         (vlax-create-object
           (if (< (setq release (atoi (getvar "ACADVER"))) 16)
             "ObjectDBX.AxDbDocument"
             (strcat "ObjectDBX.AxDbDocument." (itoa release))
           )
         )
  )
  (vla-open objdbx filename)
  objdbx
)

;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil

(defun GetItem (col name / obj)
  (vl-catch-all-apply
    (function (lambda () (setq obj (vla-item col name))))
  )
  obj
)

 

 

Toujours sans solutions, je me permets de relancer

 

Modifié par drault
relance
Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Bonjour,

 

je me permets de up ce post, car je n'ai toujours pas trouvé de réponses.

État des lieux :

-Import présentation + information personnalisée = ok

-Export = ???

 

La technique de lozère marche pour d'autres script mais celui de giles ne fait que de l'import de données pas de l'export.

 

Merci,

Lien vers le commentaire
Partager sur d’autres sites

Coucou,

Je pense que ceci devrait répondre (partiellement) au problème, mais est ensuite utilisable avec SuperAutoScript pour le faire fonctionner correctement :

(defun ExportSumInfo (DWG_file TXT_file / *error* doc SumInfo file n odbx key val)
  (defun *error* (msg)
    (if file (close file))
    (and odbx (vlax-release-object doc))
    (princ msg)
  )
  (cond
    ( (null DWG_file)
      (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
    )
    ( (not
        (and
          (setq doc
            (GetItem
              (vla-get-Documents (vlax-get-acad-object))
              (strcat (vl-filename-base DWG_file) ".dwg")
            )
          )
          (= DWG_file (vla-get-FullName doc))
        )
      )
      (setq
        doc (OpenDrawingDBX DWG_file)
        odbx T
      )
    )
  )
  (setq
    SumInfo (vla-get-SummaryInfo doc)
    n -1
  )
  (if (setq file (open TXT_file "W"))
    (progn
      (foreach p '(Author Comments HyperlinkBase KeyWords Subject Title)
        (write-line
          (strcat (vl-prin1-to-string p) ";" (vl-prin1-to-string (vlax-get SumInfo p)))
          file
        )
      )
      (write-line "" file)
      (repeat (vla-NumCustomInfo SumInfo)
        (vla-GetCustomByIndex SumInfo (setq n (1+ n)) 'key 'val)
        (write-line
          (strcat key ";" (vl-prin1-to-string val))
          file
        )
      )
      (setq file (close file))
      (and odbx (vlax-release-object doc))
      TXT_file
    )
  )
)

(defun ImportSumInfo (DWG_file TXT_file / *error* doc SumInfo file odbx line lst)
  (defun *error* (msg)
    (if file (close file))
    (and odbx (vlax-release-object doc))
    (princ msg)
  )
  (cond
    ( (null DWG_file)
      (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
    )
    ( (not
        (and
          (setq doc
            (GetItem
              (vla-get-Documents (vlax-get-acad-object))
              (strcat (vl-filename-base DWG_file) ".dwg")
            )
          )
          (= DWG_file (vla-get-FullName doc))
        )
      )
      (setq
        doc (OpenDrawingDBX DWG_file)
        odbx T
      )
    )
  )
  (setq
    SumInfo (vla-get-SummaryInfo doc)
  )
  (if (setq file (open TXT_file "R"))
    (progn
      (while
        (and
          (setq line (read-line file))
          (setq lst (mapcar 'read (str2lst line ";")))
          (member (car lst) '(Author Comments HyperlinkBase KeyWords Subject Title))
        )
        (if (/= "" (cadr lst))
          (vlax-put SumInfo (car lst) (cadr lst))
        )
      )
      (while (setq line (read-line file))
        (setq lst (str2lst line ";"))
        (vla-AddCustomInfo SumInfo (car lst) (read (cadr lst)))
      )
      (setq file (close file))
      (and odbx (vlax-release-object doc))
      T
    )
  )
)

;;; Accéder à un dessin fermé

(defun OpenDrawingDBX (filename / objdbx release)
  (setq objdbx
    (vlax-create-object
      (if (< (setq release (atoi (getvar "ACADVER"))) 16)
        "ObjectDBX.AxDbDocument"
        (strcat "ObjectDBX.AxDbDocument." (itoa release))
      )
    )
  )
  (vla-open objdbx filename)
  objdbx
)

;;; GetItem (gile)
;;; Retourne le vla-object de l'item s'il est présent dans la collection
;;;
;;; Arguments
;;; col : la collection (vla-object)
;;; name : le nom de l'objet (string) ou son indice (entier)
;;;
;;; Retour : le vla-object ou nil

(defun GetItem (col name / obj)
  (vl-catch-all-apply
    (function (lambda () (setq obj (vla-item col name))))
  )
  obj
)

(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)
  )
)

Le but de la démarche c'est simplement de créer un fichier .txt qui servira d'export pour ensuite pouvoir être ré-importer plus tard. Il s'agit ci-dessus de fonctions qui nécessitent 2 arguments !!! Le principe est simple :
  - Le premier argument correspond au nom complet du fichier DWG (source pour (ExportSumInfo) ou cible pour (ImportSumInfo))
  - Le second argument correspond au nom complet du fichier TXT où seront stockées les Info du dessin

Voici un exemple d'utilisation succinct (correspondant au fonctionnement du programme initial de @(gile)) :

(ImportSumInfo
  nil
  (ExportSumInfo
    (getfiled "Choisir le fichier source" (getvar 'dwgprefix) "dwg;dwt" 0)
    (strcat (getvar 'dwgprefix) "ExportSumInfo.txt")
  )
)

On peut donc l'utiliser dans un script (je ne sais pas comment tu comptes sélectionner un ensemble de fichiers) avec dans un premier temps, la création du fichier via (ExportSumInfo) puis en bouclant la fonction (ImportSumInfo) sur l'ensemble des fichiers cibles choisis.
Voici un exemple en programmation LISP via la commande MISI (= Multiple Import Summary Info) :

(defun c:MISI (/ getfolder ExportSumInfo ImportSumInfo OpenDrawingDBX GetItem str2lst lg DWG_file TXT_file d folder)
  ;;; Definition of local functions
  (defun getfolder (filename / pos)
    (setq pos (vl-string-position (ascii "\\") filename 0 T))
    (substr filename 1 (1+ pos))
  )
  
  (defun ExportSumInfo (DWG_file TXT_file / *error* doc SumInfo file n odbx key val)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
      n -1
    )
    (if (setq file (open TXT_file "W"))
      (progn
        (foreach p '(Author Comments HyperlinkBase KeyWords Subject Title)
          (write-line
            (strcat (vl-prin1-to-string p) ";" (vl-prin1-to-string (vlax-get SumInfo p)))
            file
          )
        )
        (write-line "" file)
        (repeat (vla-NumCustomInfo SumInfo)
          (vla-GetCustomByIndex SumInfo (setq n (1+ n)) 'key 'val)
          (write-line
            (strcat key ";" (vl-prin1-to-string val))
            file
          )
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        TXT_file
      )
    )
  )

  (defun ImportSumInfo (DWG_file TXT_file / *error* doc SumInfo file odbx line lst)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
    )
    (if (setq file (open TXT_file "R"))
      (progn
        (while
          (and
            (setq line (read-line file))
            (setq lst (mapcar 'read (str2lst line ";")))
            (member (car lst) '(Author Comments HyperlinkBase KeyWords Subject Title))
          )
          (if (/= "" (cadr lst))
            (vlax-put SumInfo (car lst) (cadr lst))
          )
        )
        (while (setq line (read-line file))
          (setq lst (str2lst line ";"))
          (vla-AddCustomInfo SumInfo (car lst) (read (cadr lst)))
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        T
      )
    )
  )
  
  (defun OpenDrawingDBX (filename / objdbx release)
    (setq objdbx
      (vlax-create-object
        (if (< (setq release (atoi (getvar "ACADVER"))) 16)
          "ObjectDBX.AxDbDocument"
          (strcat "ObjectDBX.AxDbDocument." (itoa release))
        )
      )
    )
    (vla-open objdbx filename)
    objdbx
  )
  
  (defun GetItem (col name / obj)
    (vl-catch-all-apply
      (function (lambda () (setq obj (vla-item col name))))
    )
    obj
  )
  
  (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)
    )
  )
  ;;; End of definition for local functions
  (if (member (getvar "LOCALE") '("FR" "FRA"))
    (setq lg T)
  )
  (initget "Courant Parcourir _Current Browse")
  (setq DWG_file
    (getkword
      (if lg
        "\nVeuillez sélectionner le fichier .dwg source [Courant/Parcourir] <Courant> : "
        "\nPlease select the source .dwg file [Current/Browse] <Current> : "
      )
    )
  )
  (setq DWG_file
    (cond
      ( (= DWG_file "Browse")
        (getfiled
          (if lg
            "Sélection du fichier .dwg source"
            "Selection of source .dwg file"
          )
          (getvar "DWGPREFIX")
          "dwg;dwt"
          0
        )
      )
      ((strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
    )
  )
  (initget "Source Parcourir Temporaire _Source Browse Temporary")
  (setq TXT_file
    (getkword
      (if lg
        "\nVeuillez sélectionner le fichier .txt pour l'export [Source/Parcourir/Temporaire] <Source> : "
        "\nPlease select the .txt file for export [Source/Browse/Temporary] <Source> : "
      )
    )
  )
  (setq TXT_file
    (cond
      ( (or (= TXT_file "Source") (null TXT_file))
        (strcat (substr DWG_file 1 (- (strlen DWG_file) 4)) "ExportSummaryInfo.txt")
      )
      ( (= TXT_file "Browse")
        (getfiled
          (if lg
            "Sélection du fichier .txt d'export"
            "Selection of .txt export file"
          )
          (strcat (substr DWG_file 1 (- (strlen DWG_file) 4)) "ExportSummaryInfo")
          "txt"
          1
        )
      )
      ( (= TXT_file "Temporary")
        (setq d T)
        (vl-filename-mktemp "ExportSummaryInfo.txt")
      )
    )
  )
  (setq folder (getfolder DWG_file))
  (if (setq TXT_file (ExportSumInfo DWG_file TXT_file))
    (while
      (setq filename
        (getfiled
          (if lg
            "Sélection du fichier .dwg cible"
            "Selection of targetted .dwg file"
          )
          folder
          "dwg;dwt"
          0
        )
      )
      (if (/= filename DWG_file)
        (ImportSumInfo filename TXT_file)
      )
    )
  )
  (if d (vl-file-delete TXT_file))
  (princ)
)

PS: Je ferais un version v2 car pour l'instant cela fonctionne si les propriétés custom n'existent pas encore dans le dessin cible mais sur une clé existe déjà, alors cela génère une erreur donc il faut que je corrige cela...
En espérant que cela corresponde un peu plus à ton besoin 😉

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Comme promis la version corrigée de MISI, avec quelques améliorations supplémentaires (+ correction de légers bugs). Je poste le code pour ceux que chat intéresse et si l'encodage du fichier ci-joint pose soucis avec les accents et caractères spéciaux :

; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ;
; |                                                                                                                                               | ;
; |                                                 FICHIER DE SUIVI HISTORIQUE DE LA COMMANDE MISI                                               | ;
; |                                                                                                                                               | ;
; +-----------------------------------------------------------------------------------------------------------------------------------------------+ ;



;                                            []-----------------------[] MISI []-----------------------[]                                           ;
;--- Date of creation       > 17/03/2022                                                                                                            ;
;--- Last modification date > 18/03/2022                                                                                                            ;
;--- Author                 > Luna                                                                                                                  ;
;--- Version                > 2.0.0                                                                                                                 ;
;--- Class                  > "UtFiles"                                                                                                             ;

;--- Goal and utility of the command                                                                                                                ;
;   The purpose of the MISI (= Multiple Import for SummaryInfo) command is to export all the data stored in the drawing properties (Author,         ;
;   Comments, HyperlinkBase, Keywords, Subject and Title) to an external .txt file. The program works on both open and unopened files. Once the     ;
;   .txt file is created, you can import the data recorded in the file to other .dwg files, open or not. It is also possible to use the command     ;
;   only to create the .txt file first, modify the information contained in the file (respecting its initial structure), then use the existing file ;
;   as new data to import.                                                                                                                          ;
;                                                                                                                                                   ;
;--- Explanation of how the command works step by step                                                                                              ;
; Step n°1        : Retrieves the "LOCALE" system variable value to determine the language used for the program                                     ;
; Step n°2        : Asks the user for the drawing name to export its SummaryInfo datas                                                              ;
; Step n°2.a        : If "Current" (or ENTER as default value), the ActiveDocument will be used as source drawing                                   ;
; Step n°2.b        : If "Browse", opens a file explorer window and lets you select an existing .dwg or .dwt file                                   ;
; Step n°2.a/b.1      : Asks the user for the .txt file location and name that will be used for the export (if you specify an existing file, it     ;
;                       will be overwritten)                                                                                                        ;
; Step n°2.a/b.1.a      : If "Source" (or ENTER as default value), it will be stored in the source drawing folder with the name of the drawing plus ;
;                         "_ExportSummaryInfo.txt"                                                                                                  ;
; Step n°2.a/b.1.b      : If "Browse", opens a file explorer window and lets you select the location and name for a new file, or an existing one    ;
; Step n°2.a/b.1.c      : If "Temporary", it will create a file in "%TEMP%" folder and it will be deleted at the end of the program                 ;
; Step n°2.c        : If "Skip", it will not export the data of an existing .dwg file but only import the data of an existing .txt file             ;
; Step n°2.c.1        : Opens a file explorer window and lets you select an existing .txt file                                                      ;
; Step n°3        : While you specify an existing .dwg file in the file explorer window, it will import the settings stored in the .txt file into   ;
;                   the drawing                                                                                                                     ;
;                                                                                                                                                   ;
;--- List of dependent's functions                                                                                                                  ;
;   --•  "BaStr" ---> GetFolder                                     | v2.0.0 - 18/03/2022 (Luna)                                                    ;
;   --•  "UtFil" ---> ExportSumInfo                                 | v1.0.0 - 17/03/2022 (Luna)                                                    ;
;   --•  "UtFil" ---> ImportSumInfo                                 | v2.0.0 - 18/03/2022 (Luna)                                                    ;
;   --•  "UtFil" ---> OpenDrawingDBX                                | v1.0.0 - ##/##/#### ((gile))                                                  ;
;   --•  "VlCol" ---> GetItem                                       | v1.0.0 - ##/##/#### ((gile))                                                  ;
;   --•  "UtDac" ---> str2lst                                       | v1.0.0 - 15/04/2017 ((gile))                                                  ;
;                                                                                                                                                   ;
;--- Return on drawing                                                                                                                              ;
;   The command (MISI) returns the number of successfully imported drawing properties in the historic line, with the name of the files used.        ;
;     Ex. :                                                                                                                                         ;
;       MISI                                                                                                                                        ;
;       Please select the source .dwg file [Current/Browse/Skip] <Current> : _B                                                                     ;
;       Please select the .txt file for export [Source/Browse/Temporary] <Source> : _B                                                              ;
;       13 / 13 drawing properties successfully imported...                                                                                         ;
;       |   Source drawing : "Dessin3.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA\"                                                                      ;
;       |                                                                                                                                           ;
;       |   Target drawing : "Dessin5.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA\Nouveau dossier\"                                                      ;
;       |                                                                                                                                           ;
;       |   TXT file used  : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA\Nouveau dossier\Dessin3_ExportSummaryInfo.txt"                         ;
;       |                                                                                                                                           ;
;       command:                                                                                                                                    ;
;       MISI                                                                                                                                        ;
;       Please select the source .dwg file [Current/Browse/Skip] <Current> :                                                                        ;
;       Please select the .txt file for export [Source/Browse/Temporary] <Source> : _T                                                              ;
;       8 / 8 drawing properties successfully imported...                                                                                           ;
;       |   Source drawing : "Dessin1.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA\"                                                                      ;
;       |                                                                                                                                           ;
;       |   Target drawing : "Dessin5.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA"                                                                       ;
;       |                                                                                                                                           ;
;       |   TXT file used  : ""C:\Users\luna\AppData\Local\Temp\MISI001.txt"                                                                        ;
;       |                                                                                                                                           ;
;       8 / 8 drawing properties successfully imported...                                                                                           ;
;       |   Source drawing : "Dessin1.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA\"                                                                      ;
;       |                                                                                                                                           ;
;       |   Target drawing : "Dessin3.dwg"                                                                                                          ;
;       |   Folder         : "C:\Users\luna\OneDrive\Documents\C3042 - CS PA"                                                                       ;
;       |                                                                                                                                           ;
;       |   TXT file used  : ""C:\Users\luna\AppData\Local\Temp\MISI001.txt"                                                                        ;
;       |                                                                                                                                           ;
;                                                                                                                                                   ;
;--- Historic list of the version with their modification status                                                                                    ;
; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ;
; |   v2.0.0   |   Update of the functions (GetFolder) and (ImportSumInfo), correcting the issue if CustomKey does already exist, displays info   | ;
; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ;
; |   v1.0.0   |   Creation of the command                                                                                                        | ;
; +------------+----------------------------------------------------------------------------------------------------------------------------------+ ;
;                                                                                                                                                   ;

(defun c:MISI (/ getfolder ExportSumInfo ImportSumInfo OpenDrawingDBX GetItem str2lst lg DWG_file TXT_file d Sfolder Tfolder r)
  ;;; Definition of local functions
  (defun getfolder (filename / pos)
    (setq pos (vl-string-position (ascii "\\") filename 0 T))
    (cons (substr filename 1 (1+ pos)) (substr filename (+ pos 2)))
  )
  
  (defun ExportSumInfo (DWG_file TXT_file / *error* doc SumInfo file n odbx key val)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
      n -1
    )
    (if (setq file (open TXT_file "W"))
      (progn
        (foreach p '(Author Comments HyperlinkBase KeyWords Subject Title)
          (write-line
            (strcat (vl-prin1-to-string p) ";" (vl-prin1-to-string (vlax-get SumInfo p)))
            file
          )
        )
        (write-line "" file)
        (repeat (vla-NumCustomInfo SumInfo)
          (vla-GetCustomByIndex SumInfo (setq n (1+ n)) 'key 'val)
          (write-line
            (strcat key ";" (vl-prin1-to-string val))
            file
          )
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        TXT_file
      )
    )
  )

  (defun ImportSumInfo (DWG_file TXT_file / *error* doc SumInfo n i file odbx line lst)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
      n 0
      i 0
    )
    (if (setq file (open TXT_file "R"))
      (progn
        (while
          (and
            (setq line (read-line file))
            (setq lst (mapcar 'read (str2lst line ";")))
            (member (car lst) '(Author Comments HyperlinkBase KeyWords Subject Title))
          )
          (if (/= "" (cadr lst))
            (vlax-put SumInfo (car lst) (cadr lst))
          )
          (setq n (1+ n))
        )
        (while (setq line (read-line file))
          (setq lst (str2lst line ";"))
          (or
            (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-AddCustomInfo (list SumInfo (car lst) (read (cadr lst))))))
            (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-SetCustomByKey (list SumInfo (car lst) (read (cadr lst))))))
            (setq i (1+ i))
          )
          (setq n (1+ n))
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        (cons (- n i) n)
      )
    )
  )
  
  (defun OpenDrawingDBX (filename / objdbx release)
    (setq objdbx
      (vlax-create-object
        (if (< (setq release (atoi (getvar "ACADVER"))) 16)
          "ObjectDBX.AxDbDocument"
          (strcat "ObjectDBX.AxDbDocument." (itoa release))
        )
      )
    )
    (vla-open objdbx filename)
    objdbx
  )
  
  (defun GetItem (col name / obj)
    (vl-catch-all-apply
      (function (lambda () (setq obj (vla-item col name))))
    )
    obj
  )
  
  (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)
    )
  )
  ;;; End of definition for local functions
  (if (member (getvar "LOCALE") '("FR" "FRA"))
    (setq lg T)
  )
  (initget "Courant Parcourir Ignorer _Current Browse Skip")
  (setq DWG_file
    (getkword
      (if lg
        "\nVeuillez sélectionner le fichier .dwg source [Courant/Parcourir/Ignorer] <Courant> : "
        "\nPlease select the source .dwg file [Current/Browse/Skip] <Current> : "
      )
    )
  )
  (setq DWG_file
    (cond
      ( (= DWG_file "Browse")
        (getfiled
          (if lg
            "Sélection du fichier .dwg source"
            "Selection of source .dwg file"
          )
          (getvar "DWGPREFIX")
          "dwg;dwt"
          0
        )
      )
      ( (= DWG_file "Skip") nil)
      ((strcat (getvar "DWGPREFIX") (getvar "DWGNAME")))
    )
  )
  (if DWG_file
    (progn
      (initget "Source Parcourir Temporaire _Source Browse Temporary")
      (setq TXT_file
        (getkword
          (if lg
            "\nVeuillez sélectionner le fichier .txt pour l'export [Source/Parcourir/Temporaire] <Source> : "
            "\nPlease select the .txt file for export [Source/Browse/Temporary] <Source> : "
          )
        )
      )
      (setq TXT_file
        (cond
          ( (or (= TXT_file "Source") (null TXT_file))
            (strcat (substr DWG_file 1 (- (strlen DWG_file) 4)) "_ExportSummaryInfo.txt")
          )
          ( (= TXT_file "Browse")
            (getfiled
              (if lg
                "Sélection du fichier .txt d'export"
                "Selection of .txt export file"
              )
              (strcat (substr DWG_file 1 (- (strlen DWG_file) 4)) "_ExportSummaryInfo")
              "txt"
              1
            )
          )
          ( (= TXT_file "Temporary")
            (setq d T)
            (vl-filename-mktemp "MISI.txt")
          )
        )
      )
      (setq Sfolder (getfolder DWG_file))
      (setq Tfolder Sfolder)
      (setq TXT_file (ExportSumInfo DWG_file TXT_file))
    )
    (progn
      (setq TXT_file
        (getfiled
          (if lg
            "Sélection du fichier .txt existant"
            "Selection of existing .txt file"
          )
          (getvar "DWGPREFIX")
          "txt"
          0
        )
      )
      (setq
        Sfolder (cons "..." "...")
        Tfolder (cons (getvar "DWGPREFIX") (getvar "DWGNAME"))
      )
    )
  )
  (if TXT_file
    (while
      (setq filename
        (getfiled
          (if lg
            "Sélection du fichier .dwg cible"
            "Selection of targetted .dwg file"
          )
          (car Tfolder)
          "dwg;dwt"
          0
        )
      )
      (setq Tfolder (getfolder filename))
      (if
        (and
          (/= filename DWG_file)
          (setq r (ImportSumInfo filename TXT_file))
        )
        (princ
          (if lg
            (strcat
              "\n"
              (itoa (car r))
              " / "
              (itoa (cdr r))
              " propriétés du dessin importées avec succès..."
              "\n|   Dessin source : \"" (cdr Sfolder) "\""
              "\n|   Dossier       : \"" (car Sfolder) "\""
              "\n|"
              "\n|   Dessin cible  : \"" (cdr Tfolder) "\""
              "\n|   Dossier       : \"" (car Tfolder) "\""
              "\n|"
              "\n|   Fichier TXT   : \"" TXT_file "\""
              "\n|"
            )
            (strcat
              "\n"
              (itoa (car r))
              " / "
              (itoa (cdr r))
              " drawing properties successfully imported..."
              "\n|   Source drawing : \"" (cdr Sfolder) "\""
              "\n|   Folder         : \"" (car Sfolder) "\""
              "\n|"
              "\n|   Target drawing : \"" (cdr Tfolder) "\""
              "\n|   Folder         : \"" (car Tfolder) "\""
              "\n|"
              "\n|   TXT file used  : \"" TXT_file "\""
              "\n|"
            )
          )
        )
      )
    )
  )
  (if d (vl-file-delete TXT_file))
  (princ)
)

A savoir que si la variable système "LOCALE" est différente de "FR" ou "FRA", le programme (devrait) s'exécuter en anglais mais je n'ai pas testé en vrai...
Si jamais il y a des questions ou autres remarques, je suis dispo et ouverte à toute proposition 😉

Bisous,
Luna

UtFiles . MultipleImportforSummaryInfo.lsp

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Luna,

 

Merci pour ce code qui s'approche de ce que je vise mais il semble que chez moi ça bug.

1/pb:

-Je pointe vers la source (courant ou DWT)

-Je pointe vers .txt (courant ou DWT) > ok

-Je pointe vers le fichier DWG > pb

Au moment où je pointe vers le DWG, il ré-ouvre la même fenêtre constamment.

dans la fenêtre j'ai vu un bouton "situer" sur-lequel j'ai cliqué et je vois affiché

image.png.faead048acc28c483fc21bd6a0ec1c01.png

 

Je ne sais pas si ça peut aider.

 

2/Pour aller plus loin:

-plutôt que de pointer vers un seul fichier .dwg ou autre, je souhaiterais pointer vers un dossier ou un même un serveur pour batch appliquer.

 

Merci pour ton aide

Lien vers le commentaire
Partager sur d’autres sites

@drault,

Comme je l'ai dit précédemment, cela n'est qu'une simple suggestion. Je pense qu'à ce stade, il est préférable d'utiliser SuperAutoScript pour le faire fonctionner sur un ensemble de dessins au lieu d'utiliser le programme LISP que j'ai écrit. De plus, j'ai remarqué que la fonction (OpenDrawingDBX) de (gile) permet de récupérer des informations d'un dessin fermé, mais pas de le modifier donc ce programme ne peut pas exporter des données sur un dessin fermé.

Le programme MISI était un simple exemple, mais mon premier conseil était d'utiliser les fonctions (ExportSumInfo) et (ImportSumInfo) dans un script (ne sachant pas comment fonctionnent les scripts, je ne peux pas t'aider sur ce point...) pour obtenir ce que tu désires.

Travaillant peu sur la gestion des fichiers en masse, mes compétences de programmation dans ce domaine sont également très faibles donc je ne sais pas combien de temps il me faudrait pour corriger cette histoire de .dwg non-ouverts pour l'import.

Pour ce qui est de l'utilisation actuelle du programme, si tu parles de la fenêtre intitulée "Sélection du fichier .dwg cible" qui s'ouvre en boucle, c'est tout à fait normal car comme je l'ai dit précédemment je ne sais pas comment tu voulais sélectionner tes fichiers, donc le seul moyen viable que j'ai trouvé, c'est d'ouvrir une fenêtre de sélection de fichier pour les sélectionner un par un. Si le programme fonctionne correctement, tu devrais avoir un récapitulatif dans ton historique de commande (F2), sinon, merci de me dire qu'elle erreur tu obtiens vraiment dans ton historique de commande. Pour mettre fin à la commande, il suffit de cliquer sur le bouton "Annuler" lors de la sélection du fichier cible.

Si tu regardes bien le code que j'ai posté ci-dessus, j'ai ajouté de nombreux commentaires pour expliquer le fonctionnement du programme (certes en anglais, mais il existe des traducteurs si besoin). Je n'ai pas eut le temps d'aller TROP dans le détails mais de mon point de vue, c'est déjà pas mal :s
Bref, je le répète au cas où : si tu veux plus de liberté dans la sélection des fichiers, je te conseille très fortement d'utiliser uniquement les fonctions (ExportSumInfo) et (ImportSumInfo) car le chemin d'accès complet + nom du fichier .dwg et .txt sont nécessaires en arguments de ces deux fonctions puis de l'intégrer dans SuperAutoScript. Donc tu peux utiliser ton script pour récupérer ces infos 😉

Je remet les bonnes versions de ces fonctions ci-dessous car elles ont légèrement changée depuis le premier post :

  • (ExportSumInfo) - v1.0.0, 17/03/2022
  (defun ExportSumInfo (DWG_file TXT_file / *error* doc SumInfo file n odbx key val)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
      n -1
    )
    (if (setq file (open TXT_file "W"))
      (progn
        (foreach p '(Author Comments HyperlinkBase KeyWords Subject Title)
          (write-line
            (strcat (vl-prin1-to-string p) ";" (vl-prin1-to-string (vlax-get SumInfo p)))
            file
          )
        )
        (write-line "" file)
        (repeat (vla-NumCustomInfo SumInfo)
          (vla-GetCustomByIndex SumInfo (setq n (1+ n)) 'key 'val)
          (write-line
            (strcat key ";" (vl-prin1-to-string val))
            file
          )
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        TXT_file
      )
    )
  )
  • (ImportSumInfo) - v2.0.0, 18/03/2022
  (defun ImportSumInfo (DWG_file TXT_file / *error* doc SumInfo n i file odbx line lst)
    (defun *error* (msg)
      (if file (close file))
      (and odbx (vlax-release-object doc))
      (princ msg)
    )
    (cond
      ( (null DWG_file)
        (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
      )
      ( (not
          (and
            (setq doc
              (GetItem
                (vla-get-Documents (vlax-get-acad-object))
                (strcat (vl-filename-base DWG_file) ".dwg")
              )
            )
            (= DWG_file (vla-get-FullName doc))
          )
        )
        (setq
          doc (OpenDrawingDBX DWG_file)
          odbx T
        )
      )
    )
    (setq
      SumInfo (vla-get-SummaryInfo doc)
      n 0
      i 0
    )
    (if (setq file (open TXT_file "R"))
      (progn
        (while
          (and
            (setq line (read-line file))
            (setq lst (mapcar 'read (str2lst line ";")))
            (member (car lst) '(Author Comments HyperlinkBase KeyWords Subject Title))
          )
          (if (/= "" (cadr lst))
            (vlax-put SumInfo (car lst) (cadr lst))
          )
          (setq n (1+ n))
        )
        (while (setq line (read-line file))
          (setq lst (str2lst line ";"))
          (or
            (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-AddCustomInfo (list SumInfo (car lst) (read (cadr lst))))))
            (not (vl-catch-all-error-p (vl-catch-all-apply 'vla-SetCustomByKey (list SumInfo (car lst) (read (cadr lst))))))
            (setq i (1+ i))
          )
          (setq n (1+ n))
        )
        (setq file (close file))
        (and odbx (vlax-release-object doc))
        (cons (- n i) n)
      )
    )
  )
  • Fonctions complémentaires pour ces fonctions : (GetItem), (OpenDrawingDBX) et (str2lst)
  (defun OpenDrawingDBX (filename / objdbx release)
    (setq objdbx
      (vlax-create-object
        (if (< (setq release (atoi (getvar "ACADVER"))) 16)
          "ObjectDBX.AxDbDocument"
          (strcat "ObjectDBX.AxDbDocument." (itoa release))
        )
      )
    )
    (vla-open objdbx filename)
    objdbx
  )
  
  (defun GetItem (col name / obj)
    (vl-catch-all-apply
      (function (lambda () (setq obj (vla-item col name))))
    )
    obj
  )
  
  (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)
    )
  )

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

@Luna

Merci pour ton récap.

Effectivement l'erreur venait de moi. Effectivement il faut que j'ouvre les fichiers et j'avais mal compris.

L'anglais c'est ok pour moi.

Le codage pas du tout ok pour moi. J'espère avoir le temps d'apprendre cet été.

Ton script m'aide beaucoup mais ne fonctionne pas avec autoscript.

 

Je vais réfléchir à comment je peux aller plus loin avec ton aide déjà si importante.

Merci

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é