Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

(Update: generation of a test-file added!)

svg2gcode (CNC Engrave & Cut in one SVG file)

Scripts for converting / batchprocessing of multilayerd inkscape SVG files into GCODE for variety of CNC progamms like laserGRBL

  • Input(1): Multilayered Inkscape SVG, where each Layer should be engraved/cut with different parameters
  • Input(2): Parameter setting file
  • Output: GCode to process directly in laserGRBL
  • Optional: The script can auto-generate supports (leaving tiny edge part so the object can not fall out upon cut)

If have a larger project, you can keep all parts in one file and only separate them through layers in pages. In this case, the script can generate a GCode file for each page.

Why?

For my CNC project, I work with inkscape and often want to have all parts and peeces to be in a single SVG file, where I can adjust and adapt the drawing without loosing the overview. However each part and peece can require own material and cutting/engraving parameters. For example I would like first to engrave parts and cut them after, but leaving small supports such that the parts do not fall off. This script package should do exactly this!

SVG structure

Input: (1)A multilayered SVG file. Each root layers name correspond to a material (For example Wood/Sturofoam/Glas etc.) as defined by user. Each material-layer can contain multiple page-layers. Each page layer can contains multiple procedure layers (example: Cut/Engrave/Write etc.) as defined by user.

input.svg

  • |-Material - Layer (Wood/Sturofoam/etc.)
  • | |-PageNr - Layer
  • | |-Procedure -Layer (Cut/Engrave/etc.)
  • | object1
  • | objectn
  • |-Material2 ...

(2) A set of rules of how to parametrize a particular material-procedure combination. Parameters include feed, laser strength, passes, whether support should be added to cutting peeces, etc.

Output: For each page-layer a GCODE fiel is generated where all procedure layers are merged into one. Thus a page can be carried out at once.

Pre-Requisites

  • inkscape for the program to easily design of parts in SVG
  • LaserGRBOr othe CGode programm
  • Install Python (e.g simplest through Anaconda)

Installation

  • (2) Download/clone the project
  • (3) Install python dependencies: pip install -r requirements.txt
  • (4) Done

After installation just run the toy example with supplied toy.svg and material.ini:

python main.py --file toy.svg --configfile=material.ini --tempfolder tmp --outputfolder toyresult -v True

The output will be stored into the folder "toyresult" page by page.

Open and use any generated GCode file from "toyresult" in your CNC programm (like laserGRBL)

Setting Details

The Layers of the SVG should be in Hierachy: Material->Page->Porcess. The ini file should have a section for each Material-Process pair with parameters as follows:

  • [Wood1mm.Cut] #Format Material.Procedure
  • speed=300 # The F parameter of the GCode - determines the cutting speed (or feed) in mm/min
  • strength=950 # The S aprameter of the GCode - determines the laser strength (0-1000)
  • support_gap=1 # If present, the support gaps will be added automatically to each cut. The value determins the length of support in mm.
  • support_strength=0 # Determins the laser strength (S) when cutting the sipport part (0(laser off) - 1000 (laser 100%)).
  • repeat=2 # Times the process should be repeat. whilst engraving typically does not need this, cutting my often need more then 1 pass.

Known issues/limitations:

The software is highly experimental, I had to learn many things by doing and I had to do it fast. The code is a mess. The names of the parametrers are not standartized and should be renamed in the futute (e.g "speed" and "strength" should become "F" and "S", respectively)

The software may have issues. Please check the generated output (even better would be to simulate ) before cutting Example simulator: https://ncviewer.com/

Generation of a Test-File

Often you want to test, how your laser would cut at different settings. Typically ypu want to cat as fas as possible with slightly reduced laser (to keep it living longer) and you want to achive particular cut-depth. To do this, the best way is to generate a test file that will cut at different settings on a test sheet that you can use later to read the parameters you need. Something like:

Where each block corresponds toa particular S (laser stregth) and each circle is cut at different F (head moving speed) This can be done now. Just define the S sections and corresponding F sequence in "ovaltest.ini" amnd execute:

python testmaker.py -c ovaltest.ini -o ovaltest

The resulting files will be written to "ovaltest/input_oval/Material/Page01.input_oval.Material.gcode" Automatically generated SVG ("input_oval.svg") and cut-setting (input_oval_settings.ini) can be viewed as well in the folder "ovaltest"

CREDITS:

About

Scripts for manipulating / batchprocessing of SVG files into "multi-layered", "multi-passed" "auto-supported-parts" Gcode for variety of CNC progamms like laserGRBL

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages