hello @ramoon.bandeira
you are missing the instance of the class on the method (self), suddenly a parameter is missing from the PreprocessFailures fonction (method)
2 examples of classes with a double wall creation
class DuplicateMarkSwallower(IFailuresPreprocessor):
def PreprocessFailures(self, a):
failures = a.GetFailureMessages()
for f in failures:
id = f.GetFailureDefinitionId()
if BuiltInFailures.OverlapFailures.WallsOverlap == id:
a.DeleteWarning(f)
return FailureProcessingResult.Continue
class CreateFailureAdvancedHandler(IFailuresPreprocessor):
def PreprocessFailures(self, failuresAccessor):
failMessages = failuresAccessor.GetFailureMessages()
if failMessages.Count == 0:
return FailureProcessingResult.Continue
transName = failuresAccessor.GetTransactionName()
if transName == "Wall Create Operation":
if failuresAccessor.GetSeverity() == FailureSeverity.Warning:
for currentMessage in failMessages:
failuresAccessor.DeleteWarning(currentMessage)
return FailureProcessingResult.Continue
level = UnwrapElement(IN[1])
TransactionManager.Instance.ForceCloseTransaction()
with Transaction(doc) as t:
t.Start("Wall Create Operation")
failureOptions = t.GetFailureHandlingOptions()
failureOptions.SetFailuresPreprocessor(CreateFailureAdvancedHandler())
#OR exemple with GetFailureDefinitionId()
#failureOptions.SetFailuresPreprocessor(DuplicateMarkSwallower())
t.SetFailureHandlingOptions(failureOptions)
#
#
line = Line.CreateBound(XYZ.Zero, 10 * XYZ.BasisX)
for i in range(0,2):
wall = Wall.Create(doc, line, level.Id, False)
#
#
t.Commit()