class ActionGroup(): def __init__(self, name=None, assimilate=True): self._rvt_transaction_group = TransactionGroup( self.doc, name if name else DEFAULT_TRANSACTION_NAME) self.assimilate = assimilate def __enter__(self): self._rvt_transaction_group.Start() return self def __exit__(self, exception, exception_value, traceback): if exception: self._rvt_transaction_group.RollBack() logger.error('Error in TransactionGroup Context: has rolled back.') logger.error('{}:{}'.format(exception, exception_value)) else: try: if self.assimilate: self._rvt_transaction_group.Assimilate() else: self._rvt_transaction_group.Commit() except Exception as errmsg: self._rvt_transaction_group.RollBack() logger.error( 'Error in TransactionGroup Commit: has rolled back.') logger.error('Error: {}'.format(errmsg)) @property def name(self): return self._rvt_transaction_group.GetName() @name.setter def name(self, new_name): return self._rvt_transaction_group.SetName(new_name) @property def status(self): return ActionStatus.from_rvt_trans_stat( self._rvt_transaction_group.GetStatus()) def has_started(self): return self._rvt_transaction_group.HasStarted() def has_ended(self): return self._rvt_transaction_group.HasEnded()
class ActionGroup: def __init__(self, name=None, assimilate=True): self.transaction_group = TransactionGroup(doc, name if name else DEFAULT_TRANSACTION_NAME) self.assimilate = assimilate def __enter__(self): self.transaction_group.Start() return self.transaction_group def __exit__(self, exception, exception_value, traceback): if exception: self.transaction_group.RollBack() logger.error('Error in TransactionGroup Context: has rolled back.') logger.error('{}:{}'.format(exception, exception_value)) else: try: if self.assimilate: self.transaction_group.Assimilate() else: self.transaction_group.Commit() except Exception as errmsg: self.transaction_group.RollBack() logger.error('Error in TransactionGroup Commit: has rolled back.') logger.error('Error: {}'.format(errmsg))
selection = [ doc.GetElement(elId) for elId in __revit__.ActiveUIDocument.Selection.GetElementIds() ] tg = TransactionGroup(doc, "Search for linked elements") tg.Start() locLineValues = { 'Wall Centerline': 0, 'Core Centerline': 1, 'Finish Face: Exterior': 2, 'Finish Face: Interior': 3, 'Core Face: Exterior': 4, 'Core Face: Interior': 5, } for el in selection: if isinstance(el, Wall): param = el.LookupParameter('Location Line') with Transaction(doc, 'Change Wall Location Line') as t: t.Start() param.Set(locLineValues['Core Centerline']) t.Commit() with Transaction(doc, 'Flip Selected Wall') as t: t.Start() el.Flip() param.Set(locLineValues['Core Face: Exterior']) t.Commit() tg.Commit()