api-issue-tracker
api-issue-tracker copied to clipboard
Transaction events depend on order of attaching to model.
Sketchup API: Ruby
Bug Report
Sketchup: 2017 / 2018 Platform: Windows 10 x64
Observers callbacks are triggered in wrong order (depends on order of attaching).
class CSingleObserver
def onTransactionStart(model)
puts "\nSingleObserver::onTransactionStart"
end
def onTransactionCommit(model)
puts "SingleObserver::onTransactionCommit"
end
def onElementAdded(entities, entity)
puts "SingleObserver::onElementAdded: #{entity}"
end
def onElementModified(entities, entity)
puts "SingleObserver::onElementModified: #{entity}"
end
def onElementRemoved(entities, entity_id)
puts "SingleObserver::onElementRemoved: #{entity_id}"
end
end
#1: Observers order:
model = Sketchup.active_model
# "Normal" order - first entities then model.
model.entities.add_observer(@@singleObserver)
model.add_observer(@@singleObserver)
will give correct order of events (select and move component):
ModelObserver Issue - Single Normal
SingleObserver::onTransactionStart SingleObserver::onElementModified: #Sketchup::ComponentDefinition:0x0001f658b6cad8 SingleObserver::onTransactionCommit
SingleObserver::onTransactionStart SingleObserver::onElementModified: #Sketchup::ComponentInstance:0x0001f658d14f70 SingleObserver::onTransactionCommit
SingleObserver::onTransactionStart SingleObserver::onElementModified: #Sketchup::AttributeDictionary:0x0001f6455cb830 SingleObserver::onTransactionCommit
#2: Inverted observers order:
model = Sketchup.active_model
# Inverted order - first model, then entities.
model.add_observer(@@singleObserver)
model.entities.add_observer(@@singleObserver)
ModelObserver Issue - Single Inverted
SingleObserver::onTransactionStart SingleObserver::onTransactionCommit SingleObserver::onElementModified: #Sketchup::ComponentInstance:0x0001f658d14f70
SingleObserver::onTransactionStart SingleObserver::onTransactionCommit SingleObserver::onElementModified: #Sketchup::AttributeDictionary:0x0001f6455cb830
onElementModified occurred outside transactionStart / transactionCommit area, and there is no onElementModified::ComponentDefinition during select and move.
Simple plugin: transaction_issue.zip