State of Google SketchUp's Observers

18 August 2011

This is an attempt to map the availability, bugs and issues with SketchUp's observer system. Data is gathered from personal testing and from information on the internet such as SketchUcation. All observers has not been tested equally in depth, nor has all been tested on both platforms.

Please contact me if you can provide more information on this topic.

Table of Content

Chart of Observer Issues in Google SketchUp
AppObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onNewModel Working Working Working Working Working
onOpenModel Working Working Working Working Working
onQuit Working Working Working Working Working
onUnloadExtension Didn't Exist Working Working Working Working
DefinitionObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onComponentInstanceAdded Doesn't Trigger Doesn't Trigger Doesn't Trigger Mistrigger Mistrigger
onComponentInstanceRemoved Doesn't Trigger Doesn't Trigger Doesn't Trigger Mistrigger Mistrigger
DefinitionsObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onComponentAdded Working Working Working Working Working
onComponentPropertiesChanged Mistrigger Mistrigger Mistrigger Mistrigger Mistrigger
onComponentRemoved Working Working Mistrigger Mistrigger Mistrigger
onComponentTypeChanged Working Working Working Working Working
EntitiesObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onContentsModified Doesn't Trigger Doesn't Trigger Doesn't Trigger Deprecated Deprecated
onElementAdded Working Working Working Working Working
onElementModified Didn't Exist Didn't Exist Didn't Exist Working Working
onElementRemoved Can Crash Can Crash Can Crash Working Working
onEraseEntities ? ? ? ? ?
EntityObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onChangeEntity Can Crash, Mistrigger Can Crash, Mistrigger Mistrigger Mistrigger Mistrigger
onEraseEntity Can Crash, Bugged Can Crash, Bugged Bugged Bugged Bugged
FrameChangeObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
frameChange Bugged under Windows Bugged under Windows Bugged under Windows Bugged under Windows Bugged under Windows
InstanceObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onClose Working Doesn't Trigger Doesn't Trigger Can Crash under OSX Can Crash under OSX
onOpen Working Working Working Can Crash under OSX Can Crash under OSX
LayersObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onCurrentLayerChanged Mistrigger Mistrigger Mistrigger Mistrigger Mistrigger
onLayerAdded Working Working Working Working Working
onLayerRemoved Working Working Working Working Working
onRemoveAllLayers ? ? ? ? ?
MaterialsObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onMaterialAdd Working Working Working Working Working
onMaterialRefChange Working Working Working Mistrigger Mistrigger
onMaterialSetCurrent Bugged under OSX Bugged under OSX Bugged under OSX Working Working
onMaterialChange Doesn't Trigger Doesn't Trigger Working Working Working
onMaterialRemove Working Working Working Working Working
onMaterialRemoveAll Mistrigger Mistrigger Mistrigger Deprecated Deprecated
onMaterialUndoRedo Doesn't Trigger Doesn't Trigger Doesn't Trigger Working Working
ModelObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onActivePathChanged Didn't Exist Working Working Working Working
onAfterComponentSaveAs Didn't Exist Working Working Working Working
onDeleteModel ? ? ? ? ?
onEraseAll ? ? ? ? ?
onExplode Didn't Exist Working Working Working Working
onPlaceComponent Didn't Exist Working Working Working Working
onPostSaveModel Didn't Exist Didn't Exist Didn't Exist Working Working
onPreSaveModel Didn't Exist Didn't Exist Didn't Exist Working Working
onSaveModel Mistrigger Mistrigger Mistrigger Working Working
onTransactionAbort Working Working Working Working Working
onTransactionCommit Mistrigger Mistrigger Mistrigger Mistrigger Mistrigger
onTransactionEmpty Working Working Working Working Working
onTransactionRedo Working Working Working Working Working
onTransactionStart Mistrigger Mistrigger Mistrigger Mistrigger Mistrigger
onTransactionUndo Working Working Working Working Working
OptionsProviderObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onOptionsProviderChanged Working Working Working Working Working
PagesObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onContentsModified Working Working Working Working Working
onElementAdded Working Working Working Working Working
onElementRemoved Working Working Working Working Working
RenderingOptionsObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onRenderingOptionsChanged Working Working Working Working Working
SelectionObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onSelectionAdded Doesn't Trigger Doesn't Trigger Doesn't Trigger Doesn't Trigger Doesn't Trigger
onSelectionBulkChange Mistrigger Mistrigger Mistrigger Mistrigger Mistrigger
onSelectionCleared Doesn't Trigger Doesn't Trigger Doesn't Trigger Doesn't Trigger Doesn't Trigger
onSelectionRemoved Working Working Working Working Working
ShadowInfoObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onShadowInfoChanged Working Working Working Working Working
ToolsObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onActiveToolChanged Bugged under OSX Bugged under OSX Working Working Working
onToolStateChanged Bugged under OSX Bugged under OSX Working Working Working
ViewObserver SketchUp 6 SketchUp 7.0 SketchUp 7.1 SketchUp 8.0 SketchUp 8.0 M1
onViewChanged Working Working Working Working Working

Notes

DefinitionObserver.onComponentInstanceAdded — SketchUp 8.0+
DefinitionObserver.onComponentInstanceRemoved — SketchUp 8.0+

When the user performs a Copy+Move the events triggers unexpectantly.

  • User activates Move Tool on an instance of #<Sketchup::ComponentDefinition:0xa8d2b24>
  • User press Ctrl to activate copy modifier
  • onComponentInstanceAdded:[#<Sketchup::ComponentDefinition:0xa8d2b24>, #<Sketchup::ComponentInstance:0xa77d058>]
  • User complete the Move+Copy operation
  • onComponentInstanceAdded:[#<Sketchup::ComponentDefinition:0xa770b3c>, #<Sketchup::ComponentInstance:0xa770b50>]
  • onComponentInstanceRemoved:[#<Sketchup::ComponentDefinition:0xa770b3c>, #<Sketchup::ComponentInstance:0xa770b50>]

Even though only one instance is added the event triggers multiple times. Notice that the two last events refer to a non-existant definition.

DefinitionsObserver.onComponentPropertiesChanged — SketchUp 6.0+

There are several issues with this event's behaviour and the API documentation's description:

  • Mistriggers before onComponentAdded.
  • Triggers on name change, but not on description change.
  • Manual says it should trigger when a definition's property changes, but changing Glue To, Cut Opening, Face Camera does not trigger the event.
DefinitionsObserver.onComponentRemoved — SketchUp 7.1+

There are several issues with this event's behaviour and the API documentation's description:

  • Triggers twice when a definition is removed. (Group erased or Components purged.)
  • Triggers when the user performs a Move+Copy, reference a non-existant definition.
EntityObserver.onChangeEntity — SketchUp 6.0+
EntityObserver.onEraseEntity — SketchUp 6.0+
  • EntityObserver.onChangeEntity mistriggers right before EntityObserver.onEraseEntity, referencing a non-existant entity.
  • EntityObserver.onEraseEntity reference a non-existant entity.
EntitiesObserver.onContentsModified — SketchUp 8.0+

As of SU8.0 this event was renamed to EntitiesObserver.onElementModified and changed to provide two aguments. Release Notes

FrameChangeObserver.frameChange — SketchUp 6.0+

Only mentioned in the documentation for the Pages class. And it does not have an interface class one can inherit from.


class Test_FrameChangeObserver
  def frameChange( fromPage, toPage, percent_done )
    puts "#{fromPage} - #{toPage} - #{percent_done}"
  end
end
Sketchup::Pages.add_frame_change_observer(Test_FrameChangeObserver.new)
    

Note from the API docs:

In SketchUp 6 and 7, the fromPage argument into the callback does not appear to be populated on the PC. You can store a variable that keeps track of the toPage and then use that on a subsequent Scene selection to determine the last Page that the user was on.
InstanceObserver — SketchUp 8.0+

Under OSX, when using this observer SketchUp will crash when the user quits SketchUp without saving the model first. Quiting and then choosing to save will also cause crash.

SketchUp under Windows does not suffer from this.

ModelObserver.onSaveModel — SketchUp 6.0 – 7.1

This event mistriggers when the user initiate Save As and then cancels the operation.

ModelObserver.onTransactionStart — SketchUp 6.0+
ModelObserver.onTransactionCommit — SketchUp 6.0+

These event mistriggers between the model.start_operation and model.commit_operation every time the model changes instead of being in sync with model.start/commit_operation.

Because of this it is not possible to be notified when a new item appears in the undo stack.

LayersObserver.onCurrentLayerChanged — SketchUp 6.0+

Renaming the current layer will also trigger this event. Renaming any other layers does not trigger this event.

MaterialsObserver.onMaterialRefChange — SketchUp 8.0+

When purging materials, or right-clicking a material in the Material Browser, this event triggers one time for every entity with a material. This causes a long series of events to trigger unnecessarily.

MaterialsObserver.onMaterialSetCurrent — SketchUp 6.0 – 7.1

Under OSX, this event will trigger when the user paints something in the model, as oppose to under Windows when it trigger as the user picks a new material.

MaterialsObserver.onMaterialRemoveAll — SketchUp 6.0 – 7.1

In SketchUp prior to 8.0 this event triggers at other material events, even for the non-triggering materials events.

As of SketchUp 8.0 this event id deprecated.

SelectionObserver — SketchUp 8.0+

onSelectionBulkChange triggers instead of onSelectionAdded and onSelectionRemoved.

Release notes of SketchUp 8.0 claims the events where fixed, but this appear to not be the case.

ToolsObserver.onActiveToolChanged — SketchUp 6.0 – 7.0
ToolsObserver.onToolStateChanged — SketchUp 6.0 – 7.0
Note from the API docs:
In SketchUp 6 and SketchUp 7.0, tool names on the Mac have some of their first characters truncated. For instance, on Windows, a tool is "CameraOrbit". On the Mac, is comes across as "raOrbit". Therefore, use the tool_id to keep track of which tool you need to watch for, or use logic that corrects for the error.