Pcbnew: fix Bug #1373267 (polygons in footprint outlines do not flip correctly)
Minor other fixes.
This commit is contained in:
parent
dda896d530
commit
70a61b8028
|
@ -48,7 +48,7 @@ int LIB_EDIT_FRAME::BlockCommand( int key )
|
||||||
switch( key )
|
switch( key )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
cmd = key & 0x255;
|
cmd = key & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case -1:
|
case -1:
|
||||||
|
|
|
@ -185,7 +185,7 @@ int PCB_EDIT_FRAME::BlockCommand( int aKey )
|
||||||
switch( aKey )
|
switch( aKey )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
cmd = aKey & 0x255;
|
cmd = aKey & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -219,6 +219,8 @@ int PCB_EDIT_FRAME::BlockCommand( int aKey )
|
||||||
|
|
||||||
void PCB_EDIT_FRAME::HandleBlockPlace( wxDC* DC )
|
void PCB_EDIT_FRAME::HandleBlockPlace( wxDC* DC )
|
||||||
{
|
{
|
||||||
|
GetBoard()->m_Status_Pcb &= ~DO_NOT_SHOW_GENERAL_RASTNEST;
|
||||||
|
|
||||||
if( !m_canvas->IsMouseCaptured() )
|
if( !m_canvas->IsMouseCaptured() )
|
||||||
{
|
{
|
||||||
DisplayError( this, wxT( "Error in HandleBlockPLace : m_mouseCaptureCallback = NULL" ) );
|
DisplayError( this, wxT( "Error in HandleBlockPLace : m_mouseCaptureCallback = NULL" ) );
|
||||||
|
@ -274,7 +276,6 @@ bool PCB_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
|
||||||
{
|
{
|
||||||
bool nextcmd = false; // Will be set to true if a block place is needed
|
bool nextcmd = false; // Will be set to true if a block place is needed
|
||||||
bool cancelCmd = false;
|
bool cancelCmd = false;
|
||||||
|
|
||||||
// If coming here after cancel block, clean up and exit
|
// If coming here after cancel block, clean up and exit
|
||||||
if( GetScreen()->m_BlockLocate.GetState() == STATE_NO_BLOCK )
|
if( GetScreen()->m_BlockLocate.GetState() == STATE_NO_BLOCK )
|
||||||
{
|
{
|
||||||
|
@ -369,6 +370,7 @@ bool PCB_EDIT_FRAME::HandleBlockEnd( wxDC* DC )
|
||||||
|
|
||||||
if( ! nextcmd )
|
if( ! nextcmd )
|
||||||
{
|
{
|
||||||
|
GetBoard()->m_Status_Pcb |= DO_NOT_SHOW_GENERAL_RASTNEST;
|
||||||
GetScreen()->ClearBlockCommand();
|
GetScreen()->ClearBlockCommand();
|
||||||
m_canvas->EndMouseCapture( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString,
|
m_canvas->EndMouseCapture( GetToolId(), m_canvas->GetCurrentCursor(), wxEmptyString,
|
||||||
false );
|
false );
|
||||||
|
@ -562,6 +564,10 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a
|
||||||
{
|
{
|
||||||
BASE_SCREEN* screen = aPanel->GetScreen();
|
BASE_SCREEN* screen = aPanel->GetScreen();
|
||||||
|
|
||||||
|
// do not show local module rastnest in block move, it is not usable.
|
||||||
|
bool tmp = g_Show_Module_Ratsnest;
|
||||||
|
g_Show_Module_Ratsnest = false;
|
||||||
|
|
||||||
if( aErase )
|
if( aErase )
|
||||||
{
|
{
|
||||||
if( screen->m_BlockLocate.GetMoveVector().x || screen->m_BlockLocate.GetMoveVector().y )
|
if( screen->m_BlockLocate.GetMoveVector().x || screen->m_BlockLocate.GetMoveVector().y )
|
||||||
|
@ -589,6 +595,8 @@ static void drawMovingBlock( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& a
|
||||||
if( blockDrawItems )
|
if( blockDrawItems )
|
||||||
drawPickedItems( aPanel, aDC, screen->m_BlockLocate.GetMoveVector() );
|
drawPickedItems( aPanel, aDC, screen->m_BlockLocate.GetMoveVector() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_Show_Module_Ratsnest = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -795,6 +803,7 @@ void PCB_EDIT_FRAME::Block_Move()
|
||||||
BOARD_ITEM* item = (BOARD_ITEM*) itemsList->GetPickedItem( ii );
|
BOARD_ITEM* item = (BOARD_ITEM*) itemsList->GetPickedItem( ii );
|
||||||
itemsList->SetPickedItemStatus( UR_MOVED, ii );
|
itemsList->SetPickedItemStatus( UR_MOVED, ii );
|
||||||
item->Move( MoveVector );
|
item->Move( MoveVector );
|
||||||
|
item->ClearFlags( IS_MOVED );
|
||||||
|
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
|
|
|
@ -80,7 +80,7 @@ int FOOTPRINT_EDIT_FRAME::BlockCommand( int key )
|
||||||
switch( key )
|
switch( key )
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
cmd = key & 0x255;
|
cmd = key & 0xFF;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case - 1:
|
case - 1:
|
||||||
|
|
|
@ -130,7 +130,6 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
|
||||||
const wxPoint& offset )
|
const wxPoint& offset )
|
||||||
{
|
{
|
||||||
int ux0, uy0, dx, dy, radius, StAngle, EndAngle;
|
int ux0, uy0, dx, dy, radius, StAngle, EndAngle;
|
||||||
int type_trace;
|
|
||||||
int typeaff;
|
int typeaff;
|
||||||
LAYER_ID curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer;
|
LAYER_ID curr_layer = ( (PCB_SCREEN*) panel->GetScreen() )->m_Active_Layer;
|
||||||
|
|
||||||
|
@ -154,8 +153,6 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
|
||||||
|
|
||||||
PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) panel->GetParent();
|
PCB_BASE_FRAME* frame = (PCB_BASE_FRAME*) panel->GetParent();
|
||||||
|
|
||||||
type_trace = m_Shape;
|
|
||||||
|
|
||||||
ux0 = m_Start.x - offset.x;
|
ux0 = m_Start.x - offset.x;
|
||||||
uy0 = m_Start.y - offset.y;
|
uy0 = m_Start.y - offset.y;
|
||||||
|
|
||||||
|
@ -176,7 +173,7 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
|
||||||
if( DC->LogicalToDeviceXRel( m_Width ) <= MIN_DRAW_WIDTH )
|
if( DC->LogicalToDeviceXRel( m_Width ) <= MIN_DRAW_WIDTH )
|
||||||
typeaff = LINE;
|
typeaff = LINE;
|
||||||
|
|
||||||
switch( type_trace )
|
switch( m_Shape )
|
||||||
{
|
{
|
||||||
case S_SEGMENT:
|
case S_SEGMENT:
|
||||||
if( typeaff == LINE )
|
if( typeaff == LINE )
|
||||||
|
@ -245,10 +242,9 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case S_POLYGON:
|
case S_POLYGON:
|
||||||
|
{
|
||||||
// We must compute true coordinates from m_PolyPoints
|
// We must compute true coordinates from m_PolyPoints
|
||||||
// which are relative to module position, orientation 0
|
// which are relative to module position, orientation 0
|
||||||
|
|
||||||
std::vector<wxPoint> points = m_PolyPoints;
|
std::vector<wxPoint> points = m_PolyPoints;
|
||||||
|
|
||||||
for( unsigned ii = 0; ii < points.size(); ii++ )
|
for( unsigned ii = 0; ii < points.size(); ii++ )
|
||||||
|
@ -260,6 +256,10 @@ void EDGE_MODULE::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, GR_DRAWMODE draw_mode,
|
||||||
}
|
}
|
||||||
|
|
||||||
GRPoly( panel->GetClipBox(), DC, points.size(), &points[0], true, m_Width, color, color );
|
GRPoly( panel->GetClipBox(), DC, points.size(), &points[0], true, m_Width, color, color );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -312,3 +312,41 @@ EDA_ITEM* EDGE_MODULE::Clone() const
|
||||||
return new EDGE_MODULE( *this );
|
return new EDGE_MODULE( *this );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void EDGE_MODULE::Flip(const wxPoint& aCentre )
|
||||||
|
{
|
||||||
|
wxPoint pt;
|
||||||
|
|
||||||
|
switch( GetShape() )
|
||||||
|
{
|
||||||
|
case S_ARC:
|
||||||
|
SetAngle( -GetAngle() );
|
||||||
|
//Fall through
|
||||||
|
default:
|
||||||
|
case S_SEGMENT:
|
||||||
|
pt = GetStart();
|
||||||
|
pt.y -= aCentre.y;
|
||||||
|
pt.y = -pt.y;
|
||||||
|
pt.y += aCentre.y;
|
||||||
|
SetStart( pt );
|
||||||
|
|
||||||
|
pt = GetEnd();
|
||||||
|
pt.y -= aCentre.y;
|
||||||
|
pt.y = -pt.y;
|
||||||
|
pt.y += aCentre.y;
|
||||||
|
SetEnd( pt );
|
||||||
|
|
||||||
|
NEGATE( m_Start0.y );
|
||||||
|
NEGATE( m_End0.y );
|
||||||
|
break;
|
||||||
|
|
||||||
|
case S_POLYGON:
|
||||||
|
// polygon corners coordinates are always relative to the
|
||||||
|
// footprint position, orientation 0
|
||||||
|
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
|
||||||
|
NEGATE( m_PolyPoints[ii].y );
|
||||||
|
}
|
||||||
|
|
||||||
|
SetLayer( FlipLayer( GetLayer() ) );
|
||||||
|
}
|
||||||
|
|
|
@ -68,6 +68,9 @@ public:
|
||||||
SetLocalCoord();
|
SetLocalCoord();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Flip entity relative to aCentre
|
||||||
|
void Flip( const wxPoint& aCentre );
|
||||||
|
|
||||||
void SetStart0( const wxPoint& aPoint ) { m_Start0 = aPoint; }
|
void SetStart0( const wxPoint& aPoint ) { m_Start0 = aPoint; }
|
||||||
const wxPoint& GetStart0() const { return m_Start0; }
|
const wxPoint& GetStart0() const { return m_Start0; }
|
||||||
|
|
||||||
|
|
|
@ -947,31 +947,7 @@ void MODULE::Flip( const wxPoint& aCentre )
|
||||||
switch( item->Type() )
|
switch( item->Type() )
|
||||||
{
|
{
|
||||||
case PCB_MODULE_EDGE_T:
|
case PCB_MODULE_EDGE_T:
|
||||||
{
|
( (EDGE_MODULE*) item )->Flip( m_Pos );
|
||||||
EDGE_MODULE* em = (EDGE_MODULE*) item;
|
|
||||||
|
|
||||||
wxPoint s = em->GetStart();
|
|
||||||
s.y -= m_Pos.y;
|
|
||||||
s.y = -s.y;
|
|
||||||
s.y += m_Pos.y;
|
|
||||||
em->SetStart( s );
|
|
||||||
|
|
||||||
wxPoint e = em->GetEnd();
|
|
||||||
e.y -= m_Pos.y;
|
|
||||||
e.y = -e.y;
|
|
||||||
e.y += m_Pos.y;
|
|
||||||
em->SetEnd( e );
|
|
||||||
|
|
||||||
NEGATE( em->m_Start0.y );
|
|
||||||
NEGATE( em->m_End0.y );
|
|
||||||
|
|
||||||
if( em->GetShape() == S_ARC )
|
|
||||||
{
|
|
||||||
em->SetAngle( -em->GetAngle() );
|
|
||||||
}
|
|
||||||
|
|
||||||
em->SetLayer( FlipLayer( em->GetLayer() ) );
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PCB_MODULE_TEXT_T:
|
case PCB_MODULE_TEXT_T:
|
||||||
|
|
Loading…
Reference in New Issue