<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://cadautoscript.com/ru/blog/</id>
    <title>CAD AutoScript Blog</title>
    <updated>2026-02-28T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://cadautoscript.com/ru/blog/"/>
    <subtitle>CAD AutoScript Blog</subtitle>
    <icon>https://cadautoscript.com/ru/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[Beyond Chatbots: How LLMs Fit into the Engineering Workflow (CAD, Electrical, Automation, Projects, Hardware)]]></title>
        <id>https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/</id>
        <link href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/"/>
        <updated>2026-02-28T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Practical patterns for integrating LLMs into engineering workflows with deterministic tools, validation, and cross-discipline use cases.]]></summary>
        <content type="html"><![CDATA[<p><em>Expanded version based on the original article "<a class="" href="https://cadautoscript.com/ru/blog/ai-engineering-workflow/">Beyond Chatbots: LLMs in the Mechanical Engineering Workflow</a>" (December 2, 2025).</em>
<em>Goal: focus on practical automation, not "magical design" - especially where engineers lose time on repetitive steps, documentation search, format conversion, and recurring calculations.</em></p>
<div class="theme-admonition theme-admonition-tip admonition_NGVh alert alert--success"><div class="admonitionHeading_BxRo"><span class="admonitionIcon_uqVo"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Core Concept</div><div class="admonitionContent_NP9n"><p>Use LLMs as a high-speed interface layer for engineering systems. Keep final outputs deterministic and validated with tests, rules, and traceable sources.</p></div></div>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="1-quick-review-of-the-original-article-what-is-strong-and-what-to-extend">1) Quick review of the original article: what is strong, and what to extend<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#1-quick-review-of-the-original-article-what-is-strong-and-what-to-extend" class="hash-link" aria-label="Прямая ссылка на 1) Quick review of the original article: what is strong, and what to extend" title="Прямая ссылка на 1) Quick review of the original article: what is strong, and what to extend" translate="no">​</a></h2>
<p><strong>Strong ideas (kept and reinforced):</strong></p>
<ul>
<li class=""><strong>LLMs as an interface to tools</strong>, not a "part generator."</li>
<li class=""><strong>Zero-shot macro and script generation</strong> to reduce API onboarding time.</li>
<li class=""><strong>Data extraction from PDFs and tables</strong> into JSON/ERP/PDM-ready formats.</li>
<li class=""><strong>RAG over standards</strong> for precise retrieval from large documents.</li>
<li class=""><strong>Prompt structure discipline</strong> (context -&gt; task -&gt; constraints).</li>
</ul>
<p><strong>What is often missing (added in this expanded version):</strong></p>
<ul>
<li class=""><strong>Validation and accountability</strong>: LLM output must pass tests and acceptance criteria.</li>
<li class=""><strong>System integration strategy</strong>: how LLM fits into IDE, Git, CI, PDM/PLM, SCADA, ERP.</li>
<li class=""><strong>Cross-role examples</strong>: electrical, instrumentation/automation, project engineering, hardware/PCB, quality, operations.</li>
<li class=""><strong>Indirect high-ROI usage</strong>: LLM writes utility scripts, parsers, checks, and small daily web apps.</li>
<li class=""><strong>Data quality workflow</strong>: parse -&gt; normalize -&gt; validate -&gt; load, including OCR noise handling.</li>
<li class=""><strong>Security and confidentiality</strong>: prevent leaks of drawings, BOMs, and commercial data.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="2-core-idea-llm-is-engineering-glue-between-systems">2) Core idea: LLM is engineering glue between systems<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#2-core-idea-llm-is-engineering-glue-between-systems" class="hash-link" aria-label="Прямая ссылка на 2) Core idea: LLM is engineering glue between systems" title="Прямая ссылка на 2) Core idea: LLM is engineering glue between systems" translate="no">​</a></h2>
<p>Treat LLM as:</p>
<ul>
<li class="">a <strong>language and structure assistant</strong> (describe a task -&gt; get code/template/plan),</li>
<li class="">a <strong>draft generator</strong> (script, macro, SQL, Python, ST/IEC 61131-3, C#, PowerShell),</li>
<li class="">a <strong>data normalizer</strong> (tables, PDFs, BOMs, specs),</li>
<li class="">a <strong>standards companion</strong> (RAG, requirement extraction, traceability matrices).</li>
</ul>
<p>Do not treat LLM as:</p>
<ul>
<li class="">a replacement for engineering judgment,</li>
<li class="">a source of truth for standards without verification,</li>
<li class="">an engine for autonomous critical decisions.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="where-llms-are-objectively-strong">Where LLMs are objectively strong<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#where-llms-are-objectively-strong" class="hash-link" aria-label="Прямая ссылка на Where LLMs are objectively strong" title="Прямая ссылка на Where LLMs are objectively strong" translate="no">​</a></h3>
<ul>
<li class="">Converting text instructions into structured output.</li>
<li class="">Translating requirements into algorithms and script scaffolds.</li>
<li class="">Working with API/SDK patterns (tree traversal, filtering, batch export/import).</li>
<li class="">Generating docs, checklists, test cases, and error-handling paths.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="where-they-are-weaker-and-how-to-compensate">Where they are weaker (and how to compensate)<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#where-they-are-weaker-and-how-to-compensate" class="hash-link" aria-label="Прямая ссылка на Where they are weaker (and how to compensate)" title="Прямая ссылка на Where they are weaker (and how to compensate)" translate="no">​</a></h3>
<ul>
<li class="">Spatial and geometric reasoning.</li>
<li class="">High-precision math done "on trust."</li>
<li class="">Confident hallucinations with wrong specifics.</li>
</ul>
<p><strong>Compensation pattern:</strong> strict I/O, tests, reference examples, deterministic execution, and acceptance checks.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="3-universal-implementation-pattern-llm--deterministic-tool--validation">3) Universal implementation pattern: LLM + deterministic tool + validation<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#3-universal-implementation-pattern-llm--deterministic-tool--validation" class="hash-link" aria-label="Прямая ссылка на 3) Universal implementation pattern: LLM + deterministic tool + validation" title="Прямая ссылка на 3) Universal implementation pattern: LLM + deterministic tool + validation" translate="no">​</a></h2>
<p>Best results in engineering usually come from this stack:</p>
<div class="language-text codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-text codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Engineer task -&gt; prompt -&gt; LLM (code/template/plan)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">              deterministic executor</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">   (CAD API / Python / solver / simulator / parser / CI)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      validation (unit tests, rules, baseline comparisons)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          result (file, report, export, DB write)</span><br></span></code></pre></div></div>
<p>Key point: LLM does not "produce" the final engineering result directly. It generates instructions and code. The final result comes from deterministic execution plus verification.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="4-role-based-examples-where-fast-impact-is-realistic">4) Role-based examples: where fast impact is realistic<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#4-role-based-examples-where-fast-impact-is-realistic" class="hash-link" aria-label="Прямая ссылка на 4) Role-based examples: where fast impact is realistic" title="Прямая ссылка на 4) Role-based examples: where fast impact is realistic" translate="no">​</a></h2>
<p>These are high-success scenarios because they are repetitive, text/table heavy, API-friendly, and testable.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="41-mechanical-engineering--cad--design-offices">4.1 Mechanical engineering / CAD / design offices<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#41-mechanical-engineering--cad--design-offices" class="hash-link" aria-label="Прямая ссылка на 4.1 Mechanical engineering / CAD / design offices" title="Прямая ссылка на 4.1 Mechanical engineering / CAD / design offices" translate="no">​</a></h3>
<p><strong>Tasks that automate well:</strong></p>
<ul>
<li class="">Batch export (DXF/DWG/PDF/STEP), print flows, sheet generation.</li>
<li class="">Property updates (material, mass, part number, revision), file naming.</li>
<li class="">Model checks (empty properties, wrong units, nonstandard config names).</li>
<li class="">Report generation (BOM, mass summary, change lists).</li>
<li class="">Pre/post processing for simulation workflows (CSV to charts and reports).</li>
</ul>
<p><strong>Indirect but very effective:</strong></p>
<ul>
<li class="">daily utilities for fits, thread lookup, unit conversion, naming rule checks.</li>
</ul>
<p><strong>Example: part-number validator (Python)</strong></p>
<div class="language-python codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-python codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> re</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">RULE </span><span class="token operator">=</span><span class="token plain"> re</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token builtin" style="color:rgb(189, 147, 249)">compile</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">r"^[A-Z]{2}-\d{4}-[A-Z]{2}\d{2}$"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># Example: AB-1024-XY05</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">validate_part_number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">bool</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">RULE</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">match</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">candidates </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token string" style="color:rgb(255, 121, 198)">"AB-1024-XY05"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ab-1024-XY05"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"AB-102-XY05"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">for</span><span class="token plain"> pn </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">in</span><span class="token plain"> candidates</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"OK"</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">if</span><span class="token plain"> validate_part_number</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">pn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">else</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"FAIL"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<p>LLM value: rapid generation of validation logic, CLI tools, PyQt mini-apps, and plugin scaffolds while the engineer controls rules and examples.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="42-electrical-engineers-schematics-panels-cable-schedules-calculations">4.2 Electrical engineers (schematics, panels, cable schedules, calculations)<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#42-electrical-engineers-schematics-panels-cable-schedules-calculations" class="hash-link" aria-label="Прямая ссылка на 4.2 Electrical engineers (schematics, panels, cable schedules, calculations)" title="Прямая ссылка на 4.2 Electrical engineers (schematics, panels, cable schedules, calculations)" translate="no">​</a></h3>
<p><strong>Strong use cases:</strong></p>
<ul>
<li class="">Generate and validate cable schedules, signal lists, I/O lists.</li>
<li class="">Automate data chains: loads -&gt; groups -&gt; breakers -&gt; cables.</li>
<li class="">Draft technical requirements, explanatory notes, equipment lists.</li>
<li class="">Normalize design data: naming cleanup, unit normalization, duplicate detection.</li>
</ul>
<p><strong>Example: fast voltage-drop utility skeleton</strong></p>
<div class="language-python codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-python codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> dataclasses </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> dataclass</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:rgb(248, 248, 242)">@dataclass</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    length_m</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    current_a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    voltage_v</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    r_ohm_per_km</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)"># Conductor resistance at defined temperature</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">voltage_drop_percent</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># Simplified single-phase model: dU = I * R</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># R = r_ohm_per_km * (L / 1000)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    r_total </span><span class="token operator">=</span><span class="token plain"> line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">r_ohm_per_km </span><span class="token operator">*</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">length_m </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">1000.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    du </span><span class="token operator">=</span><span class="token plain"> line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">current_a </span><span class="token operator">*</span><span class="token plain"> r_total</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> du </span><span class="token operator">/</span><span class="token plain"> line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">voltage_v </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">100.0</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">l </span><span class="token operator">=</span><span class="token plain"> Line</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">length_m</span><span class="token operator">=</span><span class="token number">80</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> current_a</span><span class="token operator">=</span><span class="token number">32</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> voltage_v</span><span class="token operator">=</span><span class="token number">230</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> r_ohm_per_km</span><span class="token operator">=</span><span class="token number">1.15</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Voltage drop: </span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">voltage_drop_percent</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation interpolation">l</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token string-interpolation interpolation format-spec">.2f</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">%"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<p>You can ask the LLM to add:</p>
<ul>
<li class="">cable table import from CSV/Excel and selection constraints,</li>
<li class="">CLI + PDF report export,</li>
<li class="">unit tests against baseline cases,</li>
<li class="">packaging as a team utility.</li>
</ul>
<blockquote>
<p>Important: formulas and correction factors must be validated against your applicable standards (IEC/NEC/internal rules). LLM accelerates implementation, not compliance approval.</p>
</blockquote>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="43-industrial-automation--instrumentation-engineers-plc-scada-dcs">4.3 Industrial automation / instrumentation engineers (PLC, SCADA, DCS)<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#43-industrial-automation--instrumentation-engineers-plc-scada-dcs" class="hash-link" aria-label="Прямая ссылка на 4.3 Industrial automation / instrumentation engineers (PLC, SCADA, DCS)" title="Прямая ссылка на 4.3 Industrial automation / instrumentation engineers (PLC, SCADA, DCS)" translate="no">​</a></h3>
<p><strong>High-impact automation:</strong></p>
<ul>
<li class="">PLC code skeletons (IEC 61131-3: ST/FBD) from functional descriptions.</li>
<li class="">Tag naming normalization and duplicate detection.</li>
<li class="">Alarm text generation and prioritization structures.</li>
<li class="">Legacy conversion: PDF datasheet -&gt; structured parameter set -&gt; engineering tool import.</li>
<li class="">Consistency checks across I/O list, loop diagrams, SCADA tags, and alarm lists.</li>
</ul>
<p><strong>Example: motor-start function block skeleton in Structured Text</strong></p>
<div class="language-pascal codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-pascal codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">FUNCTION_BLOCK FB_MotorStart</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">VAR_INPUT</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    StartCmd    : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    StopCmd     : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    EStopOk     : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    InterlockOk : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    FeedbackOn  : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">END_VAR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">VAR_OUTPUT</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    RunOut      : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    Fault       : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">END_VAR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">VAR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    latchedRun  : BOOL;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    tFeedback   : TON;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">END_VAR</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Latching start command</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">IF StopCmd OR NOT EStopOk THEN</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    latchedRun := FALSE;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ELSIF StartCmd AND InterlockOk THEN</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    latchedRun := TRUE;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">END_IF;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">RunOut := latchedRun AND EStopOk AND InterlockOk;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">// Feedback supervision (simplified)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">tFeedback(IN := RunOut AND NOT FeedbackOn, PT := T#3S);</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">IF tFeedback.Q THEN</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    Fault := TRUE;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    latchedRun := FALSE;</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">END_IF;</span><br></span></code></pre></div></div>
<p>LLM helps by generating the initial skeleton, diagnostics, state handling, timers, docs, and simulation test-case drafts.</p>
<p>Engineer responsibility remains non-negotiable: safety logic, stop conditions, fail-safe behavior, sensor-fault scenarios, and site standards.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="44-project-engineers-and-cross-discipline-teams-requirements-and-coordination">4.4 Project engineers and cross-discipline teams (requirements and coordination)<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#44-project-engineers-and-cross-discipline-teams-requirements-and-coordination" class="hash-link" aria-label="Прямая ссылка на 4.4 Project engineers and cross-discipline teams (requirements and coordination)" title="Прямая ссылка на 4.4 Project engineers and cross-discipline teams (requirements and coordination)" translate="no">​</a></h3>
<p><strong>Immediate value areas:</strong></p>
<ul>
<li class="">Convert scattered requirements into structured specifications.</li>
<li class="">Auto-generate requirements traceability matrices.</li>
<li class="">Draft RFI/RFQ packages and stakeholder response templates.</li>
<li class="">Extract risks and action items from meeting notes (with confidentiality controls).</li>
</ul>
<p><strong>Example flow: requirement extraction to JSON</strong></p>
<p>Prompt idea: "Transform this source text into JSON with schema <code>id</code>, <code>requirement</code>, <code>rationale</code>, <code>verification_method</code>, <code>priority</code>."</p>
<p>Then:</p>
<ul>
<li class="">validate against JSON Schema,</li>
<li class="">import into Jira/Polarion/DOORS/Confluence,</li>
<li class="">generate verification plans.</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="45-hardware-and-pcb-engineers-bom-test-automation-firmware-scaffolds">4.5 Hardware and PCB engineers (BOM, test automation, firmware scaffolds)<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#45-hardware-and-pcb-engineers-bom-test-automation-firmware-scaffolds" class="hash-link" aria-label="Прямая ссылка на 4.5 Hardware and PCB engineers (BOM, test automation, firmware scaffolds)" title="Прямая ссылка на 4.5 Hardware and PCB engineers (BOM, test automation, firmware scaffolds)" translate="no">​</a></h3>
<p><strong>High-return targets:</strong></p>
<ul>
<li class="">BOM normalization: manufacturer, MPN, alternates, units, descriptions.</li>
<li class="">Bench-test script generation (Python + SCPI/PyVISA, serial, CAN).</li>
<li class="">Firmware scaffolding (drivers, state machines, protocol handlers) with strict review.</li>
<li class="">Bring-up checklists and manufacturing test-plan drafts.</li>
</ul>
<p><strong>Example: minimal SCPI identification wrapper</strong></p>
<div class="language-python codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-python codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> pyvisa</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">read_idn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resource</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">-</span><span class="token operator">&gt;</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">str</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    rm </span><span class="token operator">=</span><span class="token plain"> pyvisa</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">ResourceManager</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    inst </span><span class="token operator">=</span><span class="token plain"> rm</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">open_resource</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">resource</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    inst</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">timeout </span><span class="token operator">=</span><span class="token plain"> </span><span class="token number">5000</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> inst</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">query</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"*IDN?"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">strip</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">read_idn</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"USB0::0x0000::0x0000::INSTR"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<p>LLM can quickly add retries, connection diagnostics, structured logs, CSV/JSON export, CLI UX, and test-run summaries.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="5-deep-dive-cases-with-implementation-recipes">5) Deep-dive cases with implementation recipes<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#5-deep-dive-cases-with-implementation-recipes" class="hash-link" aria-label="Прямая ссылка на 5) Deep-dive cases with implementation recipes" title="Прямая ссылка на 5) Deep-dive cases with implementation recipes" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="case-a-zero-shot-cad-scripts-with-quality-gates">Case A: zero-shot CAD scripts with quality gates<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#case-a-zero-shot-cad-scripts-with-quality-gates" class="hash-link" aria-label="Прямая ссылка на Case A: zero-shot CAD scripts with quality gates" title="Прямая ссылка на Case A: zero-shot CAD scripts with quality gates" translate="no">​</a></h3>
<p><strong>Task:</strong> batch export all sheet metal components from an assembly to DXF, with folders and logs.</p>
<p><strong>Why LLM helps fast:</strong></p>
<ul>
<li class="">assembly traversal,</li>
<li class="">sheet-metal filtering,</li>
<li class="">export options,</li>
<li class="">naming rules,</li>
<li class="">error handling and logging.</li>
</ul>
<p><strong>Safe rollout sequence:</strong></p>
<ol>
<li class="">Define explicit inputs and outputs.</li>
<li class="">Generate a CAD API skeleton (VBA/C#/Python).</li>
<li class="">Add acceptance checks:<!-- -->
<ul>
<li class="">expected file count,</li>
<li class="">naming-template compliance,</li>
<li class="">duplicate/empty-name rejection,</li>
<li class="">complete status log.</li>
</ul>
</li>
<li class="">Run on a test assembly first, then production.</li>
<li class="">Version-control in Git with locked CAD/plugin versions.</li>
</ol>
<p><strong>Prompt template for CAD script generation</strong></p>
<div class="language-text codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-text codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Context:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- CAD: SolidWorks 2023</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Language: VBA (or C#)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Object: active assembly (.sldasm)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Task:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Find all sheet-metal parts, including nested subassemblies</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Export each to ./ExportDXF/&lt;PartNumber&gt;/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- File naming: &lt;PartNumber&gt;_&lt;ConfigName&gt;.dxf</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Constraints:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Skip suppressed components</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Never overwrite files (append suffix instead)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Write log.csv with part, config, status, message</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Acceptance criteria:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- For a 10-part sheet-metal test assembly, produce 10+ DXFs (depending on configs)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Log must have no empty fields and include error codes</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="case-b-pdf---json---pdmerp-for-datasheets">Case B: PDF -&gt; JSON -&gt; PDM/ERP for datasheets<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#case-b-pdf---json---pdmerp-for-datasheets" class="hash-link" aria-label="Прямая ссылка на Case B: PDF -> JSON -> PDM/ERP for datasheets" title="Прямая ссылка на Case B: PDF -> JSON -> PDM/ERP for datasheets" translate="no">​</a></h3>
<p><strong>Task:</strong> extract parameters from datasheets (for example, pressure transmitters) and create structured records.</p>
<p><strong>Typical challenge:</strong> PDFs can be text-native or scanned images.</p>
<p><strong>Recommended pipeline:</strong></p>
<ol>
<li class="">Text PDF: parse tables via Python tools (<code>pdfplumber</code>, <code>camelot</code>, <code>tabula</code>) and normalize.</li>
<li class="">Scanned PDF: capture key pages and run multimodal extraction to JSON.</li>
<li class="">Validate everything:<!-- -->
<ul>
<li class="">schema compliance,</li>
<li class="">unit consistency,</li>
<li class="">source traceability (file, page, table row).</li>
</ul>
</li>
</ol>
<p><strong>Minimal JSON schema example</strong></p>
<div class="language-json codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-json codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"tag"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"PT-101"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"device_type"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"Pressure Transmitter"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"manufacturer"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"ACME"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"X200"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"range"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token property">"min"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"max"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">10</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"unit"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"bar"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"output"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"4-20 mA + HART"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"supply"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token property">"min"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">12</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"max"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">30</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"unit"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"VDC"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"process_connection"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"G1/2"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"materials"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token property">"wetted"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"316L"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"ip_rating"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"IP67"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"source"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token property">"file"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"datasheet_x200.pdf"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"page"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>Key tactic: require strict JSON-only output from the model.</p>
<p><strong>Prompt template for table extraction</strong></p>
<div class="language-text codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-text codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">You are given a table image (page 3). Return JSON only with this schema:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- manufacturer (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- model (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- range.min (number), range.max (number), range.unit (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- supply.min (number), supply.max (number), supply.unit (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- output (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- ip_rating (string)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Use null when a value is missing.</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="case-c-rag-for-standards-and-internal-regulations">Case C: RAG for standards and internal regulations<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#case-c-rag-for-standards-and-internal-regulations" class="hash-link" aria-label="Прямая ссылка на Case C: RAG for standards and internal regulations" title="Прямая ссылка на Case C: RAG for standards and internal regulations" translate="no">​</a></h3>
<p><strong>Task:</strong> answer questions like torque, tolerance, and labeling rules with source references.</p>
<p><strong>RAG flow:</strong></p>
<ul>
<li class="">index PDFs and internal docs,</li>
<li class="">retrieve relevant chunks,</li>
<li class="">answer from retrieved content,</li>
<li class="">keep document/page citations.</li>
</ul>
<div class="language-text codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-text codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">PDF/docs -&gt; chunking -&gt; embeddings -&gt; vector DB</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                         user query</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                   top-k retrieved fragments</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                              v</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                  LLM answer + source citations</span><br></span></code></pre></div></div>
<p>Practical rule: store standard version, effective date, and internal exceptions close to each indexed source.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="case-d-llm-as-a-micro-app-generator-for-daily-engineering-tasks">Case D: LLM as a micro-app generator for daily engineering tasks<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#case-d-llm-as-a-micro-app-generator-for-daily-engineering-tasks" class="hash-link" aria-label="Прямая ссылка на Case D: LLM as a micro-app generator for daily engineering tasks" title="Прямая ссылка на Case D: LLM as a micro-app generator for daily engineering tasks" translate="no">​</a></h3>
<p>Sometimes the highest ROI is a small service, not a full "agent."</p>
<p><strong>Examples:</strong></p>
<ul>
<li class="">web form for input parameters -&gt; validated report,</li>
<li class="">Slack/Teams bot for checklists and standard references,</li>
<li class="">Excel add-in for data normalization flows.</li>
</ul>
<p><strong>FastAPI skeleton example</strong></p>
<div class="language-python codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-python codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> fastapi </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> FastAPI</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> pydantic </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> BaseModel</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">app </span><span class="token operator">=</span><span class="token plain"> FastAPI</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">class</span><span class="token plain"> </span><span class="token class-name">Input</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">BaseModel</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    length_m</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    current_a</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    voltage_v</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    r_ohm_per_km</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> </span><span class="token builtin" style="color:rgb(189, 147, 249)">float</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token decorator annotation punctuation" style="color:rgb(248, 248, 242)">@app</span><span class="token decorator annotation punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token decorator annotation punctuation" style="color:rgb(248, 248, 242)">post</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">"/voltage-drop"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">voltage_drop</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">inp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> Input</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    r_total </span><span class="token operator">=</span><span class="token plain"> inp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">r_ohm_per_km </span><span class="token operator">*</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">inp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">length_m </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">1000.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    du </span><span class="token operator">=</span><span class="token plain"> inp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">current_a </span><span class="token operator">*</span><span class="token plain"> r_total</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string" style="color:rgb(255, 121, 198)">"drop_percent"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"> du </span><span class="token operator">/</span><span class="token plain"> inp</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">voltage_v </span><span class="token operator">*</span><span class="token plain"> </span><span class="token number">100.0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></span></code></pre></div></div>
<p>LLM can quickly add OpenAPI docs, validation, logs, Dockerfile, and test coverage.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="6-prompting-practice-for-engineers-templates-that-actually-work">6) Prompting practice for engineers: templates that actually work<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#6-prompting-practice-for-engineers-templates-that-actually-work" class="hash-link" aria-label="Прямая ссылка на 6) Prompting practice for engineers: templates that actually work" title="Прямая ссылка на 6) Prompting practice for engineers: templates that actually work" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="61-universal-engineering-code-prompt">6.1 Universal engineering code prompt<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#61-universal-engineering-code-prompt" class="hash-link" aria-label="Прямая ссылка на 6.1 Universal engineering code prompt" title="Прямая ссылка на 6.1 Universal engineering code prompt" translate="no">​</a></h3>
<div class="language-text codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-text codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token plain">1) Context</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Tool/version: (SolidWorks 2023 / EPLAN / TIA Portal / KiCad / Python 3.11)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Language: (VBA/C#/Python/ST)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Environment constraints: (offline, stdlib-only, access limits)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2) Inputs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- What comes in? (file, folder, CSV, parameters)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- At least one sample input</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">3) Outputs</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- What should be produced? (files, report, JSON, model changes)</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Strict output format</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">4) Rules</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Naming, units, standards, exceptions</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Error definitions</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">5) Acceptance criteria</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- 3-5 verifiable checks</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- Preferably test cases (input -&gt; expected output)</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="62-always-ask-for-tests">6.2 Always ask for tests<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#62-always-ask-for-tests" class="hash-link" aria-label="Прямая ссылка на 6.2 Always ask for tests" title="Прямая ссылка на 6.2 Always ask for tests" translate="no">​</a></h3>
<p>Prompt additions that improve reliability:</p>
<ul>
<li class="">"Generate 5 <code>pytest</code> unit tests for formula edge cases."</li>
<li class="">"Add static type checking (<code>mypy</code>) and linting (<code>ruff</code>) config."</li>
</ul>
<p>This reduces silent logic failures significantly.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="7-quality-control-how-to-avoid-llm-driven-chaos">7) Quality control: how to avoid LLM-driven chaos<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#7-quality-control-how-to-avoid-llm-driven-chaos" class="hash-link" aria-label="Прямая ссылка на 7) Quality control: how to avoid LLM-driven chaos" title="Прямая ссылка на 7) Quality control: how to avoid LLM-driven chaos" translate="no">​</a></h2>
<p>Minimum set of practices that works in production:</p>
<ul>
<li class="">Use <strong>Git</strong> for all scripts/macros.</li>
<li class="">Require <strong>human code review</strong>.</li>
<li class="">Keep <strong>logs and execution reports</strong>.</li>
<li class="">Maintain <strong>baseline datasets</strong> (test assemblies, test PDFs, test tags).</li>
<li class="">Enforce <strong>JSON Schema and strict output formats</strong>.</li>
<li class="">Block auto-write actions without <strong>dry-run + report first</strong>.</li>
</ul>
<p>Practical rule: LLM accelerates artifact generation (code, docs, tables), but responsibility for engineering decisions remains with qualified engineers and validated deterministic tools.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="8-a-realistic-2-4-week-rollout-plan">8) A realistic 2-4 week rollout plan<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#8-a-realistic-2-4-week-rollout-plan" class="hash-link" aria-label="Прямая ссылка на 8) A realistic 2-4 week rollout plan" title="Прямая ссылка на 8) A realistic 2-4 week rollout plan" translate="no">​</a></h2>
<p><strong>Week 1: choose 1-2 pain points</strong></p>
<ul>
<li class="">Examples: DXF export, BOM cleanup, I/O list generation, voltage-drop calculation.</li>
</ul>
<p><strong>Week 2: prototype</strong></p>
<ul>
<li class="">Script + one test dataset + execution log.</li>
<li class="">Internal README with run instructions.</li>
</ul>
<p><strong>Week 3: quality wrapping</strong></p>
<ul>
<li class="">Unit tests, format validation, error handling.</li>
<li class="">Git repository and version discipline.</li>
</ul>
<p><strong>Week 4: production pilot</strong></p>
<ul>
<li class="">Team instruction.</li>
<li class="">Pilot on real data.</li>
<li class="">Feedback loop and iteration.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="9-final-takeaway">9) Final takeaway<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#9-final-takeaway" class="hash-link" aria-label="Прямая ссылка на 9) Final takeaway" title="Прямая ссылка на 9) Final takeaway" translate="no">​</a></h2>
<p>LLMs are not about "let AI design for me." They are about:</p>
<ul>
<li class="">routine automation (exports, properties, reports, tables),</li>
<li class="">faster internal tool development (scripts, calculators, validators),</li>
<li class="">structured knowledge extraction (PDF -&gt; JSON, RAG over standards),</li>
<li class="">better quality through transparent pipelines and tests.</li>
</ul>
<p>The engineer role shifts from interface operator to automation architect: define rules, verify outputs, and build reproducible workflows.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="tag-based-navigation-to-other-published-posts">Tag-Based Navigation to Other Published Posts<a href="https://cadautoscript.com/ru/blog/llm-engineering-workflow-expanded/#tag-based-navigation-to-other-published-posts" class="hash-link" aria-label="Прямая ссылка на Tag-Based Navigation to Other Published Posts" title="Прямая ссылка на Tag-Based Navigation to Other Published Posts" translate="no">​</a></h2>
<p>Use these tag jumps to move across related posts:</p>
<ul>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/tags/automation/">#automation</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/tags/cad/">#cad</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/tags/llm/">#llm</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/tags/ai/">#ai</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/tags/python/">#python</a></li>
</ul>
<p>Published articles connected by these tags:</p>
<ul>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/headless-cad-chromium/">Headless CAD: Generating and Nesting DXF Flat Patterns via Chromium</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/ai-engineering-workflow/">Beyond Chatbots: LLMs in the Mechanical Engineering Workflow</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/">Excalidraw: a virtual napkin for engineers</a></li>
<li class=""><a class="" href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/">FreeCAD 1.x: the "king" of open-source CAD</a></li>
</ul>]]></content>
        <author>
            <name>Yurii</name>
            <uri>https://cadautoscript.com</uri>
        </author>
        <category label="AI" term="AI"/>
        <category label="LLM" term="LLM"/>
        <category label="Python" term="Python"/>
        <category label="SolidWorks" term="SolidWorks"/>
        <category label="Automation" term="Automation"/>
        <category label="CAD" term="CAD"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[FreeCAD 1.x: the "king" of open-source CAD]]></title>
        <id>https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/</id>
        <link href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/"/>
        <updated>2025-12-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[FreeCAD 1.x adds parametric stability, built-in assemblies, and UX upgrades that push open-source CAD closer to commercial suites.]]></summary>
        <content type="html"><![CDATA[<p>FreeCAD 1.x is a rare case where a free CAD stops feeling like a hobby toy and turns into a practical engineering tool. After the 1.0 release (November 18, 2024), the project gained improvements that directly affect engineering usability: stronger parametric stability (mitigating the topological naming problem), a built-in Assembly Workbench, refreshed materials/appearance, and better UX. By late 2025, the first 1.1 release candidate had already appeared, so the 1.x line keeps moving.</p>
<p>Below is why FreeCAD can be called the "king" of open-source CAD, where it genuinely approaches commercial systems (SolidWorks, Inventor, Solid Edge, Creo, Fusion 360, NX), and where it still trails.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="why-freecad-deserves-the-king-title">Why FreeCAD deserves the "king" title<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#why-freecad-deserves-the-king-title" class="hash-link" aria-label="Прямая ссылка на Why FreeCAD deserves the &quot;king&quot; title" title="Прямая ссылка на Why FreeCAD deserves the &quot;king&quot; title" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="parametrics-as-a-foundation">Parametrics as a foundation<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#parametrics-as-a-foundation" class="hash-link" aria-label="Прямая ссылка на Parametrics as a foundation" title="Прямая ссылка на Parametrics as a foundation" translate="no">​</a></h3>
<p>FreeCAD was built around parametric modeling from the start: sketches, constraints, a feature tree, expressions, and geometry reuse. That philosophy is what engineers pay for in "big" CAD systems.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="breadth-of-engineering-domains-in-one-ecosystem">Breadth of engineering domains in one ecosystem<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#breadth-of-engineering-domains-in-one-ecosystem" class="hash-link" aria-label="Прямая ссылка на Breadth of engineering domains in one ecosystem" title="Прямая ссылка на Breadth of engineering domains in one ecosystem" translate="no">​</a></h3>
<p>Within one application (plus add-ons), FreeCAD covers multiple worlds:</p>
<ul>
<li class="">mechanical design (PartDesign/Part)</li>
<li class="">assemblies (built-in Assembly plus external workbenches)</li>
<li class="">drawings (TechDraw)</li>
<li class="">CAM/toolpaths (Path)</li>
<li class="">FEM (basic analysis)</li>
<li class="">architecture/BIM (Arch and related ecosystem)</li>
</ul>
<p>Commercial systems can do this too, but often through modular licensing. In FreeCAD, this breadth comes from workbenches and community-driven development.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="a-critical-shift-better-model-robustness-under-edits">A critical shift: better model robustness under edits<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#a-critical-shift-better-model-robustness-under-edits" class="hash-link" aria-label="Прямая ссылка на A critical shift: better model robustness under edits" title="Прямая ссылка на A critical shift: better model robustness under edits" translate="no">​</a></h3>
<p>Historically one of FreeCAD's most painful issues was broken references to faces/edges after model changes (the topological naming problem). In 1.0, mitigation landed in the core. This is not about comfort - it is about the reliability of parametric workflows.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="where-freecad-1x-is-close-to-commercial-cad">Where FreeCAD 1.x is close to commercial CAD<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#where-freecad-1x-is-close-to-commercial-cad" class="hash-link" aria-label="Прямая ссылка на Where FreeCAD 1.x is close to commercial CAD" title="Прямая ссылка на Where FreeCAD 1.x is close to commercial CAD" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="parametric-solid-modeling-mechanical">Parametric solid modeling (mechanical)<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#parametric-solid-modeling-mechanical" class="hash-link" aria-label="Прямая ссылка на Parametric solid modeling (mechanical)" title="Прямая ссылка на Parametric solid modeling (mechanical)" translate="no">​</a></h3>
<p>For enclosures, brackets, plates, adapters, fixtures, machining parts, and 3D printing, FreeCAD is very close. The core parametric approach (sketches + features + tree) is mature, and 1.0 makes model edits survive thanks to better reference robustness.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="2d-sketches-and-constraints">2D sketches and constraints<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#2d-sketches-and-constraints" class="hash-link" aria-label="Прямая ссылка на 2D sketches and constraints" title="Прямая ссылка на 2D sketches and constraints" translate="no">​</a></h3>
<p>For typical engineering geometry (dimension chains, symmetry, tangency, parallelism, expressions/parameters), FreeCAD covers around 80-90% of what most users need from mainstream mechanical CAD. Differences usually come down to comfort, diagnosing over-constraints, UX polish, and performance on very large sketches.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="assemblies-a-zone-of-rapid-progress">Assemblies: a zone of rapid progress<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#assemblies-a-zone-of-rapid-progress" class="hash-link" aria-label="Прямая ссылка на Assemblies: a zone of rapid progress" title="Прямая ссылка на Assemblies: a zone of rapid progress" translate="no">​</a></h3>
<p>The built-in Assembly Workbench in FreeCAD 1.0 is a major step: assemblies are no longer only the domain of add-ons. External assembly workbenches remain popular - A2plus, for example, is installable via the Addon Manager. For small to mid-sized assemblies, layout work, basic kinematic checks, and fit verification, FreeCAD is often already "enough." For very large assemblies and complex constraint networks, limitations show up faster.</p>
<h3 class="anchor anchorTargetStickyNavbar_ESYw" id="data-exchange">Data exchange<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#data-exchange" class="hash-link" aria-label="Прямая ссылка на Data exchange" title="Прямая ссылка на Data exchange" translate="no">​</a></h3>
<p>STEP remains the industrial workhorse for exchanging 3D models, and FreeCAD fits well into STEP-based workflows - especially as a viewer, editor, and geometry-prep tool. Commercial CAD often moves ahead through "native" ecosystems within a single vendor and more predictable importers for complex models.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="where-freecad-still-trails-commercial-cad">Where FreeCAD still trails commercial CAD<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#where-freecad-still-trails-commercial-cad" class="hash-link" aria-label="Прямая ссылка на Where FreeCAD still trails commercial CAD" title="Прямая ссылка на Where FreeCAD still trails commercial CAD" translate="no">​</a></h2>
<ol>
<li class="">
<p><strong>Large assemblies, performance, manageability.</strong> Commercial CAD is usually stronger in performance on thousands of components, simplification tools (defeature, lightweight modes), out-of-the-box configuration/variant management, and enterprise-level interference/clearance analysis.</p>
</li>
<li class="">
<p><strong>Drawings and standards-based documentation at scale.</strong> TechDraw is workable, but commercial CAD often does better with automated drawing workflows, stability of view-to-model links in complex cases, rich libraries of standard annotations/tolerances/BOMs, and PDM integration. If drawings are your main deliverable, the difference is felt more strongly.</p>
</li>
<li class="">
<p><strong>High-end surfacing (Class-A) and specialized modules.</strong> For complex surfacing, industrial design, and cosmetic quality at the level of top modules (NX/Creo/SW Premium, etc.), FreeCAD is usually not the first choice. The same goes for narrow, industry-specific toolsets: mold design, advanced sheet metal forming, rule-based piping, wiring harnesses, and PLM-specific integrations.</p>
</li>
<li class="">
<p><strong>PDM/PLM and enterprise integration.</strong> Commercial CAD wins on ecosystem: data management, access control, revisions, approvals, traceability, and ERP/PLM connectors.</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="practical-assessment-how-close-is-close">Practical assessment: how close is "close"<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#practical-assessment-how-close-is-close" class="hash-link" aria-label="Прямая ссылка на Practical assessment: how close is &quot;close&quot;" title="Прямая ссылка на Practical assessment: how close is &quot;close&quot;" translate="no">​</a></h2>
<ul>
<li class=""><strong>A very strong choice (often without caveats):</strong> individual parts and small products with parametrics; fixtures, fasteners, adapters, brackets; model preparation for 3D printing and machining; layout models and small assemblies; STEP-based exchange and geometry cleanup/editing.</li>
<li class=""><strong>A good choice, but scale and requirements matter:</strong> mid-sized assemblies with constraints; drawings if requirements are not extremely strict and highly automated; typical-level CAM operations; FEM for engineering estimates and quick checks.</li>
<li class=""><strong>Commercial CAD is more often the better pick:</strong> very large assemblies and complex configuration management; high-throughput drawing production under strict standards; advanced surfacing and specialized industry modules; strict PDM/PLM requirements and change auditing.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="conclusion">Conclusion<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#conclusion" class="hash-link" aria-label="Прямая ссылка на Conclusion" title="Прямая ссылка на Conclusion" translate="no">​</a></h2>
<p>FreeCAD 1.x earns the "king of open-source CAD" title thanks to its combination of parametrics, breadth of tasks, and development pace. The 1.0 release was a turning point for parametric robustness and assemblies, and 1.1 (already in RC) shows the project did not stop at a milestone version.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="further-reading-and-reviews">Further reading and reviews<a href="https://cadautoscript.com/ru/blog/freecad-1x-open-source-cad/#further-reading-and-reviews" class="hash-link" aria-label="Прямая ссылка на Further reading and reviews" title="Прямая ссылка на Further reading and reviews" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://www.freecad.org/" target="_blank" rel="noopener noreferrer" class="">FreeCAD official site</a></li>
<li class=""><a href="https://wiki.freecad.org/Release_notes_1.0" target="_blank" rel="noopener noreferrer" class="">Release notes for FreeCAD 1.0</a></li>
<li class=""><a href="https://all3dp.com/2/freecad-review/" target="_blank" rel="noopener noreferrer" class="">All3DP FreeCAD review</a></li>
<li class=""><a href="https://sourceforge.net/projects/free-cad/" target="_blank" rel="noopener noreferrer" class="">SourceForge project page with user reviews</a></li>
<li class=""><a href="https://www.g2.com/products/freecad/reviews" target="_blank" rel="noopener noreferrer" class="">G2 peer reviews for FreeCAD</a></li>
</ul>]]></content>
        <author>
            <name>Yurii</name>
            <uri>https://cadautoscript.com</uri>
        </author>
        <category label="CAD" term="CAD"/>
        <category label="Automation" term="Automation"/>
        <category label="Release" term="Release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Excalidraw: a virtual napkin for engineers]]></title>
        <id>https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/</id>
        <link href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/"/>
        <updated>2025-12-05T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Why Excalidraw replaces heavyweight diagram tools for quick engineering sketches and script logic.]]></summary>
        <content type="html"><![CDATA[<blockquote>
<p>Why you can forget about Visio for quick diagrams.</p>
</blockquote>
<p>In engineering and office work, "heavy software" is a recurring drag. To draw a simple flowchart or script logic, we reach for Visio, Lucidchart, or even CAD. That is slow, costly, and overkill when ideas just need to land somewhere. Excalidraw fixes this with a fast, open-source, hand-drawn canvas that runs in the browser.</p>
<p>Below is how to integrate it into your workflow if you are an engineer or script developer.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="1-drawn-on-a-napkin-effect-lo-fi-prototyping">1) "Drawn on a napkin" effect (lo-fi prototyping)<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#1-drawn-on-a-napkin-effect-lo-fi-prototyping" class="hash-link" aria-label="Прямая ссылка на 1) &quot;Drawn on a napkin&quot; effect (lo-fi prototyping)" title="Прямая ссылка на 1) &quot;Drawn on a napkin&quot; effect (lo-fi prototyping)" translate="no">​</a></h2>
<ul>
<li class="">The intentionally rough, hand-drawn line style is a feature, not a bug.</li>
<li class="">Polished diagrams make people think the solution is "final" and nitpick fonts and alignment.</li>
<li class="">Draft-looking diagrams keep focus on logic and structure.</li>
<li class="">Use case: early requirements for automation scripts or plugin architecture. People suggest changes more freely to a draft.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="2-libraries-for-everything-engineering-and-it">2) Libraries for everything (engineering and IT)<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#2-libraries-for-everything-engineering-and-it" class="hash-link" aria-label="Прямая ссылка на 2) Libraries for everything (engineering and IT)" title="Прямая ссылка на 2) Libraries for everything (engineering and IT)" translate="no">​</a></h2>
<p>You do not draw components from scratch. Excalidraw ships with community libraries:</p>
<ul>
<li class="">Software design patterns: DBs, servers, queues for architecture sketches.</li>
<li class="">Arduino and Raspberry Pi: electronics pieces for IoT diagrams.</li>
<li class="">UI icons and blocks: for CAD plugin UI mockups.</li>
</ul>
<p>How: Click <strong>Library</strong> → <strong>Browse libraries</strong> → add what you need once and reuse.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="3-mermaid-support-text-to-diagram">3) Mermaid support (text-to-diagram)<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#3-mermaid-support-text-to-diagram" class="hash-link" aria-label="Прямая ссылка на 3) Mermaid support (text-to-diagram)" title="Прямая ссылка на 3) Mermaid support (text-to-diagram)" translate="no">​</a></h2>
<p>Prefer code over mouse? Excalidraw imports Mermaid.</p>
<ul>
<li class="">Write pseudocode/logic with branches.</li>
<li class="">Paste Mermaid text into Excalidraw.</li>
<li class="">It generates an editable, hand-drawn diagram automatically.</li>
</ul>
<p>Result: zero time on manual alignment.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="4-integrates-with-your-docs-obsidian-notion-vs-code">4) Integrates with your docs (Obsidian, Notion, VS Code)<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#4-integrates-with-your-docs-obsidian-notion-vs-code" class="hash-link" aria-label="Прямая ссылка на 4) Integrates with your docs (Obsidian, Notion, VS Code)" title="Прямая ссылка на 4) Integrates with your docs (Obsidian, Notion, VS Code)" translate="no">​</a></h2>
<p>Excalidraw files are JSON, not flat images.</p>
<ul>
<li class="">VS Code: official extension stores diagrams alongside code in the repo.</li>
<li class="">Obsidian: plugin embeds diagrams; text is indexed for search.</li>
</ul>
<p>Practical tip: export as <strong>.svg</strong> so diagrams scale without losing quality when embedded in docs or sites.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="5-instant-collaboration-without-registration">5) Instant collaboration without registration<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#5-instant-collaboration-without-registration" class="hash-link" aria-label="Прямая ссылка на 5) Instant collaboration without registration" title="Прямая ссылка на 5) Instant collaboration without registration" translate="no">​</a></h2>
<p>Need a quick remote review? No accounts required.</p>
<p>Steps: open <strong>excalidraw.com</strong> → <strong>Live Collaboration</strong> → share the link. Data is end-to-end encrypted; the server cannot read your drawing.</p>
<h2 class="anchor anchorTargetStickyNavbar_ESYw" id="summary">Summary<a href="https://cadautoscript.com/ru/blog/excalidraw-virtual-napkin/#summary" class="hash-link" aria-label="Прямая ссылка на Summary" title="Прямая ссылка на Summary" translate="no">​</a></h2>
<p>Do not launch heavy tools for quick thinking. Excalidraw covers ~90% of everyday needs for processes, network topologies, and script logic:</p>
<ul>
<li class="">Speed: starts in about 1 second.</li>
<li class="">Focus: discussion is about logic, not visual polish.</li>
<li class="">Integration: works where you write code and documentation.</li>
</ul>
<p>Try sketching your next algorithm here: <a href="https://excalidraw.com/" target="_blank" rel="noopener noreferrer" class="">https://excalidraw.com/</a></p>]]></content>
        <author>
            <name>CAD AutoScript</name>
            <uri>https://cadautoscript.com</uri>
        </author>
        <category label="Automation" term="Automation"/>
        <category label="CAD" term="CAD"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Headless CAD: Generating and Nesting DXF Flat Patterns via Chromium]]></title>
        <id>https://cadautoscript.com/ru/blog/headless-cad-chromium/</id>
        <link href="https://cadautoscript.com/ru/blog/headless-cad-chromium/"/>
        <updated>2025-12-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Traditional approaches to drawing generation rely heavily on bulky desktop software and proprietary APIs. The modern approach shifts the geometric kernel to the web.]]></summary>
        <content type="html"><![CDATA[<p>Traditional approaches to drawing generation rely heavily on bulky desktop software and proprietary APIs. The modern approach shifts the geometric kernel to the web.</p>
<p>In this article, we explore how to use the Chromium engine (via Puppeteer or Playwright) and JavaScript to automatically generate, validate, and nest DXF files.</p>
<!-- -->
<div class="theme-admonition theme-admonition-tip admonition_NGVh alert alert--success"><div class="admonitionHeading_BxRo"><span class="admonitionIcon_uqVo"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>Why Chromium?</div><div class="admonitionContent_NP9n"><p>For an engineer, a browser is not just a page viewer; it is a powerful vector rendering engine (SVG/Canvas) with hardware acceleration support.</p><p>Cross-platform: Generation works identically on Windows, Linux servers, and inside Docker containers.</p><p>Visual Debugging: You see exactly what goes to the machine.</p><p>Library Availability: The NPM ecosystem (Maker.js, OpenJSCAD) allows for 2D geometry manipulation faster than LISP or VBA.</p></div></div>
<p>Solution Architecture</p>
<p>The automation workflow for nesting or generating a flat pattern looks like this:</p>
<p>Frontend/Logic: A JS script generates part geometry (SVG path) based on parameters.</p>
<p>Engine (Chromium): The headless browser renders the geometry, calculates intersections (for nesting), or converts Bezier curves into arcs/polylines.</p>
<p>Output: Result serialization into DXF format.</p>
<p>Technical Implementation</p>
<p>Instead of drawing lines manually, we leverage the DOM for calculations.</p>
<p>Stack:</p>
<p>Node.js - Runtime environment.</p>
<p>Puppeteer - Headless Chromium control.</p>
<p>Maker.js - Library for CAD operations and DXF export.</p>
<p>Code Example (Node.js)</p>
<div class="language-js codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-js codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> puppeteer </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'puppeteer'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> fs </span><span class="token operator">=</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">require</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'fs'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">async</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 1. Launch a "clean" browser</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> browser </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> puppeteer</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">launch</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> page </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">newPage</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 2. Inject construction logic (e.g., box flat pattern)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// In a real project, maker.js would be injected here</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> dxfContent </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> page</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">evaluate</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token arrow operator">=&gt;</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// Assume makerjs is loaded in the page context</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> model </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">makerjs</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">models</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">Rectangle</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">100</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">50</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// Add holes or bend lines</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">const</span><span class="token plain"> hole </span><span class="token operator">=</span><span class="token plain"> </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">new</span><span class="token plain"> </span><span class="token class-name">makerjs</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">paths</span><span class="token class-name punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token class-name">Circle</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">[</span><span class="token number">10</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">10</span><span class="token punctuation" style="color:rgb(248, 248, 242)">]</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">5</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    makerjs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">addPath</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> hole</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'hole_1'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)">// Export to DXF string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">return</span><span class="token plain"> makerjs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token property-access">exporter</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">toDXF</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token literal-property property">units</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">'mm'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token comment" style="color:rgb(98, 114, 164)">// 3. Save file for production</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  fs</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">writeFileSync</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'flat-pattern.dxf'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> dxfContent</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token console class-name">console</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">log</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string" style="color:rgb(255, 121, 198)">'DXF generated successfully.'</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token keyword control-flow" style="color:rgb(189, 147, 249);font-style:italic">await</span><span class="token plain"> browser</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token method function property-access" style="color:rgb(80, 250, 123)">close</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">;</span><br></span></code></pre></div></div>
<p>Interactive Example</p>
<p>With MDX, you can even embed interactive elements directly in the post. Launch the DXF circle generator below, tweak the snippet, and download the updated DXF instantly:</p>
<div style="margin:2rem 0"><button type="button" class="button button--primary">Simulate DXF Export</button></div>
<p>Checking auth status…</p>
<p>Application for Nesting</p>
<p>Nesting algorithms (like SVGnest or Deepnest) require heavy geometry calculations. Running them within the Chromium environment allows the use of WebAssembly (WASM) modules. This accelerates part placement calculations significantly compared to pure JS and allows for immediate export to DXF.</p>
<p>Summary</p>
<p>Using Chromium for CAD tasks removes the dependency on server-side SolidWorks or AutoCAD licenses. This enables the construction of cloud configurations (CPQ) that deliver ready-to-cut files for laser cutting instantly.</p>]]></content>
        <author>
            <name>Yurii</name>
            <uri>https://cadautoscript.com</uri>
        </author>
        <category label="Chromium" term="Chromium"/>
        <category label="Node.js" term="Node.js"/>
        <category label="DXF" term="DXF"/>
        <category label="Automation" term="Automation"/>
        <category label="CAD" term="CAD"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Beyond Chatbots: LLMs in the Mechanical Engineering Workflow]]></title>
        <id>https://cadautoscript.com/ru/blog/ai-engineering-workflow/</id>
        <link href="https://cadautoscript.com/ru/blog/ai-engineering-workflow/"/>
        <updated>2025-12-02T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[We often hear about AI generating images or poetry. But for mechanical engineers and CAD designers, Large Language Models (LLMs) are not about creativity-they are about interface and automation.]]></summary>
        <content type="html"><![CDATA[<p>We often hear about AI generating images or poetry. But for mechanical engineers and CAD designers, Large Language Models (LLMs) are not about creativity-they are about interface and automation.</p>
<p>In this article, we look at how to use LLMs (GPT-4, Claude 3.5, Llama 3) to control CAD software and process technical data.</p>
<!-- -->
<div class="theme-admonition theme-admonition-tip admonition_NGVh alert alert--success"><div class="admonitionHeading_BxRo"><span class="admonitionIcon_uqVo"><svg viewBox="0 0 12 16"><path fill-rule="evenodd" d="M6.5 0C3.48 0 1 2.19 1 5c0 .92.55 2.25 1 3 1.34 2.25 1.78 2.78 2 4v1h5v-1c.22-1.22.66-1.75 2-4 .45-.75 1-2.08 1-3 0-2.81-2.48-5-5.5-5zm3.64 7.48c-.25.44-.47.8-.67 1.11-.86 1.41-1.25 2.06-1.45 3.23-.02.05-.02.11-.02.17H5c0-.06 0-.13-.02-.17-.2-1.17-.59-1.83-1.45-3.23-.2-.31-.42-.67-.67-1.11C2.44 6.78 2 5.65 2 5c0-2.2 2.02-4 4.5-4 1.22 0 2.36.42 3.22 1.19C10.55 2.94 11 3.94 11 5c0 .66-.44 1.78-.86 2.48zM4 14h5c-.23 1.14-1.3 2-2.5 2s-2.27-.86-2.5-2z"></path></svg></span>The Core Concept</div><div class="admonitionContent_NP9n"><p>LLMs are poor at spatial reasoning (they can't "imagine" a 3D assembly well). However, they are excellent at understanding the APIs of CAD software (SolidWorks, AutoCAD, Fusion 360) and writing the scripts to manipulate that geometry.</p></div></div>
<ol>
<li class="">Zero-Shot Macro Generation</li>
</ol>
<p>The biggest friction in CAD automation is looking up API documentation. Writing a VBA macro for SolidWorks or a Python script for Blender used to take hours of searching forums.</p>
<p>Modern LLMs have indexed these API docs. You can now prompt for functionality rather than syntax.</p>
<p>Real-world Use Case: Batch export all sheet metal components from an assembly to DXF.</p>
<p>Code Example (Python + pyautocad)</p>
<p>Instead of writing this from scratch, an engineer can generate this boilerplate instantly:</p>
<div class="language-python codeBlockContainer__w7k theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_iRMh"><pre tabindex="0" class="prism-code language-python codeBlock_ZIOp thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_XepP"><span class="token-line" style="color:#F8F8F2"><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">from</span><span class="token plain"> pyautocad </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">import</span><span class="token plain"> Autocad</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> APoint</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token comment" style="color:rgb(98, 114, 164)"># Generated by LLM to automate repetitive drawing tasks</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">def</span><span class="token plain"> </span><span class="token function" style="color:rgb(80, 250, 123)">draw_gear_profile</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">teeth</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> module</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    acad </span><span class="token operator">=</span><span class="token plain"> Autocad</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">create_if_not_exists</span><span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    radius </span><span class="token operator">=</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">teeth </span><span class="token operator">*</span><span class="token plain"> module</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"> </span><span class="token operator">/</span><span class="token plain"> </span><span class="token number">2</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    center </span><span class="token operator">=</span><span class="token plain"> APoint</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">0</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token comment" style="color:rgb(98, 114, 164)"># LLM understands specific engineering libraries</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    acad</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">model</span><span class="token punctuation" style="color:rgb(248, 248, 242)">.</span><span class="token plain">AddCircle</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token plain">center</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> radius</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token keyword" style="color:rgb(189, 147, 249);font-style:italic">print</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">f"Gear profile created: m</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">module</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)"> z</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token string-interpolation interpolation">teeth</span><span class="token string-interpolation interpolation punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token string-interpolation string" style="color:rgb(255, 121, 198)">"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">draw_gear_profile</span><span class="token punctuation" style="color:rgb(248, 248, 242)">(</span><span class="token number">20</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token number">2</span><span class="token punctuation" style="color:rgb(248, 248, 242)">)</span><br></span></code></pre></div></div>
<ol start="2">
<li class="">Parsing Legacy Data (PDF to JSON)</li>
</ol>
<p>Engineers deal with thousands of PDF datasheets and legacy 2D drawings. Extracting parameters (tolerance, material, weight) manually is error-prone.</p>
<p>Multimodal LLMs can "read" screenshots of technical drawings or tables and structure that data into JSON for your ERP or PDM system.</p>
<ol start="3">
<li class="">RAG for Standards (ISO/GOST/DIN)</li>
</ol>
<p>Instead of flipping through a 500-page PDF to find the bolt torque specification for an M12 grade 8.8 screw, you can build a RAG (Retrieval-Augmented Generation) system.</p>
<p>Input: "Torque for M12 8.8"</p>
<p>System: Retrieves specific page from uploaded ISO PDF.</p>
<p>Output: "81 Nm (Source: ISO 898-1, Table 4)"</p>
<p>Interactive Prompt Builder</p>
<p>Try this structure when asking an AI to write CAD scripts for you:</p>
<div class="theme-admonition theme-admonition-info admonition_NGVh alert alert--info"><div class="admonitionHeading_BxRo"><span class="admonitionIcon_uqVo"><svg viewBox="0 0 14 16"><path fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56 5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0 4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0 6H6v2h2v-2z"></path></svg></span>Prompt structure</div><div class="admonitionContent_NP9n"><p><strong>Context:</strong> "I am using SolidWorks 2023 API with VBA."</p><p><strong>Task:</strong> "Write a macro that traverses the feature tree."</p><p><strong>Constraint:</strong> "Identify all features with 'suppressed' state and unsuppress them."</p><button type="button" class="button button--primary"><p>Copy Structure</p></button></div></div>
<p>Summary</p>
<p>Don't ask the AI to design the part. Ask the AI to write the code that automates the boring parts of the design process. This shifts the engineer's role from "operator" to "architect of automation."</p>]]></content>
        <author>
            <name>Yurii</name>
            <uri>https://cadautoscript.com</uri>
        </author>
        <category label="AI" term="AI"/>
        <category label="LLM" term="LLM"/>
        <category label="Python" term="Python"/>
        <category label="SolidWorks" term="SolidWorks"/>
        <category label="Automation" term="Automation"/>
    </entry>
</feed>