3D preferences bug fixes.
1) Make sure prefs get saved when closing parent frame. 2) Add camera projection mode to settings. Fixes https://gitlab.com/kicad/code/kicad/issues/8110 Fixes https://gitlab.com/kicad/code/kicad/issues/8626
This commit is contained in:
parent
0484ca5564
commit
16047b7419
|
@ -118,34 +118,20 @@ public:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enable or disable camera animation when switching to a pre-defined view.
|
* Enable or disable camera animation when switching to a pre-defined view.
|
||||||
*
|
|
||||||
* @param aAnimationEnabled animation enabled state to set.
|
|
||||||
*/
|
*/
|
||||||
void AnimationEnabledSet( bool aAnimationEnabled ) { m_animation_enabled = aAnimationEnabled; }
|
void SetAnimationEnabled( bool aEnable ) { m_animation_enabled = aEnable; }
|
||||||
|
bool GetAnimationEnabled() const { return m_animation_enabled; }
|
||||||
/**
|
|
||||||
* Return whether camera animation is enabled when switching to a pre-defined view.
|
|
||||||
*
|
|
||||||
* @return true if animation is enabled.
|
|
||||||
*/
|
|
||||||
bool AnimationEnabledGet() const { return m_animation_enabled; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the camera animation moving speed multiplier option.
|
* Set the camera animation moving speed multiplier option.
|
||||||
*
|
*
|
||||||
* @param aMovingSpeedMultiplier one of the possible integer options: [1,2,3,4,5].
|
* @param aMultiplier one of the possible integer options: [1,2,3,4,5].
|
||||||
*/
|
*/
|
||||||
void MovingSpeedMultiplierSet( int aMovingSpeedMultiplier )
|
void SetMovingSpeedMultiplier( int aMultiplier ) { m_moving_speed_multiplier = aMultiplier; }
|
||||||
{
|
int GetMovingSpeedMultiplier() const { return m_moving_speed_multiplier; }
|
||||||
m_moving_speed_multiplier = aMovingSpeedMultiplier;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
int GetProjectionMode() const { return (int) m_camera.GetProjection(); };
|
||||||
* Return the current camera animation moving speed multiplier option.
|
void SetProjectionMode( int aMode ) { m_camera.SetProjection( (PROJECTION_TYPE) aMode ); }
|
||||||
*
|
|
||||||
* @return current moving speed multiplier option, one of [1,2,3,4,5].
|
|
||||||
*/
|
|
||||||
int MovingSpeedMultiplierGet() const { return m_moving_speed_multiplier; }
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Notify that the render engine was changed.
|
* Notify that the render engine was changed.
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
|
|
||||||
enum class PROJECTION_TYPE
|
enum class PROJECTION_TYPE
|
||||||
{
|
{
|
||||||
ORTHO,
|
ORTHO = 0,
|
||||||
PERSPECTIVE
|
PERSPECTIVE
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -158,6 +158,7 @@ public:
|
||||||
|
|
||||||
void ToggleProjection();
|
void ToggleProjection();
|
||||||
PROJECTION_TYPE GetProjection() { return m_projectionType; }
|
PROJECTION_TYPE GetProjection() { return m_projectionType; }
|
||||||
|
void SetProjection( PROJECTION_TYPE aProjection ) { m_projectionType = aProjection; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the windows size of the camera.
|
* Update the windows size of the camera.
|
||||||
|
|
|
@ -193,6 +193,8 @@ EDA_3D_VIEWER_SETTINGS::EDA_3D_VIEWER_SETTINGS()
|
||||||
&m_Camera.moving_speed_multiplier, 3 ) );
|
&m_Camera.moving_speed_multiplier, 3 ) );
|
||||||
m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
|
m_params.emplace_back( new PARAM<double>( "camera.rotation_increment",
|
||||||
&m_Camera.rotation_increment, 10.0 ) );
|
&m_Camera.rotation_increment, 10.0 ) );
|
||||||
|
m_params.emplace_back( new PARAM<int>( "camera.projection_mode",
|
||||||
|
&m_Camera.projection_mode, 1 ) );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,6 +93,7 @@ public:
|
||||||
bool animation_enabled;
|
bool animation_enabled;
|
||||||
int moving_speed_multiplier;
|
int moving_speed_multiplier;
|
||||||
double rotation_increment;
|
double rotation_increment;
|
||||||
|
int projection_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
EDA_3D_VIEWER_SETTINGS();
|
EDA_3D_VIEWER_SETTINGS();
|
||||||
|
|
|
@ -76,10 +76,10 @@ bool PANEL_3D_DISPLAY_OPTIONS::TransferDataToWindow()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Camera Options
|
// Camera Options
|
||||||
m_checkBoxEnableAnimation->SetValue( m_canvas->AnimationEnabledGet() );
|
m_checkBoxEnableAnimation->SetValue( m_canvas->GetAnimationEnabled() );
|
||||||
m_sliderAnimationSpeed->SetValue( m_canvas->MovingSpeedMultiplierGet() );
|
m_sliderAnimationSpeed->SetValue( m_canvas->GetMovingSpeedMultiplier() );
|
||||||
m_staticAnimationSpeed->Enable( m_canvas->AnimationEnabledGet() );
|
m_staticAnimationSpeed->Enable( m_canvas->GetAnimationEnabled() );
|
||||||
m_sliderAnimationSpeed->Enable( m_canvas->AnimationEnabledGet() );
|
m_sliderAnimationSpeed->Enable( m_canvas->GetAnimationEnabled() );
|
||||||
|
|
||||||
EDA_3D_CONTROLLER* ctrlTool = m_frame->GetToolManager()->GetTool<EDA_3D_CONTROLLER>();
|
EDA_3D_CONTROLLER* ctrlTool = m_frame->GetToolManager()->GetTool<EDA_3D_CONTROLLER>();
|
||||||
m_spinCtrlRotationAngle->SetValue( ctrlTool->GetRotationIncrement() );
|
m_spinCtrlRotationAngle->SetValue( ctrlTool->GetRotationIncrement() );
|
||||||
|
@ -123,8 +123,8 @@ bool PANEL_3D_DISPLAY_OPTIONS::TransferDataFromWindow()
|
||||||
m_settings.SetFlag( FL_ECO, m_checkBoxECO->GetValue( ) );
|
m_settings.SetFlag( FL_ECO, m_checkBoxECO->GetValue( ) );
|
||||||
|
|
||||||
// Camera Options
|
// Camera Options
|
||||||
m_canvas->AnimationEnabledSet( m_checkBoxEnableAnimation->GetValue() );
|
m_canvas->SetAnimationEnabled( m_checkBoxEnableAnimation->GetValue());
|
||||||
m_canvas->MovingSpeedMultiplierSet( m_sliderAnimationSpeed->GetValue() );
|
m_canvas->SetMovingSpeedMultiplier( m_sliderAnimationSpeed->GetValue());
|
||||||
|
|
||||||
EDA_3D_CONTROLLER* ctrlTool = m_frame->GetToolManager()->GetTool<EDA_3D_CONTROLLER>();
|
EDA_3D_CONTROLLER* ctrlTool = m_frame->GetToolManager()->GetTool<EDA_3D_CONTROLLER>();
|
||||||
ctrlTool->SetRotationIncrement( m_spinCtrlRotationAngle->GetValue() );
|
ctrlTool->SetRotationIncrement( m_spinCtrlRotationAngle->GetValue() );
|
||||||
|
|
|
@ -531,8 +531,9 @@ void EDA_3D_VIEWER::LoadSettings( APP_SETTINGS_BASE *aCfg )
|
||||||
|
|
||||||
m_boardAdapter.SetMaterialMode( static_cast<MATERIAL_MODE>( cfg->m_Render.material_mode ) );
|
m_boardAdapter.SetMaterialMode( static_cast<MATERIAL_MODE>( cfg->m_Render.material_mode ) );
|
||||||
|
|
||||||
m_canvas->AnimationEnabledSet( cfg->m_Camera.animation_enabled );
|
m_canvas->SetAnimationEnabled( cfg->m_Camera.animation_enabled );
|
||||||
m_canvas->MovingSpeedMultiplierSet( cfg->m_Camera.moving_speed_multiplier );
|
m_canvas->SetMovingSpeedMultiplier( cfg->m_Camera.moving_speed_multiplier );
|
||||||
|
m_canvas->SetProjectionMode( cfg->m_Camera.projection_mode );
|
||||||
|
|
||||||
#undef TRANSFER_SETTING
|
#undef TRANSFER_SETTING
|
||||||
}
|
}
|
||||||
|
@ -630,8 +631,9 @@ void EDA_3D_VIEWER::SaveSettings( APP_SETTINGS_BASE *aCfg )
|
||||||
|
|
||||||
save_color( m_boardAdapter.m_OpenGlSelectionColor, cfg->m_Render.opengl_selection_color );
|
save_color( m_boardAdapter.m_OpenGlSelectionColor, cfg->m_Render.opengl_selection_color );
|
||||||
|
|
||||||
cfg->m_Camera.animation_enabled = m_canvas->AnimationEnabledGet();
|
cfg->m_Camera.animation_enabled = m_canvas->GetAnimationEnabled();
|
||||||
cfg->m_Camera.moving_speed_multiplier = m_canvas->MovingSpeedMultiplierGet();
|
cfg->m_Camera.moving_speed_multiplier = m_canvas->GetMovingSpeedMultiplier();
|
||||||
|
cfg->m_Camera.projection_mode = m_canvas->GetProjectionMode();
|
||||||
|
|
||||||
if( EDA_3D_CONTROLLER* ctrlTool = GetToolManager()->GetTool<EDA_3D_CONTROLLER>() )
|
if( EDA_3D_CONTROLLER* ctrlTool = GetToolManager()->GetTool<EDA_3D_CONTROLLER>() )
|
||||||
cfg->m_Camera.rotation_increment = ctrlTool->GetRotationIncrement();
|
cfg->m_Camera.rotation_increment = ctrlTool->GetRotationIncrement();
|
||||||
|
|
|
@ -350,15 +350,8 @@ public:
|
||||||
|
|
||||||
virtual void SwitchLayer( wxDC* DC, PCB_LAYER_ID layer );
|
virtual void SwitchLayer( wxDC* DC, PCB_LAYER_ID layer );
|
||||||
|
|
||||||
virtual void SetActiveLayer( PCB_LAYER_ID aLayer )
|
virtual void SetActiveLayer( PCB_LAYER_ID aLayer ) { GetScreen()->m_Active_Layer = aLayer; }
|
||||||
{
|
virtual PCB_LAYER_ID GetActiveLayer() const { return GetScreen()->m_Active_Layer; }
|
||||||
GetScreen()->m_Active_Layer = aLayer;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual PCB_LAYER_ID GetActiveLayer() const
|
|
||||||
{
|
|
||||||
return GetScreen()->m_Active_Layer;
|
|
||||||
}
|
|
||||||
|
|
||||||
SEVERITY GetSeverity( int aErrorCode ) const override;
|
SEVERITY GetSeverity( int aErrorCode ) const override;
|
||||||
|
|
||||||
|
@ -395,6 +388,7 @@ public:
|
||||||
virtual bool GetAutoZoom() { return false; }
|
virtual bool GetAutoZoom() { return false; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool canCloseWindow( wxCloseEvent& aCloseEvent ) override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempts to load \a aFootprintId from the footprint library table.
|
* Attempts to load \a aFootprintId from the footprint library table.
|
||||||
|
@ -407,12 +401,13 @@ protected:
|
||||||
*/
|
*/
|
||||||
FOOTPRINT* loadFootprint( const LIB_ID& aFootprintId );
|
FOOTPRINT* loadFootprint( const LIB_ID& aFootprintId );
|
||||||
|
|
||||||
|
virtual void unitsChangeRefresh() override;
|
||||||
|
|
||||||
|
protected:
|
||||||
BOARD* m_pcb;
|
BOARD* m_pcb;
|
||||||
PCB_DISPLAY_OPTIONS m_displayOptions;
|
PCB_DISPLAY_OPTIONS m_displayOptions;
|
||||||
PCB_ORIGIN_TRANSFORMS m_originTransforms;
|
PCB_ORIGIN_TRANSFORMS m_originTransforms;
|
||||||
PCBNEW_SETTINGS* m_settings; // No ownership, just a shortcut
|
PCBNEW_SETTINGS* m_settings; // No ownership, just a shortcut
|
||||||
|
|
||||||
virtual void unitsChangeRefresh() override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PCB_BASE_FRAME_H
|
#endif // PCB_BASE_FRAME_H
|
||||||
|
|
|
@ -632,7 +632,7 @@ bool FOOTPRINT_EDIT_FRAME::canCloseWindow( wxCloseEvent& aEvent )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return PCB_BASE_EDIT_FRAME::canCloseWindow( aEvent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,19 @@ PCB_BASE_FRAME::~PCB_BASE_FRAME()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool PCB_BASE_FRAME::canCloseWindow( wxCloseEvent& aEvent )
|
||||||
|
{
|
||||||
|
// Close modeless dialogs. They're trouble when they get destroyed after the frame and/or
|
||||||
|
// board.
|
||||||
|
wxWindow* viewer3D = Get3DViewerFrame();
|
||||||
|
|
||||||
|
if( viewer3D )
|
||||||
|
viewer3D->Close( true );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EDA_3D_VIEWER* PCB_BASE_FRAME::Get3DViewerFrame()
|
EDA_3D_VIEWER* PCB_BASE_FRAME::Get3DViewerFrame()
|
||||||
{
|
{
|
||||||
return dynamic_cast<EDA_3D_VIEWER*>( FindWindowByName( QUALIFIED_VIEWER3D_FRAMENAME( this ) ) );
|
return dynamic_cast<EDA_3D_VIEWER*>( FindWindowByName( QUALIFIED_VIEWER3D_FRAMENAME( this ) ) );
|
||||||
|
|
|
@ -840,7 +840,7 @@ bool PCB_EDIT_FRAME::canCloseWindow( wxCloseEvent& aEvent )
|
||||||
if( open_dlg )
|
if( open_dlg )
|
||||||
open_dlg->Close( true );
|
open_dlg->Close( true );
|
||||||
|
|
||||||
return true;
|
return PCB_BASE_EDIT_FRAME::canCloseWindow( aEvent );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue