14 mars 2020

[Python] des Infos sur les fichiers Revit sans Revit...




Connaître certaines informations comme la version d'un fichier Revit avant de l'ouvrir peut s'avérer particulièrement utile (Rétrocompatibilité)

Les fichiers Autodesk Revit renferme un stockage structuré COM,  aussi connu sous le nom de OLE structured storage.
Dans cette structure on y retrouve notamment les données concernant les informations du fichier Revit "BasicFileInfo"

Arborescence OLE d'un fichier Revit


Depuis les versions 2019-2020 la structure/contenu du fichier BasicFileInfo a quelque peu changé, ce qui permet notamment à Revit 2020 d'afficher la version du fichier au moment de la sélection de celui-ci avant de charger le projet.


Mais on peut également, sans passer par Revit, lire ces données grâce à des librairies comme le module olefile (Python)

import os
import os.path as op
import olefile
import re

def get_rvt_file_version(rvt_file):
    if op.exists(rvt_file):
        if olefile.isOleFile(rvt_file):
            rvt_ole = olefile.OleFileIO(rvt_file)
            bfiLe = rvt_ole.openstream("BasicFileInfo")
            file_infoLe = bfiLe.read().decode("utf-16le", "ignore")
            bfiBe = rvt_ole.openstream("BasicFileInfo")
            file_infoBe = bfiBe.read().decode("utf-16be", "ignore")
            file_info = file_infoBe if "਀" in file_infoLe else file_infoLe
            print(file_info)
            if "Format" in file_info:
                rvt_file_version = re.search(r"Format.+?(\d{4})", file_info).group(1)
            else:
                rvt_file_version = re.search(r"(\d{4}).+Build", file_info).group(1)
            return rvt_file_version


# usage
print(get_rvt_file_version("D:\\myProject.rvt"))
Pour ceux qui n'auraient pas Python d'installé sur leur PC, voici un lien vers une version executable avec affichage de la version et autres informations liées au fichier.
Note : il s'agit ici de l'interpréteur Python 3.x et pas d’Ironpython sous Dynamo 


Utilitaire RvtCheckVersion
https://github.com/Cyril-Pop/Python-checkRvtVersion/releases

0 commentaires:

Enregistrer un commentaire