altium: add non working fix for rounding error

This commit is contained in:
Thomas Pointhuber 2020-10-10 16:43:33 +02:00 committed by Jon Evans
parent 0b190f02dc
commit 19cfd7bd3a
3 changed files with 36 additions and 0 deletions

View File

@ -119,6 +119,37 @@ ASCH_PIN::ASCH_PIN( const std::map<wxString, wxString>& aProperties )
int p = ALTIUM_PARSER::PropertiesReadInt( aProperties, "PINLENGTH", 0 ); int p = ALTIUM_PARSER::PropertiesReadInt( aProperties, "PINLENGTH", 0 );
int pfrac = ALTIUM_PARSER::PropertiesReadInt( aProperties, "PINLENGTH_FRAC", 0 ); int pfrac = ALTIUM_PARSER::PropertiesReadInt( aProperties, "PINLENGTH_FRAC", 0 );
pinlength = Altium2KiCadUnit( p, pfrac ); pinlength = Altium2KiCadUnit( p, pfrac );
// this code calculates the location as required by KiCad without rounding error attached
int kicadX = x;
int kicadXfrac = xfrac;
int kicadY = y;
int kicadYfrac = yfrac;
switch( orientation )
{
case ASCH_PIN_ORIENTATION::RIGHTWARDS:
kicadX += p;
kicadXfrac += pfrac;
break;
case ASCH_PIN_ORIENTATION::UPWARDS:
kicadY += p;
kicadYfrac += pfrac;
break;
case ASCH_PIN_ORIENTATION::LEFTWARDS:
kicadX -= p;
kicadXfrac -= pfrac;
break;
case ASCH_PIN_ORIENTATION::DOWNWARDS:
kicadY -= p;
kicadYfrac -= pfrac;
break;
default:
wxLogWarning( "Pin has unexpected orientation" );
break;
}
kicadLocation = wxPoint(
Altium2KiCadUnit( kicadX, kicadXfrac ), -Altium2KiCadUnit( kicadY, kicadYfrac ) );
} }

View File

@ -187,6 +187,8 @@ struct ASCH_PIN
wxPoint location; wxPoint location;
int pinlength; int pinlength;
wxPoint kicadLocation; // location of pin in KiCad without rounding error
bool showPinName; bool showPinName;
bool showDesignator; bool showDesignator;

View File

@ -504,7 +504,10 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
break; break;
} }
// TODO: position can be sometimes off a little bit!
pin->SetPosition( GetRelativePosition( pinLocation, component ) ); pin->SetPosition( GetRelativePosition( pinLocation, component ) );
// TODO: the following fix is even worse for now?
// pin->SetPosition( GetRelativePosition( elem.kicadLocation, component ) );
switch( elem.electrical ) switch( elem.electrical )
{ {