import clr
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
walls = UnwrapElement(IN[0])
w_curves = IN[1]
OUT = []
class SKetchWarningSwallower(IFailuresPreprocessor):
def PreprocessFailures(self, failuresAccessor):
# Get all failure messages
fail_list = failuresAccessor.GetFailureMessages()
for failure in fail_list:
fail_id = failure.GetFailureDefinitionId()
# Check for Room Not Enclosed warning
if fail_id == BuiltInFailures.SketchFailiures.OpenLoop:
failuresAccessor.DeleteWarning(failure)
return FailureProcessingResult.Continue
for wall, curves in zip(walls, w_curves):
# Ensure sketch exists
if wall.SketchId == ElementId.InvalidElementId:
TransactionManager.Instance.EnsureInTransaction(doc)
sketch = wall.CreateProfileSketch()
TransactionManager.Instance.TransactionTaskDone()
else:
sketch_id = wall.SketchId
sketch = doc.GetElement(sketch_id)
# Start SketchEditScope
ses = SketchEditScope(doc, "Edit Wall Profile")
ses.Start(sketch.Id)
TransactionManager.Instance.EnsureInTransaction(doc)
# ✅ Correct way: delete all elements inside sketch
for eid in sketch.Profile:
for c in eid:
doc.Delete(c.Reference.ElementId)
# Create new curves
plane = sketch.SketchPlane
for c in curves:
rc = c.ToRevitType()
doc.Create.NewModelCurve(rc, plane)
TransactionManager.Instance.TransactionTaskDone()
# Commit sketch edit
ses.Commit(SKetchWarningSwallower())
OUT.append(wall)
I am trying to use this code to update my wall profiles which do not have profiles currently. But I am getting error at ses.Commit() line. Not sure how to resolve this. Can anyone please guide?

