Commits

iorodeo committed 25edd3b

Added py2gcode and gcode files for machining the hammond enclosure.

Comments (0)

Files changed (20)

enclosures/hammond/LICENSE

+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+

enclosures/hammond/enclosure/LICENSE

+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+

enclosures/hammond/enclosure/side.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 22.0
+
+; Begin RectBoundaryXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; toolOffset: inside
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 0.4
+; radius: 0.0
+; safeZ: 0.25
+; width: 0.5
+; depth: 0.16
+; centerX: 1.9654
+; centerY: 0.2965
+; toolDiam: 0.125
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.25000000
+
+; RectBoundaryXY: rapid move to start x,y
+G0 X1.77790000 Y0.43400000
+
+; RectBoundaryXY: dwell
+G4 P2.0
+
+; RectBoundaryXY: move to start z
+G1 Z0.00000000
+
+; RectBoundaryXY: RectPath 0
+G1 X1.77790000 Y0.43400000 Z0.00000000
+G1 X1.77790000 Y0.15900000 Z-0.00423077
+G1 X2.15290000 Y0.15900000 Z-0.01000000
+G1 X2.15290000 Y0.43400000 Z-0.01423077
+G1 X1.77790000 Y0.43400000 Z-0.02000000
+
+; RectBoundaryXY: RectPath 1
+G1 X1.77790000 Y0.43400000 Z-0.02000000
+G1 X1.77790000 Y0.15900000 Z-0.02423077
+G1 X2.15290000 Y0.15900000 Z-0.03000000
+G1 X2.15290000 Y0.43400000 Z-0.03423077
+G1 X1.77790000 Y0.43400000 Z-0.04000000
+
+; RectBoundaryXY: RectPath 2
+G1 X1.77790000 Y0.43400000 Z-0.04000000
+G1 X1.77790000 Y0.15900000 Z-0.04423077
+G1 X2.15290000 Y0.15900000 Z-0.05000000
+G1 X2.15290000 Y0.43400000 Z-0.05423077
+G1 X1.77790000 Y0.43400000 Z-0.06000000
+
+; RectBoundaryXY: RectPath 3
+G1 X1.77790000 Y0.43400000 Z-0.06000000
+G1 X1.77790000 Y0.15900000 Z-0.06423077
+G1 X2.15290000 Y0.15900000 Z-0.07000000
+G1 X2.15290000 Y0.43400000 Z-0.07423077
+G1 X1.77790000 Y0.43400000 Z-0.08000000
+
+; RectBoundaryXY: RectPath 4
+G1 X1.77790000 Y0.43400000 Z-0.08000000
+G1 X1.77790000 Y0.15900000 Z-0.08423077
+G1 X2.15290000 Y0.15900000 Z-0.09000000
+G1 X2.15290000 Y0.43400000 Z-0.09423077
+G1 X1.77790000 Y0.43400000 Z-0.10000000
+
+; RectBoundaryXY: RectPath 5
+G1 X1.77790000 Y0.43400000 Z-0.10000000
+G1 X1.77790000 Y0.15900000 Z-0.10423077
+G1 X2.15290000 Y0.15900000 Z-0.11000000
+G1 X2.15290000 Y0.43400000 Z-0.11423077
+G1 X1.77790000 Y0.43400000 Z-0.12000000
+
+; RectBoundaryXY: RectPath 6
+G1 X1.77790000 Y0.43400000 Z-0.12000000
+G1 X1.77790000 Y0.15900000 Z-0.12423077
+G1 X2.15290000 Y0.15900000 Z-0.13000000
+G1 X2.15290000 Y0.43400000 Z-0.13423077
+G1 X1.77790000 Y0.43400000 Z-0.14000000
+
+; RectBoundaryXY: RectPath 7
+G1 X1.77790000 Y0.43400000 Z-0.14000000
+G1 X1.77790000 Y0.15900000 Z-0.14423077
+G1 X2.15290000 Y0.15900000 Z-0.15000000
+G1 X2.15290000 Y0.43400000 Z-0.15423077
+G1 X1.77790000 Y0.43400000 Z-0.16000000
+
+; RectBoundaryXY: RectPath 8
+G1 X1.77790000 Y0.43400000 Z-0.16000000
+G1 X1.77790000 Y0.15900000 Z-0.16000000
+G1 X2.15290000 Y0.15900000 Z-0.16000000
+G1 X2.15290000 Y0.43400000 Z-0.16000000
+G1 X1.77790000 Y0.43400000 Z-0.16000000
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.25000000
+
+; End RectBoundaryXY
+; ------------------------------------------------------------
+
+
+; Begin RectBoundaryXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; toolOffset: inside
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 0.125
+; radius: 0.0
+; safeZ: 0.25
+; width: 0.3
+; depth: 0.16
+; centerX: 3.4387
+; centerY: 0.0
+; toolDiam: 0.125
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.25000000
+
+; RectBoundaryXY: rapid move to start x,y
+G0 X3.35120000 Y0.00000000
+
+; RectBoundaryXY: dwell
+G4 P2.0
+
+; RectBoundaryXY: move to start z
+G1 Z0.00000000
+
+; RectBoundaryXY: RectPath 0
+G1 X3.35120000 Y0.00000000 Z0.00000000
+G1 X3.35120000 Y0.00000000 Z0.00000000
+G1 X3.52620000 Y0.00000000 Z-0.01000000
+G1 X3.52620000 Y0.00000000 Z-0.01000000
+G1 X3.35120000 Y0.00000000 Z-0.02000000
+
+; RectBoundaryXY: RectPath 1
+G1 X3.35120000 Y0.00000000 Z-0.02000000
+G1 X3.35120000 Y0.00000000 Z-0.02000000
+G1 X3.52620000 Y0.00000000 Z-0.03000000
+G1 X3.52620000 Y0.00000000 Z-0.03000000
+G1 X3.35120000 Y0.00000000 Z-0.04000000
+
+; RectBoundaryXY: RectPath 2
+G1 X3.35120000 Y0.00000000 Z-0.04000000
+G1 X3.35120000 Y0.00000000 Z-0.04000000
+G1 X3.52620000 Y0.00000000 Z-0.05000000
+G1 X3.52620000 Y0.00000000 Z-0.05000000
+G1 X3.35120000 Y0.00000000 Z-0.06000000
+
+; RectBoundaryXY: RectPath 3
+G1 X3.35120000 Y0.00000000 Z-0.06000000
+G1 X3.35120000 Y0.00000000 Z-0.06000000
+G1 X3.52620000 Y0.00000000 Z-0.07000000
+G1 X3.52620000 Y0.00000000 Z-0.07000000
+G1 X3.35120000 Y0.00000000 Z-0.08000000
+
+; RectBoundaryXY: RectPath 4
+G1 X3.35120000 Y0.00000000 Z-0.08000000
+G1 X3.35120000 Y0.00000000 Z-0.08000000
+G1 X3.52620000 Y0.00000000 Z-0.09000000
+G1 X3.52620000 Y0.00000000 Z-0.09000000
+G1 X3.35120000 Y0.00000000 Z-0.10000000
+
+; RectBoundaryXY: RectPath 5
+G1 X3.35120000 Y0.00000000 Z-0.10000000
+G1 X3.35120000 Y0.00000000 Z-0.10000000
+G1 X3.52620000 Y0.00000000 Z-0.11000000
+G1 X3.52620000 Y0.00000000 Z-0.11000000
+G1 X3.35120000 Y0.00000000 Z-0.12000000
+
+; RectBoundaryXY: RectPath 6
+G1 X3.35120000 Y0.00000000 Z-0.12000000
+G1 X3.35120000 Y0.00000000 Z-0.12000000
+G1 X3.52620000 Y0.00000000 Z-0.13000000
+G1 X3.52620000 Y0.00000000 Z-0.13000000
+G1 X3.35120000 Y0.00000000 Z-0.14000000
+
+; RectBoundaryXY: RectPath 7
+G1 X3.35120000 Y0.00000000 Z-0.14000000
+G1 X3.35120000 Y0.00000000 Z-0.14000000
+G1 X3.52620000 Y0.00000000 Z-0.15000000
+G1 X3.52620000 Y0.00000000 Z-0.15000000
+G1 X3.35120000 Y0.00000000 Z-0.16000000
+
+; RectBoundaryXY: RectPath 8
+G1 X3.35120000 Y0.00000000 Z-0.16000000
+G1 X3.35120000 Y0.00000000 Z-0.16000000
+G1 X3.52620000 Y0.00000000 Z-0.16000000
+G1 X3.52620000 Y0.00000000 Z-0.16000000
+G1 X3.35120000 Y0.00000000 Z-0.16000000
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.25000000
+
+; End RectBoundaryXY
+; ------------------------------------------------------------
+
+
+M2 (End program)

enclosures/hammond/enclosure/side.py

+from __future__ import print_function
+import os
+from py2gcode import cnc_boundary
+from py2gcode import gcode_cmd
+
+# -----------------------------------------------------------------------------
+# Notes, 
+# 
+#  zero x at top of enclosure
+#  zero y at seam between two halves 
+#  hold in vise
+# ------------------------------------------------------------------------------
+
+feedrate = 22.0
+safeZ = 0.25
+startZ = 0.0
+depth = 0.16
+toolDiam = 0.125
+#depth = 0.02 
+#toolDiam = 0.001
+maxCutDepth = 0.02
+startDwell = 2.0
+
+prog = gcode_cmd.GCodeProg()
+prog.add(gcode_cmd.GenericStart())
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.FeedRate(feedrate))
+
+
+param = { 
+        'centerX'      : 1.9654,
+        'centerY'      : 0.2965,
+        'width'        : 0.5,
+        'height'       : 0.4,
+        'depth'        : depth,
+        'radius'       : 0.0,
+        'startZ'       : startZ,
+        'safeZ'        : safeZ,
+        'toolDiam'     : toolDiam,
+        'toolOffset'   : 'inside',
+        'direction'    : 'ccw',
+        'maxCutDepth'  : maxCutDepth,
+        'startDwell'   : startDwell,
+        
+        }
+usbBoundary = cnc_boundary.RectBoundaryXY(param)
+prog.add(usbBoundary)
+
+
+param = {
+        'centerX'       : 3.4387,
+        'centerY'       : 0.0,
+        'width'         : 0.3,
+        'height'        : 0.125,
+        'depth'         : depth,
+        'radius'       : 0.0,
+        'startZ'       : startZ,
+        'safeZ'        : safeZ,
+        'toolDiam'     : toolDiam,
+        'toolOffset'   : 'inside',
+        'direction'    : 'ccw',
+        'maxCutDepth'  : maxCutDepth,
+        'startDwell'   : startDwell,
+        }
+
+wireBoundary= cnc_boundary.RectBoundaryXY(param)
+prog.add(wireBoundary)
+
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.End(),comment=True)
+print(prog)
+baseName, dummy = os.path.splitext(__file__)
+fileName = '{0}.ngc'.format(baseName)
+print(fileName)
+prog.write(fileName)

enclosures/hammond/enclosure/switch_pocket.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 22.0
+
+; Begin RectAnnulusPocketXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 0.508
+; overlapFinish: 0.5
+; safeZ: 0.15
+; overlap: 0.5
+; thickness: 0.125
+; cornerCut: True
+; width: 0.76
+; depth: 0.08
+; centerX: 0.0
+; centerY: -0.04
+; toolDiam: 0.125
+
+; RectAnnulusPocketXY: rapid move to safe z
+G0 Z0.15000000
+
+; RectAnnulusPocketXY: rapid move to start x,y
+G0 X-0.31750000 Y0.15150000
+
+; RectAnnulusPocketXY: dwell
+G4 P2.0
+
+; RectAnnulusPocketXY: move to start z
+G1 Z0.00000000
+
+; RectAnnulusPocketXY: pass 1 lead-in
+G1 X-0.31750000 Y0.15150000 Z0.00000000
+G1 X-0.31750000 Y-0.23150000 Z-0.00376228
+G1 X0.31750000 Y-0.23150000 Z-0.01000000
+G1 X0.31750000 Y0.15150000 Z-0.01376228
+G1 X-0.31750000 Y0.15150000 Z-0.02000000
+
+; RectAnnulusPocketXY: pass 1 filled rectangle
+G1 X-0.31750000 Y0.15150000
+G1 X-0.31750000 Y-0.23150000
+G1 X-0.33580583 Y-0.24980583
+G1 X-0.31750000 Y-0.23150000
+G1 X0.31750000 Y-0.23150000
+G1 X0.33580583 Y-0.24980583
+G1 X0.31750000 Y-0.23150000
+G1 X0.31750000 Y0.15150000
+G1 X0.33580583 Y0.16980583
+G1 X0.31750000 Y0.15150000
+G1 X-0.31750000 Y0.15150000
+G1 X-0.33580583 Y0.16980583
+G1 X-0.31750000 Y0.15150000
+
+; RectAnnulusPocketXY: pass 2 lead-in
+G1 X-0.31750000 Y0.15150000 Z-0.02000000
+G1 X-0.31750000 Y-0.23150000 Z-0.02376228
+G1 X0.31750000 Y-0.23150000 Z-0.03000000
+G1 X0.31750000 Y0.15150000 Z-0.03376228
+G1 X-0.31750000 Y0.15150000 Z-0.04000000
+
+; RectAnnulusPocketXY: pass 2 filled rectangle
+G1 X-0.31750000 Y0.15150000
+G1 X-0.31750000 Y-0.23150000
+G1 X-0.33580583 Y-0.24980583
+G1 X-0.31750000 Y-0.23150000
+G1 X0.31750000 Y-0.23150000
+G1 X0.33580583 Y-0.24980583
+G1 X0.31750000 Y-0.23150000
+G1 X0.31750000 Y0.15150000
+G1 X0.33580583 Y0.16980583
+G1 X0.31750000 Y0.15150000
+G1 X-0.31750000 Y0.15150000
+G1 X-0.33580583 Y0.16980583
+G1 X-0.31750000 Y0.15150000
+
+; RectAnnulusPocketXY: pass 3 lead-in
+G1 X-0.31750000 Y0.15150000 Z-0.04000000
+G1 X-0.31750000 Y-0.23150000 Z-0.04376228
+G1 X0.31750000 Y-0.23150000 Z-0.05000000
+G1 X0.31750000 Y0.15150000 Z-0.05376228
+G1 X-0.31750000 Y0.15150000 Z-0.06000000
+
+; RectAnnulusPocketXY: pass 3 filled rectangle
+G1 X-0.31750000 Y0.15150000
+G1 X-0.31750000 Y-0.23150000
+G1 X-0.33580583 Y-0.24980583
+G1 X-0.31750000 Y-0.23150000
+G1 X0.31750000 Y-0.23150000
+G1 X0.33580583 Y-0.24980583
+G1 X0.31750000 Y-0.23150000
+G1 X0.31750000 Y0.15150000
+G1 X0.33580583 Y0.16980583
+G1 X0.31750000 Y0.15150000
+G1 X-0.31750000 Y0.15150000
+G1 X-0.33580583 Y0.16980583
+G1 X-0.31750000 Y0.15150000
+
+; RectAnnulusPocketXY: pass 4 lead-in
+G1 X-0.31750000 Y0.15150000 Z-0.06000000
+G1 X-0.31750000 Y-0.23150000 Z-0.06376228
+G1 X0.31750000 Y-0.23150000 Z-0.07000000
+G1 X0.31750000 Y0.15150000 Z-0.07376228
+G1 X-0.31750000 Y0.15150000 Z-0.08000000
+
+; RectAnnulusPocketXY: pass 4 filled rectangle
+G1 X-0.31750000 Y0.15150000
+G1 X-0.31750000 Y-0.23150000
+G1 X-0.33580583 Y-0.24980583
+G1 X-0.31750000 Y-0.23150000
+G1 X0.31750000 Y-0.23150000
+G1 X0.33580583 Y-0.24980583
+G1 X0.31750000 Y-0.23150000
+G1 X0.31750000 Y0.15150000
+G1 X0.33580583 Y0.16980583
+G1 X0.31750000 Y0.15150000
+G1 X-0.31750000 Y0.15150000
+G1 X-0.33580583 Y0.16980583
+G1 X-0.31750000 Y0.15150000
+
+; RectAnnulusPocketXY: rapid move to safe z
+G0 Z0.15000000
+
+; End RectAnnulusPocketXY
+; ------------------------------------------------------------
+
+
+G1 X0.00000000 Y2.60000000 Z4.00000000
+
+M2 (End program)

enclosures/hammond/enclosure/switch_pocket.py

+from __future__ import print_function
+import os
+from py2gcode import cnc_boundary
+from py2gcode import cnc_pocket
+from py2gcode import gcode_cmd
+
+feedrate = 22.0
+safeZ = 0.15
+startZ = 0.0
+depth = 0.08
+toolDiam = 0.125
+#depth = 0.02
+#toolDiam = 0.001
+maxCutDepth = 0.02
+startDwell = 2.0
+
+prog = gcode_cmd.GCodeProg()
+prog.add(gcode_cmd.GenericStart())
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.FeedRate(feedrate))
+
+
+param = {
+        'centerX'       : 0.0,
+        'centerY'       : -0.040,
+        'width'         : 0.76,
+        'height'        : 0.508,
+        'depth'         : depth,
+        'thickness'     : toolDiam,
+        'startZ'        : startZ,
+        'safeZ'         : safeZ,
+        'overlap'       : 0.5,
+        'overlapFinish' : 0.5,
+        'maxCutDepth'   : maxCutDepth,
+        'toolDiam'      : toolDiam,
+        'direction'     : 'ccw',
+        'startDwell'    : startDwell,
+        'cornerCut'     : True
+        }
+
+pocket = cnc_pocket.RectAnnulusPocketXY(param)
+prog.add(pocket)
+
+prog.add(gcode_cmd.Space())
+
+prog.add(gcode_cmd.LinearFeed(**{'x': 0.0, 'y': 2.6, 'z': 4.0}))
+
+prog.add(gcode_cmd.Space())
+
+
+prog.add(gcode_cmd.End(),comment=True)
+print(prog)
+baseName, dummy = os.path.splitext(__file__)
+fileName = '{0}.ngc'.format(baseName)
+print(fileName)
+prog.write(fileName)

enclosures/hammond/enclosure/top.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 22.0
+
+; Begin RectBoundaryXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; toolOffset: inside
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 2.13
+; radius: 0.0
+; safeZ: 0.5
+; width: 0.6061
+; depth: 0.15
+; centerX: -0.8767
+; centerY: 0.0
+; toolDiam: 0.125
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.50000000
+
+; RectBoundaryXY: rapid move to start x,y
+G0 X-1.11725000 Y1.00250000
+
+; RectBoundaryXY: dwell
+G4 P2.0
+
+; RectBoundaryXY: move to start z
+G1 Z0.00000000
+
+; RectBoundaryXY: RectPath 0
+G1 X-1.11725000 Y1.00250000 Z0.00000000
+G1 X-1.11725000 Y-1.00250000 Z-0.00806484
+G1 X-0.63615000 Y-1.00250000 Z-0.01000000
+G1 X-0.63615000 Y1.00250000 Z-0.01806484
+G1 X-1.11725000 Y1.00250000 Z-0.02000000
+
+; RectBoundaryXY: RectPath 1
+G1 X-1.11725000 Y1.00250000 Z-0.02000000
+G1 X-1.11725000 Y-1.00250000 Z-0.02806484
+G1 X-0.63615000 Y-1.00250000 Z-0.03000000
+G1 X-0.63615000 Y1.00250000 Z-0.03806484
+G1 X-1.11725000 Y1.00250000 Z-0.04000000
+
+; RectBoundaryXY: RectPath 2
+G1 X-1.11725000 Y1.00250000 Z-0.04000000
+G1 X-1.11725000 Y-1.00250000 Z-0.04806484
+G1 X-0.63615000 Y-1.00250000 Z-0.05000000
+G1 X-0.63615000 Y1.00250000 Z-0.05806484
+G1 X-1.11725000 Y1.00250000 Z-0.06000000
+
+; RectBoundaryXY: RectPath 3
+G1 X-1.11725000 Y1.00250000 Z-0.06000000
+G1 X-1.11725000 Y-1.00250000 Z-0.06806484
+G1 X-0.63615000 Y-1.00250000 Z-0.07000000
+G1 X-0.63615000 Y1.00250000 Z-0.07806484
+G1 X-1.11725000 Y1.00250000 Z-0.08000000
+
+; RectBoundaryXY: RectPath 4
+G1 X-1.11725000 Y1.00250000 Z-0.08000000
+G1 X-1.11725000 Y-1.00250000 Z-0.08806484
+G1 X-0.63615000 Y-1.00250000 Z-0.09000000
+G1 X-0.63615000 Y1.00250000 Z-0.09806484
+G1 X-1.11725000 Y1.00250000 Z-0.10000000
+
+; RectBoundaryXY: RectPath 5
+G1 X-1.11725000 Y1.00250000 Z-0.10000000
+G1 X-1.11725000 Y-1.00250000 Z-0.10806484
+G1 X-0.63615000 Y-1.00250000 Z-0.11000000
+G1 X-0.63615000 Y1.00250000 Z-0.11806484
+G1 X-1.11725000 Y1.00250000 Z-0.12000000
+
+; RectBoundaryXY: RectPath 6
+G1 X-1.11725000 Y1.00250000 Z-0.12000000
+G1 X-1.11725000 Y-1.00250000 Z-0.12806484
+G1 X-0.63615000 Y-1.00250000 Z-0.13000000
+G1 X-0.63615000 Y1.00250000 Z-0.13806484
+G1 X-1.11725000 Y1.00250000 Z-0.14000000
+
+; RectBoundaryXY: RectPath 7
+G1 X-1.11725000 Y1.00250000 Z-0.14000000
+G1 X-1.11725000 Y-1.00250000 Z-0.14403242
+G1 X-0.63615000 Y-1.00250000 Z-0.14500000
+G1 X-0.63615000 Y1.00250000 Z-0.14903242
+G1 X-1.11725000 Y1.00250000 Z-0.15000000
+
+; RectBoundaryXY: RectPath 8
+G1 X-1.11725000 Y1.00250000 Z-0.15000000
+G1 X-1.11725000 Y-1.00250000 Z-0.15000000
+G1 X-0.63615000 Y-1.00250000 Z-0.15000000
+G1 X-0.63615000 Y1.00250000 Z-0.15000000
+G1 X-1.11725000 Y1.00250000 Z-0.15000000
+
+; RectBoundaryXY: rapid move to safe z
+G0 Z0.50000000
+
+; End RectBoundaryXY
+; ------------------------------------------------------------
+
+
+; Begin CircBoundaryXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; toolOffset: inside
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; radius: 0.2
+; safeZ: 0.5
+; depth: 0.15
+; centerX: -1.61
+; centerY: 0.0
+; toolDiam: 0.125
+
+; CircBoundaryXY: rapid move to safe z
+G0 Z0.50000000
+
+; CircBoundaryXY: rapid move to start x,y
+G0 X-1.47250000 Y0.00000000
+
+; CircBoundaryXY: dwell
+G4 P2.0
+
+; CircBoundaryXY: move to start z
+G1 Z0.00000000
+
+; CircBoundaryXY: CircPath 0
+G1 X-1.47250000 Y0.00000000 Z0.00000000
+G3 X-1.47250000 Y0.00000000 Z-0.02000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 1
+G1 X-1.47250000 Y0.00000000 Z-0.02000000
+G3 X-1.47250000 Y0.00000000 Z-0.04000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 2
+G1 X-1.47250000 Y0.00000000 Z-0.04000000
+G3 X-1.47250000 Y0.00000000 Z-0.06000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 3
+G1 X-1.47250000 Y0.00000000 Z-0.06000000
+G3 X-1.47250000 Y0.00000000 Z-0.08000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 4
+G1 X-1.47250000 Y0.00000000 Z-0.08000000
+G3 X-1.47250000 Y0.00000000 Z-0.10000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 5
+G1 X-1.47250000 Y0.00000000 Z-0.10000000
+G3 X-1.47250000 Y0.00000000 Z-0.12000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 6
+G1 X-1.47250000 Y0.00000000 Z-0.12000000
+G3 X-1.47250000 Y0.00000000 Z-0.14000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 7
+G1 X-1.47250000 Y0.00000000 Z-0.14000000
+G3 X-1.47250000 Y0.00000000 Z-0.15000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: CircPath 8
+G1 X-1.47250000 Y0.00000000 Z-0.15000000
+G3 X-1.47250000 Y0.00000000 Z-0.15000000 I-0.13750000 J0.00000000
+
+; CircBoundaryXY: rapid move to safe z
+G0 Z0.50000000
+
+; End CircBoundaryXY
+; ------------------------------------------------------------
+
+
+; Begin RectAnnulusPocketXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 0.62
+; overlapFinish: 0.5
+; safeZ: 0.5
+; overlap: 0.5
+; thickness: 0.25
+; cornerCut: False
+; width: 0.62
+; depth: 0.08
+; centerX: -1.61
+; centerY: 0.0
+; toolDiam: 0.125
+
+; RectAnnulusPocketXY: rapid move to safe z
+G0 Z0.50000000
+
+; RectAnnulusPocketXY: rapid move to start x,y
+G0 X-1.85750000 Y0.24750000
+
+; RectAnnulusPocketXY: dwell
+G4 P2.0
+
+; RectAnnulusPocketXY: move to start z
+G1 Z0.00000000
+
+; RectAnnulusPocketXY: pass 1 lead-in
+G1 X-1.85750000 Y0.24750000 Z0.00000000
+G1 X-1.85750000 Y-0.24750000 Z-0.00500000
+G1 X-1.36250000 Y-0.24750000 Z-0.01000000
+G1 X-1.36250000 Y0.24750000 Z-0.01500000
+G1 X-1.85750000 Y0.24750000 Z-0.02000000
+
+; RectAnnulusPocketXY: pass 1 filled rectangle
+G1 X-1.85750000 Y0.24750000
+G1 X-1.85750000 Y-0.24750000
+G1 X-1.36250000 Y-0.24750000
+G1 X-1.36250000 Y0.24750000
+G1 X-1.85750000 Y0.24750000
+G1 X-1.81583333 Y0.20583333
+G1 X-1.81583333 Y-0.20583333
+G1 X-1.40416667 Y-0.20583333
+G1 X-1.40416667 Y0.20583333
+G1 X-1.81583333 Y0.20583333
+G1 X-1.77416667 Y0.16416667
+G1 X-1.77416667 Y-0.16416667
+G1 X-1.44583333 Y-0.16416667
+G1 X-1.44583333 Y0.16416667
+G1 X-1.77416667 Y0.16416667
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+
+; RectAnnulusPocketXY: pass 2 lead-in
+G1 X-1.85750000 Y0.24750000 Z-0.02000000
+G1 X-1.85750000 Y-0.24750000 Z-0.02500000
+G1 X-1.36250000 Y-0.24750000 Z-0.03000000
+G1 X-1.36250000 Y0.24750000 Z-0.03500000
+G1 X-1.85750000 Y0.24750000 Z-0.04000000
+
+; RectAnnulusPocketXY: pass 2 filled rectangle
+G1 X-1.85750000 Y0.24750000
+G1 X-1.85750000 Y-0.24750000
+G1 X-1.36250000 Y-0.24750000
+G1 X-1.36250000 Y0.24750000
+G1 X-1.85750000 Y0.24750000
+G1 X-1.81583333 Y0.20583333
+G1 X-1.81583333 Y-0.20583333
+G1 X-1.40416667 Y-0.20583333
+G1 X-1.40416667 Y0.20583333
+G1 X-1.81583333 Y0.20583333
+G1 X-1.77416667 Y0.16416667
+G1 X-1.77416667 Y-0.16416667
+G1 X-1.44583333 Y-0.16416667
+G1 X-1.44583333 Y0.16416667
+G1 X-1.77416667 Y0.16416667
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+
+; RectAnnulusPocketXY: pass 3 lead-in
+G1 X-1.85750000 Y0.24750000 Z-0.04000000
+G1 X-1.85750000 Y-0.24750000 Z-0.04500000
+G1 X-1.36250000 Y-0.24750000 Z-0.05000000
+G1 X-1.36250000 Y0.24750000 Z-0.05500000
+G1 X-1.85750000 Y0.24750000 Z-0.06000000
+
+; RectAnnulusPocketXY: pass 3 filled rectangle
+G1 X-1.85750000 Y0.24750000
+G1 X-1.85750000 Y-0.24750000
+G1 X-1.36250000 Y-0.24750000
+G1 X-1.36250000 Y0.24750000
+G1 X-1.85750000 Y0.24750000
+G1 X-1.81583333 Y0.20583333
+G1 X-1.81583333 Y-0.20583333
+G1 X-1.40416667 Y-0.20583333
+G1 X-1.40416667 Y0.20583333
+G1 X-1.81583333 Y0.20583333
+G1 X-1.77416667 Y0.16416667
+G1 X-1.77416667 Y-0.16416667
+G1 X-1.44583333 Y-0.16416667
+G1 X-1.44583333 Y0.16416667
+G1 X-1.77416667 Y0.16416667
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+
+; RectAnnulusPocketXY: pass 4 lead-in
+G1 X-1.85750000 Y0.24750000 Z-0.06000000
+G1 X-1.85750000 Y-0.24750000 Z-0.06500000
+G1 X-1.36250000 Y-0.24750000 Z-0.07000000
+G1 X-1.36250000 Y0.24750000 Z-0.07500000
+G1 X-1.85750000 Y0.24750000 Z-0.08000000
+
+; RectAnnulusPocketXY: pass 4 filled rectangle
+G1 X-1.85750000 Y0.24750000
+G1 X-1.85750000 Y-0.24750000
+G1 X-1.36250000 Y-0.24750000
+G1 X-1.36250000 Y0.24750000
+G1 X-1.85750000 Y0.24750000
+G1 X-1.81583333 Y0.20583333
+G1 X-1.81583333 Y-0.20583333
+G1 X-1.40416667 Y-0.20583333
+G1 X-1.40416667 Y0.20583333
+G1 X-1.81583333 Y0.20583333
+G1 X-1.77416667 Y0.16416667
+G1 X-1.77416667 Y-0.16416667
+G1 X-1.44583333 Y-0.16416667
+G1 X-1.44583333 Y0.16416667
+G1 X-1.77416667 Y0.16416667
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+G1 X-1.73250000 Y-0.12250000
+G1 X-1.48750000 Y-0.12250000
+G1 X-1.48750000 Y0.12250000
+G1 X-1.73250000 Y0.12250000
+
+; RectAnnulusPocketXY: rapid move to safe z
+G0 Z0.50000000
+
+; End RectAnnulusPocketXY
+; ------------------------------------------------------------
+
+
+M2 (End program)

enclosures/hammond/enclosure/top.py

+from __future__ import print_function
+import os
+from py2gcode import cnc_boundary
+from py2gcode import cnc_pocket
+from py2gcode import gcode_cmd
+
+feedrate = 22.0
+safeZ = 0.5
+startZ = 0.0
+depth = 0.15
+toolDiam = 0.125
+#depth = 0.02 
+#toolDiam = 0.001
+maxCutDepth = 0.02
+startDwell = 2.0
+
+prog = gcode_cmd.GCodeProg()
+prog.add(gcode_cmd.GenericStart())
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.FeedRate(feedrate))
+
+
+param = { 
+        'centerX'      : -0.8767,
+        'centerY'      : 0.0,
+        'width'        : 0.6061,
+        'height'       : 2.13,
+        'depth'        : depth,
+        'radius'       : 0.0,
+        'startZ'       : startZ,
+        'safeZ'        : safeZ,
+        'toolDiam'     : toolDiam,
+        'toolOffset'   : 'inside',
+        'direction'    : 'ccw',
+        'maxCutDepth'  : maxCutDepth,
+        'startDwell'   : startDwell,
+        
+        }
+lcdBoundary = cnc_boundary.RectBoundaryXY(param)
+prog.add(lcdBoundary)
+
+
+param = { 
+        'centerX'       : -1.61,
+        'centerY'      : 0.0,
+        'radius'       : 0.5*0.4,
+        'depth'        : depth,
+        'startZ'       : startZ,
+        'safeZ'        : safeZ,
+        'toolDiam'     : toolDiam,
+        'toolOffset'   : 'inside',
+        'direction'    : 'ccw',
+        'maxCutDepth'  : maxCutDepth,
+        'startDwell'   : startDwell,
+        }
+buttonBoundary = cnc_boundary.CircBoundaryXY(param)
+prog.add(buttonBoundary)
+
+param = {
+        'centerX'       : -1.61,
+        'centerY'       : 0.0,
+        'width'         : 0.62,
+        'height'        : 0.62,
+        'depth'         : 0.080,
+        'thickness'     : 0.25,
+        'startZ'       : startZ,
+        'safeZ'        : safeZ,
+        'overlap'       : 0.5,
+        'overlapFinish' : 0.5,
+        'maxCutDepth'  : maxCutDepth,
+        'toolDiam'     : toolDiam,
+        'direction'    : 'ccw',
+        'startDwell'   : startDwell,
+        'cornerCut'    : False
+        }
+
+pocket = cnc_pocket.RectAnnulusPocketXY(param)
+prog.add(pocket)
+
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.End(),comment=True)
+print(prog)
+baseName, dummy = os.path.splitext(__file__)
+fileName = '{0}.ngc'.format(baseName)
+print(fileName)
+prog.write(fileName)

enclosures/hammond/fixture/10-32-thru-drill.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 4.0
+
+; Begin PeckDrill
+; ------------------------------------------------------------
+; startZ: 0.0
+; stopZ: -0.3
+; startDwell: 2.0
+; safeZ: 0.15
+; centerX: -1.75
+; centerY: 0.0
+; stepZ: 0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; PeckDrill: rapid move to drill x,y
+G0 X-1.75000000 Y0.00000000
+
+; PeckDrill: dwell
+G4 P2.0
+
+; PeckDrill: move to start z
+G1 Z0.00000000
+G83 X-1.75 Y0.0 Z-0.3 R0.0 Q0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; End PeckDrill
+; ------------------------------------------------------------
+
+
+
+; Begin PeckDrill
+; ------------------------------------------------------------
+; startZ: 0.0
+; stopZ: -0.3
+; startDwell: 2.0
+; safeZ: 0.15
+; centerX: 1.75
+; centerY: 0
+; stepZ: 0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; PeckDrill: rapid move to drill x,y
+G0 X1.75000000 Y0.00000000
+
+; PeckDrill: dwell
+G4 P2.0
+
+; PeckDrill: move to start z
+G1 Z0.00000000
+G83 X1.75 Y0.0 Z-0.3 R0.0 Q0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; End PeckDrill
+; ------------------------------------------------------------
+
+
+
+M2 (End program)

enclosures/hammond/fixture/10-32-thru-drill.py

+from __future__ import print_function
+import os
+from py2gcode import gcode_cmd
+from py2gcode import cnc_drill
+
+
+safeZ = 0.15
+stepZ = 0.05
+startZ = 0.0
+stopZ = -0.3 
+feedrate = 4.0
+startDwell = 2.0
+
+posList = [(-1.75, 0.0),(1.75,0)]  
+
+prog = gcode_cmd.GCodeProg()
+prog.add(gcode_cmd.GenericStart())
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.FeedRate(feedrate))
+
+for xPos, yPos in posList: 
+    drillDict =  { 
+            'centerX'    : xPos,
+            'centerY'    : yPos,
+            'startZ'     : startZ,
+            'stopZ'      : stopZ,
+            'safeZ'      : safeZ,
+            'stepZ'      : stepZ,
+            'startDwell' : startDwell, 
+            }
+    drill = cnc_drill.PeckDrill(drillDict)
+    prog.add(drill)
+    prog.add(gcode_cmd.Space())
+
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.End(),comment=True)
+print(prog)
+baseName, dummy = os.path.splitext(__file__)
+fileName = '{0}.ngc'.format(baseName)
+print(fileName)
+prog.write(fileName)

enclosures/hammond/fixture/8-32-tap_drill.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 4.0
+
+; Begin PeckDrill
+; ------------------------------------------------------------
+; startZ: 0.0
+; stopZ: -0.3
+; startDwell: 2.0
+; safeZ: 0.15
+; centerX: -1.2925
+; centerY: 0.0
+; stepZ: 0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; PeckDrill: rapid move to drill x,y
+G0 X-1.29250000 Y0.00000000
+
+; PeckDrill: dwell
+G4 P2.0
+
+; PeckDrill: move to start z
+G1 Z0.00000000
+G83 X-1.2925 Y0.0 Z-0.3 R0.0 Q0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; End PeckDrill
+; ------------------------------------------------------------
+
+
+
+; Begin PeckDrill
+; ------------------------------------------------------------
+; startZ: 0.0
+; stopZ: -0.3
+; startDwell: 2.0
+; safeZ: 0.15
+; centerX: 1.2925
+; centerY: 0
+; stepZ: 0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; PeckDrill: rapid move to drill x,y
+G0 X1.29250000 Y0.00000000
+
+; PeckDrill: dwell
+G4 P2.0
+
+; PeckDrill: move to start z
+G1 Z0.00000000
+G83 X1.2925 Y0.0 Z-0.3 R0.0 Q0.05
+
+; PeckDrill: rapid move to safe z
+G0 Z0.15000000
+
+; End PeckDrill
+; ------------------------------------------------------------
+
+
+
+M2 (End program)

enclosures/hammond/fixture/8-32-tap_drill.py

+from __future__ import print_function
+import os
+from py2gcode import gcode_cmd
+from py2gcode import cnc_drill
+
+
+safeZ = 0.15
+stepZ = 0.05
+startZ = 0.0
+#stopZ = -0.08 
+stopZ = -0.3 
+feedrate = 4.0
+startDwell = 2.0
+
+posList = [(-1.2925, 0.0),(1.2925,0)]  
+
+prog = gcode_cmd.GCodeProg()
+prog.add(gcode_cmd.GenericStart())
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.FeedRate(feedrate))
+
+for xPos, yPos in posList: 
+    drillDict =  { 
+            'centerX'    : xPos,
+            'centerY'    : yPos,
+            'startZ'     : startZ,
+            'stopZ'      : stopZ,
+            'safeZ'      : safeZ,
+            'stepZ'      : stepZ,
+            'startDwell' : startDwell, 
+            }
+    drill = cnc_drill.PeckDrill(drillDict)
+    prog.add(drill)
+    prog.add(gcode_cmd.Space())
+
+prog.add(gcode_cmd.Space())
+prog.add(gcode_cmd.End(),comment=True)
+print(prog)
+baseName, dummy = os.path.splitext(__file__)
+fileName = '{0}.ngc'.format(baseName)
+print(fileName)
+prog.write(fileName)

enclosures/hammond/fixture/LICENSE

+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+

enclosures/hammond/fixture/alignment_pocket.ngc

+
+; Generic Start
+G40 (Cancel cutter radius compensation)
+G49 (Cancel tool length offset)
+G80 (Cancel canned cycle)
+G54 (Select coordinate system 1)
+G90 (Set absolute distance mode)
+G20 (Set units to inches)
+G61 (Exact path mode)
+
+F 22.0
+
+; Begin RectPocketXY
+; ------------------------------------------------------------
+; startZ: 0.0
+; direction: ccw
+; startDwell: 2.0
+; maxCutDepth: 0.02
+; height: 0.4
+; overlapFinish: 0.6
+; safeZ: 0.15
+; overlap: 0.6
+; cornerCut: True
+; width: 3.5
+; depth: 0.15
+; centerX: 0.0
+; centerY: 0.85
+; toolDiam: 0.25
+
+; RectPocketXY: rapid move to safe z
+G0 Z0.15000000
+
+; RectPocketXY: rapid move to start x,y
+G0 X-1.62500000 Y0.92500000
+
+; RectPocketXY: dwell
+G4 P2.0
+
+; RectPocketXY: move to start z
+G1 Z0.00000000
+
+; RectPocketXY: pass 1 lead-in
+G1 X-1.62500000 Y0.92500000 Z0.00000000
+G1 X-1.62500000 Y0.77500000 Z-0.00044118
+G1 X1.62500000 Y0.77500000 Z-0.01000000
+G1 X1.62500000 Y0.92500000 Z-0.01044118
+G1 X-1.62500000 Y0.92500000 Z-0.02000000
+
+; RectPocketXY: pass 1 filled rectangle
+G1 X-1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.77500000
+G1 X-1.66161165 Y0.73838835
+G1 X-1.62500000 Y0.77500000
+G1 X1.62500000 Y0.77500000
+G1 X1.66161165 Y0.73838835
+G1 X1.62500000 Y0.77500000
+G1 X1.62500000 Y0.92500000
+G1 X1.66161165 Y0.96161165
+G1 X1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.92500000
+G1 X-1.66161165 Y0.96161165
+G1 X-1.62500000 Y0.92500000
+G1 X-1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+
+; RectPocketXY: pass 2 lead-in
+G1 X-1.62500000 Y0.92500000 Z-0.02000000
+G1 X-1.62500000 Y0.77500000 Z-0.02044118
+G1 X1.62500000 Y0.77500000 Z-0.03000000
+G1 X1.62500000 Y0.92500000 Z-0.03044118
+G1 X-1.62500000 Y0.92500000 Z-0.04000000
+
+; RectPocketXY: pass 2 filled rectangle
+G1 X-1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.77500000
+G1 X-1.66161165 Y0.73838835
+G1 X-1.62500000 Y0.77500000
+G1 X1.62500000 Y0.77500000
+G1 X1.66161165 Y0.73838835
+G1 X1.62500000 Y0.77500000
+G1 X1.62500000 Y0.92500000
+G1 X1.66161165 Y0.96161165
+G1 X1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.92500000
+G1 X-1.66161165 Y0.96161165
+G1 X-1.62500000 Y0.92500000
+G1 X-1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+
+; RectPocketXY: pass 3 lead-in
+G1 X-1.62500000 Y0.92500000 Z-0.04000000
+G1 X-1.62500000 Y0.77500000 Z-0.04044118
+G1 X1.62500000 Y0.77500000 Z-0.05000000
+G1 X1.62500000 Y0.92500000 Z-0.05044118
+G1 X-1.62500000 Y0.92500000 Z-0.06000000
+
+; RectPocketXY: pass 3 filled rectangle
+G1 X-1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.77500000
+G1 X-1.66161165 Y0.73838835
+G1 X-1.62500000 Y0.77500000
+G1 X1.62500000 Y0.77500000
+G1 X1.66161165 Y0.73838835
+G1 X1.62500000 Y0.77500000
+G1 X1.62500000 Y0.92500000
+G1 X1.66161165 Y0.96161165
+G1 X1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.92500000
+G1 X-1.66161165 Y0.96161165
+G1 X-1.62500000 Y0.92500000
+G1 X-1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+
+; RectPocketXY: pass 4 lead-in
+G1 X-1.62500000 Y0.92500000 Z-0.06000000
+G1 X-1.62500000 Y0.77500000 Z-0.06044118
+G1 X1.62500000 Y0.77500000 Z-0.07000000
+G1 X1.62500000 Y0.92500000 Z-0.07044118
+G1 X-1.62500000 Y0.92500000 Z-0.08000000
+
+; RectPocketXY: pass 4 filled rectangle
+G1 X-1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.77500000
+G1 X-1.66161165 Y0.73838835
+G1 X-1.62500000 Y0.77500000
+G1 X1.62500000 Y0.77500000
+G1 X1.66161165 Y0.73838835
+G1 X1.62500000 Y0.77500000
+G1 X1.62500000 Y0.92500000
+G1 X1.66161165 Y0.96161165
+G1 X1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.92500000
+G1 X-1.66161165 Y0.96161165
+G1 X-1.62500000 Y0.92500000
+G1 X-1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+
+; RectPocketXY: pass 5 lead-in
+G1 X-1.62500000 Y0.92500000 Z-0.08000000
+G1 X-1.62500000 Y0.77500000 Z-0.08044118
+G1 X1.62500000 Y0.77500000 Z-0.09000000
+G1 X1.62500000 Y0.92500000 Z-0.09044118
+G1 X-1.62500000 Y0.92500000 Z-0.10000000
+
+; RectPocketXY: pass 5 filled rectangle
+G1 X-1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.77500000
+G1 X-1.66161165 Y0.73838835
+G1 X-1.62500000 Y0.77500000
+G1 X1.62500000 Y0.77500000
+G1 X1.66161165 Y0.73838835
+G1 X1.62500000 Y0.77500000
+G1 X1.62500000 Y0.92500000
+G1 X1.66161165 Y0.96161165
+G1 X1.62500000 Y0.92500000
+G1 X-1.62500000 Y0.92500000
+G1 X-1.66161165 Y0.96161165
+G1 X-1.62500000 Y0.92500000
+G1 X-1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X1.52500000 Y0.85000000
+G1 X-1.52500000 Y0.85000000
+
+; RectPocketXY: pass 6 lead-in
+G1 X-1.62500000 Y0.92500000 Z-0.10000000
+G1 X-1.62500000 Y0.77500000 Z-0.10044118
+G1 X1.62500000 Y0.77500000 Z-0.11000000
+G1 X1.62500000 Y0.92500000 Z-0.11044118
+G1 X-1.62500000 Y0.92500000 Z-0.12000000