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->SetReference( wxString::Format( "@HOLE%d", m_hole_count++ ) );
|
||||||
module->Reference().SetVisible( false );
|
module->Reference().SetVisible( false );
|
||||||
|
|
||||||
packageHole( module, gr );
|
packageHole( module, gr, true );
|
||||||
|
|
||||||
m_xpath->pop();
|
m_xpath->pop();
|
||||||
}
|
}
|
||||||
|
@ -1377,7 +1377,7 @@ MODULE* EAGLE_PLUGIN::makeModule( wxXmlNode* aPackage, const wxString& aPkgName
|
||||||
packageCircle( m.get(), packageItem );
|
packageCircle( m.get(), packageItem );
|
||||||
|
|
||||||
else if( itemName == "hole" )
|
else if( itemName == "hole" )
|
||||||
packageHole( m.get(), packageItem );
|
packageHole( m.get(), packageItem, false );
|
||||||
|
|
||||||
else if( itemName == "smd" )
|
else if( itemName == "smd" )
|
||||||
packageSMD( m.get(), packageItem );
|
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 );
|
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 ) );
|
wxPoint padpos( kicad_x( e.x ), kicad_y( e.y ) );
|
||||||
|
|
||||||
pad->SetPos0( padpos );
|
if( aCenter )
|
||||||
pad->SetPosition( padpos + aModule->GetPosition() );
|
{
|
||||||
|
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() );
|
wxSize sz( e.drill.ToPcbUnits(), e.drill.ToPcbUnits() );
|
||||||
|
|
||||||
|
|
|
@ -266,7 +266,15 @@ private:
|
||||||
void packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const;
|
void packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||||
void packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const;
|
void packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||||
void packageCircle( 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;
|
void packageSMD( MODULE* aModule, wxXmlNode* aTree ) const;
|
||||||
|
|
||||||
///> Handles common pad properties
|
///> Handles common pad properties
|
||||||
|
|
Loading…
Reference in New Issue