summaryrefslogtreecommitdiff
path: root/gerbview/class_excellon.h
diff options
context:
space:
mode:
Diffstat (limited to 'gerbview/class_excellon.h')
-rw-r--r--gerbview/class_excellon.h308
1 files changed, 308 insertions, 0 deletions
diff --git a/gerbview/class_excellon.h b/gerbview/class_excellon.h
new file mode 100644
index 0000000..d115d7b
--- /dev/null
+++ b/gerbview/class_excellon.h
@@ -0,0 +1,308 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2011-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
+ */
+
+#ifndef CLASS_EXCELLON_H
+#define CLASS_EXCELLON_H
+
+
+enum drill_M_code_t {
+ DRILL_M_UNKNOWN,
+ DRILL_M_END,
+ DRILL_M_ENDREWIND,
+ DRILL_M_MESSAGE,
+ DRILL_M_LONGMESSAGE,
+ DRILL_M_HEADER,
+ DRILL_M_ENDHEADER,
+ DRILL_M_BEGINPATTERN,
+ DRILL_M_ENDPATTERN,
+ DRILL_M_CANNEDTEXT,
+ DRILL_M_TIPCHECK,
+ DRILL_M_METRIC,
+ DRILL_M_IMPERIAL,
+ DRILL_METRICHEADER,
+ DRILL_IMPERIALHEADER,
+ DRILL_DETECT_BROKEN,
+ DRILL_INCREMENTALHEADER,
+ DRILL_REWIND_STOP,
+ DRILL_TOOL_CHANGE_STOP,
+ DRILL_AUTOMATIC_SPEED,
+ DRILL_AXIS_VERSION,
+ DRILL_RESET_CMD,
+ DRILL_AUTOMATIC_TOOL_CHANGE,
+ DRILL_FMT,
+ DRILL_SKIP,
+ DRILL_TOOL_INFORMATION
+};
+
+
+enum drill_G_code_t {
+ DRILL_G_UNKNOWN,
+ DRILL_G_ABSOLUTE,
+ DRILL_G_INCREMENTAL,
+ DRILL_G_ZEROSET,
+ DRILL_G_ROUT,
+ DRILL_G_DRILL,
+ DRILL_G_SLOT,
+ DRILL_G_ZERO_SET,
+ DRILL_G_LINEARMOVE,
+ DRILL_G_CWMOVE,
+ DRILL_G_CCWMOVE
+};
+
+// Helper struct to analyse Excellon commands
+struct EXCELLON_CMD
+{
+ std::string m_Name; // key string
+ int m_Code; // internal code, used as id in functions
+ int m_asParams; // 0 = no param, -1 = skip params, 1 = read params
+};
+
+
+/* EXCELLON_IMAGE handle a drill image
+ * It is derived from GERBER_IMAGE because there is a lot of likeness
+ * between EXCELLON files and GERBER files
+ * DCode aperture are also similat to T Codes.
+ * So we can reuse GERBER_IMAGE to handle EXCELLON_IMAGE with very few new functions
+ */
+
+class EXCELLON_IMAGE : public GERBER_IMAGE
+{
+private:
+ enum excellon_state {
+ READ_HEADER_STATE, // When we are in this state, we are reading header
+ READ_PROGRAM_STATE // When we are in this state, we are reading drill data
+ };
+ excellon_state m_State; // state of excellon file analysis
+ bool m_SlotOn; // true during an oval driil definition
+
+public: EXCELLON_IMAGE( GERBVIEW_FRAME* aParent, int layer ) :
+ GERBER_IMAGE( aParent, layer )
+ {
+ m_State = READ_HEADER_STATE;
+ m_SlotOn = false;
+ }
+
+
+ ~EXCELLON_IMAGE() {};
+
+ virtual void ResetDefaultValues()
+ {
+ GERBER_IMAGE::ResetDefaultValues();
+ SelectUnits( false );
+ }
+
+
+ bool Read_EXCELLON_File( FILE* aFile, const wxString& aFullFileName );
+
+private:
+ bool Execute_HEADER_Command( char*& text );
+ bool Select_Tool( char*& text );
+ bool Execute_EXCELLON_G_Command( char*& text );
+ bool Execute_Drill_Command( char*& text );
+
+ int TCodeNumber( char*& Text )
+ {
+ return DCodeNumber( Text );
+ }
+
+
+ void SelectUnits( bool aMetric );
+};
+
+
+/*
+ * EXCELLON commands are given here.
+ * Pcbnew uses only few excellon commands
+ */
+
+/*
+ * see http://www.excellon.com/manuals/program.htm
+ */
+
+/* coordintes units:
+ * Coordinates are measured either in inch or metric (millimeters).
+ * Inch coordinates are in six digits (00.0000) with increments as small as 0.0001 (1/10,000).
+ * Metric coordinates can be measured in microns (thousandths of a millimeter)
+ * in one of the following three ways:
+ * Five digit 10 micron resolution (000.00)
+ * Six digit 10 micron resolution (0000.00)
+ * Six digit micron resolution (000.000)
+ *
+ * Leading and trailing zeros:
+ * Excellon (CNC-7) uses inches in six digits and metric in five or six digits.
+ * The zeros to the left of the coordinate are called leading zeros (LZ).
+ * The zeros to right of the coordinate are called trailing zeros (TZ).
+ * The CNC-7 uses leading zeros unless you specify otherwise through a part program.
+ * You can do so with the INCH/METRIC command.
+ * With leading zeros, the leading zeros must always be included.
+ * Trailing zeros are unneeded and may be left off.
+ * For trailing zeros, the reverse of the above is true.
+ */
+
+/*
+ * EXCELLON Commands Used in a Header
+ * The following table provides you with a list of commands which
+ * are the most used in a part program header.
+ * COMMAND DESCRIPTION
+ * AFS Automatic Feeds and Speeds
+ * ATC Automatic Tool Change
+ * BLKD Delete all Blocks starting with a slash (/)
+ * CCW Clockwise or Counter-clockwise Routing
+ * CP Cutter Compensation
+ * DETECT Broken Tool Detection
+ * DN Down Limit Set
+ * DTMDIST Maximum Rout Distance Before Toolchange
+ * EXDA Extended Drill Area
+ * FMAT Format 1 or 2
+ * FSB Turns the Feed/Speed Buttons off
+ * HPCK Home Pulse Check
+ * ICI Incremental Input of Part Program Coordinates
+ * INCH Measure Everything in Inches
+ * METRIC Measure Everything in Metric
+ * M48 Beginning of Part Program Header
+ * M95 End of Header
+ * NCSL NC Slope Enable/Disable
+ * OM48 Override Part Program Header
+ * OSTOP Optional Stop Switch
+ * OTCLMP Override Table Clamp
+ * PCKPARAM Set up pecking tool,depth,infeed and retract parameters
+ * PF Floating Pressure Foot Switch
+ * PPR Programmable Plunge Rate Enable
+ * PVS Pre-vacuum Shut-off Switch
+ * R,C Reset Clocks
+ * R,CP Reset Program Clocks
+ * R,CR Reset Run Clocks
+ * R,D Reset All Cutter Distances
+ * R,H Reset All Hit Counters
+ * R,T Reset Tool Data
+ * SBK Single Block Mode Switch
+ * SG Spindle Group Mode
+ * SIXM Input From External Source
+ * T Tool Information
+ * TCST Tool Change Stop
+ * UP Upper Limit Set
+ * VER Selection of X and Y Axis Version
+ * Z Zero Set
+ * ZA Auxiliary Zero
+ * ZC Zero Correction
+ * ZS Zero Preset
+ * Z+# or Z-# Set Depth Offset
+ * % Rewind Stop
+ * #/#/# Link Tool for Automatic Tool Change
+ * / Clear Tool Linking
+ */
+
+/*
+ * Beyond The Header: The Part Program Body
+ * COMMAND DESCRIPTION
+ * A# Arc Radius
+ * B# Retract Rate
+ * C# Tool Diameter
+ * F# Table Feed Rate;Z Axis Infeed Rate
+ * G00X#Y# Route Mode
+ * G01 Linear (Straight Line) Mode
+ * G02 Circular CW Mode
+ * G03 Circular CCW Mode
+ * G04 X# Variable Dwell
+ * G05 Drill Mode
+ * G07 Override current tool feed or speed
+ * G32X#Y#A# Routed Circle Canned Cycle
+ * CW G33X#Y#A# Routed Circle Canned Cycle
+ * CCW G34,#(,#) Select Vision Tool
+ * G35(X#Y#) Single Point Vision Offset (Relative to Work Zero)
+ * G36(X#Y#) Multipoint Vision Translation (Relative to Work Zero)
+ * G37 Cancel Vision Translation or Offset (From G35 or G36)
+ * G38(X#Y#) Vision Corrected Single Hole Drilling (Relative to Work Zero)
+ * G39(X#Y#) Vision System Autocalibration
+ * G40 Cutter Compensation Off
+ * G41 Cutter Compensation Left
+ * G42 Cutter Compensation Right
+ * G45(X#Y#) Single Point Vision Offset (Relative to G35 or G36)
+ * G46(X#Y#) Multipoint Vision Translation (Relative to G35 or G36)
+ * G47 Cancel Vision Translation or Offset (From G45 or G46)
+ * G48(X#Y#) Vision Corrected Single Hole Drilling (Relative to G35 or G36)
+ * G82(G81) Dual In Line Package
+ * G83 Eight Pin L Pack
+ * G84 Circle
+ * G85 Slot
+ * G87 Routed Step Slot Canned Cycle
+ * G90 Absolute Mode
+ * G91 Incremental Input Mode
+ * G93X#Y# Zero Set
+ * H# Maximum hit count
+ * I#J# Arc Center Offset
+ * M00(X#Y#) End of Program - No Rewind
+ * M01 End of Pattern
+ * M02X#Y# Repeat Pattern Offset
+ * M06(X#Y#) Optional Stop
+ * M08 End of Step and Repeat
+ * M09(X#Y#) Stop for Inspection
+ * M14 Z Axis Route Position With Depth Controlled Contouring
+ * M15 Z Axis Route Position
+ * M16 Retract With Clamping
+ * M17 Retract Without Clamping
+ * M18 Command tool tip check
+ * M25 Beginning of Pattern
+ * M30(X#Y#) End of Program Rewind
+ * M45,long message\ Long Operator message on multiple\ part program lines
+ * M47,text Operator Message
+ * M50,# Vision Step and Repeat Pattern Start
+ * M51,# Vision Step and Repeat Rewind
+ * M52(#) Vision Step and Repeat Offset Counter Control
+ * M02XYM70 Swap Axes
+ * M60 Reference Scaling enable
+ * M61 Reference Scaling disable
+ * M62 Turn on peck drilling
+ * M63 Turn off peck drilling
+ * M71 Metric Measuring Mode
+ * M72 Inch Measuring Mode
+ * M02XYM80 Mirror Image X Axis
+ * M02XYM90 Mirror Image Y Axis
+ * M97,text Canned Text
+ * M98,text Canned Text
+ * M99,subprogram User Defined Stored Pattern
+ * P#X#(Y#) Repeat Stored Pattern
+ * R#M02X#Y# Repeat Pattern (S&R)
+ * R#(X#Y#) Repeat Hole
+ * S# Spindle RPM
+ * T# Tool Selection; Cutter Index
+ * Z+# or Z-# Depth Offset
+ * % Beginning of Pattern (see M25 command)
+ * / Block Delete
+ */
+
+/*
+ * Example of a Header
+ * COMMAND PURPOSE
+ * M48 The beginning of a header
+ * INCH,LZ Use the inch measuring system with leading zeros
+ * VER,1 Use Version 1 X and Y axis layout
+ * FMAT,2 Use Format 2 commands
+ * 1/2/3 Link tools 1, 2, and 3
+ * T1C.04F200S65 Set Tool 1 for 0.040" with infeed rate of 200 inch/min Speed of 65,000 RPM
+ * DETECT,ON Detect broken tools
+ * M95 End of the header
+ */
+
+#endif // CLASS_EXCELLON_H