Commit 314aa18e authored by Marco Mattila's avatar Marco Mattila
Browse files

Fix 3d drawing of board edges defined in modules.

parent e557b388
Loading
Loading
Loading
Loading
+85 −30
Original line number Original line Diff line number Diff line
@@ -728,13 +728,10 @@ void EDGE_MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )


    int color = g_ColorsSettings.GetLayerColor( m_Layer );
    int color = g_ColorsSettings.GetLayerColor( m_Layer );



    SetGLColor( color );
    SetGLColor( color );
    glNormal3f( 0.0, 0.0, (m_Layer == LAYER_N_BACK) ? -1.0 : 1.0 );


    dx   = m_End.x;
    dx   = m_End.x;
    dy   = m_End.y;
    dy   = m_End.y;
    zpos = g_Parm_3D_Visu.m_LayerZcoord[m_Layer];
    w    = m_Width * g_Parm_3D_Visu.m_BoardScale;
    w    = m_Width * g_Parm_3D_Visu.m_BoardScale;
    x    = m_Start.x * g_Parm_3D_Visu.m_BoardScale;
    x    = m_Start.x * g_Parm_3D_Visu.m_BoardScale;
    y    = m_Start.y * g_Parm_3D_Visu.m_BoardScale;
    y    = m_Start.y * g_Parm_3D_Visu.m_BoardScale;
@@ -742,6 +739,13 @@ void EDGE_MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
    fy   = dy * g_Parm_3D_Visu.m_BoardScale;
    fy   = dy * g_Parm_3D_Visu.m_BoardScale;




    if( m_Layer == EDGE_N )
    {
        for( int layer = 0; layer < g_Parm_3D_Visu.m_Layers; layer++ )
        {
            glNormal3f( 0.0, 0.0, (layer == LAYER_N_BACK) ? -1.0 : 1.0 );
            zpos = g_Parm_3D_Visu.m_LayerZcoord[layer];

            switch( m_Shape )
            switch( m_Shape )
            {
            {
            case S_SEGMENT:
            case S_SEGMENT:
@@ -762,8 +766,10 @@ void EDGE_MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
                // which are relative to module position and module orientation = 0
                // which are relative to module position and module orientation = 0
                std::vector<wxPoint> points = m_PolyPoints;
                std::vector<wxPoint> points = m_PolyPoints;
                MODULE* module = (MODULE*) m_Parent;
                MODULE* module = (MODULE*) m_Parent;

                if( module == NULL )
                if( module == NULL )
                    break;
                    break;

                for( unsigned ii = 0; ii < points.size(); ii++ )
                for( unsigned ii = 0; ii < points.size(); ii++ )
                {
                {
                    wxPoint& pt = points[ii];
                    wxPoint& pt = points[ii];
@@ -782,6 +788,55 @@ void EDGE_MODULE::Draw3D( Pcb3D_GLCanvas* glcanvas )
                    break;
                    break;
            }
            }
        }
        }
    }
    else
    {
        glNormal3f( 0.0, 0.0, (m_Layer == LAYER_N_BACK) ? -1.0 : 1.0 );
        zpos = g_Parm_3D_Visu.m_LayerZcoord[m_Layer];

        switch( m_Shape )
        {
        case S_SEGMENT:
            Draw3D_FilledSegment( x, -y, fx, -fy, w, zpos );
            break;

        case S_CIRCLE:
            Draw3D_CircleSegment( x, -y, fx, -fy, w, zpos );
            break;

        case S_ARC:
            Draw3D_ArcSegment( x, -y, fx, -fy, (double) m_Angle, w, zpos );
            break;

        case S_POLYGON:
        {
            // We must compute true coordinates from m_PolyPoints
            // which are relative to module position and module orientation = 0
            std::vector<wxPoint> points = m_PolyPoints;
            MODULE* module = (MODULE*) m_Parent;

            if( module == NULL )
                break;

            for( unsigned ii = 0; ii < points.size(); ii++ )
            {
                wxPoint& pt = points[ii];

                RotatePoint( &pt.x, &pt.y, module->m_Orient );
                pt += module->m_Pos;
            }

            glcanvas->Draw3D_Polygon( points, zpos );
        }
        break;

        default:
            s.Printf( wxT( "Error: Shape nr %d not implemented!\n" ), m_Shape );
            D( printf( "%s", CONV_TO_UTF8( s ) ); )
                break;
        }
    }
}




/* Draw 3D pads. */
/* Draw 3D pads. */