Rhino C++ API  8.14
Classes | Public Member Functions | List of all members
CRhinoDisplayModeChanged Class Referenceabstract

#include <rhinoSdkEventWatcher.h>

Inheritance diagram for CRhinoDisplayModeChanged:
CRhinoEventWatcherEx

Classes

class  CParameters
 

Public Member Functions

 CRhinoDisplayModeChanged (ON_UUID plugin_id)
 
 CRhinoDisplayModeChanged (ON_UUID plugin_id, bool headlessDocAware, bool headlessAppAware)
 
virtual void Notify (const class CRhinoDisplayModeChanged::CParameters &params)=0
 
- Public Member Functions inherited from CRhinoEventWatcherEx
void Enable (bool bEnable)
 
bool IsEnabled () const
 
bool IsHeadlessAppAware () const
 
bool IsHeadlessDocAware () const
 
bool IsRegistered () const
 
void operator delete (void *)
 
void operator delete (void *, void *)
 
void operator delete[] (void *)
 
void * operator new (size_t)
 new/delete More...
 
void * operator new (size_t, void *)
 in place new/delete More...
 
void * operator new[] (size_t)
 array new/delete More...
 
bool Register ()
 
bool Unregister ()
 

Additional Inherited Members

- Public Types inherited from CRhinoEventWatcherEx
enum  event_type {
  event_type_none = 0, event_type_transform_object = 1, event_type_change_object_select_state = 2, event_type_after_transform_object = 3,
  event_type_set_active_detail_object = 4, event_type_view_display_mode_changed = 5, event_type_before_post_read_view_update = 6, event_type_after_post_read_view_update = 7,
  event_type_rhino_is_idle = 8, event_type_modeless_ui_doc_changed = 9, event_type_target_doc_changed = 10, event_type_plug_in_settings_changed = 11,
  event_type_rui_file = 12, event_type_main_loop = 13, event_type_view_modified = 14, event_type_doc_user_text_changed = 15,
  event_type_display_mode_settings_changed = 16, event_type_object_manager_changed = 17, event_type_pageview_properties_changed = 18, event_type_getpoint_event = 19,
  event_type_max, event_type_force_4byte_size = 0xFFFFFFFF
}
 
- Public Attributes inherited from CRhinoEventWatcherEx
const event_type m_event_type
 Type of event being watched. More...
 
const ON_UUID m_plugin_id
 ID of plug-in that is watching. More...
 
const unsigned int m_watcher_sn
 unique runtime serial number for this watcher More...
 
- Protected Member Functions inherited from CRhinoEventWatcherEx
 CRhinoEventWatcherEx (CRhinoEventWatcherEx::event_type et, ON_UUID plugin_id)
 
 CRhinoEventWatcherEx (CRhinoEventWatcherEx::event_type et, ON_UUID plugin_id, bool headlessDocAware, bool headlessAppAware)
 
virtual ~CRhinoEventWatcherEx ()
 

Constructor & Destructor Documentation

◆ CRhinoDisplayModeChanged() [1/2]

CRhinoDisplayModeChanged::CRhinoDisplayModeChanged ( ON_UUID  plugin_id)

◆ CRhinoDisplayModeChanged() [2/2]

CRhinoDisplayModeChanged::CRhinoDisplayModeChanged ( ON_UUID  plugin_id,
bool  headlessDocAware,
bool  headlessAppAware 
)

Member Function Documentation

◆ Notify()

virtual void CRhinoDisplayModeChanged::Notify ( const class CRhinoDisplayModeChanged::CParameters params)
pure virtual

Rhino will call Notify() immediately after changing the view's display mode. WARNING: Never modify the Rhino document or application state in a Notify override. Never attempt to change the view's (or any other view) display mode inside your Notify routine, or you will eventually crash Rhino.

Rhino will also call Notify() whenever a display mode's attributes change, so do NOT attempt to change any display attributes (ala CRhinoDisplayAttrsMgr) inside your Notify routine, or you may experience undefined behavior...

There are three different states that can be observed using the notifier...

1) A view's display mode has been set. 2) The attributes of the display mode used by the active view have changed. 3) The attributes of a specific display mode have changed.

...all three can be determined using the CParameters:

1) If ( (params.m_vp != NULL) && (params.m_changed_display_mode_id != params.m_old_display_mode_id) ) then m_vp's display mode has just been set/changed.

2) If ( (params.m_vp != NULL) && (params.m_changed_display_mode_id == params.m_old_display_mode_id) ) then the attributes of the display mode used by the ACTIVE viewport have changed.

3) If ( (params.m_vp == NULL) && (params.m_old_display_mode_id == ON_nil_uuid) ) then the attributes of the display mode specified by params.m_changed_display_mode_id have changed (i.e. no viewport involved whatsoever).

...any other combinations of params are not yet determined. The differences are subtle, but each condition can require completely different processing depending on the use of the notifier.

Note: If you need to check against a specific CRhinoView (i.e. the active view), then you will need to get it from params.m_vp, like so:

CRhinoView*  view = params.m_vp ? params.m_vp->ParentView() : NULL;

...there will be cases where viewports are not attached to views, so you'll need to handle those as well.

Note2: You cannot just assume that if (view == RhinoApp().ActiveView()) then the active view's display mode changed. Likewise, you cannot assume that if (view != RhinoApp().ActiveView()) then only the attributes have changed...you must look at each CParameters value in order to determine specific conditions.