diff --git a/3d-viewer/3d_cache/dialogs/3d_cache_dialogs.cpp b/3d-viewer/3d_cache/dialogs/3d_cache_dialogs.cpp index 37398660b0..f9ebd5816b 100644 --- a/3d-viewer/3d_cache/dialogs/3d_cache_dialogs.cpp +++ b/3d-viewer/3d_cache/dialogs/3d_cache_dialogs.cpp @@ -34,6 +34,22 @@ bool S3D::Select3DModel( wxWindow* aParent, S3D_CACHE* aCache, wxString& prevModelSelectDir, int& prevModelWildcard, S3D_INFO* aModel ) { + if( NULL == aModel ) + return false; + + // set the default values to ensure reasonable settings + // even if the user cancels the operation + aModel->scale.x = 1.0; + aModel->scale.y = 1.0; + aModel->scale.z = 1.0; + + aModel->rotation.x = 0.0; + aModel->rotation.y = 0.0; + aModel->rotation.z = 0.0; + + aModel->offset = aModel->rotation; + aModel->filename.empty(); + DLG_SEL_3DMODEL* dm = new DLG_SEL_3DMODEL( aParent, aCache, prevModelSelectDir, prevModelWildcard ); diff --git a/3d-viewer/3d_cache/dialogs/dialog_select_3dmodel.cpp b/3d-viewer/3d_cache/dialogs/dialog_select_3dmodel.cpp index 33ec1714bf..9915564064 100644 --- a/3d-viewer/3d_cache/dialogs/dialog_select_3dmodel.cpp +++ b/3d-viewer/3d_cache/dialogs/dialog_select_3dmodel.cpp @@ -35,6 +35,13 @@ static wxWindow* mkPreviewPanel( wxWindow* aParent ) pp->SetModelManager( mm ); pp->SetFileSelectorDlg( fm ); + // ensure reasonable defaults when the dialog starts + S3D_INFO mdat; + mdat.scale.x = 1.0; + mdat.scale.y = 1.0; + mdat.scale.z = 1.0; + pp->SetModelData( &mdat ); + return (wxWindow*)pp; } diff --git a/3d-viewer/3d_cache/dialogs/panel_prev_model.cpp b/3d-viewer/3d_cache/dialogs/panel_prev_model.cpp index 4a14a2e18d..84bc274d23 100644 --- a/3d-viewer/3d_cache/dialogs/panel_prev_model.cpp +++ b/3d-viewer/3d_cache/dialogs/panel_prev_model.cpp @@ -503,17 +503,17 @@ void PANEL_PREV_3D::GetModelData( S3D_INFO* aModel ) void PANEL_PREV_3D::SetModelData( S3D_INFO const* aModel ) { - xscale->ChangeValue( wxString::FromDouble( aModel->scale.x ) ); - yscale->ChangeValue( wxString::FromDouble( aModel->scale.y ) ); - zscale->ChangeValue( wxString::FromDouble( aModel->scale.z ) ); + xscale->SetValue( wxString::FromDouble( aModel->scale.x ) ); + yscale->SetValue( wxString::FromDouble( aModel->scale.y ) ); + zscale->SetValue( wxString::FromDouble( aModel->scale.z ) ); - xrot->ChangeValue( wxString::FromDouble( aModel->rotation.x ) ); - yrot->ChangeValue( wxString::FromDouble( aModel->rotation.y ) ); - zrot->ChangeValue( wxString::FromDouble( aModel->rotation.z ) ); + xrot->SetValue( wxString::FromDouble( aModel->rotation.x ) ); + yrot->SetValue( wxString::FromDouble( aModel->rotation.y ) ); + zrot->SetValue( wxString::FromDouble( aModel->rotation.z ) ); - xoff->ChangeValue( wxString::FromDouble( aModel->offset.x ) ); - yoff->ChangeValue( wxString::FromDouble( aModel->offset.y ) ); - zoff->ChangeValue( wxString::FromDouble( aModel->offset.z ) ); + xoff->SetValue( wxString::FromDouble( aModel->offset.x ) ); + yoff->SetValue( wxString::FromDouble( aModel->offset.y ) ); + zoff->SetValue( wxString::FromDouble( aModel->offset.z ) ); modelInfo = *aModel; UpdateModelName( aModel->filename ); diff --git a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp index 9096a0620d..bf38f54a96 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_BoardEditor.cpp @@ -391,6 +391,18 @@ void DIALOG_MODULE_BOARD_EDITOR::Transfert3DValuesToDisplay( params.rotation.y = aStruct3DSource->m_MatRotation.y; params.rotation.z = aStruct3DSource->m_MatRotation.z; } + else + { + params.scale.x = 1.0; + params.scale.y = 1.0; + params.scale.z = 1.0; + + params.offset.x = 0.0; + params.offset.y = 0.0; + params.offset.z = 0.0; + + params.rotation = params.offset; + } m_PreviewPane->SetModelData( ¶ms ); return; @@ -542,9 +554,6 @@ void DIALOG_MODULE_BOARD_EDITOR::BrowseAndAdd3DShapeFile() { PROJECT& prj = Prj(); S3D_INFO model; - model.scale.x = 1.0; - model.scale.y = 1.0; - model.scale.z = 1.0; wxString initialpath = prj.GetRString( PROJECT::VIEWER_3D_PATH ); wxString sidx = prj.GetRString( PROJECT::VIEWER_3D_FILTER_INDEX ); diff --git a/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp b/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp index 1ea5887d1e..37b07ee88e 100644 --- a/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp +++ b/pcbnew/dialogs/dialog_edit_module_for_Modedit.cpp @@ -261,6 +261,18 @@ void DIALOG_MODULE_MODULE_EDITOR::Transfert3DValuesToDisplay( S3D_MASTER * aStru params.rotation.y = aStruct3DSource->m_MatRotation.y; params.rotation.z = aStruct3DSource->m_MatRotation.z; } + else + { + params.scale.x = 1.0; + params.scale.y = 1.0; + params.scale.z = 1.0; + + params.offset.x = 0.0; + params.offset.y = 0.0; + params.offset.z = 0.0; + + params.rotation = params.offset; + } m_PreviewPane->SetModelData( ¶ms ); return; @@ -409,9 +421,6 @@ void DIALOG_MODULE_MODULE_EDITOR::BrowseAndAdd3DShapeFile() { PROJECT& prj = Prj(); S3D_INFO model; - model.scale.x = 1.0; - model.scale.y = 1.0; - model.scale.z = 1.0; wxString initialpath = prj.GetRString( PROJECT::VIEWER_3D_PATH ); wxString sidx = prj.GetRString( PROJECT::VIEWER_3D_FILTER_INDEX );