KiBot/docs/build/html/notes_position.html

432 lines
39 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Notes about the position file &mdash; KiBot 1.6.4 documentation</title>
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Notes about 3D models" href="notes_3d.html" />
<link rel="prev" title="Notes about Gerber format" href="notes_gerber.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
KiBot
<img src="_static/kibot_370x200.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="introduction.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage.html">Usage</a></li>
<li class="toctree-l1"><a class="reference internal" href="usage_with_ci_cd.html">Usage for CI/CD</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Notes and extra information:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="notes_gerber.html">Notes about Gerber format</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Notes about the position file</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#xyrs-files">XYRS files</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="notes_3d.html">Notes about 3D models</a></li>
<li class="toctree-l1"><a class="reference internal" href="propose.html">Proposed advanced KiCad usage</a></li>
<li class="toctree-l1"><a class="reference internal" href="KiPlotYAML.html">KiPlot YAML</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Final notes:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="credits.html">Credits</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Indices and tables:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">KiBot</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Notes about the position file</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="notes-about-the-position-file">
<span id="index-0"></span><h1>Notes about the position file<a class="headerlink" href="#notes-about-the-position-file" title="Permalink to this heading"></a></h1>
<p>Position files are quite simple. You can generate them as plain text
(ASCII) or as a spreadsheet (CSV).</p>
<p>But some conventions can make them tricky. Some manufacturers, like
<a class="reference external" href="https://jlcpcb.com/">JLCPCB</a>, uses conventions that are incompatible
with KiCad.</p>
<p>The <a class="reference external" href="https://dubiouscreations.com/2019/10/21/using-kicad-with-jlcpcb-assembly-service/">following
blog</a>
explains how to adapt the position files generated by KiCad to what
JLCPCB needs. To achieve it the author uses a script called
<a class="reference external" href="https://github.com/matthewlai/JLCKicadTools">JLCKicadTools</a>.</p>
<p>You can achieve the same using KiBot. Here is a configuration example
that generates the BoM and position files in the same way JLCKicadTools
does:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">kibot</span><span class="p">:</span>
<span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<span class="nt">filters</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">only_jlc_parts</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Only</span><span class="nv"> </span><span class="s">parts</span><span class="nv"> </span><span class="s">with</span><span class="nv"> </span><span class="s">JLC</span><span class="nv"> </span><span class="s">code&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">generic</span>
<span class="w"> </span><span class="nt">include_only</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">column</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC#&#39;</span>
<span class="w"> </span><span class="nt">regex</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;^C\d+&#39;</span>
<span class="nt">variants</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Just</span><span class="nv"> </span><span class="s">a</span><span class="nv"> </span><span class="s">place</span><span class="nv"> </span><span class="s">holder</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">rotation</span><span class="nv"> </span><span class="s">filter&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kibom</span>
<span class="w"> </span><span class="nt">variant</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">pre_transform</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">_rot_footprint</span>
<span class="nt">outputs</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;position&#39;</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Pick</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">place</span><span class="nv"> </span><span class="s">file,</span><span class="nv"> </span><span class="s">JLC</span><span class="nv"> </span><span class="s">style&quot;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">position</span>
<span class="w"> </span><span class="nt">options</span><span class="p">:</span>
<span class="w"> </span><span class="nt">variant</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;%f_cpl_jlc.%x&#39;</span>
<span class="w"> </span><span class="nt">format</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CSV</span>
<span class="w"> </span><span class="nt">units</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">millimeters</span>
<span class="w"> </span><span class="nt">separate_files_for_front_and_back</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<span class="w"> </span><span class="nt">only_smd</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">columns</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ref</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Designator</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Val</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Package</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">PosX</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Mid</span><span class="nv"> </span><span class="s">X&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">PosY</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Mid</span><span class="nv"> </span><span class="s">Y&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Rot</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Rotation</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Side</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Layer</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;bom&#39;</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;BoM</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">JLC&quot;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">bom</span>
<span class="w"> </span><span class="nt">options</span><span class="p">:</span>
<span class="w"> </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;%f_%i_jlc.%x&#39;</span>
<span class="w"> </span><span class="nt">exclude_filter</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;only_jlc_parts&#39;</span>
<span class="w"> </span><span class="nt">ref_separator</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;,&#39;</span>
<span class="w"> </span><span class="nt">columns</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Value</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Comment</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">References</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Designator</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Footprint</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC#&#39;</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC</span><span class="nv"> </span><span class="s">Part</span><span class="nv"> </span><span class="s">#&#39;</span>
<span class="w"> </span><span class="nt">csv</span><span class="p">:</span>
<span class="w"> </span><span class="nt">hide_pcb_info</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">hide_stats_info</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">quote_all</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">only_jlc_parts</span></code> filter is used to generate the BoM and assumes
you put the JLC component code in a field named <code class="docutils literal notranslate"><span class="pre">LCSC#</span></code> (JLC uses
<a class="reference external" href="https://lcsc.com/">LCSC</a> as supplier). Note that the author of the
blog simply used <code class="docutils literal notranslate"><span class="pre">Field4</span></code> for this and his script searches for any
field containing the <code class="docutils literal notranslate"><span class="pre">^C\d+</span></code> pattern. I think this isnt a good idea
and I suggest using a defined name, like in this example.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">rotated</span></code> variant is used only to apply the <code class="docutils literal notranslate"><span class="pre">_rot_footprint</span></code>
transformation filter. This filter is an internal filter of type
<code class="docutils literal notranslate"><span class="pre">rot_footprint</span></code>. Here is the same configuration file making explicit
use of the rotation filter:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="nt">kibot</span><span class="p">:</span>
<span class="w"> </span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
<span class="nt">filters</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fix_rotation</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Adjust</span><span class="nv"> </span><span class="s">rotation</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">JLC&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rot_footprint</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">only_jlc_parts</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Only</span><span class="nv"> </span><span class="s">parts</span><span class="nv"> </span><span class="s">with</span><span class="nv"> </span><span class="s">JLC</span><span class="nv"> </span><span class="s">code&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">generic</span>
<span class="w"> </span><span class="nt">include_only</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">column</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC#&#39;</span>
<span class="w"> </span><span class="nt">regex</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;^C\d+&#39;</span>
<span class="nt">variants</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Just</span><span class="nv"> </span><span class="s">a</span><span class="nv"> </span><span class="s">place</span><span class="nv"> </span><span class="s">holder</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">the</span><span class="nv"> </span><span class="s">rotation</span><span class="nv"> </span><span class="s">filter&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">kibom</span>
<span class="w"> </span><span class="nt">variant</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">pre_transform</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fix_rotation</span>
<span class="nt">outputs</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;position&#39;</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Pick</span><span class="nv"> </span><span class="s">and</span><span class="nv"> </span><span class="s">place</span><span class="nv"> </span><span class="s">file,</span><span class="nv"> </span><span class="s">JLC</span><span class="nv"> </span><span class="s">style&quot;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">position</span>
<span class="w"> </span><span class="nt">options</span><span class="p">:</span>
<span class="w"> </span><span class="nt">variant</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rotated</span>
<span class="w"> </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;%f_cpl_jlc.%x&#39;</span>
<span class="w"> </span><span class="nt">format</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">CSV</span>
<span class="w"> </span><span class="nt">units</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">millimeters</span>
<span class="w"> </span><span class="nt">separate_files_for_front_and_back</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<span class="w"> </span><span class="nt">only_smd</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">columns</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Ref</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Designator</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Val</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Package</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">PosX</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Mid</span><span class="nv"> </span><span class="s">X&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">PosY</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;Mid</span><span class="nv"> </span><span class="s">Y&quot;</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Rot</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Rotation</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Side</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Layer</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;bom&#39;</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;BoM</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">JLC&quot;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">bom</span>
<span class="w"> </span><span class="nt">options</span><span class="p">:</span>
<span class="w"> </span><span class="nt">output</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;%f_%i_jlc.%x&#39;</span>
<span class="w"> </span><span class="nt">exclude_filter</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;only_jlc_parts&#39;</span>
<span class="w"> </span><span class="nt">ref_separator</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;,&#39;</span>
<span class="w"> </span><span class="nt">columns</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Value</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Comment</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">References</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Designator</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Footprint</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">field</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC#&#39;</span>
<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;LCSC</span><span class="nv"> </span><span class="s">Part</span><span class="nv"> </span><span class="s">#&#39;</span>
<span class="w"> </span><span class="nt">csv</span><span class="p">:</span>
<span class="w"> </span><span class="nt">hide_pcb_info</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">hide_stats_info</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
<span class="w"> </span><span class="nt">quote_all</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
</pre></div>
</div>
<p>As you can see we now create a filter named <code class="docutils literal notranslate"><span class="pre">fix_rotation</span></code> of type
<code class="docutils literal notranslate"><span class="pre">rot_footprint</span></code>:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fix_rotation</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Adjust</span><span class="nv"> </span><span class="s">rotation</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">JLC&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rot_footprint</span>
</pre></div>
</div>
<p>Using it, instead of the internal filter named <code class="docutils literal notranslate"><span class="pre">_rot_footprint</span></code>, is
the same here. But you can then customize the filter.</p>
<p>The filter supports the following options:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">extend</span></code>: [boolean=true] Extends the internal list of rotations
with the one provided. Otherwise just use the provided list.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">negative_bottom</span></code>: [boolean=true] Rotation for bottom components is
computed via subtraction as <code class="docutils literal notranslate"><span class="pre">(component</span> <span class="pre">rot</span> <span class="pre">-</span> <span class="pre">angle)</span></code>. Note that
this should be coherent with the <code class="docutils literal notranslate"><span class="pre">bottom_negative_x</span></code> of the
position output.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">invert_bottom</span></code>: [boolean=false] Rotation for bottom components is
negated, resulting in either: <code class="docutils literal notranslate"><span class="pre">(-</span> <span class="pre">component</span> <span class="pre">rot</span> <span class="pre">-</span> <span class="pre">angle)</span></code> or when
combined with <code class="docutils literal notranslate"><span class="pre">negative_bottom</span></code>, <code class="docutils literal notranslate"><span class="pre">(angle</span> <span class="pre">-</span> <span class="pre">component</span> <span class="pre">rot)</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">rotations</span></code>: [list(list(string))] A list of pairs regular
expression/rotation. Components matching the regular expression will
be rotated the indicated angle. Special names <code class="docutils literal notranslate"><span class="pre">_top</span></code> and
<code class="docutils literal notranslate"><span class="pre">_bottom</span></code> will match all components on that side of the board.</p></li>
</ul>
<p>In order to add a new rotation or just change an existing one you just
need to use the <code class="docutils literal notranslate"><span class="pre">rotations</span></code> option. As an example: the internal list
of rotations rotates QFN packages by 270 degrees, no suppose you want to
rotate them just 90 degrees. The filter will look like this:</p>
<div class="highlight-yaml notranslate"><div class="highlight"><pre><span></span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fix_rotation</span>
<span class="w"> </span><span class="nt">comment</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;Adjust</span><span class="nv"> </span><span class="s">rotation</span><span class="nv"> </span><span class="s">for</span><span class="nv"> </span><span class="s">JLC&#39;</span>
<span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">rot_footprint</span>
<span class="w"> </span><span class="nt">rotations</span><span class="p">:</span>
<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="p p-Indicator">[</span><span class="s">&quot;^QFN-&quot;</span><span class="p p-Indicator">,</span><span class="w"> </span><span class="nv">90.0</span><span class="p p-Indicator">]</span>
</pre></div>
</div>
<p>This regular expression will match any footprint starting with <code class="docutils literal notranslate"><span class="pre">QFN-</span></code>
and rotate it 90 degrees.</p>
<p>The internal list of rotations is:</p>
<table class="docutils align-default">
<thead>
<tr class="row-odd"><th class="head"><p>Footprint</p></th>
<th class="head"><p>Rotation</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^Bosch_LGA-8_2x2.5mm_P0.65mm_ClockwisePinNumbering</span></code></p></td>
<td><p>90.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^R_Array_Convex_</span></code></p></td>
<td><p>90.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^R_Array_Concave_</span></code></p></td>
<td><p>90.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^SOT-223</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^SOT-23</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^TSOT-23</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^SOT-353</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^QFN-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^LQFP-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^TQFP-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^SOP-(?!18_)</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^TSSOP-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^DFN-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^SOIC-</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^VSSOP-10_</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_EIA-3216-18_</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_EIA-3528-15_AVX-H</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_EIA-3528-21_Kemet-B</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_Elec_8x10.5</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_Elec_6.3x7.7</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_Elec_8x6.7</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^CP_Elec_8x10</span></code></p></td>
<td><p>180.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^(.*?_\|V)?QFN-(16\|20\|24\|28\|40)(-\|_\|$)</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">^PowerPAK_SO-8_Single</span></code></p></td>
<td><p>270.0</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">^HTSSOP-28-1EP_4.4x9.7mm*</span></code></p></td>
<td><p>270.0</p></td>
</tr>
</tbody>
</table>
<section id="xyrs-files">
<span id="index-1"></span><h2>XYRS files<a class="headerlink" href="#xyrs-files" title="Permalink to this heading"></a></h2>
<p>XYRS files are just BoM files in CSV format that includes pick and place
data (<strong>X</strong> position, <strong>Y</strong> position, <strong>R</strong>otation and <strong>S</strong>ide).
You can generate them using the internal BoM generator (<code class="docutils literal notranslate"><span class="pre">bom</span></code> output).
The following fields contains the needed information:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">X</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Y</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Rot</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Side</span></code></p></li>
</ul>
<p>Additionally we support:</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Type</span></code> (SMD, THT, VIRTUAL)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">X-Size</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Y-Size</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Footprint</span> <span class="pre">Populate</span></code></p></li>
</ul>
<p>Important: These files doesnt support manual panelization with repeated
reference names, youll get the coordinates for just one component
because this is a BoM.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="notes_gerber.html" class="btn btn-neutral float-left" title="Notes about Gerber format" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="notes_3d.html" class="btn btn-neutral float-right" title="Notes about 3D models" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018-2023, Salvador E. Tropea/INTI/John Beard.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>