Commit 04bf11c2 authored by Wayne Stambaugh's avatar Wayne Stambaugh
Browse files

Change PCBNew and CVPCB 3D viewer focus behavior. (fixes lp:818890)

* Raise 3D frame in PCB editor and module editor instead of displaying a message
  dialog indicating that the 3D viewer is already open.
* Raise 3D viewer and module viewer in CVPCB to mimic the behavior changed in
  PCBNew.
* Set focus to OpenGL canvas when creating 3D viewer so mouse wheel events
  are handled on Windows without having to click on the canvas.
* Rename 3D viewer frame class from WinEDA3D_DrawFrame to EDA_3D_FRAME.
* The usual smattering of coding policy fixes.
parent f60c9823
Loading
Loading
Loading
Loading
+38 −30
Original line number Original line Diff line number Diff line
@@ -48,6 +48,7 @@ void CheckGLError()
    }
    }
}
}



/*
/*
 * Pcb3D_GLCanvas implementation
 * Pcb3D_GLCanvas implementation
 */
 */
@@ -65,11 +66,11 @@ EVT_MOTION( Pcb3D_GLCanvas::OnMouseMove )


    // other events
    // other events
    EVT_ERASE_BACKGROUND( Pcb3D_GLCanvas::OnEraseBackground )
    EVT_ERASE_BACKGROUND( Pcb3D_GLCanvas::OnEraseBackground )
EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START, ID_POPUP_3D_VIEW_END,
    EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START, ID_POPUP_3D_VIEW_END, Pcb3D_GLCanvas::OnPopUpMenu )
                Pcb3D_GLCanvas::OnPopUpMenu )
END_EVENT_TABLE()
END_EVENT_TABLE()


Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :

Pcb3D_GLCanvas::Pcb3D_GLCanvas( EDA_3D_FRAME* parent, int* attribList ) :
#if wxCHECK_VERSION( 2, 7, 0 )
#if wxCHECK_VERSION( 2, 7, 0 )
    wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
    wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
                wxFULL_REPAINT_ON_RESIZE )
                wxFULL_REPAINT_ON_RESIZE )
@@ -78,7 +79,7 @@ Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :
                wxFULL_REPAINT_ON_RESIZE )
                wxFULL_REPAINT_ON_RESIZE )
#endif
#endif
{
{
    m_init   = FALSE;
    m_init   = false;
    m_gllist = 0;
    m_gllist = 0;
    m_Parent = parent;
    m_Parent = parent;
    m_ortho  = false;
    m_ortho  = false;
@@ -96,7 +97,8 @@ Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :
Pcb3D_GLCanvas::~Pcb3D_GLCanvas()
Pcb3D_GLCanvas::~Pcb3D_GLCanvas()
{
{
    ClearLists();
    ClearLists();
    m_init = FALSE;
    m_init = false;

#if wxCHECK_VERSION( 2, 7, 0 )
#if wxCHECK_VERSION( 2, 7, 0 )
    delete m_glRC;
    delete m_glRC;
#endif
#endif
@@ -107,6 +109,7 @@ void Pcb3D_GLCanvas::ClearLists()
{
{
    if( m_gllist > 0 )
    if( m_gllist > 0 )
        glDeleteLists( m_gllist, 1 );
        glDeleteLists( m_gllist, 1 );

    m_gllist = 0;
    m_gllist = 0;
}
}


@@ -230,7 +233,7 @@ void Pcb3D_GLCanvas::SetView3D( int keycode )
    }
    }


    DisplayStatus();
    DisplayStatus();
    Refresh( FALSE );
    Refresh( false );
}
}




@@ -269,13 +272,15 @@ void Pcb3D_GLCanvas::OnMouseWheel( wxMouseEvent& event )
        if( event.GetWheelRotation() > 0 )
        if( event.GetWheelRotation() > 0 )
        {
        {
            g_Parm_3D_Visu.m_Zoom /= 1.4;
            g_Parm_3D_Visu.m_Zoom /= 1.4;

            if( g_Parm_3D_Visu.m_Zoom <= 0.01 )
            if( g_Parm_3D_Visu.m_Zoom <= 0.01 )
                g_Parm_3D_Visu.m_Zoom = 0.01;
                g_Parm_3D_Visu.m_Zoom = 0.01;
        }
        }
        else
        else
            g_Parm_3D_Visu.m_Zoom *= 1.4;
            g_Parm_3D_Visu.m_Zoom *= 1.4;

        DisplayStatus();
        DisplayStatus();
        Refresh( FALSE );
        Refresh( false );
    }
    }


    g_Parm_3D_Visu.m_Beginx = event.GetX();
    g_Parm_3D_Visu.m_Beginx = event.GetX();
@@ -316,7 +321,7 @@ void Pcb3D_GLCanvas::OnMouseMove( wxMouseEvent& event )


        /* orientation has changed, redraw mesh */
        /* orientation has changed, redraw mesh */
        DisplayStatus();
        DisplayStatus();
        Refresh( FALSE );
        Refresh( false );
    }
    }


    g_Parm_3D_Visu.m_Beginx = event.GetX();
    g_Parm_3D_Visu.m_Beginx = event.GetX();
@@ -500,7 +505,7 @@ void Pcb3D_GLCanvas::InitGL()


    if( !m_init )
    if( !m_init )
    {
    {
        m_init = TRUE;
        m_init = true;
        g_Parm_3D_Visu.m_Zoom = 1.0;
        g_Parm_3D_Visu.m_Zoom = 1.0;
        ZBottom = 1.0; ZTop = 10.0;
        ZBottom = 1.0; ZTop = 10.0;


@@ -534,10 +539,13 @@ void Pcb3D_GLCanvas::InitGL()


     if( ModeIsOrtho() )
     if( ModeIsOrtho() )
     {
     {
         // OrthoReductionFactor is chosen so as to provide roughly the same size as Perspective View
         // OrthoReductionFactor is chosen so as to provide roughly the same size as
         // Perspective View
         const double orthoReductionFactor = 400 / g_Parm_3D_Visu.m_Zoom;
         const double orthoReductionFactor = 400 / g_Parm_3D_Visu.m_Zoom;

         // Initialize Projection Matrix for Ortographic View
         // Initialize Projection Matrix for Ortographic View
         glOrtho(-size.x/orthoReductionFactor, size.x/orthoReductionFactor, -size.y/orthoReductionFactor, size.y/orthoReductionFactor, 1, 10);
         glOrtho( -size.x / orthoReductionFactor, size.x / orthoReductionFactor,
                  -size.y / orthoReductionFactor, size.y / orthoReductionFactor, 1, 10 );
     }
     }
     else
     else
     {
     {
@@ -601,10 +609,11 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event )
    wxFileName fn( m_Parent->m_Parent->GetScreen()->GetFileName() );
    wxFileName fn( m_Parent->m_Parent->GetScreen()->GetFileName() );
    wxString   FullFileName;
    wxString   FullFileName;
    wxString   file_ext, mask;
    wxString   file_ext, mask;
    bool       fmt_is_jpeg = FALSE;
    bool       fmt_is_jpeg = false;


    if( event.GetId() == ID_MENU_SCREENCOPY_JPEG )
    if( event.GetId() == ID_MENU_SCREENCOPY_JPEG )
        fmt_is_jpeg = TRUE;
        fmt_is_jpeg = true;

    if( event.GetId() != ID_TOOL_SCREENCOPY_TOCLIBBOARD )
    if( event.GetId() != ID_TOOL_SCREENCOPY_TOCLIBBOARD )
    {
    {
        file_ext     = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" );
        file_ext     = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" );
@@ -612,10 +621,9 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event )
        FullFileName = m_Parent->m_Parent->GetScreen()->GetFileName();
        FullFileName = m_Parent->m_Parent->GetScreen()->GetFileName();
        fn.SetExt( file_ext );
        fn.SetExt( file_ext );


        FullFileName =
        FullFileName = EDA_FileSelector( _( "3D Image filename:" ), wxEmptyString,
            EDA_FileSelector( _( "3D Image filename:" ), wxEmptyString,
                                         fn.GetFullName(), file_ext, mask, this,
                                         fn.GetFullName(), file_ext, mask, this,
                              wxFD_SAVE, TRUE );
                                         wxFD_SAVE, true );


        if( FullFileName.IsEmpty() )
        if( FullFileName.IsEmpty() )
            return;
            return;
@@ -661,6 +669,7 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event )
    {
    {
        wxBitmapDataObject* dobjBmp = new wxBitmapDataObject;
        wxBitmapDataObject* dobjBmp = new wxBitmapDataObject;
        dobjBmp->SetBitmap( bitmap );
        dobjBmp->SetBitmap( bitmap );

        if( wxTheClipboard->Open() )
        if( wxTheClipboard->Open() )
        {
        {
            if( !wxTheClipboard->SetData( dobjBmp ) )
            if( !wxTheClipboard->SetData( dobjBmp ) )
@@ -677,8 +686,7 @@ void Pcb3D_GLCanvas::TakeScreenshot( wxCommandEvent& event )
        wxImage image = bitmap.ConvertToImage();
        wxImage image = bitmap.ConvertToImage();


        if( !image.SaveFile( FullFileName,
        if( !image.SaveFile( FullFileName,
                             fmt_is_jpeg ? wxBITMAP_TYPE_JPEG :
                             fmt_is_jpeg ? wxBITMAP_TYPE_JPEG : wxBITMAP_TYPE_PNG ) )
                             wxBITMAP_TYPE_PNG ) )
            wxMessageBox( _( "Can't save file" ) );
            wxMessageBox( _( "Can't save file" ) );


        image.Destroy();
        image.Destroy();
+67 −63
Original line number Original line Diff line number Diff line
@@ -23,22 +23,19 @@ double ZTop;
double       DataScale3D; // 3D conversion units.
double       DataScale3D; // 3D conversion units.




BEGIN_EVENT_TABLE( WinEDA3D_DrawFrame, wxFrame )
BEGIN_EVENT_TABLE( EDA_3D_FRAME, wxFrame )
    EVT_ACTIVATE( WinEDA3D_DrawFrame::OnActivate )
    EVT_ACTIVATE( EDA_3D_FRAME::OnActivate )
    EVT_TOOL_RANGE( ID_ZOOM_IN, ID_ZOOM_PAGE, WinEDA3D_DrawFrame::Process_Zoom )
    EVT_TOOL_RANGE( ID_ZOOM_IN, ID_ZOOM_PAGE, EDA_3D_FRAME::Process_Zoom )
    EVT_TOOL_RANGE( ID_START_COMMAND_3D, ID_END_COMMAND_3D,
    EVT_TOOL_RANGE( ID_START_COMMAND_3D, ID_END_COMMAND_3D,
                    WinEDA3D_DrawFrame::Process_Special_Functions )
                    EDA_3D_FRAME::Process_Special_Functions )
    EVT_MENU( wxID_EXIT, WinEDA3D_DrawFrame::Exit3DFrame )
    EVT_MENU( wxID_EXIT, EDA_3D_FRAME::Exit3DFrame )
    EVT_MENU( ID_MENU_SCREENCOPY_PNG,
    EVT_MENU( ID_MENU_SCREENCOPY_PNG, EDA_3D_FRAME::Process_Special_Functions )
              WinEDA3D_DrawFrame::Process_Special_Functions )
    EVT_MENU( ID_MENU_SCREENCOPY_JPEG, EDA_3D_FRAME::Process_Special_Functions )
    EVT_MENU( ID_MENU_SCREENCOPY_JPEG,
    EVT_CLOSE( EDA_3D_FRAME::OnCloseWindow )
              WinEDA3D_DrawFrame::Process_Special_Functions )
    EVT_CLOSE( WinEDA3D_DrawFrame::OnCloseWindow )
END_EVENT_TABLE()
END_EVENT_TABLE()


WinEDA3D_DrawFrame::WinEDA3D_DrawFrame( PCB_BASE_FRAME* parent,

                                        const wxString& title,
EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent, const wxString& title, long style ) :
                                        long            style ) :
    wxFrame( parent, DISPLAY3D_FRAME, title, wxPoint( -1, -1 ), wxSize( -1, -1 ), style )
    wxFrame( parent, DISPLAY3D_FRAME, title, wxPoint( -1, -1 ), wxSize( -1, -1 ), style )
{
{
    m_FrameName     = wxT( "Frame3D" );
    m_FrameName     = wxT( "Frame3D" );
@@ -93,31 +90,37 @@ WinEDA3D_DrawFrame::WinEDA3D_DrawFrame( PCB_BASE_FRAME* parent,
                      wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane() );
                      wxAuiPaneInfo().Name( wxT( "DrawFrame" ) ).CentrePane() );


    m_auimgr.Update();
    m_auimgr.Update();

    // Fixes bug in Windows (XP and possibly others) where the canvas requires the focus
    // in order to receive mouse events.  Otherwise, the user has to click somewhere on
    // the canvas before it will respond to mouse wheel events.
    m_Canvas->SetFocus();
}
}




void WinEDA3D_DrawFrame::Exit3DFrame( wxCommandEvent& event )
void EDA_3D_FRAME::Exit3DFrame( wxCommandEvent& event )
{
{
    Close( TRUE );
    Close( true );
}
}




void WinEDA3D_DrawFrame::OnCloseWindow( wxCloseEvent& Event )
void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
{
{
    SaveSettings();
    SaveSettings();

    if( m_Parent )
    if( m_Parent )
    {
    {
        m_Parent->m_Draw3DFrame = NULL;
        m_Parent->m_Draw3DFrame = NULL;
    }
    }

    Destroy();
    Destroy();
}
}




void WinEDA3D_DrawFrame::GetSettings()
void EDA_3D_FRAME::GetSettings()
{
{
    wxString  text;
    wxString  text;
    wxConfig* config = wxGetApp().m_EDA_Config;  // Current config used by
    wxConfig* config = wxGetApp().m_EDA_Config;  // Current config used by application
                                                 // application


    if( config )
    if( config )
    {
    {
@@ -129,12 +132,9 @@ void WinEDA3D_DrawFrame::GetSettings()
        config->Read( text, &m_FrameSize.x, 600 );
        config->Read( text, &m_FrameSize.x, 600 );
        text = m_FrameName + wxT( "Size_y" );
        text = m_FrameName + wxT( "Size_y" );
        config->Read( text, &m_FrameSize.y, 400 );
        config->Read( text, &m_FrameSize.y, 400 );
        config->Read( wxT( "BgColor_Red" ),
        config->Read( wxT( "BgColor_Red" ), &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
                      &g_Parm_3D_Visu.m_BgColor.m_Red, 0.0 );
        config->Read( wxT( "BgColor_Green" ), &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
        config->Read( wxT( "BgColor_Green" ),
        config->Read( wxT( "BgColor_Blue" ), &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
                      &g_Parm_3D_Visu.m_BgColor.m_Green, 0.0 );
        config->Read( wxT( "BgColor_Blue" ),
                      &g_Parm_3D_Visu.m_BgColor.m_Blue, 0.0 );
    }
    }
#if defined( __WXMAC__ )
#if defined( __WXMAC__ )
    // for macOSX, the window must be below system (macOSX) toolbar
    // for macOSX, the window must be below system (macOSX) toolbar
@@ -144,11 +144,10 @@ void WinEDA3D_DrawFrame::GetSettings()
}
}




void WinEDA3D_DrawFrame::SaveSettings()
void EDA_3D_FRAME::SaveSettings()
{
{
    wxString  text;
    wxString  text;
    wxConfig* Config = wxGetApp().m_EDA_Config;  //  Current config used by
    wxConfig* Config = wxGetApp().m_EDA_Config;  //  Current config used by application
                                                 // application


    if( !Config )
    if( !Config )
        return;
        return;
@@ -174,7 +173,7 @@ void WinEDA3D_DrawFrame::SaveSettings()
}
}




void WinEDA3D_DrawFrame::Process_Zoom( wxCommandEvent& event )
void EDA_3D_FRAME::Process_Zoom( wxCommandEvent& event )
{
{
    int ii;
    int ii;


@@ -206,34 +205,33 @@ void WinEDA3D_DrawFrame::Process_Zoom( wxCommandEvent& event )
        return;
        return;
    }
    }


    m_Canvas->Refresh( FALSE );
    m_Canvas->Refresh( false );
    m_Canvas->DisplayStatus();
    m_Canvas->DisplayStatus();
}
}




void WinEDA3D_DrawFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
void EDA_3D_FRAME::OnLeftClick( wxDC* DC, const wxPoint& MousePos )
{
{
}
}




void WinEDA3D_DrawFrame::OnRightClick( const wxPoint& MousePos,
void EDA_3D_FRAME::OnRightClick( const wxPoint& MousePos, wxMenu* PopMenu )
                                       wxMenu*        PopMenu )
{
{
}
}




double WinEDA3D_DrawFrame::BestZoom()
double EDA_3D_FRAME::BestZoom()
{
{
    return 1.0;
    return 1.0;
}
}




void WinEDA3D_DrawFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
void EDA_3D_FRAME::RedrawActiveWindow( wxDC* DC, bool EraseBg )
{
{
}
}




void WinEDA3D_DrawFrame::Process_Special_Functions( wxCommandEvent& event )
void EDA_3D_FRAME::Process_Special_Functions( wxCommandEvent& event )
{
{
#define ROT_ANGLE 10.0
#define ROT_ANGLE 10.0


@@ -327,8 +325,7 @@ void WinEDA3D_DrawFrame::Process_Special_Functions( wxCommandEvent& event )
        return;
        return;


    default:
    default:
        wxMessageBox( wxT( "WinEDA3D_DrawFrame::Process_Special_Functions() \
        wxMessageBox( wxT( "EDA_3D_FRAME::Process_Special_Functions() error: unknown command" ) );
error: unknown command" ) );
        return;
        return;
    }
    }


@@ -337,7 +334,7 @@ error: unknown command" ) );
}
}




void WinEDA3D_DrawFrame::NewDisplay()
void EDA_3D_FRAME::NewDisplay()
{
{
    m_reloadRequest = false;
    m_reloadRequest = false;


@@ -350,7 +347,7 @@ void WinEDA3D_DrawFrame::NewDisplay()
}
}




void WinEDA3D_DrawFrame::OnActivate( wxActivateEvent& event )
void EDA_3D_FRAME::OnActivate( wxActivateEvent& event )
{
{
    // Reload data if 3D frame shows a footprint,
    // Reload data if 3D frame shows a footprint,
    // because it can be changed since last frame activation
    // because it can be changed since last frame activation
@@ -363,7 +360,7 @@ void WinEDA3D_DrawFrame::OnActivate( wxActivateEvent& event )


/* called to set the background color of the 3D scene
/* called to set the background color of the 3D scene
 */
 */
void WinEDA3D_DrawFrame::Set3DBgColor()
void EDA_3D_FRAME::Set3DBgColor()
{
{
    S3D_Color color;
    S3D_Color color;
    wxColour  newcolor, oldcolor;
    wxColour  newcolor, oldcolor;
@@ -373,6 +370,7 @@ void WinEDA3D_DrawFrame::Set3DBgColor()
                  wxRound( g_Parm_3D_Visu.m_BgColor.m_Blue * 255 ) );
                  wxRound( g_Parm_3D_Visu.m_BgColor.m_Blue * 255 ) );


    newcolor = wxGetColourFromUser( this, oldcolor );
    newcolor = wxGetColourFromUser( this, oldcolor );

    if( newcolor != oldcolor )
    if( newcolor != oldcolor )
    {
    {
        g_Parm_3D_Visu.m_BgColor.m_Red   = (double) newcolor.Red() / 255.0;
        g_Parm_3D_Visu.m_BgColor.m_Red   = (double) newcolor.Red() / 255.0;
@@ -383,71 +381,77 @@ void WinEDA3D_DrawFrame::Set3DBgColor()
}
}




void WinEDA3D_DrawFrame::Set3DAxisOnOff()
void EDA_3D_FRAME::Set3DAxisOnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DAxis )
    if( g_Parm_3D_Visu.m_Draw3DAxis )
        g_Parm_3D_Visu.m_Draw3DAxis = FALSE;
        g_Parm_3D_Visu.m_Draw3DAxis = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DAxis = TRUE;
        g_Parm_3D_Visu.m_Draw3DAxis = true;

    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DModuleOnOff()
void EDA_3D_FRAME::Set3DModuleOnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DModule )
    if( g_Parm_3D_Visu.m_Draw3DModule )
        g_Parm_3D_Visu.m_Draw3DModule = FALSE;
        g_Parm_3D_Visu.m_Draw3DModule = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DModule = TRUE;
        g_Parm_3D_Visu.m_Draw3DModule = true;

    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DZoneOnOff()
void EDA_3D_FRAME::Set3DZoneOnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DZone )
    if( g_Parm_3D_Visu.m_Draw3DZone )
        g_Parm_3D_Visu.m_Draw3DZone = FALSE;
        g_Parm_3D_Visu.m_Draw3DZone = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DZone = TRUE;
        g_Parm_3D_Visu.m_Draw3DZone = true;
    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DCommentsOnOff()
void EDA_3D_FRAME::Set3DCommentsOnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DComments )
    if( g_Parm_3D_Visu.m_Draw3DComments )
        g_Parm_3D_Visu.m_Draw3DComments = FALSE;
        g_Parm_3D_Visu.m_Draw3DComments = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DComments = TRUE;
        g_Parm_3D_Visu.m_Draw3DComments = true;

    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DDrawingsOnOff()
void EDA_3D_FRAME::Set3DDrawingsOnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DDrawings )
    if( g_Parm_3D_Visu.m_Draw3DDrawings )
        g_Parm_3D_Visu.m_Draw3DDrawings = FALSE;
        g_Parm_3D_Visu.m_Draw3DDrawings = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DDrawings = TRUE;
        g_Parm_3D_Visu.m_Draw3DDrawings = true;

    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DEco1OnOff()
void EDA_3D_FRAME::Set3DEco1OnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DEco1 )
    if( g_Parm_3D_Visu.m_Draw3DEco1 )
        g_Parm_3D_Visu.m_Draw3DEco1 = FALSE;
        g_Parm_3D_Visu.m_Draw3DEco1 = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DEco1 = TRUE;
        g_Parm_3D_Visu.m_Draw3DEco1 = true;

    NewDisplay();
    NewDisplay();
}
}




void WinEDA3D_DrawFrame::Set3DEco2OnOff()
void EDA_3D_FRAME::Set3DEco2OnOff()
{
{
    if( g_Parm_3D_Visu.m_Draw3DEco2 )
    if( g_Parm_3D_Visu.m_Draw3DEco2 )
        g_Parm_3D_Visu.m_Draw3DEco2 = FALSE;
        g_Parm_3D_Visu.m_Draw3DEco2 = false;
    else
    else
        g_Parm_3D_Visu.m_Draw3DEco2 = TRUE;
        g_Parm_3D_Visu.m_Draw3DEco2 = true;

    NewDisplay();
    NewDisplay();
}
}
+4 −4
Original line number Original line Diff line number Diff line
@@ -9,7 +9,7 @@
#include "3d_viewer.h"
#include "3d_viewer.h"




void WinEDA3D_DrawFrame::ReCreateHToolbar()
void EDA_3D_FRAME::ReCreateHToolbar()
{
{
    if( m_HToolBar != NULL )
    if( m_HToolBar != NULL )
    {
    {
@@ -98,12 +98,12 @@ void WinEDA3D_DrawFrame::ReCreateHToolbar()
}
}




void WinEDA3D_DrawFrame::ReCreateVToolbar()
void EDA_3D_FRAME::ReCreateVToolbar()
{
{
}
}




void WinEDA3D_DrawFrame::ReCreateMenuBar()
void EDA_3D_FRAME::ReCreateMenuBar()
{
{
    bool full_options = true;
    bool full_options = true;


@@ -167,6 +167,6 @@ void WinEDA3D_DrawFrame::ReCreateMenuBar()
}
}




void WinEDA3D_DrawFrame::SetToolbars()
void EDA_3D_FRAME::SetToolbars()
{
{
}
}
+19 −16
Original line number Original line Diff line number Diff line
@@ -87,7 +87,7 @@ enum id_3dview_frm




class Pcb3D_GLCanvas;
class Pcb3D_GLCanvas;
class WinEDA3D_DrawFrame;
class EDA_3D_FRAME;
class Info_3D_Visu;
class Info_3D_Visu;
class S3D_Vertex;
class S3D_Vertex;
class SEGVIA;
class SEGVIA;
@@ -116,15 +116,14 @@ public:
    wxPoint   m_BoardPos;
    wxPoint   m_BoardPos;
    wxSize    m_BoardSize;
    wxSize    m_BoardSize;
    int       m_Layers;
    int       m_Layers;
    BOARD_DESIGN_SETTINGS* m_BoardSettings;   // Link to current board design
    BOARD_DESIGN_SETTINGS* m_BoardSettings;   // Link to current board design settings
                                                // settings
    double    m_Epoxy_Width;                  // Epoxy thickness (normalized)
    double    m_Epoxy_Width;                    /* Epoxy thickness (normalized)
                                                 **/


    double    m_BoardScale;     /* Normalization scale for coordinates:
    double    m_BoardScale;     /* Normalization scale for coordinates:
                                 * when scaled between -1.0 and +1.0 */
                                 * when scaled between -1.0 and +1.0 */
    double    m_LayerZcoord[32];
    double    m_LayerZcoord[32];
    double	  m_ActZpos;
    double	  m_ActZpos;

public: Info_3D_Visu();
public: Info_3D_Visu();
    ~Info_3D_Visu();
    ~Info_3D_Visu();
};
};
@@ -133,19 +132,21 @@ public: Info_3D_Visu();
class Pcb3D_GLCanvas : public wxGLCanvas
class Pcb3D_GLCanvas : public wxGLCanvas
{
{
public:
public:
    WinEDA3D_DrawFrame* m_Parent;
    EDA_3D_FRAME* m_Parent;


private:
private:
    bool         m_init;
    bool         m_init;
    GLuint       m_gllist;
    GLuint       m_gllist;
    /// Tracks whether to use Orthographic or Perspective projection
    /// Tracks whether to use Orthographic or Perspective projection
    //TODO: Does this belong here, or in  WinEDA3D_DrawFrame ???
    //TODO: Does this belong here, or in  EDA_3D_FRAME ???
    bool         m_ortho;
    bool         m_ortho;

#if wxCHECK_VERSION( 2, 7, 0 )
#if wxCHECK_VERSION( 2, 7, 0 )
    wxGLContext* m_glRC;
    wxGLContext* m_glRC;
#endif
#endif

public:
public:
    Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList = 0 );
    Pcb3D_GLCanvas( EDA_3D_FRAME* parent, int* attribList = 0 );
    ~Pcb3D_GLCanvas();
    ~Pcb3D_GLCanvas();


    void   ClearLists();
    void   ClearLists();
@@ -170,9 +171,10 @@ public:
    void   InitGL();
    void   InitGL();
    void   SetLights();
    void   SetLights();
    void   Draw3D_Track( TRACK* track );
    void   Draw3D_Track( TRACK* track );

    /**
    /**
     * Function Draw3D_SolidPolygonsInZones
     * Function Draw3D_SolidPolygonsInZones
     * draw all solid polygons used as filles areas in a zone
     * draw all solid polygons used as filled areas in a zone
     * @param aZone = the zone to draw
     * @param aZone = the zone to draw
    */
    */
    void   Draw3D_SolidPolygonsInZones( ZONE_CONTAINER* aZone );
    void   Draw3D_SolidPolygonsInZones( ZONE_CONTAINER* aZone );
@@ -180,7 +182,7 @@ public:
    /**
    /**
     * Function Draw3D_Polygon
     * Function Draw3D_Polygon
     * draw one solid polygon
     * draw one solid polygon
     * @param aCornersList = a std::vector<wxPoint> liste of corners, in physical coordinates
     * @param aCornersList = a std::vector<wxPoint> list of corners, in physical coordinates
     * @param aZpos = the z position in 3D units
     * @param aZpos = the z position in 3D units
    */
    */
    void   Draw3D_Polygon( std::vector<wxPoint>& aCornersList, double aZpos );
    void   Draw3D_Polygon( std::vector<wxPoint>& aCornersList, double aZpos );
@@ -190,6 +192,7 @@ public:


    /// Toggles ortographic projection on and off
    /// Toggles ortographic projection on and off
    void ToggleOrtho(){ m_ortho = !m_ortho ; Refresh(true);};
    void ToggleOrtho(){ m_ortho = !m_ortho ; Refresh(true);};

    /// Returns the orthographic projection flag
    /// Returns the orthographic projection flag
    bool ModeIsOrtho() { return m_ortho ;};
    bool ModeIsOrtho() { return m_ortho ;};


@@ -200,13 +203,12 @@ public:
};
};




class WinEDA3D_DrawFrame : public wxFrame
class EDA_3D_FRAME : public wxFrame
{
{
public:
public:
    PCB_BASE_FRAME* m_Parent;
    PCB_BASE_FRAME* m_Parent;
private:
private:
    wxString        m_FrameName;       // name used for writing and reading setup
    wxString        m_FrameName;      // name used for writing and reading setup. It is "Frame3D"
                                       // It is "Frame3D"
    Pcb3D_GLCanvas* m_Canvas;
    Pcb3D_GLCanvas* m_Canvas;
    EDA_TOOLBAR*    m_HToolBar;
    EDA_TOOLBAR*    m_HToolBar;
    EDA_TOOLBAR*    m_VToolBar;
    EDA_TOOLBAR*    m_VToolBar;
@@ -217,9 +219,9 @@ private:
    bool            m_reloadRequest;
    bool            m_reloadRequest;


public:
public:
    WinEDA3D_DrawFrame( PCB_BASE_FRAME* parent, const wxString& title,
    EDA_3D_FRAME( PCB_BASE_FRAME* parent, const wxString& title,
                  long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
                  long style = KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
    ~WinEDA3D_DrawFrame()
    ~EDA_3D_FRAME()
    {
    {
        m_auimgr.UnInit();
        m_auimgr.UnInit();
    };
    };
@@ -232,6 +234,7 @@ public:
    void SetToolbars();
    void SetToolbars();
    void GetSettings();
    void GetSettings();
    void SaveSettings();
    void SaveSettings();

    /**
    /**
     * Function ReloadRequest
     * Function ReloadRequest
     * must be called when reloading data from Pcbnew is needed
     * must be called when reloading data from Pcbnew is needed
+7 −4
Original line number Original line Diff line number Diff line
@@ -408,13 +408,16 @@ void DISPLAY_FOOTPRINTS_FRAME::Show3D_Frame( wxCommandEvent& event )
{
{
    if( m_Draw3DFrame )
    if( m_Draw3DFrame )
    {
    {
        DisplayInfoMessage( this, _( "3D Frame already opened" ) );
        m_Draw3DFrame->Raise();

        // Raising the window does not set the focus on Linux.  This should work on any platform.
        if( wxWindow::FindFocus() != m_Draw3DFrame )
            m_Draw3DFrame->SetFocus();

        return;
        return;
    }
    }


    m_Draw3DFrame = new WinEDA3D_DrawFrame( this, _( "3D Viewer" ),
    m_Draw3DFrame = new EDA_3D_FRAME( this, _( "3D Viewer" ), KICAD_DEFAULT_3D_DRAWFRAME_STYLE );
                                            KICAD_DEFAULT_3D_DRAWFRAME_STYLE |
                                            wxFRAME_FLOAT_ON_PARENT );
    m_Draw3DFrame->Show( true );
    m_Draw3DFrame->Show( true );
}
}


Loading