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 <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <wx/sizer.h>
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/valnum.h>
|
||||||
#include <wx/choice.h>
|
#include <wx/choice.h>
|
||||||
#include <wx/filename.h>
|
#include <wx/filename.h>
|
||||||
#include <wx/glcanvas.h>
|
#include <wx/glcanvas.h>
|
||||||
|
@ -63,6 +64,15 @@ static void checkRotation( double& rot )
|
||||||
enum {
|
enum {
|
||||||
ID_SET_DIR = wxID_LAST + 1,
|
ID_SET_DIR = wxID_LAST + 1,
|
||||||
ID_CFG_PATHS,
|
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_ISO,
|
||||||
ID_3D_UPDATE,
|
ID_3D_UPDATE,
|
||||||
ID_3D_LEFT,
|
ID_3D_LEFT,
|
||||||
|
@ -76,6 +86,15 @@ enum {
|
||||||
wxBEGIN_EVENT_TABLE( PANEL_PREV_3D, wxPanel)
|
wxBEGIN_EVENT_TABLE( PANEL_PREV_3D, wxPanel)
|
||||||
EVT_SIZE( PANEL_PREV_3D::resize )
|
EVT_SIZE( PANEL_PREV_3D::resize )
|
||||||
EVT_CHOICE( ID_SET_DIR, PANEL_PREV_3D::SetRootDir )
|
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_CFG_PATHS, PANEL_PREV_3D::Cfg3DPaths )
|
||||||
EVT_BUTTON( ID_3D_ISO, PANEL_PREV_3D::View3DISO )
|
EVT_BUTTON( ID_3D_ISO, PANEL_PREV_3D::View3DISO )
|
||||||
EVT_BUTTON( ID_3D_UPDATE, PANEL_PREV_3D::View3DUpdate )
|
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;
|
m_FileDlg = NULL;
|
||||||
canvas = NULL;
|
canvas = NULL;
|
||||||
model = 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 );
|
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 );
|
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* vbScale = new wxStaticBoxSizer( wxVERTICAL, this, _( "Scale" ) );
|
||||||
wxStaticBoxSizer* vbRotate = new wxStaticBoxSizer( wxVERTICAL, this, _( "Rotation" ) );
|
wxStaticBoxSizer* vbRotate = new wxStaticBoxSizer( wxVERTICAL, this, _( "Rotation" ) );
|
||||||
wxStaticBoxSizer* vbOffset = new wxStaticBoxSizer( wxVERTICAL, this, _( "Offset (inches)" ) );
|
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* txtS1 = new wxStaticText( modScale, -1, wxT( "X:" ) );
|
||||||
wxStaticText* txtS2 = new wxStaticText( modScale, -1, wxT( "Y:" ) );
|
wxStaticText* txtS2 = new wxStaticText( modScale, -1, wxT( "Y:" ) );
|
||||||
wxStaticText* txtS3 = new wxStaticText( modScale, -1, wxT( "Z:" ) );
|
wxStaticText* txtS3 = new wxStaticText( modScale, -1, wxT( "Z:" ) );
|
||||||
xscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
xscale = new wxTextCtrl( modScale, ID_SCALEX, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valScale );
|
||||||
yscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
yscale = new wxTextCtrl( modScale, ID_SCALEY, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valScale );
|
||||||
zscale = new wxTextCtrl( modScale, -1, "1.0", wxDefaultPosition, wxDefaultSize,
|
zscale = new wxTextCtrl( modScale, ID_SCALEZ, "1.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valScale );
|
||||||
xscale->SetMaxLength( 9 );
|
xscale->SetMaxLength( 9 );
|
||||||
yscale->SetMaxLength( 9 );
|
yscale->SetMaxLength( 9 );
|
||||||
zscale->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* hbR1 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
wxBoxSizer* hbR2 = new wxBoxSizer( wxHORIZONTAL );
|
wxBoxSizer* hbR2 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
wxBoxSizer* hbR3 = new wxBoxSizer( wxHORIZONTAL );
|
wxBoxSizer* hbR3 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
wxStaticText* txtR1 = new wxStaticText( modRotate, -1, wxT( "X:" ) );
|
wxStaticText* txtR1 = new wxStaticText( modRotate, ID_ROTX, wxT( "X:" ) );
|
||||||
wxStaticText* txtR2 = new wxStaticText( modRotate, -1, wxT( "Y:" ) );
|
wxStaticText* txtR2 = new wxStaticText( modRotate, ID_ROTY, wxT( "Y:" ) );
|
||||||
wxStaticText* txtR3 = new wxStaticText( modRotate, -1, wxT( "Z:" ) );
|
wxStaticText* txtR3 = new wxStaticText( modRotate, ID_ROTZ, wxT( "Z:" ) );
|
||||||
xrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
xrot = new wxTextCtrl( modRotate, ID_ROTX, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valRotate );
|
||||||
yrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
yrot = new wxTextCtrl( modRotate, ID_ROTY, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valRotate );
|
||||||
zrot = new wxTextCtrl( modRotate, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
zrot = new wxTextCtrl( modRotate, ID_ROTZ, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valRotate );
|
||||||
xrot->SetMaxLength( 9 );
|
xrot->SetMaxLength( 9 );
|
||||||
yrot->SetMaxLength( 9 );
|
yrot->SetMaxLength( 9 );
|
||||||
zrot->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* txtO1 = new wxStaticText( modOffset, -1, wxT( "X:" ) );
|
||||||
wxStaticText* txtO2 = new wxStaticText( modOffset, -1, wxT( "Y:" ) );
|
wxStaticText* txtO2 = new wxStaticText( modOffset, -1, wxT( "Y:" ) );
|
||||||
wxStaticText* txtO3 = new wxStaticText( modOffset, -1, wxT( "Z:" ) );
|
wxStaticText* txtO3 = new wxStaticText( modOffset, -1, wxT( "Z:" ) );
|
||||||
xoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
xoff = new wxTextCtrl( modOffset, ID_OFFX, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valOffset );
|
||||||
yoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
yoff = new wxTextCtrl( modOffset, ID_OFFY, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valOffset );
|
||||||
zoff = new wxTextCtrl( modOffset, -1, "0.0", wxDefaultPosition, wxDefaultSize,
|
zoff = new wxTextCtrl( modOffset, ID_OFFZ, "0.0", wxDefaultPosition, wxDefaultSize,
|
||||||
wxTE_PROCESS_ENTER );
|
wxTE_PROCESS_ENTER, valOffset );
|
||||||
xoff->SetMaxLength( 9 );
|
xoff->SetMaxLength( 9 );
|
||||||
yoff->SetMaxLength( 9 );
|
yoff->SetMaxLength( 9 );
|
||||||
zoff->SetMaxLength( 9 );
|
zoff->SetMaxLength( 9 );
|
||||||
|
@ -443,29 +478,7 @@ void PANEL_PREV_3D::GetModelData( S3D_INFO* aModel )
|
||||||
SGPOINT rotation;
|
SGPOINT rotation;
|
||||||
SGPOINT offset;
|
SGPOINT offset;
|
||||||
|
|
||||||
xscale->GetValue().ToDouble( &scale.x );
|
getOrientationVars( scale, rotation, offset );
|
||||||
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 );
|
|
||||||
|
|
||||||
aModel->scale = scale;
|
aModel->scale = scale;
|
||||||
aModel->offset = offset;
|
aModel->offset = offset;
|
||||||
|
@ -487,17 +500,17 @@ void PANEL_PREV_3D::GetModelData( S3D_INFO* aModel )
|
||||||
|
|
||||||
void PANEL_PREV_3D::SetModelData( S3D_INFO const* aModel )
|
void PANEL_PREV_3D::SetModelData( S3D_INFO const* aModel )
|
||||||
{
|
{
|
||||||
xscale->SetValue( wxString::FromDouble( aModel->scale.x ) );
|
xscale->ChangeValue( wxString::FromDouble( aModel->scale.x ) );
|
||||||
yscale->SetValue( wxString::FromDouble( aModel->scale.y ) );
|
yscale->ChangeValue( wxString::FromDouble( aModel->scale.y ) );
|
||||||
zscale->SetValue( wxString::FromDouble( aModel->scale.z ) );
|
zscale->ChangeValue( wxString::FromDouble( aModel->scale.z ) );
|
||||||
|
|
||||||
xrot->SetValue( wxString::FromDouble( aModel->rotation.x ) );
|
xrot->ChangeValue( wxString::FromDouble( aModel->rotation.x ) );
|
||||||
yrot->SetValue( wxString::FromDouble( aModel->rotation.y ) );
|
yrot->ChangeValue( wxString::FromDouble( aModel->rotation.y ) );
|
||||||
zrot->SetValue( wxString::FromDouble( aModel->rotation.z ) );
|
zrot->ChangeValue( wxString::FromDouble( aModel->rotation.z ) );
|
||||||
|
|
||||||
xoff->SetValue( wxString::FromDouble( aModel->offset.x ) );
|
xoff->ChangeValue( wxString::FromDouble( aModel->offset.x ) );
|
||||||
yoff->SetValue( wxString::FromDouble( aModel->offset.y ) );
|
yoff->ChangeValue( wxString::FromDouble( aModel->offset.y ) );
|
||||||
zoff->SetValue( wxString::FromDouble( aModel->offset.z ) );
|
zoff->ChangeValue( wxString::FromDouble( aModel->offset.z ) );
|
||||||
|
|
||||||
modelInfo = *aModel;
|
modelInfo = *aModel;
|
||||||
UpdateModelName( aModel->filename );
|
UpdateModelName( aModel->filename );
|
||||||
|
@ -556,7 +569,11 @@ void PANEL_PREV_3D::UpdateModelName( wxString const& aModelName )
|
||||||
std::cout << "[3dv] Update Model: painting black\n";
|
std::cout << "[3dv] Update Model: painting black\n";
|
||||||
#endif
|
#endif
|
||||||
if( NULL != canvas )
|
if( NULL != canvas )
|
||||||
|
{
|
||||||
canvas->Clear3DModel();
|
canvas->Clear3DModel();
|
||||||
|
canvas->Refresh();
|
||||||
|
canvas->Update();
|
||||||
|
}
|
||||||
|
|
||||||
if( model )
|
if( model )
|
||||||
S3D::Destroy3DModel( &model );
|
S3D::Destroy3DModel( &model );
|
||||||
|
@ -644,3 +661,78 @@ void PANEL_PREV_3D::resize( wxSizeEvent &event )
|
||||||
|
|
||||||
return;
|
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:
|
private:
|
||||||
void updateDirChoiceList( void );
|
void updateDirChoiceList( void );
|
||||||
void resize( wxSizeEvent &event );
|
void resize( wxSizeEvent &event );
|
||||||
|
void updateOrientation( wxCommandEvent &event );
|
||||||
|
|
||||||
|
void getOrientationVars( SGPOINT& scale, SGPOINT& rotation, SGPOINT& offset );
|
||||||
|
|
||||||
wxDECLARE_EVENT_TABLE();
|
wxDECLARE_EVENT_TABLE();
|
||||||
};
|
};
|
||||||
|
|
|
@ -30,6 +30,11 @@
|
||||||
#include "3d_viewer.h"
|
#include "3d_viewer.h"
|
||||||
#include "3d_struct.h"
|
#include "3d_struct.h"
|
||||||
#include "modelparsers.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 )
|
void S3D_MASTER::Insert( S3D_MATERIAL* aMaterial )
|
||||||
|
@ -136,22 +141,8 @@ void S3D_MASTER::SetShape3DName( const wxString& aShapeName )
|
||||||
else
|
else
|
||||||
m_Shape3DFullFilename = m_Shape3DName;
|
m_Shape3DFullFilename = m_Shape3DName;
|
||||||
|
|
||||||
wxFileName fnFull( m_Shape3DFullFilename );
|
m_Shape3DFullFilename = TheKiway->Prj().Get3DCacheManager()->GetResolver()
|
||||||
|
->ResolvePath( 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,26 +247,26 @@ void C3D_MODEL_VIEWER::OnPaint( wxPaintEvent &event )
|
||||||
glEnable(GL_LIGHTING);
|
glEnable(GL_LIGHTING);
|
||||||
glEnable(GL_LIGHT0);
|
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
|
// Render Model
|
||||||
if( m_ogl_3dmodel )
|
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();
|
glPushMatrix();
|
||||||
|
|
||||||
double modelunit_to_3d_units_factor = m_BiuTo3Dunits * UNITS3D_TO_UNITSPCB;
|
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 )
|
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
|
// apply the transformation matrix for each of vertices of the bounding box
|
||||||
// and make a union with all vertices
|
// and make a union with all vertices
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <wxstruct.h>
|
#include <wxstruct.h>
|
||||||
#include <confirm.h>
|
#include <confirm.h>
|
||||||
#include <3d_viewer.h>
|
|
||||||
#include <pcbcommon.h>
|
#include <pcbcommon.h>
|
||||||
|
|
||||||
#include <cvpcb.h>
|
#include <cvpcb.h>
|
||||||
|
@ -56,6 +55,7 @@ const wxString EquFileExtension( wxT( "equ" ) );
|
||||||
// Wildcard for schematic retroannotation (import footprint names in schematic):
|
// Wildcard for schematic retroannotation (import footprint names in schematic):
|
||||||
const wxString EquFilesWildcard( _( "Component/footprint equ files (*.equ)|*.equ" ) );
|
const wxString EquFilesWildcard( _( "Component/footprint equ files (*.equ)|*.equ" ) );
|
||||||
|
|
||||||
|
KIWAY* TheKiway = NULL;
|
||||||
|
|
||||||
namespace CV {
|
namespace CV {
|
||||||
|
|
||||||
|
@ -78,6 +78,7 @@ static struct IFACE : public KIFACE_I
|
||||||
case FRAME_CVPCB:
|
case FRAME_CVPCB:
|
||||||
{
|
{
|
||||||
CVPCB_MAINFRAME* frame = new CVPCB_MAINFRAME( aKiway, aParent );
|
CVPCB_MAINFRAME* frame = new CVPCB_MAINFRAME( aKiway, aParent );
|
||||||
|
TheKiway = aKiway;
|
||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -483,6 +483,8 @@ void DIALOG_MODULE_BOARD_EDITOR::Edit3DShapeFileName()
|
||||||
delete m_Shapes3D_list[idx];
|
delete m_Shapes3D_list[idx];
|
||||||
m_Shapes3D_list[idx] = new3DShape;
|
m_Shapes3D_list[idx] = new3DShape;
|
||||||
|
|
||||||
|
Transfert3DValuesToDisplay( m_Shapes3D_list[idx] );
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -349,6 +349,10 @@ void DIALOG_MODULE_MODULE_EDITOR::Edit3DShapeFileName()
|
||||||
new3DShape->SetShape3DName( filename );
|
new3DShape->SetShape3DName( filename );
|
||||||
delete m_shapes3D_list[idx];
|
delete m_shapes3D_list[idx];
|
||||||
m_shapes3D_list[idx] = new3DShape;
|
m_shapes3D_list[idx] = new3DShape;
|
||||||
|
|
||||||
|
Transfert3DValuesToDisplay( m_shapes3D_list[idx] );
|
||||||
|
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
#include <hotkeys.h>
|
#include <hotkeys.h>
|
||||||
#include <wildcards_and_files_ext.h>
|
#include <wildcards_and_files_ext.h>
|
||||||
#include <class_board.h>
|
#include <class_board.h>
|
||||||
#include <3d_viewer.h>
|
|
||||||
#include <fp_lib_table.h>
|
#include <fp_lib_table.h>
|
||||||
#include <module_editor_frame.h>
|
#include <module_editor_frame.h>
|
||||||
#include <modview_frame.h>
|
#include <modview_frame.h>
|
||||||
|
@ -95,6 +94,7 @@ wxString g_DocModulesFileName = wxT( "footprints_doc/footprints.pdf" );
|
||||||
DLIST<TRACK> g_CurrentTrackList;
|
DLIST<TRACK> g_CurrentTrackList;
|
||||||
|
|
||||||
bool g_DumpZonesWhenFilling = false;
|
bool g_DumpZonesWhenFilling = false;
|
||||||
|
KIWAY* TheKiway = NULL;
|
||||||
|
|
||||||
namespace PCB {
|
namespace PCB {
|
||||||
|
|
||||||
|
@ -118,6 +118,7 @@ static struct IFACE : public KIFACE_I
|
||||||
{
|
{
|
||||||
case FRAME_PCB:
|
case FRAME_PCB:
|
||||||
frame = dynamic_cast< wxWindow* >( new PCB_EDIT_FRAME( aKiway, aParent ) );
|
frame = dynamic_cast< wxWindow* >( new PCB_EDIT_FRAME( aKiway, aParent ) );
|
||||||
|
TheKiway = aKiway;
|
||||||
|
|
||||||
#if defined( KICAD_SCRIPTING )
|
#if defined( KICAD_SCRIPTING )
|
||||||
// give the scripting helpers access to our frame
|
// give the scripting helpers access to our frame
|
||||||
|
|
Loading…
Reference in New Issue