Retrouver les éléments d'un rapport d'avertissement avec l'assembly mshtml
Exemple avec un cas d'usage.
Si vous travaillez avec des maquettes liées et des Familles avec hôte par
face, lorsque vous recevrez une maquette architecte mise à jour, il se peut
que vous ayez cette alerte.
Exemple où l'architecte a supprimé un mur |
Dans ce contexte il est recommandé d'exporter le rapport, car une fois la
fenêtre fermée, il sera plus difficile de retrouver les éléments associés à
ce rapport.
Un autre cas d'usage est celui d'utiliser des éléments contrôlés depuis une
maquette liée lorsque celle ci est modifiée.
À savoir que tous les types avertissements ne sont pas systématiquement
sauvegardés dans le gestionnaire d'avertissement (Revit applique une
correction).
import clr
import re
import codecs
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
clr.AddReferenceByName(r'Microsoft.mshtml, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a')
import mshtml
from mshtml import HTMLDocumentClass
filepath = IN[0]
out = []
if sdkNumber < 2020:
with open(filepath, 'r') as f:
htmltoparse = f.read()
else:
with codecs.open(filepath, 'r', 'utf-16') as f:
htmltoparse = f.read()
htmlDocument = HTMLDocumentClass()
htmlDocument.write(htmltoparse)
allElements = htmlDocument.body.all
lstWarning = allElements.tags("tr")
for warn in lstWarning:
warncont = warn.innerText
stringIdR = re.search(r'ID.+?(d.+)' , warncont)
if stringIdR is not None:
elemId = ElementId(int(stringIdR.group(1)))
elem = doc.GetElement(elemId)
out.append([ warncont, elem])
htmlDocument.close()
OUT = out
Aperçu en vidéo
Note
si vous souhaitez utiliser mshtml avec le moteur CPython3 +
PythonNet, il faudra obligatoirement caster toute vos variables
voici une comparaison entre les 2 moteurs :
0 commentaires:
Enregistrer un commentaire