EasyEDA import: force close some line chains.
This commit is contained in:
parent
bf9d085c15
commit
b5982f7319
|
@ -66,8 +66,8 @@ double EASYEDA_PARSER_BASE::RelPosY( const wxString& aValue )
|
|||
}
|
||||
|
||||
|
||||
std::vector<SHAPE_LINE_CHAIN> EASYEDA_PARSER_BASE::ParseLineChains( const wxString& data,
|
||||
int aArcMinSegLen )
|
||||
std::vector<SHAPE_LINE_CHAIN>
|
||||
EASYEDA_PARSER_BASE::ParseLineChains( const wxString& data, int aArcMinSegLen, bool aForceClosed )
|
||||
{
|
||||
std::vector<SHAPE_LINE_CHAIN> result;
|
||||
|
||||
|
@ -109,7 +109,12 @@ std::vector<SHAPE_LINE_CHAIN> EASYEDA_PARSER_BASE::ParseLineChains( const wxStri
|
|||
readNumber( yStr );
|
||||
|
||||
if( chain.PointCount() > 1 )
|
||||
{
|
||||
if( aForceClosed )
|
||||
chain.SetClosed( true );
|
||||
|
||||
result.emplace_back( chain );
|
||||
}
|
||||
|
||||
chain.Clear();
|
||||
|
||||
|
@ -229,7 +234,12 @@ std::vector<SHAPE_LINE_CHAIN> EASYEDA_PARSER_BASE::ParseLineChains( const wxStri
|
|||
} while( pos < data.size() );
|
||||
|
||||
if( chain.PointCount() > 1 )
|
||||
{
|
||||
if( aForceClosed )
|
||||
chain.SetClosed( true );
|
||||
|
||||
result.emplace_back( chain );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
|
@ -58,7 +58,8 @@ public:
|
|||
return ScalePos( aVec - m_relOrigin );
|
||||
}
|
||||
|
||||
std::vector<SHAPE_LINE_CHAIN> ParseLineChains( const wxString& aData, int aArcMinSegLen );
|
||||
std::vector<SHAPE_LINE_CHAIN> ParseLineChains( const wxString& aData, int aArcMinSegLen,
|
||||
bool aForceClosed );
|
||||
|
||||
protected:
|
||||
VECTOR2D m_relOrigin;
|
||||
|
|
|
@ -478,7 +478,7 @@ void SCH_EASYEDA_PARSER::ParseSymbolShapes( LIB_SYMBOL* aSymbol
|
|||
|
||||
aSymbol->AddDrawItem( line.release() );
|
||||
}
|
||||
else if( elType == wxS( "PT" ) )
|
||||
else if( elType == wxS( "PT" ) ) // Freedraw
|
||||
{
|
||||
wxString pointsData = arr[1];
|
||||
wxString strokeColor = arr[2];
|
||||
|
@ -488,7 +488,7 @@ void SCH_EASYEDA_PARSER::ParseSymbolShapes( LIB_SYMBOL* aSymbol
|
|||
//bool locked = arr[7] != wxS( "0" );
|
||||
|
||||
std::vector<SHAPE_LINE_CHAIN> lineChains =
|
||||
ParseLineChains( pointsData, schIUScale.MilsToIU( 10 ) );
|
||||
ParseLineChains( pointsData, schIUScale.MilsToIU( 10 ), false );
|
||||
|
||||
for( SHAPE_LINE_CHAIN outline : lineChains )
|
||||
{
|
||||
|
|
|
@ -438,7 +438,7 @@ void PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(
|
|||
//double textHeight = !arr[4].IsEmpty() ? ConvertSize( arr[4] ) : 0;
|
||||
|
||||
std::vector<SHAPE_LINE_CHAIN> lineChains =
|
||||
ParseLineChains( shapeData, pcbIUScale.mmToIU( 0.01 ) );
|
||||
ParseLineChains( shapeData, pcbIUScale.mmToIU( 0.01 ), false );
|
||||
|
||||
std::unique_ptr<PCB_GROUP> group = std::make_unique<PCB_GROUP>( aContainer );
|
||||
group->SetName( wxS( "Dimension" ) );
|
||||
|
@ -469,7 +469,8 @@ void PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(
|
|||
{
|
||||
wxString layer = arr[1];
|
||||
|
||||
SHAPE_POLY_SET polySet = ParseLineChains( arr[3].Trim(), pcbIUScale.mmToIU( 0.01 ) );
|
||||
SHAPE_POLY_SET polySet =
|
||||
ParseLineChains( arr[3].Trim(), pcbIUScale.mmToIU( 0.01 ), true );
|
||||
|
||||
if( layer == wxS( "11" ) ) // Multi-layer (board cutout)
|
||||
{
|
||||
|
@ -543,7 +544,8 @@ void PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(
|
|||
// Do not fill?
|
||||
}
|
||||
|
||||
SHAPE_POLY_SET polySet = ParseLineChains( arr[4].Trim(), pcbIUScale.mmToIU( 0.01 ) );
|
||||
SHAPE_POLY_SET polySet =
|
||||
ParseLineChains( arr[4].Trim(), pcbIUScale.mmToIU( 0.01 ), true );
|
||||
|
||||
for( const SHAPE_POLY_SET::POLYGON& poly : polySet.CPolygons() )
|
||||
zone->Outline()->AddPolygon( poly );
|
||||
|
@ -564,8 +566,8 @@ void PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(
|
|||
{
|
||||
for( const nlohmann::json& contourData : polyData )
|
||||
{
|
||||
SHAPE_POLY_SET contourPolySet = ParseLineChains( contourData.get<wxString>(),
|
||||
pcbIUScale.mmToIU( 0.01 ) );
|
||||
SHAPE_POLY_SET contourPolySet = ParseLineChains(
|
||||
contourData.get<wxString>(), pcbIUScale.mmToIU( 0.01 ), true );
|
||||
|
||||
SHAPE_POLY_SET currentOutline( contourPolySet.COutline( 0 ) );
|
||||
|
||||
|
@ -742,10 +744,11 @@ void PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(
|
|||
{
|
||||
if( auto dataStr = get_opt( attributes, "d" ) )
|
||||
{
|
||||
int minSegLen = dataStr->size() < 8000 ? pcbIUScale.mmToIU( 0.005 )
|
||||
: pcbIUScale.mmToIU( 0.05 );
|
||||
|
||||
SHAPE_POLY_SET polySet =
|
||||
ParseLineChains( dataStr->Trim(),
|
||||
dataStr->size() < 8000 ? pcbIUScale.mmToIU( 0.005 )
|
||||
: pcbIUScale.mmToIU( 0.05 ) );
|
||||
ParseLineChains( dataStr->Trim(), minSegLen, true );
|
||||
|
||||
polySet.RebuildHolesFromContours();
|
||||
|
||||
|
|
Loading…
Reference in New Issue