<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.cadence.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Allegro X Scripting - Skill - Recent Threads</title><link>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill</link><description>Allegro X Scripting - Skill</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Sat, 31 Oct 2026 14:35:49 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill" /><item><title>It Worked the First Time! Why Does My SKILL Code Fail on the Second Run?</title><link>https://community.cadence.com/thread/74760?ContentTypeID=0</link><pubDate>Sat, 31 Oct 2026 14:35:49 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:af85a1d9-ef55-4c28-9401-1e0876dd4a91</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/74760?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/74760/it-worked-the-first-time-why-does-my-skill-code-fail-on-the-second-run/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Have you ever run a SKILL function successfully, only to find that running it again produces an error or unexpected behaviour?&lt;/p&gt;
&lt;p&gt;One common cause is that the first execution changes the database or application state that the code assumes will still be available on the next run. For example, your code may keep references to database objects that have since been deleted, replaced, or modified.&lt;/p&gt;
&lt;p&gt;A useful troubleshooting technique is to avoid relying on database object IDs stored globally between executions. Instead, retrieve the objects you need each time the function runs and validate the returned values before operating on them.&lt;/p&gt;
&lt;p&gt;For instance:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;procedure(processSelectedObject()&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&amp;nbsp; let((obj)&lt;/code&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;obj = car(axlGetSelSet())&lt;/code&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;code&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;if(obj then&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;printf(&amp;quot;Current object: %L\n&amp;quot; obj)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;; Process obj here&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;else&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;printf(&amp;quot;No object is currently selected.\n&amp;quot;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;This also demonstrates another useful habit: &lt;strong&gt;check the result before using it&lt;/strong&gt;. For example:&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="font-family:inherit;"&gt;obj = car(axlGetSelSet())&lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;&lt;br /&gt;&lt;code&gt;when(obj&lt;/code&gt;&lt;br /&gt;&lt;code&gt; &lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;printf(&amp;quot;Selected object type: %L\n&amp;quot; obj-&amp;gt;objType)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;)&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;Database objects aren&amp;#39;t the only thing to consider. A SKILL script can also change session state such as the current selection or Find Filter. If your function depends on a particular state, the second execution may start under different conditions than the first.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:inherit;"&gt;When debugging this kind of problem, try this approach:&lt;/span&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Run the function once.&lt;/li&gt;
&lt;li&gt;Check what changed in the design or session.&lt;/li&gt;
&lt;li&gt;Run it again and identify the first operation that behaves differently.&lt;/li&gt;
&lt;li&gt;Add &lt;code&gt;printf()&lt;/code&gt; statements around&amp;nbsp;your operations.&lt;/li&gt;
&lt;li&gt;Inspect database objects and return values instead of assuming they are valid.&lt;/li&gt;
&lt;li&gt;Where appropriate, reacquire database objects rather than relying on references retained from an earlier execution.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;These steps are crucial specially when you&amp;#39;re testing loose SKILL commands, where moving the canvas, zooming in or modifying the position of the elements might change the dbIDs of the objects.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;
&lt;p&gt;The important question isn&amp;#39;t always &lt;strong&gt;&amp;quot;Why did my SKILL code fail?&amp;quot;&lt;/strong&gt; Sometimes the better question is:&lt;/p&gt;
&lt;div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;&amp;quot;What did the first execution change that the second execution wasn&amp;#39;t expecting?&amp;quot;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That small shift in troubleshooting approach can make intermittent SKILL problems much easier to isolate.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;div&gt;Have you encountered a SKILL function that behaves differently on its second execution? What was the root cause, and how did you track it down?&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/div&gt;
&lt;div id="gtx-trans" style="left:346px;position:absolute;top:373px;"&gt;
&lt;div class="gtx-trans-icon"&gt;&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>How to calculate Actual Value in Allegro skill?</title><link>https://community.cadence.com/thread/74721?ContentTypeID=0</link><pubDate>Tue, 20 Oct 2026 02:21:07 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:2dbfe394-0bb8-4574-a7ef-8eeacf61ea0f</guid><dc:creator>SK202607205032</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/74721?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/74721/how-to-calculate-actual-value-in-allegro-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi All,&lt;/p&gt;
&lt;p&gt;I am trying to calculate the actual distance between a pin and silkscreen text. Although I am using axlAirGap(), the returned value doesn&amp;#39;t match the actual value shown in the DRC.&lt;br /&gt;Instead, it returns &amp;#39;No Air Gap&amp;#39;, which is consistent with the Measure tool&amp;#39;s result.&lt;br /&gt;Is there a way to accurately calculate this &amp;#39;Actual Value&amp;#39;?&lt;/p&gt;
&lt;p&gt;Thanks!!&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:260px;max-width:685px;" height="260" src="https://community.cadence.com/resized-image/__size/1370x520/__key/communityserver-discussions-components-files/137/pastedimage1792462831101v1.png" width="685" alt=" " /&gt;&lt;/p&gt;</description></item><item><title>RE: How to calculate Actual Value in Allegro skill?</title><link>https://community.cadence.com/thread/1434962?ContentTypeID=1</link><pubDate>Wed, 21 Oct 2026 15:23:36 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:c3c239fa-d3a1-4889-93af-428140ecdc5e</guid><dc:creator>LF202610219731</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1434962?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/74721/how-to-calculate-actual-value-in-allegro-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p&gt;&lt;code dir="ltr"&gt;axlAirGap()&lt;/code&gt;&lt;span&gt; does not accurately measure silkscreen text.&amp;nbsp;&lt;/span&gt;&lt;span&gt;It often measures text using bounding geometry.&amp;nbsp;&lt;/span&gt;&lt;span&gt;DRC instead evaluates the actual rendered text strokes.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Cadence recommends creating temporary geometry from the font.&amp;nbsp;&lt;/span&gt;&lt;span&gt;Then measure that geometry using &lt;/span&gt;&lt;code dir="ltr"&gt;axlAirGap()&lt;/code&gt;&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: How to merge excel cell in Allgero SKILL using axlSpreadsheet API</title><link>https://community.cadence.com/thread/1434948?ContentTypeID=1</link><pubDate>Thu, 15 Oct 2026 02:25:38 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:08ab54e3-fa05-4998-ae4d-078944581b81</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1434948?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66183/how-to-merge-excel-cell-in-allgero-skill-using-axlspreadsheet-api/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi&amp;nbsp;&lt;a class="internal-link view-user-profile" href="https://community.cadence.com/members/sk202607205032"&gt;SK202607205032&lt;/a&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;Run the code in &lt;code data-path-to-node="1,0,1,0" data-index-in-node="17"&gt;test.py&lt;/code&gt; without using a &lt;code data-path-to-node="1,0,1,0" data-index-in-node="41"&gt;.exe&lt;/code&gt; file.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;import&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;xlsxwriter&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;workbook&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;xlsxwriter&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;Workbook&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;output.xlsx&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;worksheet&lt;/span&gt;&lt;span&gt; = &lt;/span&gt;&lt;span&gt;workbook&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;add_worksheet&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;worksheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;A1&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;Hello&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;worksheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;B1&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;&amp;quot;World&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;worksheet&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;write&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;A2&amp;quot;&lt;/span&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;100&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;workbook&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;span&gt;close&lt;/span&gt;&lt;span&gt;&lt;span&gt;()&lt;br /&gt;&lt;br /&gt;type this code in cmd Allegro&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;skill&amp;nbsp;&lt;/span&gt;&lt;span&gt;ipcBeginProcess&lt;/span&gt;&lt;span&gt;(&amp;quot;python test.py&amp;quot;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;CallbackFun&amp;quot;&lt;/span&gt;&lt;span&gt;); can remove&amp;nbsp;CallbackFun&lt;br /&gt;&lt;br /&gt;BR,&lt;br /&gt;HoangKhoi&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>How to merge excel cell in Allgero SKILL using axlSpreadsheet API</title><link>https://community.cadence.com/thread/66183?ContentTypeID=0</link><pubDate>Tue, 21 Jul 2026 05:56:35 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:3976fc55-309a-4b96-8d2b-14f73d75362f</guid><dc:creator>SK202607205032</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/66183?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66183/how-to-merge-excel-cell-in-allgero-skill-using-axlspreadsheet-api/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I just using&amp;nbsp;&lt;span&gt;axlSpreadsheetInit&lt;/span&gt;&lt;span&gt;() to write excel file, but I don&amp;#39;t know how to merge cell,example as the picture below.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;img style="max-height:480px;max-width:640px;" src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1784613139502v1.png" alt=" " /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Is there any suggestion? Thanks a lot.&lt;/span&gt;&lt;/p&gt;</description></item><item><title>RE: How to merge excel cell in Allgero SKILL using axlSpreadsheet API</title><link>https://community.cadence.com/thread/1434918?ContentTypeID=1</link><pubDate>Mon, 12 Oct 2026 07:02:24 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:ee7a44d8-ff5a-441a-9b34-1c3417c5cb94</guid><dc:creator>SK202607205032</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1434918?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66183/how-to-merge-excel-cell-in-allgero-skill-using-axlspreadsheet-api/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;Hi&amp;nbsp;HoangKhoi,&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I successfully import .json and exported the &lt;code class="KDcb0c" dir="ltr" data-sfc-root="ep" data-epip="" data-complete="true" data-sae=""&gt;.xlsx&lt;!--TgQPHd|||[]--&gt;&lt;/code&gt; file in Python. However, after converting the Python script into an &lt;code class="KDcb0c" dir="ltr" data-sfc-root="ep" data-epip="" data-complete="true" data-sae=""&gt;.exe&lt;!--TgQPHd|||[]--&gt;&lt;/code&gt; file and using it within the skill, the export failed(didn&amp;#39;t find the .xlsx file).&amp;nbsp;Is there any example?thanks a lot!&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.(Season2)</title><link>https://community.cadence.com/thread/1434887?ContentTypeID=1</link><pubDate>Mon, 05 Oct 2026 10:57:39 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:f0929368-d2f3-426d-b3f1-5005b4095c1b</guid><dc:creator>Renu Vibha</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1434887?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/74336/extract-areas-on-the-fpcb-that-do-not-contain-arcs-season2/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi &lt;a href="https://community.cadence.com/members/sg20260713408"&gt;SG20260713408&lt;/a&gt;&amp;nbsp;Thank you very much for sharing the finalized code.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;a href="https://community.cadence.com/members/hoangkhoipcb"&gt;Hoangkhoipcb&lt;/a&gt;&amp;nbsp;thank you for sharing y&lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;our&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;expertise&lt;/span&gt;&lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;,&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;and&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;commitment&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;to&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;helping&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;others&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;make&lt;/span&gt;&amp;nbsp;the&amp;nbsp;&lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;community&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;stronger&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;every&lt;/span&gt; &lt;span class="___1cs5bdp f1w7gpdv f5p0z4x"&gt;day!&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Extract areas on the FPCB that do not contain arcs.(Season2)</title><link>https://community.cadence.com/thread/74336?ContentTypeID=0</link><pubDate>Wed, 30 Sep 2026 02:36:21 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:6f4c138c-0f78-409e-ac57-11e8e32b1294</guid><dc:creator>SG20260713408</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/74336?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/74336/extract-areas-on-the-fpcb-that-do-not-contain-arcs-season2/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hello, everyone.&lt;br /&gt;I am reposting this with the finalized code,&lt;br /&gt;which builds upon the code shared by &amp;quot;Hoangkhoipcb&amp;quot;.&lt;br /&gt;Once again, I would like to thank &amp;quot;Hoangkhoipcb&amp;quot;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff0000;"&gt;Note : Changed on 26Y/10M/16D (;; Change Here)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff0000;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Enabled execution by layer within APD.&lt;/span&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;br /&gt;/* &lt;br /&gt;================================================================================&lt;/p&gt;
&lt;p&gt;*&lt;span&gt;(26Y/09M/30D)&lt;/span&gt;&lt;br /&gt;* Command&amp;nbsp; &amp;nbsp;: create_arc_chk&lt;br /&gt;* Function&amp;nbsp; &amp;nbsp; &amp;nbsp; : Checks for bent corners (sharp angles) without arcs on CLINES.&lt;br /&gt;*&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Highlights detected segments and generates a report log.&lt;br /&gt;*&lt;br /&gt;* [How to Use]&lt;br /&gt;* 1. Modified to allow checking of individual layers or all layers.&lt;br /&gt;* 2. When the window appears after execution:&lt;br /&gt;* 3. Select the layer you wish to check and click the OK button.&lt;br /&gt;* - All_Layer : Checks clines on all layers.&lt;br /&gt;* - Others&amp;nbsp; &amp;nbsp; &amp;nbsp;: Checks clines only on the specific layer.&lt;br /&gt;* 4. Clicking the Cancel button stops the operation.&lt;br /&gt;*&lt;br /&gt;* Output File : create_arc_chk.log&lt;br /&gt;================================================================================&lt;br /&gt;*/&lt;/p&gt;
&lt;p&gt;axlCmdRegister(&amp;quot;create_arc_chk&amp;quot; &amp;#39;create_arc_chk)&lt;/p&gt;
&lt;p&gt;(defun create_arc_chk ()&lt;br /&gt; (let (all_layers sel_layer clines seg_list Out_file segs seg next_seg angle pt_corner error_count)&lt;br /&gt; &lt;br /&gt; all_layers = append(list(&amp;quot;All_Layer&amp;quot;) axlSubclassRoute(?field &amp;#39;isEtch))&lt;br /&gt; sel_layer = nth(axlUIMultipleChoice(&amp;quot;Select a Layer&amp;quot; all_layers &amp;quot;All Etch Layer&amp;quot;) all_layers)&lt;/p&gt;
&lt;p&gt;when(sel_layer&lt;br /&gt; if(sel_layer == &amp;quot;All_Layer&amp;quot; then&lt;br /&gt; axlSetFindFilter(?enabled &amp;#39;(&amp;quot;noall&amp;quot; &amp;quot;CLINES&amp;quot; &amp;quot;INVISIBLE&amp;quot;) ?onButtons &amp;#39;(&amp;quot;all&amp;quot;))&lt;br /&gt; axlAddSelectAll()&lt;br /&gt; clines = axlGetSelSet()&lt;br /&gt; else&lt;br /&gt; axlVisibleDesign(nil)&lt;br /&gt;axlVisibleLayer(strcat(axlMapClassName(&amp;quot;ETCH&amp;quot;) &amp;quot;/&amp;quot; sel_layer) t)&amp;nbsp; &lt;span style="color:#ff0000;"&gt;;; Changed here.&lt;/span&gt;&lt;br /&gt; axlVisibleLayer(strcat(&amp;quot;PIN/&amp;quot; sel_layer) t)&lt;br /&gt; axlVisibleLayer(strcat(&amp;quot;VIA CLASS/&amp;quot; sel_layer) t)&lt;br /&gt; axlVisibleLayer(&amp;quot;BOARD GEOMETRY/OUTLINE&amp;quot; t)&lt;br /&gt; axlVisibleUpdate(t)&lt;br /&gt; axlSetFindFilter(?enabled &amp;#39;(&amp;quot;noall&amp;quot; &amp;quot;CLINES&amp;quot;) ?onButtons &amp;#39;(&amp;quot;all&amp;quot;))&lt;br /&gt; axlAddSelectAll()&lt;br /&gt; clines = axlGetSelSet()&lt;br /&gt; )&lt;/p&gt;
&lt;p&gt;axlClearSelSet()&lt;br /&gt; &lt;br /&gt; seg_list = nil&lt;br /&gt; error_count = 0&lt;/p&gt;
&lt;p&gt;Out_file = outfile(&amp;quot;create_arc_chk.log&amp;quot; &amp;quot;w&amp;quot;)&lt;/p&gt;
&lt;p&gt;fprintf(Out_file &amp;quot;%-5s %-7s %-10s %s\n&amp;quot; &amp;quot;No&amp;quot; &amp;quot;Angle&amp;quot; &amp;quot;Layer&amp;quot; &amp;quot;Location&amp;quot;)&lt;/p&gt;
&lt;p&gt;foreach(cline clines&lt;br /&gt; segs = cline-&amp;gt;segments&lt;br /&gt; while(cdr(segs)&lt;br /&gt; seg = car(segs)&lt;br /&gt; next_seg = cadr(segs)&lt;/p&gt;
&lt;p&gt;/* Proceed only if both segments are straight lines */&lt;br /&gt; if(seg-&amp;gt;xy == nil &amp;amp;&amp;amp; next_seg-&amp;gt;xy == nil then&lt;br /&gt; &lt;br /&gt; /* Find the intersection point of two consecutive line segments */&lt;br /&gt; if(axlGeoPointsEqual(car(seg-&amp;gt;startEnd) car(next_seg-&amp;gt;startEnd)) || axlGeoPointsEqual(car(seg-&amp;gt;startEnd) cadr(next_seg-&amp;gt;startEnd)) then&lt;br /&gt; pt_corner = car(seg-&amp;gt;startEnd)&lt;br /&gt; else&lt;br /&gt; pt_corner = cadr(seg-&amp;gt;startEnd)&lt;br /&gt; )&lt;/p&gt;
&lt;p&gt;angle = abs(axlRadToDeg(axlGeoAngleBetweenLines(seg-&amp;gt;startEnd next_seg-&amp;gt;startEnd)))&lt;br /&gt; &lt;br /&gt; if(!axlGeoEqual(angle 0.0) &amp;amp;&amp;amp; !axlGeoEqual(angle 180.0) then&lt;br /&gt; error_count = error_count + 1&lt;br /&gt; &lt;br /&gt; fprintf(Out_file &amp;quot;%-5d %-7.2f %-10s %L\n&amp;quot; error_count angle cadr(parseString(seg-&amp;gt;layer &amp;quot;/&amp;quot;)) pt_corner)&lt;br /&gt; &lt;br /&gt; seg_list = cons(seg seg_list)&lt;br /&gt; seg_list = cons(next_seg seg_list)&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; segs = cdr(segs)&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; close(Out_file)&lt;/p&gt;
&lt;p&gt;if(error_count &amp;gt; 0 then&lt;br /&gt; axlHighlightObject(seg_list)&lt;br /&gt; axlUIViewFileCreate(&amp;quot;create_arc_chk.log&amp;quot; &amp;quot;Arc Segments Check&amp;quot; nil)&lt;br /&gt; printf(&amp;quot;### Errors : %d ###\n&amp;quot; error_count)&lt;br /&gt; else&lt;br /&gt; printf(&amp;quot;### No arc-less corners found. ###\n&amp;quot;)&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt;)&lt;/p&gt;</description></item><item><title>SKILL: "*Error* if: too many arguments (missing then?)" error on running "if" command</title><link>https://community.cadence.com/thread/70342?ContentTypeID=0</link><pubDate>Mon, 28 Sep 2026 10:08:01 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:2bea1d7b-56bc-4cca-9fa0-7401389821f8</guid><dc:creator>JuanCR</dc:creator><slash:comments>4</slash:comments><comments>https://community.cadence.com/thread/70342?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Check out the&amp;nbsp;following statement:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( order&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = foreach( mapcar param order (get cdfgData param))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = (getq cdfgData parameters)&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It seems&amp;nbsp;&lt;span&gt;a &lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;then &lt;/span&gt;keyword is missing, and&amp;nbsp;the tool&amp;nbsp;&lt;strong&gt;does not&lt;/strong&gt;&amp;nbsp;complain&lt;/span&gt;.&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s say you add&amp;nbsp;a &lt;strong&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;printf &lt;/span&gt;&lt;/strong&gt;command like:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( order&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = foreach( mapcar param order (get cdfgData param))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = (getq cdfgData parameters)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;printf(&amp;quot;%L&amp;quot; parameters~&amp;gt;values)&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this case,&amp;nbsp;you&amp;#39;ll get&amp;nbsp;the following error:&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff0000;font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;*Error* if: too many arguments (missing then?) -&amp;nbsp;&lt;br /&gt;(order (parameters = foreach(mapcar param order get(cdfgData param)))&amp;nbsp;&lt;br /&gt;(parameters = (cdfgData-&amp;gt;parameters)) printf(&amp;quot;%L&amp;quot; (parameters~&amp;gt;values)))&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Why did&amp;nbsp;you get this error, and how can you fix it? I&amp;#39;ll show you:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class="solSection"&gt;
&lt;p&gt;&lt;span&gt;Consider a simpler example. In the command line, type:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;x = 2&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Then enter&amp;nbsp;this expression:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( (x &amp;gt; 5) 1 0)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The tool will evaluate whether x &amp;gt; 5; if so, a &amp;quot;1&amp;quot; will be returned; otherwise, a &amp;quot;0&amp;quot; will be returned. Since 2 is less than 5, you will see the returned value as follows:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;=&amp;gt; 0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This is because&amp;nbsp;the &amp;quot;if&amp;quot; command falls into the following syntax:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( g_condition g_thenExpression [ g_elseExpression ] )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Now, if a fourth argument is added&amp;nbsp;&lt;/span&gt;&lt;span&gt;(&amp;quot;3&amp;quot; in this case)&amp;nbsp;&lt;/span&gt;&lt;span&gt;as follows:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( (x &amp;gt; 5) 1 0 &lt;strong&gt;3&lt;/strong&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You will now see the following error:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color:#ff0000;"&gt;*Error* if: too many arguments (missing then?) - ((x &amp;gt; 5) 1 0 3)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;You get it because the &amp;#39;&lt;strong&gt;compact&lt;/strong&gt;&amp;#39; form of&amp;nbsp;the if&amp;nbsp;command is no longer applied.&amp;nbsp;The syntax now becomes:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( g_condition then g_thenExpr1 ... [ else g_elseExpr1 ... ] )&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thus, you&amp;nbsp;need to add a &amp;quot;&lt;em&gt;then&lt;/em&gt;&amp;quot; for&amp;nbsp;a complete &amp;quot;if&amp;quot; command. If it is not present, the tool will generate an error message.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It is&amp;nbsp;&lt;span&gt;recommended to use the &amp;quot;&lt;em&gt;then&lt;/em&gt;&amp;quot;&amp;nbsp;and&amp;nbsp;&lt;/span&gt;&amp;quot;&lt;em&gt;else&lt;/em&gt;&amp;quot; keywords to avoid such syntax errors and reduce confusion.&amp;nbsp;There are times when the &amp;#39;compact&amp;#39;&amp;nbsp;form is handy without the bloat of &lt;span&gt;then...else&lt;/span&gt;, but it is generally&amp;nbsp;&lt;span&gt;recommended to add these keywords.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Check the &lt;em&gt;&lt;a href="https://support.cadence.com/apex/techpubDocViewerPage?xmlName=sklanguser.xml&amp;amp;title=Cadence%20SKILL%20Language%20User%20Guide%20--%20Getting%20Started%20-%20The%20if%20Function&amp;amp;hash=pgfId-1008931&amp;amp;c_version=ICADVM18.1&amp;amp;path=sklanguser/sklanguserICADVM18.1/chap1.html#pgfId-1008931" rel="noopener noreferrer" target="_blank"&gt;SKILL Language Reference&lt;/a&gt;&lt;/em&gt;&amp;nbsp;for details. Here&amp;#39;s an excerpt&amp;nbsp;from the input for the if conditional:&lt;br /&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This command selectively evaluates two groups of one or more expressions. The syntax is as follows:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if( g_condition g_thenExpression [ g_elseExpression ] )&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;=&amp;gt; g_result&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The &amp;quot;if&amp;quot; form evaluates &lt;span&gt;g_condition&lt;/span&gt;, typically a relational expression, and executes &lt;span&gt;g_thenExpression&lt;/span&gt; if the&amp;nbsp;condition is true (that is, its value is non-nil); otherwise, &lt;span&gt;g_elseExpression&lt;/span&gt; is executed. The value returned by &amp;quot;if&amp;quot; is the value of the corresponding expression evaluated. The &amp;quot;if&amp;quot; form can therefore be used to evaluate expressions&amp;nbsp;conditionally.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-family:&amp;#39;courier new&amp;#39;, courier;"&gt;if( g_condition then g_thenExpr1 ... [ else g_elseExpr1 ... ] )&amp;nbsp;&lt;br /&gt;=&amp;gt; g_result&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The second form of &amp;quot;if&amp;quot; uses the keywords &amp;quot;then&amp;quot; and &amp;quot;else&amp;quot; to group expressions into a conditional execution sequence.&amp;nbsp;If the condition is true, the sequence of expressions between &amp;quot;then&amp;quot; and &amp;quot;else&amp;quot; (or the end of the if form) is evaluated,&amp;nbsp;with the value of the last expression evaluated returned as the value of the form. If the condition is nil instead,&amp;nbsp;the sequence of expressions following the &amp;quot;else&amp;quot; keyword (if any) is evaluated instead. Again, the value of the last&amp;nbsp;expression evaluated is returned as the value of the form.&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>RE: SKILL: "*Error* if: too many arguments (missing then?)" error on running "if" command</title><link>https://community.cadence.com/thread/1421120?ContentTypeID=1</link><pubDate>Tue, 29 Sep 2026 17:08:56 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:e2331ffc-2374-434e-8ab8-06fb277c9976</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1421120?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi David,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Yes, this &amp;quot;if&amp;quot; statement is correct. You&amp;#39;re following the syntax &amp;quot;&lt;span&gt;if( g_condition g_thenExpression [ g_elseExpression ] )&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;See above, in the post. If you replace the contents of the &amp;quot;if&amp;quot; by this:&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
[quote userid="524126" url="~/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command"]if( order&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = foreach( mapcar param order (get cdfgData param))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = (getq cdfgData parameters)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;strong&gt;printf(&amp;quot;%L&amp;quot; parameters~&amp;gt;values)&lt;/strong&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; )[/quote]
&lt;p&gt;then you&amp;#39;ll see that sklint will flag the error.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SKILL: "*Error* if: too many arguments (missing then?)" error on running "if" command</title><link>https://community.cadence.com/thread/1421118?ContentTypeID=1</link><pubDate>Tue, 29 Sep 2026 15:48:06 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:8b5489dc-341d-4bfc-aaf1-d05bfaf91d9c</guid><dc:creator>DavidJHutchins</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1421118?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;below is the &amp;#39;if_test&amp;#39; procedure I added as a test:&lt;/p&gt;
&lt;p&gt;C:\Users\davidh\Documents&amp;gt;cat -n test.il | tail&lt;br /&gt;&amp;nbsp; &amp;nbsp; 42&amp;nbsp; )&lt;br /&gt;&amp;nbsp; &amp;nbsp; 43&amp;nbsp; procedure(if_test()&lt;br /&gt;&amp;nbsp; &amp;nbsp; 44&amp;nbsp; &amp;nbsp; &amp;nbsp; let((parameters param)&lt;br /&gt;&amp;nbsp; &amp;nbsp; 45&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if( order&lt;br /&gt;&amp;nbsp; &amp;nbsp; 46&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = foreach( mapcar param order (get cdfgData param))&lt;br /&gt;&amp;nbsp; &amp;nbsp; 47&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; parameters = (getq cdfgData parameters)&lt;br /&gt;&amp;nbsp; &amp;nbsp; 48&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;br /&gt;&amp;nbsp; &amp;nbsp; 49&amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;br /&gt;&amp;nbsp; &amp;nbsp; 50&amp;nbsp; )&lt;br /&gt;&amp;nbsp; &amp;nbsp; 51&lt;/p&gt;
&lt;p&gt;C:\Users\davidh\Documents&amp;gt;il_allegro&lt;br /&gt;&amp;gt; sklint(?file &amp;quot;test.il&amp;quot;)&lt;br /&gt;Loading skillLint.cxt&lt;br /&gt;INFO (LoadFile): Loading file C:\Cadence\SPB_23.1\tools\sklint/rules/allegro_sklint.il...&lt;br /&gt;INFO (LoadFile): Loading file C:\Cadence\SPB_23.1\tools\sklint/rules/hi2ipc.il...&lt;br /&gt;INFO (LoadFile): Loading file C:\Cadence\SPB_23.1\tools\sklint/rules/ignore.il...&lt;br /&gt;INFO (LoadFile): Loading file C:\Cadence\SPB_23.1\tools\sklint/rules/ilMig.il...&lt;br /&gt;INFO (REP008): Program SKILL Lint started on Sep 29 08:43:09 2026.&lt;br /&gt;INFO (PREFIXES): Using prefixes: &amp;quot;none&amp;quot;&lt;br /&gt;INFO (STRICT): Using strict checking of global variables.&lt;br /&gt;SUGGEST (REMOVE1): test.il, line 23 (PadStackUsage) : Consider use of remq rather than remove: remove(name PadTable)&lt;br /&gt;HINT (NTH1): test.il, line 35 (parse_test) : Can replace call to nth with call to caddr: nth(2 parseString(param_line &amp;quot;&amp;lt;&amp;gt;&amp;quot;))&lt;br /&gt;UNUSED VAR (Unused): test.il, line 44 (if_test) : variable param does not appear to be referenced.&lt;br /&gt;UNUSED VAR (Unused): test.il, line 44 (if_test) : variable parameters does not appear to be referenced. (assigned only)&lt;br /&gt;INFO (VAR5): Unrecognized global variables:&lt;br /&gt;WARN GLOB (VAR8): cdfgData&lt;br /&gt;INFO (VAR): used:&amp;nbsp; in function if_test from file test.il, lines (47 46)&lt;br /&gt;WARN GLOB (VAR8): order&lt;br /&gt;INFO (VAR): used:&amp;nbsp; in function if_test from file test.il, lines (46 45)&lt;br /&gt;INFO (IQ): IQ score is 74 (best is 100).&lt;br /&gt;INFO (IQ1): IQ score is based on 0 error messages, 4 general warning messages, and 3 top level forms.&lt;br /&gt;INFO (REP110): Total enhancement&amp;nbsp; &amp;nbsp; &amp;nbsp;: 0.&lt;br /&gt;INFO (REP110): Total external global : 0.&lt;br /&gt;INFO (REP110): Total package global&amp;nbsp; : 0.&lt;br /&gt;INFO (REP110): Total warning global&amp;nbsp; : 2.&lt;br /&gt;INFO (REP110): Total error global&amp;nbsp; &amp;nbsp; : 0.&lt;br /&gt;INFO (REP110): Total unused vars&amp;nbsp; &amp;nbsp; &amp;nbsp;: 2.&lt;br /&gt;INFO (REP110): Total next release&amp;nbsp; &amp;nbsp; : 0.&lt;br /&gt;INFO (REP110): Total alert&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0.&lt;br /&gt;INFO (REP110): Total hint&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : 1.&lt;br /&gt;INFO (REP110): Total suggestion&amp;nbsp; &amp;nbsp; &amp;nbsp; : 1.&lt;br /&gt;INFO (REP110): Total internal alert&amp;nbsp; : 0.&lt;br /&gt;INFO (REP110): Total information&amp;nbsp; &amp;nbsp; &amp;nbsp;: 19.&lt;br /&gt;INFO (REP110): Total warning&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0.&lt;br /&gt;INFO (REP110): Total error&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;: 0.&lt;br /&gt;INFO (REP110): Total internal error&amp;nbsp; : 0.&lt;br /&gt;INFO (REP110): Total fatal error&amp;nbsp; &amp;nbsp; &amp;nbsp;: 0.&lt;br /&gt;INFO (REP009): Program SKILL Lint finished on Sep 29 08:43:09 2026 with status PASS.&lt;br /&gt;t&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;no error reported...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SKILL: "*Error* if: too many arguments (missing then?)" error on running "if" command</title><link>https://community.cadence.com/thread/1421115?ContentTypeID=1</link><pubDate>Tue, 29 Sep 2026 14:11:31 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:b30d2f4a-77c4-4eaf-aab3-a8bd637cbdf6</guid><dc:creator>JuanCR</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1421115?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi David. I&amp;#39;ve tested this in sklint and it does report it. Where have you seen this not reported by it?&lt;br /&gt;&lt;br /&gt;For instance, I created a file with the example above&amp;nbsp;&lt;span&gt;if( (x &amp;gt; 5) 1 0 &lt;/span&gt;&lt;strong&gt;3&lt;/strong&gt;&lt;span&gt;) and when I run sklint I get this in the output file:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;NFO (STRICT): Using strict checking of global variables.&lt;/p&gt;
&lt;p&gt;ERROR (IF4): if.il, line 1 (abc) : &amp;#39;then&amp;#39; and &amp;#39;else&amp;#39; required in &amp;#39;if&amp;#39; construct: if((x &amp;gt; 5) 1 0 ...)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;If you&amp;#39;re getting a different result, let me know.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: SKILL: "*Error* if: too many arguments (missing then?)" error on running "if" command</title><link>https://community.cadence.com/thread/1421106?ContentTypeID=1</link><pubDate>Mon, 28 Sep 2026 23:09:31 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:e07979c9-24b5-4f33-8fa2-b5d77048d1ad</guid><dc:creator>DavidJHutchins</dc:creator><slash:comments>2</slash:comments><comments>https://community.cadence.com/thread/1421106?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/70342/skill-error-if-too-many-arguments-missing-then-error-on-running-if-command/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Why doesn&amp;#39;t the sklint tool report these issues?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421096?ContentTypeID=1</link><pubDate>Sun, 27 Sep 2026 07:46:36 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:ecd3b6a6-d9f1-4b57-a893-761e7d6a1620</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1421096?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Thank you! I completely agree.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/66340?ContentTypeID=0</link><pubDate>Sat, 19 Sep 2026 04:48:27 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:1cfef0c1-1dfd-440a-a7a1-b41e7c7b27ff</guid><dc:creator>SG20260713408</dc:creator><slash:comments>8</slash:comments><comments>https://community.cadence.com/thread/66340?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;When designing an FPCB (Flexible Printed Circuit Board), corners are often rounded using arcs.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;This script extracts the coordinates of connection points between cline segments where no arc has been generated.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;In other words, assuming that all corners should be rounded with arcs, it identifies the locations where arcs are missing.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;Therefore, you can verify the design by running the test after applying arcs to all corners.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;GoodBye~~&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;axlCmdRegister(&amp;quot;find_napoc&amp;quot; &amp;#39;Find_No_Arc_Point_Of_Clines ?cmdType &amp;quot;interactive&amp;quot;)&lt;/p&gt;
&lt;p&gt;procedure(Find_No_Arc_Point_Of_Clines()&lt;/p&gt;
&lt;p&gt;let((theta_lists check_list check_lists cline_seg_count all_cline_seg_count&lt;br /&gt; sel_nets sel_net_name sel_net_branches sel_net_branches_childrens pin_via_dbs cline_dbs&lt;br /&gt; cline_db_segments first_seg_in_pin_via_value layer first_startend&lt;br /&gt; first_start_xy first_end_xy first_find_pin_via_db first_find_pin_via_db_poly first_start_xy_in_db_result first_end_xy_in_db_result&lt;br /&gt; last_startend last_start_xy last_end_xy last_find_pin_via_db last_find_pin_via_db_poly&lt;br /&gt; segment_objtype segment_layer segment_start_end_xy segment_start_xy segment_start_x segment_start_y&lt;br /&gt; segment_end_xy segment_end_x segment_end_y delta_x delta_y&lt;br /&gt; theta theta_lists seg_start_xy_in_first_db_result seg_start_xy_in_last_db_result)&lt;/p&gt;
&lt;p&gt;theta_lists = list(nil)&lt;/p&gt;
&lt;p&gt;check_lists = list()&lt;/p&gt;
&lt;p&gt;axlClearSelSet()&lt;/p&gt;
&lt;p&gt;sel_nets = axlDBGetDesign() -&amp;gt; nets&lt;/p&gt;
&lt;p&gt;foreach(sel_net sel_nets&lt;/p&gt;
&lt;p&gt;sel_net_name = sel_net -&amp;gt; name&lt;/p&gt;
&lt;p&gt;sel_net_branches = sel_net -&amp;gt; branches&lt;/p&gt;
&lt;p&gt;when(sel_net_branches&lt;/p&gt;
&lt;p&gt;foreach(sel_net_branche sel_net_branches&lt;/p&gt;
&lt;p&gt;sel_net_branches_childrens = sel_net_branche -&amp;gt; children&lt;/p&gt;
&lt;p&gt;pin_via_dbs = setof(db sel_net_branches_childrens db -&amp;gt; objType == &amp;quot;pin&amp;quot; || db -&amp;gt; objType == &amp;quot;via&amp;quot;)&lt;/p&gt;
&lt;p&gt;cline_dbs = setof(db sel_net_branches_childrens db -&amp;gt; objType == &amp;quot;path&amp;quot;)&lt;/p&gt;
&lt;p&gt;when(cline_dbs&lt;/p&gt;
&lt;p&gt;foreach(cline_db cline_dbs&lt;/p&gt;
&lt;p&gt;cline_db_segments = cline_db -&amp;gt; segments&lt;/p&gt;
&lt;p&gt;when(cline_db_segments&lt;/p&gt;
&lt;p&gt;cline_db_segments_length = length(cline_db_segments)&lt;/p&gt;
&lt;p&gt;cline_seg_count = 0&lt;/p&gt;
&lt;p&gt;all_cline_seg_count = 0&lt;/p&gt;
&lt;p&gt;first_seg_in_pin_via_value = nil&lt;/p&gt;
&lt;p&gt;layer = car(cline_db_segments) -&amp;gt; layer&lt;/p&gt;
&lt;p&gt;first_startend = car(cline_db_segments) -&amp;gt; startEnd&lt;/p&gt;
&lt;p&gt;first_start_xy = car(first_startend)&lt;/p&gt;
&lt;p&gt;first_end_xy = cadr(first_startend)&lt;/p&gt;
&lt;p&gt;first_find_pin_via_db = car(setof(db pin_via_dbs axlGeoPointsEqual(db -&amp;gt; xy first_start_xy)))&lt;/p&gt;
&lt;p&gt;if(first_find_pin_via_db then&lt;/p&gt;
&lt;p&gt;first_find_pin_via_db_poly = car(axlPolyFromDB(first_find_pin_via_db ?layer layer ?padType &amp;#39;REGULAR))&lt;/p&gt;
&lt;p&gt;first_start_xy_in_db_result = axlGeoPointInShape(first_start_xy first_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;first_end_xy_in_db_result = axlGeoPointInShape(first_end_xy first_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;when(first_start_xy_in_db_result &amp;amp;&amp;amp; first_end_xy_in_db_result first_seg_in_pin_via_value = t)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;first_find_pin_via_db_poly = nil&lt;/p&gt;
&lt;p&gt;first_seg_in_pin_via_value = nil&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;last_startend = lastelem(cline_db_segments) -&amp;gt; startEnd&lt;/p&gt;
&lt;p&gt;last_start_xy = car(last_startend)&lt;/p&gt;
&lt;p&gt;last_end_xy = cadr(last_startend)&lt;/p&gt;
&lt;p&gt;last_find_pin_via_db = car(setof(db pin_via_dbs axlGeoPointsEqual(db -&amp;gt; xy last_end_xy)))&lt;/p&gt;
&lt;p&gt;if(last_find_pin_via_db then&lt;/p&gt;
&lt;p&gt;last_find_pin_via_db_poly = car(axlPolyFromDB(last_find_pin_via_db ?layer layer ?padType &amp;#39;REGULAR))&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;last_find_pin_via_db_poly = nil&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;foreach(segment cline_db_segments&lt;/p&gt;
&lt;p&gt;cline_seg_count = ++cline_seg_count&lt;/p&gt;
&lt;p&gt;all_cline_seg_count = ++all_cline_seg_count&lt;/p&gt;
&lt;p&gt;segment_objtype = segment -&amp;gt; objType&lt;/p&gt;
&lt;p&gt;segment_layer = cadr(parseString(segment -&amp;gt; layer &amp;quot;/&amp;quot;))&lt;/p&gt;
&lt;p&gt;segment_start_end_xy = segment -&amp;gt; startEnd&lt;/p&gt;
&lt;p&gt;segment_start_xy = car(segment_start_end_xy)&lt;/p&gt;
&lt;p&gt;segment_start_x = car(segment_start_xy)&lt;/p&gt;
&lt;p&gt;segment_start_y = cadr(segment_start_xy)&lt;/p&gt;
&lt;p&gt;segment_end_xy = cadr(segment_start_end_xy)&lt;/p&gt;
&lt;p&gt;segment_end_x = car(segment_end_xy)&lt;/p&gt;
&lt;p&gt;segment_end_y = cadr(segment_end_xy)&lt;/p&gt;
&lt;p&gt;delta_x = segment_start_x - segment_end_x&lt;/p&gt;
&lt;p&gt;delta_y = segment_start_y - segment_end_y&lt;/p&gt;
&lt;p&gt;if(oddp(cline_seg_count) then&lt;/p&gt;
&lt;p&gt;theta = axlRadToDeg(atan2(delta_y delta_x))&lt;/p&gt;
&lt;p&gt;theta_lists = cons(theta theta_lists)&lt;/p&gt;
&lt;p&gt;when(all_cline_seg_count == 1 &amp;amp;&amp;amp; first_seg_in_pin_via_value cline_seg_count = 1)&lt;/p&gt;
&lt;p&gt;when(segment_objtype == &amp;quot;arc&amp;quot; cline_seg_count = 0)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;if(zerop(cline_seg_count) &amp;amp;&amp;amp; evenp(cline_seg_count) then&lt;/p&gt;
&lt;p&gt;theta = axlRadToDeg(atan2(delta_y delta_x))&lt;/p&gt;
&lt;p&gt;theta_lists = cons(theta theta_lists)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;when(!zerop(cline_seg_count) &amp;amp;&amp;amp; evenp(cline_seg_count)&lt;/p&gt;
&lt;p&gt;seg_start_xy_in_first_db_result = axlGeoPointInShape(segment_start_xy first_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;;;seg_end_xy_in_first_db_result = axlGeoPointInShape(segment_end_xy first_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;seg_start_xy_in_last_db_result = axlGeoPointInShape(segment_start_xy last_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;;;seg_end_xy_in_last_db_result = axlGeoPointInShape(segment_end_xy last_find_pin_via_db_poly)&lt;/p&gt;
&lt;p&gt;before_theta = car(theta_lists)&lt;br /&gt; &lt;br /&gt; if(segment_objtype != &amp;quot;arc&amp;quot; then&lt;/p&gt;
&lt;p&gt;theta = axlRadToDeg(atan2(delta_y delta_x))&lt;/p&gt;
&lt;p&gt;if(axlGeoEqual(before_theta theta) then&lt;/p&gt;
&lt;p&gt;cline_seg_count = 1&lt;/p&gt;
&lt;p&gt;theta_lists = cons(theta theta_lists)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;if(seg_start_xy_in_first_db_result || seg_start_xy_in_last_db_result then&lt;/p&gt;
&lt;p&gt;cline_seg_count = 1&lt;/p&gt;
&lt;p&gt;theta_lists = cons(theta theta_lists)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;check_list = list(segment_layer segment_start_xy sel_net_name)&lt;/p&gt;
&lt;p&gt;check_lists = cons(check_list check_lists)&lt;/p&gt;
&lt;p&gt;cline_seg_count = 1&lt;/p&gt;
&lt;p&gt;theta_lists = cons(theta theta_lists)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;cline_seg_count = 0&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;theta_lists = list(car(theta_lists))&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;check_lists = sortcar(check_lists &amp;#39;axlStrcmpAlpNum)&lt;/p&gt;
&lt;p&gt;if(zerop(length(check_lists)) then&lt;/p&gt;
&lt;p&gt;;;printf(&amp;quot;### Error Count = 0 ###\n&amp;quot;)&lt;/p&gt;
&lt;p&gt;axlUIConfirm(&amp;quot;Error Count Zero(0)&amp;quot; &amp;#39;info)&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;Create_Find_No_Arc_Point_Of_Clines_log_File(check_lists)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;procedure(Create_Find_No_Arc_Point_Of_Clines_log_File(checking_result_infor_lists)&lt;/p&gt;
&lt;p&gt;let((total_all_error_count Date)&lt;/p&gt;
&lt;p&gt;total_all_error_count = 0&lt;br /&gt; Date = (getCurrentTime)&lt;br /&gt; Date = parseString(Date &amp;quot; &amp;quot;)&lt;br /&gt; Date = strcat(nth(3 Date) &amp;quot; &amp;quot; nth(0 Date) &amp;quot; &amp;quot; nth(1 Date) &amp;quot; &amp;quot; nth(2 Date))&lt;br /&gt; &lt;br /&gt; Find_No_Arc_Point_Of_Clines_Log_File = outfile(&amp;quot;./Find_No_Arc_Point_Of_Clines.log&amp;quot; &amp;quot;w&amp;quot;)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;\nDATE : %s\n&amp;quot; Date)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;\nSyntax : Layer, Point_XY, Net_Name\n&amp;quot;)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;\n=========================================================================\n&amp;quot;)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;\n ## REPORT OF NO ARC BETWEEN TWO CLINE SEGS ##\n\n&amp;quot;)&lt;/p&gt;
&lt;p&gt;foreach(checking_result_infor_list checking_result_infor_lists&lt;/p&gt;
&lt;p&gt;total_all_error_count = ++total_all_error_count&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;%d.%s, %L, %s\n&amp;quot; total_all_error_count car(checking_result_infor_list) cadr(checking_result_infor_list) caddr(checking_result_infor_list))&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;\n=========================================================================\n\n&amp;quot;)&lt;/p&gt;
&lt;p&gt;fprintf(Find_No_Arc_Point_Of_Clines_Log_File &amp;quot;Total Error Count = %d ea.\n&amp;quot; total_all_error_count)&lt;/p&gt;
&lt;p&gt;close(Find_No_Arc_Point_Of_Clines_Log_File)&lt;/p&gt;
&lt;p&gt;axlShell(&amp;quot;viewlog ./Find_No_Arc_Point_Of_Clines.log&amp;quot;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;
&lt;p&gt;)&lt;/p&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421095?ContentTypeID=1</link><pubDate>Sun, 27 Sep 2026 01:53:09 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:09a30b65-6766-4de4-9216-952980fc2b5c</guid><dc:creator>SG20260713408</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1421095?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi&amp;nbsp;&lt;a class="internal-link view-user-profile" href="https://community.cadence.com/members/hoangkhoipcb"&gt;Hoangkhoipcb&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I think other users might need your feature, so I am uploading the modified code.&lt;/p&gt;
&lt;p&gt;However, the UI window is small.&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;1. Modified to allow checking of individual layers or all layers.&lt;br /&gt;2. When the window appears after execution:&lt;br /&gt;3. Select the layer you wish to check and click the OK button. &lt;br /&gt;- All_Layer : Checks clines on all layers. &lt;br /&gt;- Etc&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : Checks clines only on the specific layer.&lt;br /&gt;4. Clicking the Cancel button stops the operation.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;axlCmdRegister(&amp;quot;create_arc_chk&amp;quot; &amp;#39;create_arc_chk)&lt;br /&gt;(defun create_arc_chk ()&lt;br /&gt; (let ()&lt;br /&gt; prog(()&lt;/p&gt;
&lt;p&gt;all_layers = append(list(&amp;quot;All_Layer&amp;quot;) axlSubclassRoute(?field &amp;#39;isEtch))&lt;br /&gt; sel_layer = nth(axlUIMultipleChoice(&amp;quot;Select a Layer&amp;quot; all_layers &amp;quot;All Etch Layer&amp;quot;) all_layers)&lt;/p&gt;
&lt;p&gt;when(sel_layer&lt;/p&gt;
&lt;p&gt;if(sel_layer == &amp;quot;All_Layer&amp;quot; then&lt;br /&gt; axlSetFindFilter(?enabled &amp;#39;(&amp;quot;noall&amp;quot; &amp;quot;CLINES&amp;quot; &amp;quot;INVISIBLE&amp;quot;) ?onButtons &amp;#39;(&amp;quot;all&amp;quot;))&lt;br /&gt; axlAddSelectAll()&lt;br /&gt; clines = axlGetSelSet()&lt;/p&gt;
&lt;p&gt;else&lt;br /&gt; axlVisibleDesign(nil)&lt;br /&gt; axlVisibleLayer(strcat(&amp;quot;ETCH/&amp;quot; sel_layer) t)&lt;br /&gt; axlVisibleLayer(strcat(&amp;quot;PIN/&amp;quot; sel_layer) t)&lt;br /&gt; axlVisibleLayer(strcat(&amp;quot;VIA CLASS/&amp;quot; sel_layer) t)&lt;br /&gt; axlVisibleLayer(&amp;quot;BOARD GEOMETRY/OUTLINE&amp;quot; t)&lt;br /&gt; axlVisibleUpdate(t)&lt;/p&gt;
&lt;p&gt;axlSetFindFilter(?enabled &amp;#39;(&amp;quot;noall&amp;quot; &amp;quot;CLINES&amp;quot;) ?onButtons &amp;#39;(&amp;quot;all&amp;quot;))&lt;br /&gt; axlAddSelectAll()&lt;br /&gt; clines = axlGetSelSet()&lt;/p&gt;
&lt;p&gt;) ;;if sel_layer&lt;/p&gt;
&lt;p&gt;axlClearSelSet()&lt;br /&gt; tmp_list = nil&lt;br /&gt; seg_list = nil&lt;br /&gt; Out_file = outfile(&amp;quot;create_arc_chk.log&amp;quot; &amp;quot;w&amp;quot;)&lt;br /&gt; fprintf(Out_file &amp;quot;%-5s %-7s %-10s %s\n&amp;quot; &amp;quot;No&amp;quot; &amp;quot;Angle&amp;quot; &amp;quot;Layer&amp;quot; &amp;quot;Location&amp;quot; )&lt;br /&gt; foreach(cline clines&lt;br /&gt; segs = cline-&amp;gt;segments&lt;br /&gt; foreach(seg segs&lt;br /&gt; if(length(member(seg segs)) &amp;gt; 1 then&lt;br /&gt; next_seg = cadr(member(seg segs))&lt;br /&gt; if(seg-&amp;gt;xy == nil &amp;amp;&amp;amp; next_seg-&amp;gt;xy == nil then&lt;br /&gt; ol = axl_ol_ol2(seg-&amp;gt;startEnd next_seg-&amp;gt;startEnd)&lt;br /&gt; if(member(car(ol) tmp_list) == nil then&lt;br /&gt; angle = abs(axlRadToDeg(axlGeoAngleBetweenLines(seg-&amp;gt;startEnd next_seg-&amp;gt;startEnd)))&lt;br /&gt; if(axlGeoEqual(angle 0.0) || axlGeoEqual(angle 180.0) then&lt;br /&gt; else&lt;br /&gt; push(car(ol) tmp_list)&lt;br /&gt; fprintf(Out_file &amp;quot;%-5d %-7.2f %-10s %L\n&amp;quot; length(tmp_list) angle cadr(parseString(seg-&amp;gt;layer &amp;quot;/&amp;quot;)) car(ol) )&lt;br /&gt; push(seg seg_list)&lt;br /&gt; push(next_seg seg_list)&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; close(Out_file)&lt;br /&gt; if(length(tmp_list) &amp;gt; 0 then&lt;br /&gt; axlHighlightObject(seg_list)&lt;br /&gt; axlUIViewFileCreate(&amp;quot;create_arc_chk.log&amp;quot; &amp;quot;Arc Segments Check&amp;quot; nil)&lt;br /&gt; printf(&amp;quot;Errors : %d\n&amp;quot; length(tmp_list))&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt; )&lt;br /&gt;)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421094?ContentTypeID=1</link><pubDate>Sat, 26 Sep 2026 08:08:37 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:8a42e346-8faa-435c-ad96-b6c7099f0fc9</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1421094?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi SG,&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421093?ContentTypeID=1</link><pubDate>Sat, 26 Sep 2026 07:48:08 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:0997e7b2-a98f-45aa-9eba-190df5f07252</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1421093?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi SG,&lt;/p&gt;
&lt;p&gt;Thank you very much for your thoughtful feedback! I really appreciate your comments.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;I use &lt;code&gt;prog&lt;/code&gt; mainly out of habit. When validating multiple input parameters, I prefer to exit immediately if something is invalid.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Exception handling depends on the design requirements. In my case, I intentionally don&amp;#39;t allow those cases to be skipped.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;This SKILL was written quickly to check a design with around &lt;strong&gt;50,000 clines on a single layer&lt;/strong&gt;, so I allow the user to select the layer to process and saved time .&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I agree with you about separating functions. I would also suggest keeping the code as clear and concise as possible, including using shorter and more meaningful variable names where appropriate. This can make the code easier to read, review, and maintain.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I hope you continue improving your SKILL development skills in future.&lt;/p&gt;
&lt;p&gt;If you&amp;#39;d like to contact me, hoangkhoipcb_@_gmail_com&lt;/p&gt;
&lt;p&gt;BR.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;HoangKhoi&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421090?ContentTypeID=1</link><pubDate>Fri, 25 Sep 2026 13:13:08 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:287d9cb4-c88f-470d-9eaf-4fee214dfdfb</guid><dc:creator>SG20260713408</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1421090?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Thanks, Hoangkhoipcb!&lt;br /&gt;I appreciate you sharing such concise code.&lt;br /&gt;I&amp;rsquo;m still studying to fully understand it,&lt;br /&gt;but I&amp;rsquo;ll take your code to heart; it will certainly help me think about writing code more concisely or elegantly.&lt;br /&gt;I&amp;rsquo;d love to ask for your email address,&lt;br /&gt;but given the nature of this community, I feel it&amp;rsquo;s not the right place for private conversations.&lt;br /&gt;I may lack expertise myself, but I notice that&lt;br /&gt;high-level script developers aren&amp;#39;t providing answers here.&lt;/p&gt;
&lt;p&gt;Here are my personal thoughts on the code:&lt;/p&gt;
&lt;p&gt;1. I&amp;rsquo;m not sure why the &amp;quot;prog&amp;quot; function was used.&lt;/p&gt;
&lt;p&gt;2. There is no exception handling. &lt;br /&gt;- If a cline segment (or cline) is connected to a via, pin, or shape, there is no need to extract the point.&lt;/p&gt;
&lt;p&gt;3. The order of the results was determined for the sake of the next step. &lt;br /&gt;- The angle of the result doesn&amp;#39;t matter; the designer just needs to be able to verify the result.&lt;br /&gt;(Though it would be useful for debugging purposes.)&lt;br /&gt;- If layers are mixed, unnecessary screen control operations are repeated.&lt;/p&gt;
&lt;p&gt;4. When I was a beginner, I used to put every function into a single block,&lt;br /&gt;but as the code grew longer, it became difficult to review or maintain, so I separated the log file generation. &lt;br /&gt;Ultimately, I decided to create separate functions for each specific task.&lt;/p&gt;
&lt;p&gt;thank you~~&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1421089?ContentTypeID=1</link><pubDate>Fri, 25 Sep 2026 04:36:42 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:04d4adb5-edc2-47fd-8849-f75b16d4b4f1</guid><dc:creator>Hoangkhoipcb</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1421089?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Hi&amp;nbsp;&lt;a class="internal-link view-user-profile" href="https://community.cadence.com/members/sg20260713408"&gt;SG20260713408&lt;/a&gt;,&lt;br /&gt;&lt;br /&gt;I tested your code, and it works well for me.&lt;br /&gt;I&amp;#39;ve made a shorter version of the code for you to reference.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;axlCmdRegister&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;create_arc_chk&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;#39;create_arc_chk&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;defun&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;create_arc_chk (&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; (&lt;/span&gt;&lt;span&gt;let&lt;/span&gt;&lt;span&gt; ()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;prog&lt;/span&gt;&lt;span&gt;(()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;axlSetFindFilter&lt;/span&gt;&lt;span&gt;(?enabled &amp;#39;(&lt;/span&gt;&lt;span&gt;&amp;quot;noall&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;CLINES&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;INVISIBLE&amp;quot;&lt;/span&gt;&lt;span&gt;) ?onButtons &amp;#39;(&lt;/span&gt;&lt;span&gt;&amp;quot;all&amp;quot;&lt;/span&gt;&lt;span&gt;))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;axlAddSelectAll&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clines = &lt;/span&gt;&lt;span&gt;axlGetSelSet&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;axlClearSelSet&lt;/span&gt;&lt;span&gt;()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; tmp_list = &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; seg_list = &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Out_file = &lt;/span&gt;&lt;span&gt;outfile&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;create_arc_chk.log&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;w&amp;quot;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;fprintf&lt;/span&gt;&lt;span&gt;(Out_file &lt;/span&gt;&lt;span&gt;&amp;quot;%-5s %-7s %-10s %s&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;No&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;Angle&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;Layer&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;Location&amp;quot;&lt;/span&gt;&lt;span&gt; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt;(cline clines&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; segs = cline-&amp;gt;&lt;/span&gt;&lt;span&gt;segments&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;foreach&lt;/span&gt;&lt;span&gt;(seg segs&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;member&lt;/span&gt;&lt;span&gt;(seg segs)) &amp;gt; &lt;/span&gt;&lt;span&gt;1&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; next_seg = &lt;/span&gt;&lt;span&gt;cadr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;member&lt;/span&gt;&lt;span&gt;(seg segs))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(seg-&amp;gt;&lt;/span&gt;&lt;span&gt;xy&lt;/span&gt;&lt;span&gt; == &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &amp;amp;&amp;amp; next_seg-&amp;gt;&lt;/span&gt;&lt;span&gt;xy&lt;/span&gt;&lt;span&gt; == &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ol = &lt;/span&gt;&lt;span&gt;axl_ol_ol2&lt;/span&gt;&lt;span&gt;(seg-&amp;gt;&lt;/span&gt;&lt;span&gt;startEnd&lt;/span&gt;&lt;span&gt; next_seg-&amp;gt;&lt;/span&gt;&lt;span&gt;startEnd&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;member&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt;(ol) tmp_list) == &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; angle = &lt;/span&gt;&lt;span&gt;abs&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;axlRadToDeg&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;axlGeoAngleBetweenLines(&lt;/span&gt;&lt;span&gt;seg-&amp;gt;&lt;/span&gt;&lt;span&gt;startEnd&lt;/span&gt;&lt;span&gt; next_seg-&amp;gt;&lt;/span&gt;&lt;span&gt;startEnd&lt;/span&gt;&lt;span&gt;)))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;axlGeoEqual&lt;/span&gt;&lt;span&gt;(angle &lt;/span&gt;&lt;span&gt;0.0&lt;/span&gt;&lt;span&gt;) || &lt;/span&gt;&lt;span&gt;axlGeoEqual&lt;/span&gt;&lt;span&gt;(angle &lt;/span&gt;&lt;span&gt;180.0&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt;(ol) tmp_list)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;fprintf&lt;/span&gt;&lt;span&gt;(Out_file &lt;/span&gt;&lt;span&gt;&amp;quot;%-5d %-7.2f %-10s %L&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;(tmp_list) angle &lt;/span&gt;&lt;span&gt;cadr&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;parseString&lt;/span&gt;&lt;span&gt;(seg-&amp;gt;&lt;/span&gt;&lt;span&gt;layer&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;/&amp;quot;&lt;/span&gt;&lt;span&gt;)) &lt;/span&gt;&lt;span&gt;car&lt;/span&gt;&lt;span&gt;(ol) )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(seg seg_list)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;push&lt;/span&gt;&lt;span&gt;(next_seg seg_list)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;close&lt;/span&gt;&lt;span&gt;(Out_file)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;if&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;(tmp_list) &amp;gt; &lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;then&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;axlHighlightObject&lt;/span&gt;&lt;span&gt;(seg_list)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;axlUIViewFileCreate&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;create_arc_chk.log&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;quot;Arc Segments Check&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;nil&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;printf&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;quot;Errors : %d&lt;/span&gt;&lt;span&gt;\n&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;length&lt;/span&gt;&lt;span&gt;(tmp_list))&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;BR,&lt;br /&gt;&lt;br /&gt;HoangKhoi&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1409360?ContentTypeID=1</link><pubDate>Tue, 22 Sep 2026 04:26:05 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:cc42de39-3ee2-446e-8245-02152a218a09</guid><dc:creator>SG20260713408</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1409360?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I apologize.&lt;br /&gt;When designing an FPCB (Flexible Printed Circuit Board), corners are often rounded using arcs.&lt;br /&gt;This script extracts the coordinates of connection points between cline segments where no arc has been generated.&lt;br /&gt;In other words, assuming that all corners should be rounded with arcs, it identifies the locations where arcs are missing.&lt;br /&gt;Therefore, you can verify the design by running the test after applying arcs to all corners.&lt;/p&gt;
&lt;p&gt;thank you&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extract areas on the FPCB that do not contain arcs.</title><link>https://community.cadence.com/thread/1409359?ContentTypeID=1</link><pubDate>Tue, 22 Sep 2026 02:26:42 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:ad3eb958-488f-4ebd-9ee3-097e6c6275bc</guid><dc:creator>Elecguy</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/1409359?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66340/extract-areas-on-the-fpcb-that-do-not-contain-arcs/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Interesting. But with no comments, no header, no instructions for the type of database it works on ... difficult to test&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Extraction of RLC  Values for Cline using skill</title><link>https://community.cadence.com/thread/1409345?ContentTypeID=1</link><pubDate>Thu, 17 Sep 2026 23:48:47 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:a575e46d-9e05-4dab-8862-c4923b9a2681</guid><dc:creator>Elecguy</dc:creator><slash:comments>0</slash:comments><comments>https://community.cadence.com/thread/1409345?ContentTypeID=1</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66332/extraction-of-rlc-values-for-cline-using-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;I don&amp;#39;t think there&amp;#39;s a dedicated API for this. But you can certainly read properties of the database and/or cline and manually make calculations.&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>Extraction of RLC  Values for Cline using skill</title><link>https://community.cadence.com/thread/66332?ContentTypeID=0</link><pubDate>Wed, 16 Sep 2026 12:26:31 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:d564b994-8d45-4d81-95af-7249f4a5e85b</guid><dc:creator>ABIKRISHNA</dc:creator><slash:comments>1</slash:comments><comments>https://community.cadence.com/thread/66332?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66332/extraction-of-rlc-values-for-cline-using-skill/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Is it possible&amp;nbsp; to extract or calculate the following parameters for a selected cline using Allegro SKILL code?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span&gt;Resistance&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Inductance&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;Capacitance&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span&gt;Could you please provide some guidance on the relevant SKILL APIs or approach?&lt;/span&gt;&lt;/p&gt;</description></item><item><title>Skill to open Custom Variables  Window in Allegro x 25.1 PCB Editor</title><link>https://community.cadence.com/thread/66274?ContentTypeID=0</link><pubDate>Wed, 19 Aug 2026 12:40:07 GMT</pubDate><guid isPermaLink="false">75bcbcf9-38a3-4e2e-b84b-26c8c46a9500:30cee9d2-12de-483f-b033-8602e28ab01e</guid><dc:creator>MZ20250602835</dc:creator><slash:comments>5</slash:comments><comments>https://community.cadence.com/thread/66274?ContentTypeID=0</comments><wfw:commentRss>https://community.cadence.com/cadence_technology_forums/pcb-design/f/allegro-x-scripting-skill/66274/skill-to-open-custom-variables-window-in-allegro-x-25-1-pcb-editor/rss?ContentTypeId=0</wfw:commentRss><description>&lt;p&gt;Dear all,&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;i can use Command tbx customvar update to open the custom variables window.&lt;/p&gt;
&lt;p&gt;&lt;img style="max-height:480px;max-width:640px;" alt=" " src="https://community.cadence.com/resized-image/__size/1280x960/__key/communityserver-discussions-components-files/137/pastedimage1787143332363v1.png" /&gt;&lt;/p&gt;
&lt;p&gt;I can also use axlShell(&amp;quot;tbx customvar update&amp;quot;) to open the same window but My current Problem is that:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;after giving axlShell&lt;/span&gt;(&amp;quot;tbx customvar update&amp;quot;) I do not get the&amp;nbsp;&lt;span&gt;Skill &amp;gt; for the next skill&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Skill &amp;gt; axlShell(&amp;quot;tbx customvar update&amp;quot;)&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Reading file &amp;quot;C:/Users/emp8124501/ECAD/projects/251_demo/output/251_demo/physical/customvar.cfg&amp;quot;&lt;/p&gt;
&lt;p&gt;Info: Reading custom variables from &amp;quot;C:/Users/emp8124501/ECAD/projects/251_demo/251_demo.cpm&amp;quot;&lt;/p&gt;
&lt;p&gt;It missing the&amp;nbsp;&lt;span&gt;Skill &amp;gt; after&amp;nbsp;Info: Reading custom variables from &amp;quot;C:/Users/emp8124501/ECAD/projects/251_demo/251_demo.cpm&amp;quot;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;May i ask how could i solve this issue or are there any other skill to use instead of&amp;nbsp;&lt;span&gt;axlShell&amp;nbsp;in allegro x pcb editor such as&amp;nbsp;&lt;/span&gt;axlCmd,&amp;nbsp;&lt;span style="font-family:inherit;"&gt;axlUIWExecuteCommand or&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:inherit;"&gt;axlDBCmd?&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Many thanks&lt;/p&gt;
&lt;p&gt;Moyan&lt;/p&gt;</description></item></channel></rss>