Commit 3e18fa42 authored by Heikki Pulkkinen's avatar Heikki Pulkkinen Committed by Dick Hollenbeck
Browse files

protect data in class_track.h, switch to using member accessors

parent f8a56d44
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -464,8 +464,8 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack )
    SetGLColor( color );
    glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );

    Draw3D_SolidSegment( aTrack->m_Start, aTrack->m_End,
                         aTrack->m_Width, thickness, zpos,
    Draw3D_SolidSegment( aTrack->GetStart(), aTrack->GetEnd(),
                         aTrack->GetWidth(), thickness, zpos,
                         g_Parm_3D_Visu.m_BiuTo3Dunits );
}

@@ -475,7 +475,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
    int    color;
    double biu_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits ;

    int outer_radius = via->m_Width / 2;
    int outer_radius = via->GetWidth() / 2;
    int inner_radius = via->GetDrillValue() / 2;
    int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU();

@@ -504,7 +504,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
        SetGLColor( color );
        glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) );

        Draw3D_ZaxisCylinder( via->m_Start, (outer_radius + inner_radius)/2,
        Draw3D_ZaxisCylinder( via->GetStart(), (outer_radius + inner_radius)/2,
                                  thickness, outer_radius - inner_radius,
                                  zpos, biu_to_3Dunits );
        if( layer >= top_layer )
@@ -512,13 +512,13 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via )
    }

    // Drawing via hole:
    color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->m_Shape );
    color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->GetShape() );
    SetGLColor( color );
    int height = g_Parm_3D_Visu.GetLayerZcoordBIU(top_layer) -
                 g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer );
    int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(bottom_layer) + thickness/2;

    Draw3D_ZaxisCylinder( via->m_Start, inner_radius + thickness/2, height,
    Draw3D_ZaxisCylinder( via->GetStart(), inner_radius + thickness/2, height,
                          thickness, zpos, biu_to_3Dunits );
}

+1 −1
Original line number Diff line number Diff line
@@ -462,7 +462,7 @@ int PCB_EDIT_FRAME::GenPlaceBoard()

    TmpSegm.SetLayer( -1 );
    TmpSegm.SetNet( -1 );
    TmpSegm.m_Width = RoutingMatrix.m_GridRouting / 2;
    TmpSegm.SetWidth( RoutingMatrix.m_GridRouting / 2 );

    EDA_ITEM* PtStruct = GetBoard()->m_Drawings;

+8 −8
Original line number Diff line number Diff line
@@ -262,13 +262,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic )
    int half_width;
    int ux0, uy0, ux1, uy1;

    half_width = ( pt_segm->m_Width / 2 ) + marge;
    half_width = ( pt_segm->GetWidth() / 2 ) + marge;

    // Calculate the bounding rectangle of the segment (if H, V or Via)
    ux0 = pt_segm->m_Start.x - RoutingMatrix.GetBrdCoordOrigin().x;
    uy0 = pt_segm->m_Start.y - RoutingMatrix.GetBrdCoordOrigin().y;
    ux1 = pt_segm->m_End.x - RoutingMatrix.GetBrdCoordOrigin().x;
    uy1 = pt_segm->m_End.y - RoutingMatrix.GetBrdCoordOrigin().y;
    ux0 = pt_segm->GetStart().x - RoutingMatrix.GetBrdCoordOrigin().x;
    uy0 = pt_segm->GetStart().y - RoutingMatrix.GetBrdCoordOrigin().y;
    ux1 = pt_segm->GetEnd().x - RoutingMatrix.GetBrdCoordOrigin().x;
    uy1 = pt_segm->GetEnd().y - RoutingMatrix.GetBrdCoordOrigin().y;

    // Test if VIA (filled circle was drawn)
    if( pt_segm->Type() == PCB_VIA_T )
@@ -290,7 +290,7 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic )
            mask_layer = -1;

        if( mask_layer )
            TraceFilledCircle( pt_segm->m_Start.x, pt_segm->m_Start.y,
            TraceFilledCircle( pt_segm->GetStart().x, pt_segm->GetStart().y,
                               half_width, mask_layer, color, op_logic );
        return;
    }
@@ -301,13 +301,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic )
        layer = -1;

    // The segment is here a straight line or a circle or an arc.:
    if( pt_segm->m_Shape == S_CIRCLE )
    if( pt_segm->GetShape() == S_CIRCLE )
    {
        TraceCircle( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic );
        return;
    }

    if( pt_segm->m_Shape == S_ARC )
    if( pt_segm->GetShape() == S_ARC )
    {
        TraceArc( ux0, uy0, ux1, uy1, pt_segm->m_Param, half_width, layer, color, op_logic );
        return;
+35 −38
Original line number Diff line number Diff line
@@ -1169,16 +1169,14 @@ static void OrCell_Trace( BOARD* pcb, int col, int row,
        g_CurrentTrackSegment->SetState( TRACK_AR, ON );
        g_CurrentTrackSegment->SetLayer( 0x0F );

        g_CurrentTrackSegment->m_Start.x   =
            g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() +
                                             ( RoutingMatrix.m_GridRouting * row );
        g_CurrentTrackSegment->SetStart(wxPoint( pcb->GetBoundingBox().GetX() +
                                                ( RoutingMatrix.m_GridRouting * row ), 
                                                pcb->GetBoundingBox().GetY() +
                                                ( RoutingMatrix.m_GridRouting * col )));
        g_CurrentTrackSegment->SetEnd( g_CurrentTrackSegment->GetStart() );
            
        g_CurrentTrackSegment->m_Start.y   =
            g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() +
                                             ( RoutingMatrix.m_GridRouting * col );

        g_CurrentTrackSegment->m_Width = pcb->GetCurrentViaSize();
        g_CurrentTrackSegment->m_Shape = pcb->GetDesignSettings().m_CurrentViaType;
        g_CurrentTrackSegment->SetWidth( pcb->GetCurrentViaSize() );
        g_CurrentTrackSegment->SetShape( pcb->GetDesignSettings().m_CurrentViaType );

        g_CurrentTrackSegment->SetNet( current_net_code );
    }
@@ -1194,35 +1192,34 @@ static void OrCell_Trace( BOARD* pcb, int col, int row,
            g_CurrentTrackSegment->SetLayer( Route_Layer_TOP );

        g_CurrentTrackSegment->SetState( TRACK_AR, ON );
        g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() +
                                         ( RoutingMatrix.m_GridRouting * row );
        g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() +
                                         ( RoutingMatrix.m_GridRouting * col );
        g_CurrentTrackSegment->SetEnd( wxPoint( pcb->GetBoundingBox().GetX() +
                                         ( RoutingMatrix.m_GridRouting * row ),
                                         pcb->GetBoundingBox().GetY() +
                                         ( RoutingMatrix.m_GridRouting * col )));
        g_CurrentTrackSegment->SetNet( current_net_code );

        if( g_CurrentTrackSegment->Back() == NULL ) /* Start trace. */
        {
            g_CurrentTrackSegment->m_Start.x = segm_fX;
            g_CurrentTrackSegment->m_Start.y = segm_fY;
            g_CurrentTrackSegment->SetStart( wxPoint( segm_fX, segm_fY ) );

            /* Placement on the center of the pad if outside grid. */
            dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x;
            dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y;
            dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x;
            dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y;

            dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->m_Start.x;
            dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->m_Start.y;
            dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->GetStart().x;
            dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->GetStart().y;

            /* If aligned, change the origin point. */
            if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) )
            {
                g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition();
                g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() );
            }
            else    // Creation of a supplemental segment
            {
                g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition();
                g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() );

                newTrack = (TRACK*)g_CurrentTrackSegment->Clone();
                newTrack->m_Start = g_CurrentTrackSegment->m_End;
                newTrack->SetStart( g_CurrentTrackSegment->GetEnd());

                g_CurrentTrackList.PushBack( newTrack );
            }
@@ -1231,28 +1228,28 @@ static void OrCell_Trace( BOARD* pcb, int col, int row,
        {
            if( g_CurrentTrackSegment->Back() )
            {
                g_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->Back()->m_End;
                g_CurrentTrackSegment->SetStart( g_CurrentTrackSegment->Back()->GetEnd() );
            }
        }

        g_CurrentTrackSegment->m_Width = pcb->GetCurrentTrackWidth();
        g_CurrentTrackSegment->SetWidth( pcb->GetCurrentTrackWidth() );

        if( g_CurrentTrackSegment->m_Start != g_CurrentTrackSegment->m_End )
        if( g_CurrentTrackSegment->GetStart() != g_CurrentTrackSegment->GetEnd() )
        {
            /* Reduce aligned segments by one. */
            TRACK* oldTrack = g_CurrentTrackSegment->Back();

            if( oldTrack &&  oldTrack->Type() != PCB_VIA_T )
            {
                dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x;
                dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y;
                dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x;
                dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y;

                dx0 = oldTrack->m_End.x - oldTrack->m_Start.x;
                dy0 = oldTrack->m_End.y - oldTrack->m_Start.y;
                dx0 = oldTrack->GetEnd().x - oldTrack->GetStart().x;
                dy0 = oldTrack->GetEnd().y - oldTrack->GetStart().y;

                if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) )
                {
                    oldTrack->m_End = g_CurrentTrackSegment->m_End;
                    oldTrack->SetEnd( g_CurrentTrackSegment->GetEnd() );

                    delete g_CurrentTrackList.PopBack();
                }
@@ -1280,24 +1277,24 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC )
    marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentTrackWidth() / 2 );
    via_marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentViaSize() / 2 );

    dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x;
    dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y;
    dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x;
    dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y;

    /* Place on center of pad if off grid. */
    dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->m_Start.x;
    dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->m_Start.y;
    dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->GetStart().x;
    dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->GetStart().y;

    /* If aligned, change the origin point. */
    if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) )
    {
        g_CurrentTrackSegment->m_End = pt_cur_ch->m_PadStart->GetPosition();
        g_CurrentTrackSegment->SetEnd( pt_cur_ch->m_PadStart->GetPosition() );
    }
    else
    {
        TRACK* newTrack = (TRACK*)g_CurrentTrackSegment->Clone();

        newTrack->m_End   = pt_cur_ch->m_PadStart->GetPosition();
        newTrack->m_Start = g_CurrentTrackSegment->m_End;
        newTrack->SetEnd( pt_cur_ch->m_PadStart->GetPosition() );
        newTrack->SetStart( g_CurrentTrackSegment->GetEnd() );

        g_CurrentTrackList.PushBack( newTrack );
    }
+8 −5
Original line number Diff line number Diff line
@@ -245,11 +245,14 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage )
        {
            TRACK* track = (TRACK*) aItem;
            TRACK* image = (TRACK*) aImage;
            EXCHG( track->m_Start, image->m_Start );
            EXCHG( track->m_End, image->m_End );
            EXCHG( track->m_Width, image->m_Width );
            EXCHG( track->m_Shape, image->m_Shape );
            int atmp = track->GetDrillValue();

            // swap start, end, width and shape for track and image.
            wxPoint exchp = track->GetStart(); track->SetStart( image->GetStart() ); image->SetStart( exchp );
            exchp = track->GetEnd(); track->SetEnd( image->GetEnd() ); image->SetEnd( exchp );
            int atmp = track->GetWidth(); track->SetWidth( image->GetWidth() ); image->SetWidth( atmp );
            atmp = track->GetShape(); track->SetShape( image->GetShape() ); image->SetShape( atmp );

            atmp = track->GetDrillValue();

            if( track->IsDrillDefault() )
                atmp = -1;
Loading