Bonjour à tous
Ce message est malheureusement bien connu
Starting a new transaction is not permitted. It could be because another transaction already started and has not been completed yet, or the document is in a state in which it cannot start a new transaction (e.g. during failure handling or a read-only mode, which could be either permanent or temporary).
Dans mon cas, le script est assez simple, je décale tous les types d’une famille d’une certaine hauteur.
import clr
clr.AddReference('ProtoGeometry')
clr.AddReference('DSCoreNodes')
clr.AddReference('RevitAPI')
import System
clr.AddReference('System.Core')
from DSCore import *
from Autodesk.DesignScript.Geometry import *
from Autodesk.Revit.DB import*
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc=DocumentManager.Instance.CurrentDBDocument
bulles = UnwrapElement(IN[0])
niveaux=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()
cvs=1/0.3048 #métrique/impérial
bon_niveau=0
nombre_bulles_traitees=0
t=Transaction(doc,'Correction niveau bulle')
t.Start()
for bulle in bulles:
delta=10000
for niveau in niveaux:
if niveau.Elevation!=0:
difference_niveau_bulle=bulle.LookupParameter("Décalage par rapport à l'hôte").AsDouble()/cvs-niveau.Elevation/cvs
if difference_niveau_bulle<delta and difference_niveau_bulle>=0:
delta=difference_niveau_bulle
bon_niveau=niveau.Elevation
#on a trouvé le niveau le plus proche
if bon_niveau!= 0:
bulle.LookupParameter("Décalage par rapport à l'hôte").Set(bon_niveau+1.2*cvs)
nombre_bulles_traitees+=1
t.Commit()
OUT=str(nombre_bulles_traitees)+" bulles modifiées sur "+str(len(bulles))
Auriez-vous une idée ?