pcbnew: Fix Eagle import hole offset
Unplated holes in Ealge can either be free floating or part of a larger footprint. We handle both in the same packageHole routine by either offsetting the hole in a centered footprint or offsetting the footprint in a centered hole. Fixes: lp:1791287 * https://bugs.launchpad.net/kicad/+bug/1791287
This commit is contained in:
parent
fb580d3694
commit
e29e7ff95d
|
@ -689,7 +689,7 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
|
|||
module->SetReference( wxString::Format( "@HOLE%d", m_hole_count++ ) );
|
||||
module->Reference().SetVisible( false );
|
||||
|
||||
packageHole( module, gr );
|
||||
packageHole( module, gr, true );
|
||||
|
||||
m_xpath->pop();
|
||||
}
|
||||
|
@ -1377,7 +1377,7 @@ MODULE* EAGLE_PLUGIN::makeModule( wxXmlNode* aPackage, const wxString& aPkgName
|
|||
packageCircle( m.get(), packageItem );
|
||||
|
||||
else if( itemName == "hole" )
|
||||
packageHole( m.get(), packageItem );
|
||||
packageHole( m.get(), packageItem, false );
|
||||
|
||||
else if( itemName == "smd" )
|
||||
packageSMD( m.get(), packageItem );
|
||||
|
@ -1790,7 +1790,7 @@ void EAGLE_PLUGIN::packageCircle( MODULE* aModule, wxXmlNode* aTree ) const
|
|||
}
|
||||
|
||||
|
||||
void EAGLE_PLUGIN::packageHole( MODULE* aModule, wxXmlNode* aTree ) const
|
||||
void EAGLE_PLUGIN::packageHole( MODULE* aModule, wxXmlNode* aTree, bool aCenter ) const
|
||||
{
|
||||
EHOLE e( aTree );
|
||||
|
||||
|
@ -1808,8 +1808,17 @@ void EAGLE_PLUGIN::packageHole( MODULE* aModule, wxXmlNode* aTree ) const
|
|||
|
||||
wxPoint padpos( kicad_x( e.x ), kicad_y( e.y ) );
|
||||
|
||||
pad->SetPos0( padpos );
|
||||
pad->SetPosition( padpos + aModule->GetPosition() );
|
||||
if( aCenter )
|
||||
{
|
||||
pad->SetPos0( wxPoint( 0, 0 ) );
|
||||
aModule->SetPosition( padpos );
|
||||
pad->SetPosition( padpos );
|
||||
}
|
||||
else
|
||||
{
|
||||
pad->SetPos0( padpos );
|
||||
pad->SetPosition( padpos + aModule->GetPosition() );
|
||||
}
|
||||
|
||||
wxSize sz( e.drill.ToPcbUnits(), e.drill.ToPcbUnits() );
|
||||
|
||||
|
|
|
@ -266,7 +266,15 @@ private:
|
|||
void packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||
void packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||
void packageCircle( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||
void packageHole( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||
|
||||
/**
|
||||
* Function packageHole
|
||||
* @parameter aModule - The KiCad module to which to assign the hole
|
||||
* @parameter aTree - The Eagle XML node that is of type "hole"
|
||||
* @parameter aCenter - If true, center the hole in the module and
|
||||
* offset the module position
|
||||
*/
|
||||
void packageHole( MODULE* aModule, wxXmlNode* aTree, bool aCenter ) const;
|
||||
void packageSMD( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||
|
||||
///> Handles common pad properties
|
||||
|
|
Loading…
Reference in New Issue