Work in progress: changed Footprint Properties editors to handle aliased 3D file names

This commit is contained in:
Cirilo Bernardo 2016-01-16 17:49:28 +11:00
parent 4d5097b41d
commit f3c56eff12
2 changed files with 188 additions and 32 deletions

View File

@ -48,8 +48,10 @@
#include <dialog_edit_module_for_BoardEditor.h>
#include <wildcards_and_files_ext.h>
#include <3d_cache/dialogs/panel_prev_model.h>
#include <3d_cache/dialogs/3d_cache_dialogs.h>
#include "3d_cache/dialogs/panel_prev_model.h"
#include "3d_cache/dialogs/3d_cache_dialogs.h"
#include "3d_cache/3d_cache.h"
#include "3d_cache/3d_filename_resolver.h"
size_t DIALOG_MODULE_BOARD_EDITOR::m_page = 0; // remember the last open page during session
@ -260,6 +262,10 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
// Init 3D shape list
S3D_MASTER* draw3D = m_CurrentModule->Models();
wxString origPath;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
while( draw3D )
{
@ -268,8 +274,18 @@ void DIALOG_MODULE_BOARD_EDITOR::InitModeditProperties()
S3D_MASTER* draw3DCopy = new S3D_MASTER( NULL );
draw3DCopy->Copy( draw3D );
m_Shapes3D_list.push_back( draw3DCopy );
m_3D_ShapeNameListBox->Append( draw3DCopy->GetShape3DName() );
origPath = draw3DCopy->GetShape3DName();
if( res && res->SplitAlias( origPath, alias, shortPath ) )
{
origPath = alias;
origPath.append( wxT( ":" ) );
origPath.append( shortPath );
}
m_3D_ShapeNameListBox->Append( origPath );
}
draw3D = (S3D_MASTER*) draw3D->Next();
}
@ -419,6 +435,7 @@ void DIALOG_MODULE_BOARD_EDITOR::On3DShapeNameSelected( wxCommandEvent& event )
m_LastSelected3DShapeIndex = -1;
return;
}
Transfert3DValuesToDisplay( m_Shapes3D_list[m_LastSelected3DShapeIndex] );
}
@ -461,28 +478,75 @@ void DIALOG_MODULE_BOARD_EDITOR::Edit3DShapeFileName()
if( idx < 0 )
return;
// Edit filename
wxString filename = m_3D_ShapeNameListBox->GetStringSelection();
// ensure any updated parameters are not discarded
TransfertDisplayTo3DValues( idx );
wxTextEntryDialog dlg( this, wxEmptyString, wxEmptyString, filename );
dlg.SetTextValidator( FILE_NAME_WITH_PATH_CHAR_VALIDATOR( &filename ) );
PROJECT& prj = Prj();
S3D_INFO model;
if( dlg.ShowModal() != wxID_OK || filename.IsEmpty() )
return; //Aborted by user
wxString oldPath = m_Shapes3D_list[idx]->GetShape3DFullFilename();
wxString initialpath;
if( !oldPath.empty() )
{
wxFileName fname( oldPath );
initialpath = fname.GetPath();
}
else
{
initialpath = prj.GetRString( PROJECT::VIEWER_3D_PATH );
}
int filter = 0;
wxString sidx = prj.GetRString( PROJECT::VIEWER_3D_FILTER_INDEX );
if( !sidx.empty() )
{
long tmp;
sidx.ToLong( &tmp );
if( tmp > 0 && tmp <= 0x7FFFFFFF )
filter = (int) tmp;
}
if( !S3D::Select3DModel( this, Prj().Get3DCacheManager(),
initialpath, filter, &model ) )
{
return;
}
prj.SetRString( PROJECT::VIEWER_3D_PATH, initialpath );
sidx = wxString::Format( wxT( "%i" ), filter );
prj.SetRString( PROJECT::VIEWER_3D_FILTER_INDEX, sidx );
S3D_MASTER* new3DShape = new S3D_MASTER( NULL );
#ifdef __WINDOWS__
// In Kicad files, filenames and paths are stored using Unix notation
// So be sure the unix notation is still used
filename.Replace( wxT( "\\" ), wxT( "/" ) );
model.filename.Replace( wxT( "\\" ), wxT( "/" ) );
#endif
m_3D_ShapeNameListBox->SetString( idx, filename );
S3D_MASTER* new3DShape = new S3D_MASTER( NULL );
new3DShape->SetShape3DName( filename );
new3DShape->SetShape3DName( model.filename );
new3DShape->m_MatPosition = m_Shapes3D_list[idx]->m_MatPosition;
new3DShape->m_MatRotation = m_Shapes3D_list[idx]->m_MatRotation;
new3DShape->m_MatScale = m_Shapes3D_list[idx]->m_MatScale;
delete m_Shapes3D_list[idx];
m_Shapes3D_list[idx] = new3DShape;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
oldPath = model.filename;
if( res && res->SplitAlias( oldPath, alias, shortPath ) )
{
oldPath = alias;
oldPath.append( wxT( ":" ) );
oldPath.append( shortPath );
}
m_3D_ShapeNameListBox->SetString( idx, oldPath );
Transfert3DValuesToDisplay( m_Shapes3D_list[idx] );
return;
@ -491,7 +555,7 @@ void DIALOG_MODULE_BOARD_EDITOR::Edit3DShapeFileName()
void DIALOG_MODULE_BOARD_EDITOR::BrowseAndAdd3DShapeFile()
{
PROJECT& prj = Prj();
PROJECT& prj = Prj();
S3D_INFO model;
wxString initialpath = prj.GetRString( PROJECT::VIEWER_3D_PATH );
@ -536,7 +600,20 @@ void DIALOG_MODULE_BOARD_EDITOR::BrowseAndAdd3DShapeFile()
new3DShape->m_MatPosition.z = model.offset.z;
m_Shapes3D_list.push_back( new3DShape );
m_3D_ShapeNameListBox->Append( model.filename );
wxString origPath = model.filename;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
if( res && res->SplitAlias( origPath, alias, shortPath ) )
{
origPath = alias;
origPath.append( wxT( ":" ) );
origPath.append( shortPath );
}
m_3D_ShapeNameListBox->Append( origPath );
m_LastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetCount() - 1;
m_3D_ShapeNameListBox->SetSelection( m_LastSelected3DShapeIndex );

View File

@ -50,8 +50,10 @@
#include <module_editor_frame.h>
#include <dialog_edit_module_for_Modedit.h>
#include <wildcards_and_files_ext.h>
#include <3d_cache/dialogs/panel_prev_model.h>
#include <3d_cache/dialogs/3d_cache_dialogs.h>
#include "3d_cache/dialogs/panel_prev_model.h"
#include "3d_cache/dialogs/3d_cache_dialogs.h"
#include "3d_cache/3d_cache.h"
#include "3d_cache/3d_filename_resolver.h"
size_t DIALOG_MODULE_MODULE_EDITOR::m_page = 0; // remember the last open page during session
@ -113,6 +115,10 @@ void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties()
// Init 3D shape list
S3D_MASTER* draw3D = m_currentModule->Models();
wxString origPath;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
while( draw3D )
{
@ -121,8 +127,19 @@ void DIALOG_MODULE_MODULE_EDITOR::initModeditProperties()
S3D_MASTER* draw3DCopy = new S3D_MASTER(NULL);
draw3DCopy->Copy( draw3D );
m_shapes3D_list.push_back( draw3DCopy );
m_3D_ShapeNameListBox->Append( draw3DCopy->GetShape3DName() );
origPath = draw3DCopy->GetShape3DName();
if( res && res->SplitAlias( origPath, alias, shortPath ) )
{
origPath = alias;
origPath.append( wxT( ":" ) );
origPath.append( shortPath );
}
m_3D_ShapeNameListBox->Append( origPath );
}
draw3D = (S3D_MASTER*) draw3D->Next();
}
@ -328,28 +345,76 @@ void DIALOG_MODULE_MODULE_EDITOR::Edit3DShapeFileName()
if( idx < 0 )
return;
// Edit filename
wxString filename = m_3D_ShapeNameListBox->GetStringSelection();
// ensure any updated parameters are not discarded
TransfertDisplayTo3DValues( idx );
wxTextEntryDialog dlg( this, wxEmptyString, wxEmptyString, filename );
dlg.SetTextValidator( FILE_NAME_WITH_PATH_CHAR_VALIDATOR( &filename ) );
PROJECT& prj = Prj();
S3D_INFO model;
if( dlg.ShowModal() != wxID_OK || filename.IsEmpty() )
return; //Aborted by user
wxString oldPath = m_shapes3D_list[idx]->GetShape3DFullFilename();
wxString initialpath;
if( !oldPath.empty() )
{
wxFileName fname( oldPath );
initialpath = fname.GetPath();
}
else
{
initialpath = prj.GetRString( PROJECT::VIEWER_3D_PATH );
}
int filter = 0;
wxString sidx = prj.GetRString( PROJECT::VIEWER_3D_FILTER_INDEX );
if( !sidx.empty() )
{
long tmp;
sidx.ToLong( &tmp );
if( tmp > 0 && tmp <= 0x7FFFFFFF )
filter = (int) tmp;
}
if( !S3D::Select3DModel( this, Prj().Get3DCacheManager(),
initialpath, filter, &model ) )
{
return;
}
prj.SetRString( PROJECT::VIEWER_3D_PATH, initialpath );
sidx = wxString::Format( wxT( "%i" ), filter );
prj.SetRString( PROJECT::VIEWER_3D_FILTER_INDEX, sidx );
S3D_MASTER* new3DShape = new S3D_MASTER( NULL );
#ifdef __WINDOWS__
// In Kicad files, filenames and paths are stored using Unix notation
// So be sure the unix notation is still used
filename.Replace( wxT( "\\" ), wxT( "/" ) );
model.filename.Replace( wxT( "\\" ), wxT( "/" ) );
#endif
m_3D_ShapeNameListBox->SetString( idx, filename );
new3DShape->SetShape3DName( model.filename );
new3DShape->m_MatPosition = m_shapes3D_list[idx]->m_MatPosition;
new3DShape->m_MatRotation = m_shapes3D_list[idx]->m_MatRotation;
new3DShape->m_MatScale = m_shapes3D_list[idx]->m_MatScale;
S3D_MASTER* new3DShape = new S3D_MASTER( NULL );
new3DShape->SetShape3DName( filename );
delete m_shapes3D_list[idx];
m_shapes3D_list[idx] = new3DShape;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
oldPath = model.filename;
if( res && res->SplitAlias( oldPath, alias, shortPath ) )
{
oldPath = alias;
oldPath.append( wxT( ":" ) );
oldPath.append( shortPath );
}
m_3D_ShapeNameListBox->SetString( idx, oldPath );
Transfert3DValuesToDisplay( m_shapes3D_list[idx] );
return;
@ -403,7 +468,21 @@ void DIALOG_MODULE_MODULE_EDITOR::BrowseAndAdd3DShapeFile()
new3DShape->m_MatPosition.z = model.offset.z;
m_shapes3D_list.push_back( new3DShape );
m_3D_ShapeNameListBox->Append( model.filename );
wxString origPath = model.filename;
wxString alias;
wxString shortPath;
S3D_FILENAME_RESOLVER* res = Prj().Get3DCacheManager()->GetResolver();
if( res && res->SplitAlias( origPath, alias, shortPath ) )
{
origPath = alias;
origPath.append( wxT( ":" ) );
origPath.append( shortPath );
}
m_3D_ShapeNameListBox->Append( origPath );
m_lastSelected3DShapeIndex = m_3D_ShapeNameListBox->GetCount() - 1;
m_3D_ShapeNameListBox->SetSelection( m_lastSelected3DShapeIndex );