diff options
Diffstat (limited to 'gerbview/class_X2_gerber_attributes.h')
-rw-r--r-- | gerbview/class_X2_gerber_attributes.h | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/gerbview/class_X2_gerber_attributes.h b/gerbview/class_X2_gerber_attributes.h new file mode 100644 index 0000000..cdd68b5 --- /dev/null +++ b/gerbview/class_X2_gerber_attributes.h @@ -0,0 +1,178 @@ +/* + * This program source code file is part of KiCad, a free EDA CAD application. + * + * Copyright (C) 2010-2014 Jean-Pierre Charras jp.charras at wanadoo.fr + * Copyright (C) 1992-2014 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 + */ + +/** + * @file class_X2_gerber_attributes.h + */ + +#ifndef _CLASS_X2_GERBER_ATTRIBUTE_H_ +#define _CLASS_X2_GERBER_ATTRIBUTE_H_ + +/* + * Manage the gerber extensions (attributes) in the new X2 version + * only few extensions are handled + * See http://www.ucamco.com/files/downloads/file/81/the_gerber_file_format_specification.pdf + * + * gerber attributes in the new X2 version look like: + * %TF.FileFunction,Copper,L1,Top*% + * + * Currently: + * .FileFunction .FileFunction Identifies the file’s function in the PCB. + * Other Standard Attributes, not yet used in Gerbview: + * .Part Identifies the part the file represents, e.g. a single PCB + * .MD5 Sets the MD5 file signature or checksum. + */ + +#include <wx/arrstr.h> + +/** + * class X2_ATTRIBUTE + * The attribute value consists of a number of substrings separated by a “,” +*/ + +class X2_ATTRIBUTE +{ +protected: + wxArrayString m_Prms; ///< the list of parameters (after TF) in gbr file + ///< the first one is the attribute name, + ///< if starting by '.' + +public: + X2_ATTRIBUTE(); + ~X2_ATTRIBUTE(); + + /** + * @return the parameters list read in TF command. + */ + wxArrayString& GetPrms() { return m_Prms; } + + /** + * @return a parameter read in TF command. + * @param aIdx = the index of the parameter + * aIdx = 0 is the parameter read after the TF function + * (the same as GetAttribute()) + */ + const wxString& GetPrm( int aIdx ); + + /** + * @return the attribute name (for instance .FileFunction) + * which is given by TF command (i.e. the first parameter read). + */ + const wxString& GetAttribute(); + + /** + * @return the number of parameters read in TF command. + */ + int GetPrmCount() { return int( m_Prms.GetCount() ); } + + /** + * parse a TF command terminated with a % and fill m_Prms + * by the parameters found. + * @param aFile = a FILE* ptr to the current Gerber file. + * @param aBuffer = the buffer containing current Gerber data (can be null) + * @param aBuffSize = the size of the buffer + * @param aText = a pointer to the first char to read from Gerber data stored in aBuffer + * After parsing, text points the last char of the command line ('%') (X2 mode) + * or the end of line if the line does not contain '%' or aBuffer == NULL (X1 mode) + * @return true if no error. + */ + bool ParseAttribCmd( FILE* aFile, char *aBuffer, int aBuffSize, char* &aText ); + + /** + * Debug function: pring using wxLogMessage le list of parameters + */ + void DbgListPrms(); + + /** + * return true if the attribute is .FileFunction + */ + bool IsFileFunction() + { + return GetAttribute().IsSameAs( wxT(".FileFunction"), false ); + } + + /** + * return true if the attribute is .MD5 + */ + bool IsFileMD5() + { + return GetAttribute().IsSameAs( wxT(".MD5"), false ); + } + + /** + * return true if the attribute is .Part + */ + bool IsFilePart() + { + return GetAttribute().IsSameAs( wxT(".Part"), false ); + } +}; + +/** + * class X2_ATTRIBUTE_FILEFUNCTION ( from %TF.FileFunction in Gerber file) + * Example file function: + * %TF.FileFunction,Copper,L1,Top*% + * - Type. Such as copper, solder mask etc. + * - Position. Specifies where the file appears in the PCB layer structure. + * Corresponding position substring: + * Copper layer: L1, L2, L3...to indicate the layer position followed by Top, Inr or + * Bot. L1 is always the top copper layer. E.g. L2,Inr. + * Extra layer, e.g. solder mask: Top or Bot – defines the attachment of the layer. + * Drill/rout layer: E.g. 1,4 – where 1 is the start and 4 is the end copper layer. The + * pair 1,4 defines the span of the drill/rout file + * Optional index. This can be used in instances where for example there are two solder + * masks on the same side. The index counts from the PCB surface outwards. + */ + +class X2_ATTRIBUTE_FILEFUNCTION : public X2_ATTRIBUTE +{ + int m_z_order; // the z order of the layer for a board + int m_z_sub_order; // the z sub_order of the copper layer for a board + +public: + X2_ATTRIBUTE_FILEFUNCTION( X2_ATTRIBUTE& aAttributeBase ); + + bool IsCopper(); ///< return true if the filefunction type is "Copper" + + const wxString& GetFileType(); ///< the type of layer (Copper, Soldermask ... ) + const wxString& GetBrdLayerId(); ///< the brd layer identifier: Ln, only for Copper type + ///< or Top, Bot for other types + const wxString& GetBrdLayerSide(); ///< the brd layer Pos: Top, Bot, Inr + ///< same as GetBrdLayerId() for non copper type + const wxString& GetLabel(); ///< the filefunction label, if any + + int GetZOrder() { return m_z_order; } ///< the Order of the board layer, + ///< from front (Top) side to back (Bot) side + int GetZSubOrder() { return m_z_sub_order; } ///< the Order of the bdr copper layer, + ///< from front (Top) side to back (Bot) side + +private: + + /** + * Initialize the z order priority of the current file, from its attributes + */ + void set_Z_Order(); +}; + +#endif // _CLASS_X2_GERBER_ATTRIBUTE_H_ |