Bonjour,
Essaie avec le code python ci-dessous:
#!/usr/bin/python
# encoding: utf-8
try:
uiapp = __revit__
doc = uiapp.ActiveUIDocument.Document
app = uiapp.Application
uidoc = uiapp.ActiveUIDocument
except:
import clr
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
clr.AddReference('System')
from System.Collections.Generic import List
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument
from Autodesk.Revit.DB import FilteredElementCollector, LinePatternElement
from Autodesk.Revit.UI import TaskDialog
from Autodesk.Revit import DB
__doc__ = """Purge les motifs de lignes inutilisés."""
__title__ = """Purge
Motifs Lignes"""
__author__ = "Florian Félix-Emery"
__persistentengine__ = True
# Paramètres globaux pour purger les styles de lignes
modifiedByDeleteLinePattern = 0
checkForPurgeLinePatterns = False
_doc = None
patternName = ""
#------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------
# Purge les styles de lignes inutilisés du documents
#------------------------------------------------------------------------------------------------------------------------------
def purgeMotifsLignes(doc, value):
global modifiedByDeleteLinePattern, checkForPurgeLinePatterns, _doc, patternName
_doc = doc
app = doc.Application
app.DocumentChanged += documentChanged_PurgeLigneStyle
lp = FilteredElementCollector(doc).OfClass(LinePatternElement).ToElements()
deletedMaterials = ""
unusedMaterialCount = 0
for pattern in lp:
modifiedByDeleteLinePattern = 0
patternName = pattern.Name + " (id " + str(pattern.Id) + ")"
#print (patternName)
with DB.TransactionGroup(doc, "Purge des motifs de lignes: " + patternName) as tg:
tg.Start()
with DB.Transaction(doc, "Purge de motifs de lignes") as t:
t.Start()
checkForPurgeLinePatterns = True
doc.Delete(pattern.Id)
t.Commit() # valider la transaction pour déclencher l'événement DocumentChanged
checkForPurgeLinePatterns = False
if modifiedByDeleteLinePattern == value:
unusedMaterialCount += 1
deletedMaterials += patternName + "\n"
tg.Assimilate()
else: # revenir sur le groupe de transactions pour annuler la suppression
tg.RollBack()
td = TaskDialog("Info")
td.Title = "Purge de motifs de lignes"
td.MainInstruction = str(unusedMaterialCount) + " motifs de lignes supprimés"
td.MainContent = deletedMaterials
td.Show()
app.DocumentChanged -= documentChanged_PurgeLigneStyle
#------------------------------------------------------------------------------------------------------------------------------
#------------------------------------------------------------------------------------------------------------------------------
# Déclencheur d'évenement lorsque le document est modifié
#------------------------------------------------------------------------------------------------------------------------------
def documentChanged_PurgeLigneStyle(sender, e):
global checkForPurgeLinePatterns, modifiedByDeleteLinePattern, _doc, patternName
if not checkForPurgeLinePatterns:# ne pas vérifier lors du retour en arrière du groupe de transactions
return
deleted = e.GetDeletedElementIds()
modified = e.GetModifiedElementIds()
if "IMPORT" in patternName:
print (modified)
for id in modified:
print (doc.GetElement(id))
print (id)
modifiedByDeleteLinePattern = len(deleted) + len(modified)
#------------------------------------------------------------------------------------------------------------------------------
with DB.TransactionGroup(doc, "Purge des motifs de lignes") as tgroup:
tgroup.Start()
purgeMotifsLignes(doc, 1)
tgroup.Assimilate()
Il devrait fonctionner avec dynamo ou pyRevit. Pour l'utiliser dans dynamo, il suffit de le coller dans un noeud "Python script" et de lancer l'exécution du fichier dynamo.