← Back to team overview

kicad-developers team mailing list archive

Re: UI only updates on mouse move

 

Hi Markus,

I assume NL_3D_VIEWER_PLUGIN_IMPL is all your custom code as it doesn't
exist in KiCad's codebase.

Refreshing the display is a separate action that can be called when needed.
Some of the other actions do the refresh for you, but some do not.

It looks like you can send a EDA_3D_CONTROLLER::ZoomRedraw event to do the
refresh on the 3D viewer canvas

Best,
Jon

On Thu, Mar 25, 2021 at 10:32 AM Markus Bonk <markus_bonk@xxxxxxxxxxxxxxx>
wrote:

> Hi,
>
>
>
> I am calling the following code:
>
>
>
> long NL_3D_VIEWER_PLUGIN_IMPL::SetActiveCommand( std::string commandId )
>
> {
>
>     if( commandId.empty() )
>
>     {
>
>         return 0;
>
>     }
>
>
>
>     std::list<TOOL_ACTION*> actions = ACTION_MANAGER::GetActionList();
>
>     TOOL_ACTION*            context = nullptr;
>
>
>
>     for( std::list<TOOL_ACTION*>::const_iterator it = actions.begin(); it
> != actions.end(); it++ )
>
>     {
>
>         TOOL_ACTION* action = *it;
>
>         std::string  nm = action->GetName();
>
>
>
>         if( commandId == nm )
>
>         {
>
>             context = action;
>
>         }
>
>     }
>
>
>
>     if( context != nullptr )
>
>     {
>
>         wxWindow* parent = m_viewport3D->GetParent();
>
>
>
>         // Only allow command execution if the window is enabled. i.e.
> there is not a modal dialog
>
>         // currently active.
>
>         if( parent->IsEnabled() )
>
>         {
>
>             TOOL_MANAGER* tool_manager = static_cast<PCB_BASE_FRAME*>(
> parent )->GetToolManager();
>
>
>
>             if( tool_manager == nullptr )
>
>             {
>
>                 return navlib::make_result_code( navlib::navlib_errc::
> invalid_operation );
>
>             }
>
>
>
>             // Get the selection to use to test if the action is enabled
>
>             SELECTION& sel =
> tool_manager->GetToolHolder()->GetCurrentSelection();
>
>
>
>             bool runAction = true;
>
>
>
>             if( const ACTION_CONDITIONS* aCond =
>
>                         tool_manager->GetActionManager()->GetCondition(
> *context ) )
>
>             {
>
>                 runAction = aCond->enableCondition( sel );
>
>             }
>
>
>
>             if( runAction )
>
>             {
>
>                 tool_manager->RunAction( *context, true );
>
>             }
>
>         }
>
>         else
>
>         {
>
>             return navlib::make_result_code( navlib::navlib_errc::
> invalid_operation );
>
>         }
>
>     }
>
>
>
>     return 0;
>
> }
>
>
>
> The issue I am experiencing is with tool_manager->RunAction( *context,
> true );
>
> If instead of true, false is specified then the action is not run until
> the 2D mouse is moved. Or if true then the action is run immediately,
> however the UI is not updated until the 2D mouse is moved (for example in
> the 3D-viewer when orthographic/perspective is toggled). This is on
> windows.
>
>
>
> Can anyone let me know what I need to do to get the UI to update as I
> would expect?
>
>
>
> Thanks
>
> -Markus
>
>
>
> ------------------------------
>
> *Markus Bonk*
> Senior Software Engineer
>
> Clarita-Bernhard-Str. 18
> 81249 München
> Germany
> markus_bonk@xxxxxxxxxxxxxxx <%7BE-mail%7D>
> www.3dconnexion.com
>
> Geschäftsführer: Antonio Pascucci
> Sitz der Gesellschaft: München
> Registergericht: München HRB 99232
>
> This email and any files transmitted with are from 3Dconnexion GmbH. The
> contents of this email and any attachments are confidential to the intended
> recipient. They may not be disclosed to or used by or copied in any way by
> anyone other than the intended recipient. If this email is received in
> error, please contact 3Dconnexion GmbH by calling +49 89 8974542-0 and then
> delete it. Please note that neither 3Dconnexion GmbH nor the sender accepts
> any responsibility for viruses and it is your responsibility to scan or
> otherwise check this email and any attachments. Any opinion expressed in
> this email are those of the individual and not necessarily those of
> 3Dconnexion GmbH.
> 3Dconnexion GmbH processes and stores for commercial purposes your
> personal data, collected upon your consent, in accordance with its privacy
> policy available at https://www.3dconnexion.eu/privacy.html, which has
> been drafted in accordance with Regulation (EU) no. 679/2016 and all
> applicable local data protection laws and regulations of the countries
> where the company operates. To revoke your consent or exercise all your
> rights with regards to personal data, please contact us at
> privacy@xxxxxxxxxxxxxxx.
>
> _______________________________________________
> Mailing list: https://launchpad.net/~kicad-developers
> Post to     : kicad-developers@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~kicad-developers
> More help   : https://help.launchpad.net/ListHelp
>

GIF image


Follow ups

References