altium: initial version for rounded rectangle (without rounded corners for now)
This commit is contained in:
parent
9199d1ff63
commit
79a02d7997
|
@ -227,6 +227,32 @@ ASCH_POLYGON::ASCH_POLYGON( const std::map<wxString, wxString>& aProperties )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ASCH_ROUND_RECTANGLE::ASCH_ROUND_RECTANGLE( const std::map<wxString, wxString>& aProperties )
|
||||||
|
{
|
||||||
|
wxASSERT( PropertiesReadRecord( aProperties ) == ALTIUM_SCH_RECORD::RECTANGLE );
|
||||||
|
|
||||||
|
ownerindex =
|
||||||
|
ALTIUM_PARSER::PropertiesReadInt( aProperties, "OWNERINDEX", ALTIUM_COMPONENT_NONE );
|
||||||
|
ownerpartid =
|
||||||
|
ALTIUM_PARSER::PropertiesReadInt( aProperties, "OWNERPARTID", ALTIUM_COMPONENT_NONE );
|
||||||
|
|
||||||
|
bottomLeft = wxPoint( PropertiesReadKiCadUnitFrac( aProperties, "LOCATION.X" ),
|
||||||
|
-PropertiesReadKiCadUnitFrac( aProperties, "LOCATION.Y" ) );
|
||||||
|
topRight = wxPoint( PropertiesReadKiCadUnitFrac( aProperties, "CORNER.X" ),
|
||||||
|
-PropertiesReadKiCadUnitFrac( aProperties, "CORNER.Y" ) );
|
||||||
|
|
||||||
|
topRight = wxPoint( PropertiesReadKiCadUnitFrac( aProperties, "CORNERXRADIUS" ),
|
||||||
|
-PropertiesReadKiCadUnitFrac( aProperties, "CORNERYRADIUS" ) );
|
||||||
|
|
||||||
|
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
||||||
|
isSolid = ALTIUM_PARSER::PropertiesReadBool( aProperties, "ISSOLID", false );
|
||||||
|
isTransparent = ALTIUM_PARSER::PropertiesReadBool( aProperties, "TRANSPARENT", false );
|
||||||
|
|
||||||
|
color = ALTIUM_PARSER::PropertiesReadInt( aProperties, "COLOR", 0 );
|
||||||
|
areacolor = ALTIUM_PARSER::PropertiesReadInt( aProperties, "AREACOLOR", 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ASCH_ARC::ASCH_ARC( const std::map<wxString, wxString>& aProperties )
|
ASCH_ARC::ASCH_ARC( const std::map<wxString, wxString>& aProperties )
|
||||||
{
|
{
|
||||||
wxASSERT( PropertiesReadRecord( aProperties ) == ALTIUM_SCH_RECORD::ARC );
|
wxASSERT( PropertiesReadRecord( aProperties ) == ALTIUM_SCH_RECORD::ARC );
|
||||||
|
|
|
@ -251,6 +251,27 @@ struct ASCH_POLYGON
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct ASCH_ROUND_RECTANGLE
|
||||||
|
{
|
||||||
|
int ownerindex;
|
||||||
|
int ownerpartid;
|
||||||
|
|
||||||
|
wxPoint bottomLeft;
|
||||||
|
wxPoint topRight;
|
||||||
|
|
||||||
|
wxSize cornerradius;
|
||||||
|
|
||||||
|
int lineWidth;
|
||||||
|
bool isSolid;
|
||||||
|
bool isTransparent;
|
||||||
|
|
||||||
|
int color;
|
||||||
|
int areacolor;
|
||||||
|
|
||||||
|
explicit ASCH_ROUND_RECTANGLE( const std::map<wxString, wxString>& aProperties );
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct ASCH_ARC
|
struct ASCH_ARC
|
||||||
{
|
{
|
||||||
int ownerindex;
|
int ownerindex;
|
||||||
|
|
|
@ -323,6 +323,7 @@ void SCH_ALTIUM_PLUGIN::Parse( const CFB::CompoundFileReader& aReader )
|
||||||
case ALTIUM_SCH_RECORD::PIECHART:
|
case ALTIUM_SCH_RECORD::PIECHART:
|
||||||
break;
|
break;
|
||||||
case ALTIUM_SCH_RECORD::ROUND_RECTANGLE:
|
case ALTIUM_SCH_RECORD::ROUND_RECTANGLE:
|
||||||
|
ParseRoundRectangle( properties );
|
||||||
break;
|
break;
|
||||||
case ALTIUM_SCH_RECORD::ELLIPTICAL_ARC:
|
case ALTIUM_SCH_RECORD::ELLIPTICAL_ARC:
|
||||||
break;
|
break;
|
||||||
|
@ -821,6 +822,81 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SCH_ALTIUM_PLUGIN::ParseRoundRectangle( const std::map<wxString, wxString>& aProperties )
|
||||||
|
{
|
||||||
|
ASCH_ROUND_RECTANGLE elem( aProperties );
|
||||||
|
|
||||||
|
if( elem.ownerpartid == ALTIUM_COMPONENT_NONE )
|
||||||
|
{
|
||||||
|
const wxPoint topLeft = { elem.bottomLeft.x, elem.topRight.y };
|
||||||
|
const wxPoint bottomRight = { elem.topRight.x, elem.bottomLeft.y };
|
||||||
|
|
||||||
|
// TODO: we cannot fill this rectangle, only draw it for now
|
||||||
|
// TODO: misses rounded edges
|
||||||
|
SCH_LINE* lineTop = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
|
lineTop->SetEndPoint( topLeft );
|
||||||
|
lineTop->SetLineWidth( elem.lineWidth );
|
||||||
|
lineTop->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
lineTop->SetFlags( IS_NEW );
|
||||||
|
m_currentSheet->GetScreen()->Append( lineTop );
|
||||||
|
|
||||||
|
SCH_LINE* lineBottom = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
|
lineBottom->SetEndPoint( bottomRight );
|
||||||
|
lineBottom->SetLineWidth( elem.lineWidth );
|
||||||
|
lineBottom->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
lineBottom->SetFlags( IS_NEW );
|
||||||
|
m_currentSheet->GetScreen()->Append( lineBottom );
|
||||||
|
|
||||||
|
SCH_LINE* lineRight = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
|
lineRight->SetEndPoint( bottomRight );
|
||||||
|
lineRight->SetLineWidth( elem.lineWidth );
|
||||||
|
lineRight->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
lineRight->SetFlags( IS_NEW );
|
||||||
|
m_currentSheet->GetScreen()->Append( lineRight );
|
||||||
|
|
||||||
|
SCH_LINE* lineLeft = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
|
lineLeft->SetEndPoint( topLeft );
|
||||||
|
lineLeft->SetLineWidth( elem.lineWidth );
|
||||||
|
lineLeft->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
lineLeft->SetFlags( IS_NEW );
|
||||||
|
m_currentSheet->GetScreen()->Append( lineLeft );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
const auto& symbol = m_symbols.find( elem.ownerindex );
|
||||||
|
if( symbol == m_symbols.end() )
|
||||||
|
{
|
||||||
|
// TODO: e.g. can depend on Template (RECORD=39
|
||||||
|
wxLogWarning( wxString::Format(
|
||||||
|
"Rounded Rectangle tries to access symbol with ownerindex %d which does not exist",
|
||||||
|
elem.ownerindex ) );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto& component = m_components.at( symbol->first );
|
||||||
|
|
||||||
|
// TODO: misses rounded edges
|
||||||
|
LIB_RECTANGLE* rect = new LIB_RECTANGLE( symbol->second );
|
||||||
|
symbol->second->AddDrawItem( rect );
|
||||||
|
rect->SetPosition( GetRelativePosition( elem.topRight, component ) );
|
||||||
|
rect->SetEnd( GetRelativePosition( elem.bottomLeft, component ) );
|
||||||
|
rect->SetWidth( elem.lineWidth );
|
||||||
|
|
||||||
|
if( elem.isSolid )
|
||||||
|
{
|
||||||
|
if( elem.color == elem.areacolor )
|
||||||
|
rect->SetFillMode( FILLED_SHAPE );
|
||||||
|
else
|
||||||
|
rect->SetFillMode( FILLED_WITH_BG_BODYCOLOR );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rect->SetFillMode( NO_FILL );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCH_ALTIUM_PLUGIN::ParseArc( const std::map<wxString, wxString>& aProperties )
|
void SCH_ALTIUM_PLUGIN::ParseArc( const std::map<wxString, wxString>& aProperties )
|
||||||
{
|
{
|
||||||
ASCH_ARC elem( aProperties );
|
ASCH_ARC elem( aProperties );
|
||||||
|
|
|
@ -103,6 +103,7 @@ private:
|
||||||
void ParseBezier( const std::map<wxString, wxString>& aProperties );
|
void ParseBezier( const std::map<wxString, wxString>& aProperties );
|
||||||
void ParsePolyline( const std::map<wxString, wxString>& aProperties );
|
void ParsePolyline( const std::map<wxString, wxString>& aProperties );
|
||||||
void ParsePolygon( const std::map<wxString, wxString>& aProperties );
|
void ParsePolygon( const std::map<wxString, wxString>& aProperties );
|
||||||
|
void ParseRoundRectangle( const std::map<wxString, wxString>& aProperties );
|
||||||
void ParseArc( const std::map<wxString, wxString>& aProperties );
|
void ParseArc( const std::map<wxString, wxString>& aProperties );
|
||||||
void ParseLine( const std::map<wxString, wxString>& aProperties );
|
void ParseLine( const std::map<wxString, wxString>& aProperties );
|
||||||
void ParseRectangle( const std::map<wxString, wxString>& aProperties );
|
void ParseRectangle( const std::map<wxString, wxString>& aProperties );
|
||||||
|
|
Loading…
Reference in New Issue