altium: fix line style and filling
This commit is contained in:
parent
06df80a88d
commit
9199d1ff63
|
@ -144,7 +144,10 @@ bool ALTIUM_PARSER::PropertiesReadBool(
|
||||||
const std::map<wxString, wxString>& aProperties, const wxString& aKey, bool aDefault )
|
const std::map<wxString, wxString>& aProperties, const wxString& aKey, bool aDefault )
|
||||||
{
|
{
|
||||||
const std::map<wxString, wxString>::const_iterator& value = aProperties.find( aKey );
|
const std::map<wxString, wxString>::const_iterator& value = aProperties.find( aKey );
|
||||||
return value == aProperties.end() ? aDefault : value->second == "TRUE";
|
if( value == aProperties.end() )
|
||||||
|
return aDefault;
|
||||||
|
else
|
||||||
|
return value->second == "T" || value->second == "TRUE";
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t ALTIUM_PARSER::PropertiesReadKicadUnit( const std::map<wxString, wxString>& aProperties,
|
int32_t ALTIUM_PARSER::PropertiesReadKicadUnit( const std::map<wxString, wxString>& aProperties,
|
||||||
|
|
|
@ -192,6 +192,13 @@ ASCH_POLYLINE::ASCH_POLYLINE( const std::map<wxString, wxString>& aProperties )
|
||||||
}
|
}
|
||||||
|
|
||||||
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
||||||
|
|
||||||
|
int linestyleVar = ALTIUM_PARSER::PropertiesReadInt( aProperties, "LINESTYLEEXT", 0 );
|
||||||
|
linestyleVar = ALTIUM_PARSER::PropertiesReadInt(
|
||||||
|
aProperties, "LINESTYLE", linestyleVar ); // overwrite if present
|
||||||
|
linestyle = linestyleVar >= 0 && linestyleVar <= 3 ?
|
||||||
|
static_cast<ASCH_POLYLINE_LINESTYLE>( linestyleVar ) :
|
||||||
|
ASCH_POLYLINE_LINESTYLE::SOLID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -214,6 +221,9 @@ ASCH_POLYGON::ASCH_POLYGON( const std::map<wxString, wxString>& aProperties )
|
||||||
|
|
||||||
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
||||||
isSolid = ALTIUM_PARSER::PropertiesReadBool( aProperties, "ISSOLID", false );
|
isSolid = ALTIUM_PARSER::PropertiesReadBool( aProperties, "ISSOLID", false );
|
||||||
|
|
||||||
|
color = ALTIUM_PARSER::PropertiesReadInt( aProperties, "COLOR", 0 );
|
||||||
|
areacolor = ALTIUM_PARSER::PropertiesReadInt( aProperties, "AREACOLOR", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -272,6 +282,9 @@ ASCH_RECTANGLE::ASCH_RECTANGLE( const std::map<wxString, wxString>& aProperties
|
||||||
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
lineWidth = PropertiesReadKiCadUnitFrac( aProperties, "LINEWIDTH" );
|
||||||
isSolid = ALTIUM_PARSER::PropertiesReadBool( aProperties, "ISSOLID", false );
|
isSolid = ALTIUM_PARSER::PropertiesReadBool( aProperties, "ISSOLID", false );
|
||||||
isTransparent = ALTIUM_PARSER::PropertiesReadBool( aProperties, "TRANSPARENT", false );
|
isTransparent = ALTIUM_PARSER::PropertiesReadBool( aProperties, "TRANSPARENT", false );
|
||||||
|
|
||||||
|
color = ALTIUM_PARSER::PropertiesReadInt( aProperties, "COLOR", 0 );
|
||||||
|
areacolor = ALTIUM_PARSER::PropertiesReadInt( aProperties, "AREACOLOR", 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -210,6 +210,15 @@ struct ASCH_BEZIER
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
enum class ASCH_POLYLINE_LINESTYLE
|
||||||
|
{
|
||||||
|
SOLID = 0,
|
||||||
|
DASHED = 1,
|
||||||
|
DOTTED = 2,
|
||||||
|
DASH_DOTTED = 3
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
struct ASCH_POLYLINE
|
struct ASCH_POLYLINE
|
||||||
{
|
{
|
||||||
int ownerindex;
|
int ownerindex;
|
||||||
|
@ -219,6 +228,8 @@ struct ASCH_POLYLINE
|
||||||
|
|
||||||
int lineWidth;
|
int lineWidth;
|
||||||
|
|
||||||
|
ASCH_POLYLINE_LINESTYLE linestyle;
|
||||||
|
|
||||||
explicit ASCH_POLYLINE( const std::map<wxString, wxString>& aProperties );
|
explicit ASCH_POLYLINE( const std::map<wxString, wxString>& aProperties );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -233,6 +244,9 @@ struct ASCH_POLYGON
|
||||||
int lineWidth;
|
int lineWidth;
|
||||||
bool isSolid;
|
bool isSolid;
|
||||||
|
|
||||||
|
int color;
|
||||||
|
int areacolor;
|
||||||
|
|
||||||
explicit ASCH_POLYGON( const std::map<wxString, wxString>& aProperties );
|
explicit ASCH_POLYGON( const std::map<wxString, wxString>& aProperties );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -279,6 +293,9 @@ struct ASCH_RECTANGLE
|
||||||
bool isSolid;
|
bool isSolid;
|
||||||
bool isTransparent;
|
bool isTransparent;
|
||||||
|
|
||||||
|
int color;
|
||||||
|
int areacolor;
|
||||||
|
|
||||||
explicit ASCH_RECTANGLE( const std::map<wxString, wxString>& aProperties );
|
explicit ASCH_RECTANGLE( const std::map<wxString, wxString>& aProperties );
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -620,6 +620,7 @@ void SCH_ALTIUM_PLUGIN::ParseBezier( const std::map<wxString, wxString>& aProper
|
||||||
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
||||||
line->SetEndPoint( elem.points.at( i + 1 ) );
|
line->SetEndPoint( elem.points.at( i + 1 ) );
|
||||||
line->SetLineWidth( elem.lineWidth );
|
line->SetLineWidth( elem.lineWidth );
|
||||||
|
line->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
|
||||||
line->SetFlags( IS_NEW );
|
line->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( line );
|
m_currentSheet->GetScreen()->Append( line );
|
||||||
|
@ -702,11 +703,30 @@ void SCH_ALTIUM_PLUGIN::ParsePolyline( const std::map<wxString, wxString>& aProp
|
||||||
|
|
||||||
if( elem.ownerpartid == ALTIUM_COMPONENT_NONE )
|
if( elem.ownerpartid == ALTIUM_COMPONENT_NONE )
|
||||||
{
|
{
|
||||||
|
PLOT_DASH_TYPE dashType = PLOT_DASH_TYPE::DEFAULT;
|
||||||
|
switch( elem.linestyle )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
case ASCH_POLYLINE_LINESTYLE::SOLID:
|
||||||
|
dashType = PLOT_DASH_TYPE::SOLID;
|
||||||
|
break;
|
||||||
|
case ASCH_POLYLINE_LINESTYLE::DASHED:
|
||||||
|
dashType = PLOT_DASH_TYPE::DASH;
|
||||||
|
break;
|
||||||
|
case ASCH_POLYLINE_LINESTYLE::DOTTED:
|
||||||
|
dashType = PLOT_DASH_TYPE::DOT;
|
||||||
|
break;
|
||||||
|
case ASCH_POLYLINE_LINESTYLE::DASH_DOTTED:
|
||||||
|
dashType = PLOT_DASH_TYPE::DASHDOT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
for( size_t i = 0; i < elem.points.size() - 1; i++ )
|
for( size_t i = 0; i < elem.points.size() - 1; i++ )
|
||||||
{
|
{
|
||||||
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
||||||
line->SetEndPoint( elem.points.at( i + 1 ) );
|
line->SetEndPoint( elem.points.at( i + 1 ) );
|
||||||
line->SetLineWidth( elem.lineWidth );
|
line->SetLineWidth( elem.lineWidth );
|
||||||
|
line->SetLineStyle( dashType );
|
||||||
|
|
||||||
line->SetFlags( IS_NEW );
|
line->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( line );
|
m_currentSheet->GetScreen()->Append( line );
|
||||||
|
@ -751,6 +771,7 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
||||||
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* line = new SCH_LINE( elem.points.at( i ), SCH_LAYER_ID::LAYER_NOTES );
|
||||||
line->SetEndPoint( elem.points.at( i + 1 ) );
|
line->SetEndPoint( elem.points.at( i + 1 ) );
|
||||||
line->SetLineWidth( elem.lineWidth );
|
line->SetLineWidth( elem.lineWidth );
|
||||||
|
line->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
|
||||||
line->SetFlags( IS_NEW );
|
line->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( line );
|
m_currentSheet->GetScreen()->Append( line );
|
||||||
|
@ -760,6 +781,7 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
||||||
SCH_LINE* line = new SCH_LINE( elem.points.front(), SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* line = new SCH_LINE( elem.points.front(), SCH_LAYER_ID::LAYER_NOTES );
|
||||||
line->SetEndPoint( elem.points.back() );
|
line->SetEndPoint( elem.points.back() );
|
||||||
line->SetLineWidth( elem.lineWidth );
|
line->SetLineWidth( elem.lineWidth );
|
||||||
|
line->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
|
|
||||||
line->SetFlags( IS_NEW );
|
line->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( line );
|
m_currentSheet->GetScreen()->Append( line );
|
||||||
|
@ -781,7 +803,6 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
||||||
LIB_POLYLINE* line = new LIB_POLYLINE( symbol->second );
|
LIB_POLYLINE* line = new LIB_POLYLINE( symbol->second );
|
||||||
symbol->second->AddDrawItem( line );
|
symbol->second->AddDrawItem( line );
|
||||||
|
|
||||||
// TODO: we cannot fill this polygon, only draw it for now?
|
|
||||||
for( wxPoint& point : elem.points )
|
for( wxPoint& point : elem.points )
|
||||||
{
|
{
|
||||||
line->AddPoint( GetRelativePosition( point, component ) );
|
line->AddPoint( GetRelativePosition( point, component ) );
|
||||||
|
@ -789,10 +810,13 @@ void SCH_ALTIUM_PLUGIN::ParsePolygon( const std::map<wxString, wxString>& aPrope
|
||||||
line->AddPoint( GetRelativePosition( elem.points.front(), component ) );
|
line->AddPoint( GetRelativePosition( elem.points.front(), component ) );
|
||||||
|
|
||||||
line->SetWidth( elem.lineWidth );
|
line->SetWidth( elem.lineWidth );
|
||||||
if( elem.isSolid )
|
|
||||||
{
|
if( !elem.isSolid )
|
||||||
|
line->SetFillMode( FILL_TYPE::NO_FILL );
|
||||||
|
else if( elem.color == elem.areacolor )
|
||||||
line->SetFillMode( FILL_TYPE::FILLED_SHAPE );
|
line->SetFillMode( FILL_TYPE::FILLED_SHAPE );
|
||||||
}
|
else
|
||||||
|
line->SetFillMode( FILL_TYPE::FILLED_WITH_BG_BODYCOLOR );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -853,6 +877,7 @@ void SCH_ALTIUM_PLUGIN::ParseLine( const std::map<wxString, wxString>& aProperti
|
||||||
SCH_LINE* line = new SCH_LINE( elem.point1, SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* line = new SCH_LINE( elem.point1, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
line->SetEndPoint( elem.point2 );
|
line->SetEndPoint( elem.point2 );
|
||||||
line->SetLineWidth( elem.lineWidth );
|
line->SetLineWidth( elem.lineWidth );
|
||||||
|
line->SetLineStyle( PLOT_DASH_TYPE::SOLID ); // TODO?
|
||||||
|
|
||||||
line->SetFlags( IS_NEW );
|
line->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( line );
|
m_currentSheet->GetScreen()->Append( line );
|
||||||
|
@ -895,24 +920,28 @@ void SCH_ALTIUM_PLUGIN::ParseRectangle( const std::map<wxString, wxString>& aPro
|
||||||
SCH_LINE* lineTop = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* lineTop = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
lineTop->SetEndPoint( topLeft );
|
lineTop->SetEndPoint( topLeft );
|
||||||
lineTop->SetLineWidth( elem.lineWidth );
|
lineTop->SetLineWidth( elem.lineWidth );
|
||||||
|
lineTop->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
lineTop->SetFlags( IS_NEW );
|
lineTop->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( lineTop );
|
m_currentSheet->GetScreen()->Append( lineTop );
|
||||||
|
|
||||||
SCH_LINE* lineBottom = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* lineBottom = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
lineBottom->SetEndPoint( bottomRight );
|
lineBottom->SetEndPoint( bottomRight );
|
||||||
lineBottom->SetLineWidth( elem.lineWidth );
|
lineBottom->SetLineWidth( elem.lineWidth );
|
||||||
|
lineBottom->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
lineBottom->SetFlags( IS_NEW );
|
lineBottom->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( lineBottom );
|
m_currentSheet->GetScreen()->Append( lineBottom );
|
||||||
|
|
||||||
SCH_LINE* lineRight = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* lineRight = new SCH_LINE( elem.topRight, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
lineRight->SetEndPoint( bottomRight );
|
lineRight->SetEndPoint( bottomRight );
|
||||||
lineRight->SetLineWidth( elem.lineWidth );
|
lineRight->SetLineWidth( elem.lineWidth );
|
||||||
|
lineRight->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
lineRight->SetFlags( IS_NEW );
|
lineRight->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( lineRight );
|
m_currentSheet->GetScreen()->Append( lineRight );
|
||||||
|
|
||||||
SCH_LINE* lineLeft = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
SCH_LINE* lineLeft = new SCH_LINE( elem.bottomLeft, SCH_LAYER_ID::LAYER_NOTES );
|
||||||
lineLeft->SetEndPoint( topLeft );
|
lineLeft->SetEndPoint( topLeft );
|
||||||
lineLeft->SetLineWidth( elem.lineWidth );
|
lineLeft->SetLineWidth( elem.lineWidth );
|
||||||
|
lineLeft->SetLineStyle( PLOT_DASH_TYPE::SOLID );
|
||||||
lineLeft->SetFlags( IS_NEW );
|
lineLeft->SetFlags( IS_NEW );
|
||||||
m_currentSheet->GetScreen()->Append( lineLeft );
|
m_currentSheet->GetScreen()->Append( lineLeft );
|
||||||
}
|
}
|
||||||
|
@ -935,18 +964,13 @@ void SCH_ALTIUM_PLUGIN::ParseRectangle( const std::map<wxString, wxString>& aPro
|
||||||
rect->SetPosition( GetRelativePosition( elem.topRight, component ) );
|
rect->SetPosition( GetRelativePosition( elem.topRight, component ) );
|
||||||
rect->SetEnd( GetRelativePosition( elem.bottomLeft, component ) );
|
rect->SetEnd( GetRelativePosition( elem.bottomLeft, component ) );
|
||||||
rect->SetWidth( elem.lineWidth );
|
rect->SetWidth( elem.lineWidth );
|
||||||
if( elem.isTransparent )
|
|
||||||
{
|
if( !elem.isSolid )
|
||||||
rect->SetFillMode( FILL_TYPE::NO_FILL );
|
rect->SetFillMode( FILL_TYPE::NO_FILL );
|
||||||
}
|
else if( elem.color == elem.areacolor )
|
||||||
else if( elem.isSolid )
|
|
||||||
{
|
|
||||||
rect->SetFillMode( FILL_TYPE::FILLED_SHAPE );
|
rect->SetFillMode( FILL_TYPE::FILLED_SHAPE );
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
rect->SetFillMode( FILL_TYPE::FILLED_WITH_BG_BODYCOLOR );
|
rect->SetFillMode( FILL_TYPE::FILLED_WITH_BG_BODYCOLOR );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue