Fix dxf import making all circles filled

Filled objects in dxf is actually not handled at all, they are implemented as "hatched" objects
This commit is contained in:
Marek Roszko 2020-11-19 20:07:08 -05:00
parent 1db882ed1b
commit d59053b775
6 changed files with 13 additions and 11 deletions

View File

@ -347,7 +347,7 @@ void DXF_IMPORT_PLUGIN::addCircle( const DL_CircleData& aData )
VECTOR2D center( mapX( aData.cx ), mapY( aData.cy ) ); VECTOR2D center( mapX( aData.cx ), mapY( aData.cy ) );
double lineWidth = mapWidth( attributes.getWidth() ); double lineWidth = mapWidth( attributes.getWidth() );
m_internalImporter.AddCircle( center, mapDim( aData.radius ), lineWidth ); m_internalImporter.AddCircle( center, mapDim( aData.radius ), lineWidth, false );
VECTOR2D radiusDelta( mapDim( aData.radius ), mapDim( aData.radius ) ); VECTOR2D radiusDelta( mapDim( aData.radius ), mapDim( aData.radius ) );

View File

@ -204,7 +204,7 @@ public:
* @param aRadius is the circle radius expressed in mm. * @param aRadius is the circle radius expressed in mm.
* @param aWidth is the segment thickness in mm. Use -1 for default line thickness * @param aWidth is the segment thickness in mm. Use -1 for default line thickness
*/ */
virtual void AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth ) = 0; virtual void AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth, bool aFilled ) = 0;
/** /**
* Create an object representing an arc. * Create an object representing an arc.

View File

@ -39,9 +39,9 @@ void GRAPHICS_IMPORTER_BUFFER::AddLine( const VECTOR2D& aStart, const VECTOR2D&
} }
void GRAPHICS_IMPORTER_BUFFER::AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth ) void GRAPHICS_IMPORTER_BUFFER::AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth, bool aFilled )
{ {
m_shapes.push_back( make_shape< IMPORTED_CIRCLE >( aCenter, aRadius, aWidth ) ); m_shapes.push_back( make_shape<IMPORTED_CIRCLE>( aCenter, aRadius, aWidth, aFilled ) );
} }

View File

@ -63,22 +63,24 @@ private:
class IMPORTED_CIRCLE : public IMPORTED_SHAPE class IMPORTED_CIRCLE : public IMPORTED_SHAPE
{ {
public: public:
IMPORTED_CIRCLE( const VECTOR2D& aCenter, double aRadius, double aWidth ) : IMPORTED_CIRCLE( const VECTOR2D& aCenter, double aRadius, double aWidth, bool aFilled ) :
m_center( aCenter ), m_center( aCenter ),
m_radius( aRadius ), m_radius( aRadius ),
m_width( aWidth ) m_width( aWidth ),
m_filled( aFilled )
{ {
} }
void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override void ImportTo( GRAPHICS_IMPORTER& aImporter ) const override
{ {
aImporter.AddCircle( m_center, m_radius, m_width ); aImporter.AddCircle( m_center, m_radius, m_width, m_filled );
} }
private: private:
const VECTOR2D m_center; const VECTOR2D m_center;
double m_radius; double m_radius;
double m_width; double m_width;
bool m_filled;
}; };
@ -193,7 +195,7 @@ class GRAPHICS_IMPORTER_BUFFER : public GRAPHICS_IMPORTER
public: public:
void AddLine( const VECTOR2D& aStart, const VECTOR2D& aEnd, double aWidth ) override; void AddLine( const VECTOR2D& aStart, const VECTOR2D& aEnd, double aWidth ) override;
void AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth ) override; void AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth, bool aFilled ) override;
void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, double aWidth ) override; void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, double aWidth ) override;

View File

@ -75,11 +75,11 @@ void GRAPHICS_IMPORTER_PCBNEW::AddLine( const VECTOR2D& aOrigin, const VECTOR2D&
} }
void GRAPHICS_IMPORTER_PCBNEW::AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth ) void GRAPHICS_IMPORTER_PCBNEW::AddCircle( const VECTOR2D& aCenter, double aRadius, double aWidth, bool aFilled )
{ {
std::unique_ptr<PCB_SHAPE> circle( createDrawing() ); std::unique_ptr<PCB_SHAPE> circle( createDrawing() );
circle->SetShape( S_CIRCLE ); circle->SetShape( S_CIRCLE );
circle->SetFilled( GetLayer() != Edge_Cuts ); circle->SetFilled( aFilled );
circle->SetLayer( GetLayer() ); circle->SetLayer( GetLayer() );
circle->SetWidth( MapLineWidth( aWidth ) ); circle->SetWidth( MapLineWidth( aWidth ) );
circle->SetCenter( MapCoordinate( aCenter ) ); circle->SetCenter( MapCoordinate( aCenter ) );

View File

@ -60,7 +60,7 @@ public:
void AddLine( const VECTOR2D& aOrigin, const VECTOR2D& aEnd, double aWidth ) override; void AddLine( const VECTOR2D& aOrigin, const VECTOR2D& aEnd, double aWidth ) override;
void AddCircle( const VECTOR2D& aOrigin, double aRadius, double aWidth ) override; void AddCircle( const VECTOR2D& aOrigin, double aRadius, double aWidth, bool aFilled ) override;
void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle, void AddArc( const VECTOR2D& aCenter, const VECTOR2D& aStart, double aAngle,
double aWidth ) override; double aWidth ) override;