#ifndef KICAD_PLUGIN_H_ #define KICAD_PLUGIN_H_ /* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 1992-2011 KiCad Developers, see change_log.txt for contributors. * * This program is free software; you can redistribute it and/or * modify it 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, you may find one here: * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * or you may search the http://www.gnu.org website for the version 2 license, * or you may write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include typedef int BIU; class PCB_TARGET; class MODULE; class DRAWSEGMENT; class NETINFO; class TEXTE_PCB; class TRACK; class NETCLASS; class ZONE_CONTAINER; class DIMENSION; class NETINFO_ITEM; class KICAD_PLUGIN : public PLUGIN { public: //-------------------------------------------------------------------------- BOARD* Load( const wxString& aFileName, BOARD* aAppendToMe, PROPERTIES* aProperties = NULL ); void Save( const wxString* aFileName, BOARD* aBoard, PROPERTIES* aProperties = NULL ); const wxString& PluginName() { static const wxString name = wxT( "KiCad" ); return name; } //------------------------------------------------------------------------- protected: wxString m_error; ///< for throwing exceptions BOARD* m_board; ///< which BOARD, no ownership here LINE_READER* aReader; ///< no ownership here. /// initialize PLUGIN like a constructor would, and futz with fresh BOARD if needed. void init( PROPERTIES* aProperties ); int NbDraw; int NbTrack; int NbZone; int NbMod; int NbNets; double biuToDisk; ///< convert from BIUs to disk engineering units with this scale factor double diskToBiu; ///< convert from disk engineering units to BIUs with this scale factor /// convert a BIU to engineering units by scaling and formatting to ASCII. std::string biuFmt( BIU aValue ); /** * Function biuParse * parses an ASCII decimal floating point value and scales it into a BIU * according to the current value of diskToBui. * * @param aValue is the ASCII value in C locale form. * * @param nptrptr may be NULL, but if not, then it tells where to put a * pointer to the next unconsumed input text. See man strtod() for more information. * * @return BIU - the converted Board Internal Unit. */ BIU biuParse( const char* aValue, const char** nptrptr = NULL ); // load / parse functions void loadAllSections( bool doAppend ); void loadGENERAL(); void loadSETUP(); void loadSHEET(); void loadMODULE(); void loadDRAWSEGMENT(); void loadNETINFO_ITEM(); void loadPCB_TEXTE(); void loadNETCLASS(); /** * Function loadTrackList * reads a list of segments (Tracks and Vias, or Segzones) * * @param aInsertBeforeMe may be either NULL indicating append, or it may * be an insertion point before which all the segments are inserted. * * @param aStructType is either PCB_TRACE_T to indicate tracks and vias, or * PCB_ZONE_T to indicate oldschool zone segments (before polygons came to be). */ void loadTrackList( TRACK* aInsertBeforeMe, int aStructType ); void loadZONE_CONTAINER(); // "$CZONE_OUTLINE" void loadDIMENSION(); // "$COTATION" /* @todo void load( PCB_TARGET* me ); void load( NETINFO* me ); void load( TRACK* me ); */ // void load( SEGZONE* me ); }; #endif // KICAD_PLUGIN_H_