Commit a1ff3261 authored by jean-pierre charras's avatar jean-pierre charras
Browse files

Pcbnew: better icon for zone unfill. Minor code cleaning in 3D viewer

parent bfe49371
Loading
Loading
Loading
Loading
+18 −30
Original line number Diff line number Diff line
@@ -71,24 +71,14 @@ END_EVENT_TABLE()


EDA_3D_CANVAS::EDA_3D_CANVAS( EDA_3D_FRAME* parent, int* attribList ) :
#if wxCHECK_VERSION( 2, 7, 0 )
    wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
                wxFULL_REPAINT_ON_RESIZE )
#else
    wxGLCanvas( parent, -1, wxDefaultPosition, wxDefaultSize,
                wxFULL_REPAINT_ON_RESIZE )
#endif
{
    m_init   = false;
    m_gllist = 0;
    m_Parent = parent;
    m_ortho  = false;

#if wxCHECK_VERSION( 2, 7, 0 )

    // Explicitly create a new rendering context instance for this canvas.
    m_glRC = new wxGLContext( this );
#endif

    DisplayStatus();
}
@@ -98,10 +88,7 @@ EDA_3D_CANVAS::~EDA_3D_CANVAS()
{
    ClearLists();
    m_init = false;

#if wxCHECK_VERSION( 2, 7, 0 )
    delete m_glRC;
#endif
}


@@ -129,24 +116,24 @@ void EDA_3D_CANVAS::SetView3D( int keycode )
    switch( keycode )
    {
    case WXK_LEFT:
        g_Draw3d_dx -= delta_move;
        m_draw3dOffset.x -= delta_move;
        break;

    case WXK_RIGHT:
        g_Draw3d_dx += delta_move;
        m_draw3dOffset.x += delta_move;
        break;

    case WXK_UP:
        g_Draw3d_dy += delta_move;
        m_draw3dOffset.y += delta_move;
        break;

    case WXK_DOWN:
        g_Draw3d_dy -= delta_move;
        m_draw3dOffset.y -= delta_move;
        break;

    case WXK_HOME:
        g_Parm_3D_Visu.m_Zoom = 1.0;
        g_Draw3d_dx = g_Draw3d_dy = 0;
        m_draw3dOffset.x = m_draw3dOffset.y = 0;
        trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
        break;

@@ -171,7 +158,7 @@ void EDA_3D_CANVAS::SetView3D( int keycode )

    case 'r':
    case 'R':
        g_Draw3d_dx = g_Draw3d_dy = 0;
        m_draw3dOffset.x = m_draw3dOffset.y = 0;
        for( ii = 0; ii < 4; ii++ )
            g_Parm_3D_Visu.m_Rot[ii] = 0.0;

@@ -313,9 +300,9 @@ void EDA_3D_CANVAS::OnMouseMove( wxMouseEvent& event )
            /* Current zoom and an additional factor are taken into account
             * for the amount of panning. */
            const double PAN_FACTOR = 8.0 * g_Parm_3D_Visu.m_Zoom;
            g_Draw3d_dx -= PAN_FACTOR *
            m_draw3dOffset.x -= PAN_FACTOR *
                           ( g_Parm_3D_Visu.m_Beginx - event.GetX() ) / size.x;
            g_Draw3d_dy -= PAN_FACTOR *
            m_draw3dOffset.y -= PAN_FACTOR *
                           (event.GetY() - g_Parm_3D_Visu.m_Beginy) / size.y;
        }

@@ -461,14 +448,14 @@ void EDA_3D_CANVAS::DisplayStatus()
{
    wxString msg;

    msg.Printf( wxT( "dx %3.2f" ), g_Draw3d_dx );
    m_Parent->SetStatusText( msg, 1 );
    msg.Printf( wxT( "dx %3.2f" ), m_draw3dOffset.x );
    Parent()->SetStatusText( msg, 1 );

    msg.Printf( wxT( "dy %3.2f" ), g_Draw3d_dy );
    m_Parent->SetStatusText( msg, 2 );
    msg.Printf( wxT( "dy %3.2f" ), m_draw3dOffset.y );
    Parent()->SetStatusText( msg, 2 );

    msg.Printf( wxT( "View: %3.1f" ), 45 * g_Parm_3D_Visu.m_Zoom );
    m_Parent->SetStatusText( msg, 3 );
    Parent()->SetStatusText( msg, 3 );
}


@@ -496,7 +483,8 @@ void EDA_3D_CANVAS::InitGL()
    {
        m_init = true;
        g_Parm_3D_Visu.m_Zoom = 1.0;
        ZBottom = 1.0; ZTop = 10.0;
        m_ZBottom = 1.0;
        m_ZTop = 10.0;

        glDisable( GL_CULL_FACE );      // show back faces

@@ -549,7 +537,7 @@ void EDA_3D_CANVAS::InitGL()
    // position viewer
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glTranslatef( 0.0F, 0.0F, -( ZBottom + ZTop) / 2 );
    glTranslatef( 0.0F, 0.0F, -( m_ZBottom + m_ZTop) / 2 );

    // clear color and depth buffers
    glClearColor( g_Parm_3D_Visu.m_BgColor.m_Red,
@@ -595,7 +583,7 @@ void EDA_3D_CANVAS::SetLights()
 */
void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
{
    wxFileName fn( m_Parent->m_Parent->GetScreen()->GetFileName() );
    wxFileName fn( Parent()->Parent()->GetScreen()->GetFileName() );
    wxString   FullFileName;
    wxString   file_ext, mask;
    bool       fmt_is_jpeg = false;
@@ -607,7 +595,7 @@ void EDA_3D_CANVAS::TakeScreenshot( wxCommandEvent& event )
    {
        file_ext     = fmt_is_jpeg ? wxT( "jpg" ) : wxT( "png" );
        mask         = wxT( "*." ) + file_ext;
        FullFileName = m_Parent->m_Parent->GetScreen()->GetFileName();
        FullFileName = Parent()->Parent()->GetScreen()->GetFileName();
        fn.SetExt( file_ext );

        FullFileName = EDA_FileSelector( _( "3D Image filename:" ), wxEmptyString,
+2 −2
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ void EDA_3D_CANVAS::Redraw( bool finish )
    GLfloat mat[4][4];

    // Translate motion first, so rotations don't mess up the orientation...
    glTranslatef( g_Draw3d_dx, g_Draw3d_dy, 0.0F );
    glTranslatef( m_draw3dOffset.x, m_draw3dOffset.y, 0.0F );

    build_rotmatrix( mat, g_Parm_3D_Visu.m_Quat );
    glMultMatrixf( &mat[0][0] );
@@ -145,7 +145,7 @@ void EDA_3D_CANVAS::Redraw( bool finish )

GLuint EDA_3D_CANVAS::CreateDrawGL_List()
{
    PCB_BASE_FRAME* pcbframe = m_Parent->m_Parent;
    PCB_BASE_FRAME* pcbframe = Parent()->Parent();
    BOARD* pcb = pcbframe->GetBoard();
    TRACK* track;
    SEGZONE*             segzone;
+3 −8
Original line number Diff line number Diff line
@@ -16,10 +16,6 @@
#include <wxstruct.h>

Info_3D_Visu g_Parm_3D_Visu;
double       g_Draw3d_dx;
double       g_Draw3d_dy;
double       ZBottom;
double       ZTop;
double       DataScale3D; // 3D conversion units.


@@ -40,7 +36,6 @@ EDA_3D_FRAME::EDA_3D_FRAME( PCB_BASE_FRAME* parent, const wxString& title, long
{
    m_FrameName     = wxT( "Frame3D" );
    m_Canvas        = NULL;
    m_Parent        = parent;
    m_HToolBar      = NULL;
    m_VToolBar      = NULL;
    m_InternalUnits = 10000;    // Internal units = 1/10000 inch
@@ -101,9 +96,9 @@ void EDA_3D_FRAME::OnCloseWindow( wxCloseEvent& Event )
{
    SaveSettings();

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

    Destroy();
@@ -177,7 +172,7 @@ void EDA_3D_FRAME::Process_Zoom( wxCommandEvent& event )
            g_Parm_3D_Visu.m_Rot[ii] = 0.0;

        g_Parm_3D_Visu.m_Zoom = 1.0;
        g_Draw3d_dx = g_Draw3d_dy = 0;
        m_Canvas->SetOffset(0.0, 0.0);
        trackball( g_Parm_3D_Visu.m_Quat, 0.0, 0.0, 0.0, 0.0 );
        break;

+1 −1
Original line number Diff line number Diff line
@@ -132,7 +132,7 @@ void EDA_3D_FRAME::ReCreateMenuBar()
    bool full_options = true;

    // If called from the display frame of CvPcb, only some options are relevant
    if( m_Parent->GetName() == wxT( "CmpFrame" ) )
    if( Parent()->GetName() == wxT( "CmpFrame" ) )
    // Called from CvPcb: do not display all options
        full_options = false;

+22 −20
Original line number Diff line number Diff line
@@ -167,26 +167,27 @@ public: Info_3D_Visu();

class EDA_3D_CANVAS : public wxGLCanvas
{
public:
    EDA_3D_FRAME* m_Parent;

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

#if wxCHECK_VERSION( 2, 7, 0 )
    wxGLContext*    m_glRC;
#endif
    wxRealPoint     m_draw3dOffset;     // offset to draw the 3 mesh.
    double          m_ZBottom;          // position of the back layer
    double          m_ZTop;             // position of the front layer


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

    EDA_3D_FRAME*   Parent() { return (EDA_3D_FRAME*)GetParent(); }

    void   ClearLists();

    // Event functions:
    void   OnPaint( wxPaintEvent& event );
    void   OnEraseBackground( wxEraseEvent& event );
    void   OnChar( wxKeyEvent& event );
@@ -195,13 +196,13 @@ public:
    void   OnRightClick( wxMouseEvent& event );
    void   OnPopUpMenu( wxCommandEvent& event );
    void   TakeScreenshot( wxCommandEvent& event );
    void   OnEnterWindow( wxMouseEvent& event );

    // Display functions
    GLuint DisplayCubeforTest();        // Just a test function
    void   SetView3D( int keycode );
    void   DisplayStatus();
    void   Redraw( bool finish = false );
    GLuint DisplayCubeforTest();

    void   OnEnterWindow( wxMouseEvent& event );

    void   Render();

    /**
@@ -211,6 +212,11 @@ public:
    GLuint CreateDrawGL_List();
    void   InitGL();
    void   SetLights();
    void   SetOffset(double aPosX, double aPosY)
    {
        m_draw3dOffset.x = aPosX;
        m_draw3dOffset.y = aPosY;
    }
    void   Draw3D_Track( TRACK* track );

    /**
@@ -263,8 +269,6 @@ public:

class EDA_3D_FRAME : public wxFrame
{
public:
    PCB_BASE_FRAME* m_Parent;
private:
    wxString        m_FrameName;        // name used for writing and reading setup. It is "Frame3D"
    EDA_3D_CANVAS*  m_Canvas;
@@ -284,6 +288,7 @@ public:
        m_auimgr.UnInit();
    };

    PCB_BASE_FRAME* Parent() { return (PCB_BASE_FRAME*)GetParent(); }
    void Exit3DFrame( wxCommandEvent& event );
    void OnCloseWindow( wxCloseEvent& Event );
    void ReCreateMenuBar();
@@ -331,9 +336,6 @@ void SetGLColor( int color );
void Set_Object_Data( std::vector< S3D_Vertex >& aVertices );

extern Info_3D_Visu g_Parm_3D_Visu;
extern double       g_Draw3d_dx, g_Draw3d_dy;
extern double       ZBottom, ZTop;
extern double       DataScale3D; // 3D scale units.
extern int          gl_attrib[];

#endif  /*  __3D_VIEWER_H__ */
Loading