api-issue-tracker icon indicating copy to clipboard operation
api-issue-tracker copied to clipboard

Transaction events depend on order of attaching to model.

Open prachtan opened this issue 7 years ago • 5 comments

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

prachtan avatar Jan 03 '18 14:01 prachtan