GUI improvements including interactive update of model orientation/position
This commit is contained in:
parent
47f40def0c
commit
a0597c4614
|
@ -27,6 +27,7 @@
|
|||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/valnum.h>
|
||||
#include <wx/choice.h>
|
||||
#include <wx/filename.h>
|
||||
#include <wx/glcanvas.h>
|
||||
|
@ -63,6 +64,15 @@ static void checkRotation( double& rot )
|
|||
enum {
|
||||
ID_SET_DIR = wxID_LAST + 1,
|
||||
ID_CFG_PATHS,
|
||||
ID_SCALEX,
|
||||
ID_SCALEY,
|
||||
ID_SCALEZ,
|
||||
ID_ROTX,
|
||||
ID_ROTY,
|
||||
ID_ROTZ,
|
||||
ID_OFFX,
|
||||
ID_OFFY,
|
||||
ID_OFFZ,
|
||||
ID_3D_ISO,
|
||||
ID_3D_UPDATE,
|
||||
ID_3D_LEFT,
|
||||
|
@ -76,6 +86,15 @@ enum {
|
|||
wxBEGIN_EVENT_TABLE( PANEL_PREV_3D, wxPanel)
|
||||
EVT_SIZE( PANEL_PREV_3D::resize )
|
||||
EVT_CHOICE( ID_SET_DIR, PANEL_PREV_3D::SetRootDir )
|
||||
EVT_TEXT_ENTER( ID_SCALEX, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_SCALEY, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_SCALEZ, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_ROTX, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_ROTY, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_ROTZ, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_OFFX, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_OFFY, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_TEXT_ENTER( ID_OFFZ, PANEL_PREV_3D::updateOrientation )
|
||||
EVT_BUTTON( ID_CFG_PATHS, PANEL_PREV_3D::Cfg3DPaths )
|
||||
EVT_BUTTON( ID_3D_ISO, PANEL_PREV_3D::View3DISO )
|
||||
EVT_BUTTON( ID_3D_UPDATE, PANEL_PREV_3D::View3DUpdate )
|
||||
|
@ -95,6 +114,15 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, bool hasFileSelector ) :
|
|||
m_FileDlg = NULL;
|
||||
canvas = NULL;
|
||||
model = NULL;
|
||||
xscale = NULL;
|
||||
yscale = NULL;
|
||||
zscale = NULL;
|
||||
xrot = NULL;
|
||||
yrot = NULL;
|
||||
zrot = NULL;
|
||||
xoff = NULL;
|
||||
yoff = NULL;
|
||||
zoff = NULL;
|
||||
|
||||
wxBoxSizer* mainBox = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
|
@ -120,6 +148,13 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, bool hasFileSelector ) :
|
|||
hboxDirChoice->Add( cfgPaths, 0, wxALL, 5 );
|
||||
}
|
||||
|
||||
wxFloatingPointValidator< float > valScale( 6 );
|
||||
valScale.SetRange( 0.001, 100 );
|
||||
wxFloatingPointValidator< float > valRotate( 6 );
|
||||
valRotate.SetRange( -180.0, 180.0 );
|
||||
wxFloatingPointValidator< float > valOffset( 6 );
|
||||
|
||||
|
||||
wxStaticBoxSizer* vbScale = new wxStaticBoxSizer( wxVERTICAL, this, _( "Scale" ) );
|
||||
wxStaticBoxSizer* vbRotate = new wxStaticBoxSizer( wxVERTICAL, this, _( "Rotation" ) );
|
||||
wxStaticBoxSizer* vbOffset = new wxStaticBoxSizer( wxVERTICAL, this, _( "Offset (inches)" ) );
|
||||
|
@ -134,12 +169,12 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, bool hasFileSelector ) :
|
|||
wxStaticText* txtS1 = new wxStaticText( modScale, -1, wxT( "X:" ) );
|
||||
wxStaticText* txtS2 = new wxStaticText( modScale, -1, wxT( "Y:" ) );
|
||||
wxStaticText* txtS3 = new wxStaticText( modScale, -1, wxT( "Z:" ) );
|
||||
xscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
yscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
zscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
xscale = new wxTextCtrl( modScale, ID_SCALEX, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valScale );
|
||||
yscale = new wxTextCtrl( modScale, ID_SCALEY, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valScale );
|
||||
zscale = new wxTextCtrl( modScale, ID_SCALEZ, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valScale );
|
||||
xscale->SetMaxLength( 9 );
|
||||
yscale->SetMaxLength( 9 );
|
||||
zscale->SetMaxLength( 9 );
|
||||
|
@ -156,15 +191,15 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, bool hasFileSelector ) :
|
|||
wxBoxSizer* hbR1 = new wxBoxSizer( wxHORIZONTAL );
|
||||
wxBoxSizer* hbR2 = new wxBoxSizer( wxHORIZONTAL );
|
||||
wxBoxSizer* hbR3 = new wxBoxSizer( wxHORIZONTAL );
|
||||
wxStaticText* txtR1 = new wxStaticText( modRotate, -1, wxT( "X:" ) );
|
||||
wxStaticText* txtR2 = new wxStaticText( modRotate, -1, wxT( "Y:" ) );
|
||||
wxStaticText* txtR3 = new wxStaticText( modRotate, -1, wxT( "Z:" ) );
|
||||
xrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
yrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
zrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
wxStaticText* txtR1 = new wxStaticText( modRotate, ID_ROTX, wxT( "X:" ) );
|
||||
wxStaticText* txtR2 = new wxStaticText( modRotate, ID_ROTY, wxT( "Y:" ) );
|
||||
wxStaticText* txtR3 = new wxStaticText( modRotate, ID_ROTZ, wxT( "Z:" ) );
|
||||
xrot = new wxTextCtrl( modRotate, ID_ROTX, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valRotate );
|
||||
yrot = new wxTextCtrl( modRotate, ID_ROTY, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valRotate );
|
||||
zrot = new wxTextCtrl( modRotate, ID_ROTZ, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valRotate );
|
||||
xrot->SetMaxLength( 9 );
|
||||
yrot->SetMaxLength( 9 );
|
||||
zrot->SetMaxLength( 9 );
|
||||
|
@ -184,12 +219,12 @@ PANEL_PREV_3D::PANEL_PREV_3D( wxWindow* aParent, bool hasFileSelector ) :
|
|||
wxStaticText* txtO1 = new wxStaticText( modOffset, -1, wxT( "X:" ) );
|
||||
wxStaticText* txtO2 = new wxStaticText( modOffset, -1, wxT( "Y:" ) );
|
||||
wxStaticText* txtO3 = new wxStaticText( modOffset, -1, wxT( "Z:" ) );
|
||||
xoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
yoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
zoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER );
|
||||
xoff = new wxTextCtrl( modOffset, ID_OFFX, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valOffset );
|
||||
yoff = new wxTextCtrl( modOffset, ID_OFFY, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valOffset );
|
||||
zoff = new wxTextCtrl( modOffset, ID_OFFZ, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||
wxTE_PROCESS_ENTER, valOffset );
|
||||
xoff->SetMaxLength( 9 );
|
||||
yoff->SetMaxLength( 9 );
|
||||
zoff->SetMaxLength( 9 );
|
||||
|
@ -443,29 +478,7 @@ void PANEL_PREV_3D::GetModelData( S3D_INFO* aModel )
|
|||
SGPOINT rotation;
|
||||
SGPOINT offset;
|
||||
|
||||
xscale->GetValue().ToDouble( &scale.x );
|
||||
yscale->GetValue().ToDouble( &scale.y );
|
||||
zscale->GetValue().ToDouble( &scale.z );
|
||||
|
||||
if( 0.001 > scale.x || 0.001 > scale.y || 0.001 > scale.z )
|
||||
{
|
||||
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
std::cerr << " * [INFO] invalid scale values; setting all to 1.0\n";
|
||||
scale.x = 1.0;
|
||||
scale.y = 1.0;
|
||||
scale.z = 1.0;
|
||||
}
|
||||
|
||||
xrot->GetValue().ToDouble( &rotation.x );
|
||||
yrot->GetValue().ToDouble( &rotation.y );
|
||||
zrot->GetValue().ToDouble( &rotation.z );
|
||||
checkRotation( rotation.x );
|
||||
checkRotation( rotation.y );
|
||||
checkRotation( rotation.z );
|
||||
|
||||
xoff->GetValue().ToDouble( &offset.x );
|
||||
yoff->GetValue().ToDouble( &offset.y );
|
||||
zoff->GetValue().ToDouble( &offset.z );
|
||||
getOrientationVars( scale, rotation, offset );
|
||||
|
||||
aModel->scale = scale;
|
||||
aModel->offset = offset;
|
||||
|
@ -487,17 +500,17 @@ void PANEL_PREV_3D::GetModelData( S3D_INFO* aModel )
|
|||
|
||||
void PANEL_PREV_3D::SetModelData( S3D_INFO const* aModel )
|
||||
{
|
||||
xscale->SetValue( wxString::FromDouble( aModel->scale.x ) );
|
||||
yscale->SetValue( wxString::FromDouble( aModel->scale.y ) );
|
||||
zscale->SetValue( wxString::FromDouble( aModel->scale.z ) );
|
||||
xscale->ChangeValue( wxString::FromDouble( aModel->scale.x ) );
|
||||
yscale->ChangeValue( wxString::FromDouble( aModel->scale.y ) );
|
||||
zscale->ChangeValue( wxString::FromDouble( aModel->scale.z ) );
|
||||
|
||||
xrot->SetValue( wxString::FromDouble( aModel->rotation.x ) );
|
||||
yrot->SetValue( wxString::FromDouble( aModel->rotation.y ) );
|
||||
zrot->SetValue( wxString::FromDouble( aModel->rotation.z ) );
|
||||
xrot->ChangeValue( wxString::FromDouble( aModel->rotation.x ) );
|
||||
yrot->ChangeValue( wxString::FromDouble( aModel->rotation.y ) );
|
||||
zrot->ChangeValue( wxString::FromDouble( aModel->rotation.z ) );
|
||||
|
||||
xoff->SetValue( wxString::FromDouble( aModel->offset.x ) );
|
||||
yoff->SetValue( wxString::FromDouble( aModel->offset.y ) );
|
||||
zoff->SetValue( wxString::FromDouble( aModel->offset.z ) );
|
||||
xoff->ChangeValue( wxString::FromDouble( aModel->offset.x ) );
|
||||
yoff->ChangeValue( wxString::FromDouble( aModel->offset.y ) );
|
||||
zoff->ChangeValue( wxString::FromDouble( aModel->offset.z ) );
|
||||
|
||||
modelInfo = *aModel;
|
||||
UpdateModelName( aModel->filename );
|
||||
|
@ -556,7 +569,11 @@ void PANEL_PREV_3D::UpdateModelName( wxString const& aModelName )
|
|||
std::cout << "[3dv] Update Model: painting black\n";
|
||||
#endif
|
||||
if( NULL != canvas )
|
||||
{
|
||||
canvas->Clear3DModel();
|
||||
canvas->Refresh();
|
||||
canvas->Update();
|
||||
}
|
||||
|
||||
if( model )
|
||||
S3D::Destroy3DModel( &model );
|
||||
|
@ -644,3 +661,78 @@ void PANEL_PREV_3D::resize( wxSizeEvent &event )
|
|||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void PANEL_PREV_3D::updateOrientation( wxCommandEvent &event )
|
||||
{
|
||||
// note: process even if the canvas is NULL since the user may
|
||||
// edit the filename to provide a valid file
|
||||
SGPOINT scale;
|
||||
SGPOINT rotation;
|
||||
SGPOINT offset;
|
||||
|
||||
getOrientationVars( scale, rotation, offset );
|
||||
|
||||
modelInfo.scale = scale;
|
||||
modelInfo.offset = offset;
|
||||
modelInfo.rotation = rotation;
|
||||
|
||||
if( NULL == canvas )
|
||||
return;
|
||||
|
||||
canvas->Clear3DModel();
|
||||
|
||||
if( model )
|
||||
S3D::Destroy3DModel( &model );
|
||||
|
||||
SGPOINT rot;
|
||||
SGPOINT trans;
|
||||
|
||||
model = m_ModelManager->Prepare( &modelInfo, rot, trans );
|
||||
|
||||
if( model )
|
||||
{
|
||||
canvas->Set3DModel( *model );
|
||||
canvas->Refresh();
|
||||
canvas->Update();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void PANEL_PREV_3D::getOrientationVars( SGPOINT& scale, SGPOINT& rotation, SGPOINT& offset )
|
||||
{
|
||||
if( NULL == xscale || NULL == yscale || NULL == zscale
|
||||
|| NULL == xrot || NULL == yrot || NULL == zrot
|
||||
|| NULL == xoff || NULL == yoff || NULL == zoff )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
xscale->GetValue().ToDouble( &scale.x );
|
||||
yscale->GetValue().ToDouble( &scale.y );
|
||||
zscale->GetValue().ToDouble( &scale.z );
|
||||
|
||||
if( 0.001 > scale.x || 0.001 > scale.y || 0.001 > scale.z )
|
||||
{
|
||||
std::cerr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n";
|
||||
std::cerr << " * [INFO] invalid scale values; setting all to 1.0\n";
|
||||
scale.x = 1.0;
|
||||
scale.y = 1.0;
|
||||
scale.z = 1.0;
|
||||
}
|
||||
|
||||
xrot->GetValue().ToDouble( &rotation.x );
|
||||
yrot->GetValue().ToDouble( &rotation.y );
|
||||
zrot->GetValue().ToDouble( &rotation.z );
|
||||
checkRotation( rotation.x );
|
||||
checkRotation( rotation.y );
|
||||
checkRotation( rotation.z );
|
||||
|
||||
xoff->GetValue().ToDouble( &offset.x );
|
||||
yoff->GetValue().ToDouble( &offset.y );
|
||||
zoff->GetValue().ToDouble( &offset.z );
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -91,6 +91,9 @@ private:
|
|||
private:
|
||||
void updateDirChoiceList( void );
|
||||
void resize( wxSizeEvent &event );
|
||||
void updateOrientation( wxCommandEvent &event );
|
||||
|
||||
void getOrientationVars( SGPOINT& scale, SGPOINT& rotation, SGPOINT& offset );
|
||||
|
||||
wxDECLARE_EVENT_TABLE();
|
||||
};
|
||||
|
|
|
@ -30,6 +30,11 @@
|
|||
#include "3d_viewer.h"
|
||||
#include "3d_struct.h"
|
||||
#include "modelparsers.h"
|
||||
#include <kiway.h>
|
||||
#include <3d_cache.h>
|
||||
#include <3d_filename_resolver.h>
|
||||
|
||||
extern KIWAY* TheKiway;
|
||||
|
||||
|
||||
void S3D_MASTER::Insert( S3D_MATERIAL* aMaterial )
|
||||
|
@ -136,22 +141,8 @@ void S3D_MASTER::SetShape3DName( const wxString& aShapeName )
|
|||
else
|
||||
m_Shape3DFullFilename = m_Shape3DName;
|
||||
|
||||
wxFileName fnFull( m_Shape3DFullFilename );
|
||||
|
||||
if( !( fnFull.IsAbsolute() || m_Shape3DFullFilename.StartsWith( wxT(".") ) ) )
|
||||
{
|
||||
wxString default_path;
|
||||
wxGetEnv( KISYS3DMOD, &default_path );
|
||||
|
||||
if( !( default_path.IsEmpty() ) )
|
||||
{
|
||||
|
||||
if( !default_path.EndsWith( wxT("/") ) && !default_path.EndsWith( wxT("\\") ) )
|
||||
default_path += wxT("/");
|
||||
|
||||
m_Shape3DFullFilename = default_path + m_Shape3DFullFilename;
|
||||
}
|
||||
}
|
||||
m_Shape3DFullFilename = TheKiway->Prj().Get3DCacheManager()->GetResolver()
|
||||
->ResolvePath( m_Shape3DFullFilename );
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -247,26 +247,26 @@ void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event )
|
|||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
ogl_set_arrow_material();
|
||||
|
||||
glColor3f( 0.9f, 0.0f, 0.0f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( RANGE_SCALE_3D / 1.0f, 0.0f, 0.0f ),
|
||||
0.2f );
|
||||
|
||||
glColor3f( 0.0f, 0.9f, 0.0f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( 0.0f, RANGE_SCALE_3D / 1.0f, 0.0f ),
|
||||
0.2f );
|
||||
|
||||
glColor3f( 0.0f, 0.0f, 0.9f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( 0.0f, 0.0f, RANGE_SCALE_3D / 1.0f ),
|
||||
0.2f );
|
||||
|
||||
// Render Model
|
||||
if( m_ogl_3dmodel )
|
||||
{
|
||||
ogl_set_arrow_material();
|
||||
|
||||
glColor3f( 0.9f, 0.0f, 0.0f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( RANGE_SCALE_3D / 1.0f, 0.0f, 0.0f ),
|
||||
0.2f );
|
||||
|
||||
glColor3f( 0.0f, 0.9f, 0.0f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( 0.0f, RANGE_SCALE_3D / 1.0f, 0.0f ),
|
||||
0.2f );
|
||||
|
||||
glColor3f( 0.0f, 0.0f, 0.9f );
|
||||
OGL_draw_arrow( SFVEC3F( 0.0f, 0.0f, 0.0f ),
|
||||
SFVEC3F( 0.0f, 0.0f, RANGE_SCALE_3D / 1.0f ),
|
||||
0.2f );
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
double modelunit_to_3d_units_factor = m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
||||
|
|
|
@ -348,7 +348,8 @@ void CBBOX::ApplyTransformation( glm::mat4 aTransformMatrix )
|
|||
|
||||
void CBBOX::ApplyTransformationAA( glm::mat4 aTransformMatrix )
|
||||
{
|
||||
wxASSERT( IsInitialized() );
|
||||
// XXX - CB - commented out because it spams the legacy renderer
|
||||
// wxASSERT( IsInitialized() );
|
||||
|
||||
// apply the transformation matrix for each of vertices of the bounding box
|
||||
// and make a union with all vertices
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
#include <pgm_base.h>
|
||||
#include <wxstruct.h>
|
||||
#include <confirm.h>
|
||||
#include <3d_viewer.h>
|
||||
#include <pcbcommon.h>
|
||||
|
||||
#include <cvpcb.h>
|
||||
|
@ -56,6 +55,7 @@ const wxString EquFileExtension( wxT( "equ" ) );
|
|||
// Wildcard for schematic retroannotation (import footprint names in schematic):
|
||||
const wxString EquFilesWildcard( _( "Component/footprint equ files (*.equ)|*.equ" ) );
|
||||
|
||||
KIWAY* TheKiway = NULL;
|
||||
|
||||
namespace CV {
|
||||
|
||||
|
@ -78,6 +78,7 @@ static struct IFACE : public KIFACE_I
|
|||
case FRAME_CVPCB:
|
||||
{
|
||||
CVPCB_MAINFRAME* frame = new CVPCB_MAINFRAME( aKiway, aParent );
|
||||
TheKiway = aKiway;
|
||||
return frame;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -483,6 +483,8 @@ void DIALOG_MODULE_BOARD_EDITOR::Edit3DShapeFileName()
|
|||
delete m_Shapes3D_list[idx];
|
||||
m_Shapes3D_list[idx] = new3DShape;
|
||||
|
||||
Transfert3DValuesToDisplay( m_Shapes3D_list[idx] );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -349,6 +349,10 @@ void DIALOG_MODULE_MODULE_EDITOR::Edit3DShapeFileName()
|
|||
new3DShape->SetShape3DName( filename );
|
||||
delete m_shapes3D_list[idx];
|
||||
m_shapes3D_list[idx] = new3DShape;
|
||||
|
||||
Transfert3DValuesToDisplay( m_shapes3D_list[idx] );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,6 @@
|
|||
#include <hotkeys.h>
|
||||
#include <wildcards_and_files_ext.h>
|
||||
#include <class_board.h>
|
||||
#include <3d_viewer.h>
|
||||
#include <fp_lib_table.h>
|
||||
#include <module_editor_frame.h>
|
||||
#include <modview_frame.h>
|
||||
|
@ -95,6 +94,7 @@ wxString g_DocModulesFileName = wxT( "footprints_doc/footprints.pdf" );
|
|||
DLIST<TRACK> g_CurrentTrackList;
|
||||
|
||||
bool g_DumpZonesWhenFilling = false;
|
||||
KIWAY* TheKiway = NULL;
|
||||
|
||||
namespace PCB {
|
||||
|
||||
|
@ -118,6 +118,7 @@ static struct IFACE : public KIFACE_I
|
|||
{
|
||||
case FRAME_PCB:
|
||||
frame = dynamic_cast< wxWindow* >( new PCB_EDIT_FRAME( aKiway, aParent ) );
|
||||
TheKiway = aKiway;
|
||||
|
||||
#if defined( KICAD_SCRIPTING )
|
||||
// give the scripting helpers access to our frame
|
||||
|
|
Loading…
Reference in New Issue