/* * This program source code file is part of KiCad, a free EDA CAD application. * * Copyright (C) 2012 CERN. * Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.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 */ #ifndef PCB_PLUGIN_H #define PCB_PLUGIN_H #include #include #include class BOARD; class BOARD_ITEM; class FP_CACHE; class PCB_PARSER; class NETINFO_MAPPING; class BOARD_DESIGN_SETTINGS; class PCB_DIMENSION_BASE; class FP_SHAPE; class PCB_SHAPE; class PCB_TARGET; class PAD; class FP_TEXT; class PCB_GROUP; class PCB_TRACK; class ZONE; class PCB_TEXT; /// Current s-expression file format version. 2 was the last legacy format version. //#define SEXPR_BOARD_FILE_VERSION 3 // first s-expression format, used legacy cu stack //#define SEXPR_BOARD_FILE_VERSION 4 // reversed cu stack, changed Inner* to In* in reverse order // // went to 32 Cu layers from 16. //#define SEXPR_BOARD_FILE_VERSION 20160815 // differential pair settings per net class //#define SEXPR_BOARD_FILE_VERSION 20170123 // EDA_TEXT refactor, moved 'hide' //#define SEXPR_BOARD_FILE_VERSION 20170920 // long pad names and custom pad shape //#define SEXPR_BOARD_FILE_VERSION 20170922 // Keepout zones can exist on multiple layers //#define SEXPR_BOARD_FILE_VERSION 20171114 // Save 3D model offset in mm, instead of inches //#define SEXPR_BOARD_FILE_VERSION 20171125 // Locked/unlocked FP_TEXT //#define SEXPR_BOARD_FILE_VERSION 20171130 // 3D model offset written using "offset" parameter //#define SEXPR_BOARD_FILE_VERSION 20190331 // hatched zones and chamfered round rect pads //#define SEXPR_BOARD_FILE_VERSION 20190421 // curves in custom pads //#define SEXPR_BOARD_FILE_VERSION 20190516 // Remove segment count from zones //#define SEXPR_BOARD_FILE_VERSION 20190605 // Add layer defaults //#define SEXPR_BOARD_FILE_VERSION 20190905 // Add board physical stackup info in setup section //#define SEXPR_BOARD_FILE_VERSION 20190907 // Keepout areas in footprints //#define SEXPR_BOARD_FILE_VERSION 20191123 // pin function in pads //#define SEXPR_BOARD_FILE_VERSION 20200104 // pad property for fabrication //#define SEXPR_BOARD_FILE_VERSION 20200119 // arcs in tracks //#define SEXPR_BOARD_FILE_VERSION 20200512 // page -> paper //#define SEXPR_BOARD_FILE_VERSION 20200518 // save hole_to_hole_min //#define SEXPR_BOARD_FILE_VERSION 20200614 // Add support for fp_rects and gr_rects //#define SEXPR_BOARD_FILE_VERSION 20200625 // Multilayer zones, zone names, island controls //#define SEXPR_BOARD_FILE_VERSION 20200628 // remove visibility settings //#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to footprints //#define SEXPR_BOARD_FILE_VERSION 20200807 // Add zone hatch advanced settings //#define SEXPR_BOARD_FILE_VERSION 20200808 // Add properties to footprints //#define SEXPR_BOARD_FILE_VERSION 20200809 // Add REMOVE_UNUSED_LAYERS option to vias and THT pads //#define SEXPR_BOARD_FILE_VERSION 20200811 // Add groups //#define SEXPR_BOARD_FILE_VERSION 20200818 // Remove Status flag bitmap and setup counts //#define SEXPR_BOARD_FILE_VERSION 20200819 // Add board-level properties //#define SEXPR_BOARD_FILE_VERSION 20200825 // Remove host information //#define SEXPR_BOARD_FILE_VERSION 20200828 // Add new fabrication attributes //#define SEXPR_BOARD_FILE_VERSION 20200829 // Remove library name from exported footprints //#define SEXPR_BOARD_FILE_VERSION 20200909 // Change DIMENSION format //#define SEXPR_BOARD_FILE_VERSION 20200913 // Add leader dimension //#define SEXPR_BOARD_FILE_VERSION 20200916 // Add center dimension //#define SEXPR_BOARD_FILE_VERSION 20200921 // Add orthogonal dimension //#define SEXPR_BOARD_FILE_VERSION 20200922 // Add user name to layer definition. //#define SEXPR_BOARD_FILE_VERSION 20201002 // Add groups in footprints (for footprint editor). //#define SEXPR_BOARD_FILE_VERSION 20201114 // Add first-class support for filled shapes. //#define SEXPR_BOARD_FILE_VERSION 20201115 // module -> footprint and change fill syntax. //#define SEXPR_BOARD_FILE_VERSION 20201116 // Write version and generator string in footprint files. //#define SEXPR_BOARD_FILE_VERSION 20201220 // Add free via token //#define SEXPR_BOARD_FILE_VERSION 20210108 // Pad locking moved from footprint to pads //#define SEXPR_BOARD_FILE_VERSION 20210126 // Store pintype alongside pinfunction (in pads). //#define SEXPR_BOARD_FILE_VERSION 20210228 // Move global margins back to board file //#define SEXPR_BOARD_FILE_VERSION 20210424 // Correct locked flag syntax (remove parens). //#define SEXPR_BOARD_FILE_VERSION 20210606 // Change overbar syntax from `~...~` to `~{...}`. //#define SEXPR_BOARD_FILE_VERSION 20210623 // Add support for reading/writing arcs in polygons //#define SEXPR_BOARD_FILE_VERSION 20210722 // Reading/writing group locked flags //#define SEXPR_BOARD_FILE_VERSION 20210824 // Opacity in 3D colors //#define SEXPR_BOARD_FILE_VERSION 20210925 // Locked flag for fp_text //#define SEXPR_BOARD_FILE_VERSION 20211014 // Arc formatting //#define SEXPR_BOARD_FILE_VERSION 20211226 // Add radial dimension #define SEXPR_BOARD_FILE_VERSION 20211227 // Add thermal relief spoke angle overrides #define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag #define LEGACY_ARC_FORMATTING 20210925 ///< These were the last to use old arc formatting #define CTL_OMIT_PAD_NETS (1 << 1) ///< Omit pads net names (useless in library) #define CTL_OMIT_TSTAMPS (1 << 2) ///< Omit component time stamp (useless in library) #define CTL_OMIT_INITIAL_COMMENTS (1 << 3) ///< omit FOOTPRINT initial comments #define CTL_OMIT_PATH (1 << 4) ///< Omit component sheet time stamp (useless in library) #define CTL_OMIT_AT (1 << 5) ///< Omit position and rotation. (always saved ///< with potion 0,0 and rotation = 0 in library). //#define CTL_OMIT_HIDE (1 << 6) // found and defined in eda_text.h #define CTL_OMIT_LIBNAME (1 << 7) ///< Omit lib alias when saving (used for ///< board/not library). #define CTL_OMIT_FOOTPRINT_VERSION (1 << 8) ///< Omit the version string from the (footprint) ///