diff options
author | saurabhb17 | 2020-02-26 16:00:53 +0530 |
---|---|---|
committer | GitHub | 2020-02-26 16:00:53 +0530 |
commit | 886d9cb772e81d2e5262284bc3082664f084337f (patch) | |
tree | 6acee185a4dc19113fcbf0f9a3d6941085dedaf7 /pcbnew/import_dxf/dxf2brd_items.h | |
parent | 0db48f6533517ecebfd9f0693f89deca28408b76 (diff) | |
parent | aa35045840b78d3f48212db45da59a2e5c69b223 (diff) | |
download | KiCad-eSim-886d9cb772e81d2e5262284bc3082664f084337f.tar.gz KiCad-eSim-886d9cb772e81d2e5262284bc3082664f084337f.tar.bz2 KiCad-eSim-886d9cb772e81d2e5262284bc3082664f084337f.zip |
Merge pull request #1 from saurabhb17/develop
Added main functions
Diffstat (limited to 'pcbnew/import_dxf/dxf2brd_items.h')
-rw-r--r-- | pcbnew/import_dxf/dxf2brd_items.h | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/pcbnew/import_dxf/dxf2brd_items.h b/pcbnew/import_dxf/dxf2brd_items.h new file mode 100644 index 0000000..7e4f7e9 --- /dev/null +++ b/pcbnew/import_dxf/dxf2brd_items.h @@ -0,0 +1,192 @@ +/**************************************************************************** +** +** This file comes from the LibreCAD project, a 2D CAD program +** +** Copyright (C) 2011 Rallaz, rallazz@gmail.com +** Copyright (C) 2010 R. van Twisk (librecad@rvt.dds.nl) +** +** +** This file may be distributed and/or modified under the terms of the +** GNU General Public License as published by the Free Software +** Foundation either version 2 of the License, or (at your option) +** any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program; if not, write to the Free Software +** Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +** +**********************************************************************/ + + +#ifndef FILTERDXFRW_H +#define FILTERDXFRW_H + +#include "drw_interface.h" +#include "wx/wx.h" +#include <list> + +class BOARD; +class BOARD_ITEM; + +/** + * This format filter class can import and export DXF files. + * It depends on the dxflib library. + * + * @author Rallaz + */ +class DXF2BRD_CONVERTER : public DRW_Interface +{ +private: + std::list<BOARD_ITEM*> m_newItemsList; // The list of new items added to the board + double m_xOffset; // X coord offset for conversion (in mm) + double m_yOffset; // Y coord offset for conversion (in mm) + double m_defaultThickness; // default line thickness for conversion (in mm) + double m_DXF2mm; // The scale factor to convert DXF units to mm + int m_brdLayer; // The board layer to place imported DXF items + int m_version; // the dxf version, not used here + std::string m_codePage; // The code page, not used here + bool m_useModuleItems; // Use module items instead of board items when true. + +public: + DXF2BRD_CONVERTER(); + ~DXF2BRD_CONVERTER(); + + bool IsUsingModuleItems() const { return m_useModuleItems; } + void UseModuleItems( bool aUseModuleItems = true ) { m_useModuleItems = aUseModuleItems; } + + /** + * Set the coordinate offset between the importede dxf items + * and Pcbnew. + * because dxf files have the Y axis from bottom to top; + * aOffsetX = 0, and aOffsetY = - vertical page size to import a full page + * @param aOffsetX = the X offset in mm + * @param aOffsetY = the Y offset in mm + */ + void SetOffset( double aOffsetX, double aOffsetY ) + { + m_xOffset = aOffsetX; + m_yOffset = aOffsetY; + } + + /** + * Set the layer number to import dxf items. + * the layer should be a techicanl layer, not a copper layer + */ + void SetBrdLayer( int aBrdLayer ) { m_brdLayer = aBrdLayer; } + + /** + * Implementation of the method used for communicate + * with this filter. + * + * @param aFile = the full filename. + */ + bool ImportDxfFile( const wxString& aFile ); + + /** + * @return the list of new BOARD_ITEM + */ + const std::list<BOARD_ITEM*>& GetItemsList() const + { + return m_newItemsList; + } + +private: + // coordinate conversions from dxf to internal units + int mapX( double aDxfCoordX ); + int mapY( double aDxfCoordY ); + int mapDim( double aDxfValue ); + + // Functions to aid in the creation of a LWPolyline + void insertLine( const wxRealPoint& aSegStart, const wxRealPoint& aSegEnd, int aWidth ); + void insertArc( const wxRealPoint& aSegStart, const wxRealPoint& aSegEnd, + double aBulge, int aWidth ); + + // Methods from DRW_CreationInterface: + // They are "call back" fonctions, called when the corresponding object + // is read in dxf file + // Depending of the application, they can do something or not + virtual void addHeader( const DRW_Header* aData ); + virtual void addLType( const DRW_LType& aData ) {} + virtual void addLayer( const DRW_Layer& aData ); + virtual void addDimStyle( const DRW_Dimstyle& aData ) {} + virtual void addBlock( const DRW_Block& aData ) {} + virtual void endBlock() {} + virtual void addPoint( const DRW_Point& aData ) {} + virtual void addLine( const DRW_Line& aData); + virtual void addRay( const DRW_Ray& aData ) {} + virtual void addXline( const DRW_Xline& aData ) {} + virtual void addCircle( const DRW_Circle& aData ); + virtual void addArc( const DRW_Arc& aData ); + virtual void addEllipse( const DRW_Ellipse& aData ) {} + virtual void addLWPolyline( const DRW_LWPolyline& aData ); + virtual void addText( const DRW_Text& aData ); + virtual void addPolyline( const DRW_Polyline& aData ); + virtual void addSpline( const DRW_Spline* aData ) {} + virtual void addKnot( const DRW_Entity&) {} + virtual void addInsert( const DRW_Insert& aData ){} + virtual void addTrace( const DRW_Trace& aData ){} + virtual void addSolid( const DRW_Solid& aData ){} + virtual void addMText( const DRW_MText& aData); + virtual void addDimAlign( const DRW_DimAligned* aData ) {} + virtual void addDimLinear( const DRW_DimLinear* aData ) {} + virtual void addDimRadial( const DRW_DimRadial* aData ) {} + virtual void addDimDiametric( const DRW_DimDiametric* aData ) {} + virtual void addDimAngular( const DRW_DimAngular* aData ) {} + virtual void addDimAngular3P( const DRW_DimAngular3p* aData ) {} + virtual void addDimOrdinate( const DRW_DimOrdinate* aData ) {} + virtual void addLeader( const DRW_Leader* aData ) {} + virtual void addHatch( const DRW_Hatch* aData ) {} + virtual void addImage( const DRW_Image* aData ) {} + virtual void linkImage( const DRW_ImageDef* aData ) {} + + virtual void add3dFace( const DRW_3Dface& aData ) {} + virtual void addComment( const char*) {} + + virtual void addVport( const DRW_Vport& aData ) {} + + virtual void addTextStyle( const DRW_Textstyle& aData ); + + virtual void addViewport( const DRW_Viewport& aData ) {} + + virtual void setBlock( const int aHandle ) {} + + /** + * Converts a native unicode string into a DXF encoded string. + * + * DXF endoding includes the following special sequences: + * - %%%c for a diameter sign + * - %%%d for a degree sign + * - %%%p for a plus/minus sign + */ + static wxString toDxfString( const wxString& aStr ); + + /** + * Converts a DXF encoded string into a native Unicode string. + */ + static wxString toNativeString( const wxString& aData ); + + // These functions are not used in Kicad. + // But because they are virtual pure in DRW_Interface, they should be defined + virtual void writeTextstyles() {} + virtual void writeVports() {} + virtual void writeHeader( DRW_Header& aData ) {} + virtual void writeEntities() {} + virtual void writeLTypes() {} + virtual void writeLayers() {} + virtual void writeBlockRecords() {} + virtual void writeBlocks() {} + virtual void writeDimstyles() {} + + void writeLine(); + void writeMtext(); + + virtual void addAppId( const DRW_AppId& data ) {} + virtual void writeAppId() {} +}; + +#endif // FILTERDXFRW_H |