# Shaper Origin SVG Export

**URL:** <https://discourse.mcneel.com/t/shaper-origin-svg-export/135841>\
**Category:** Plugins\
**Created:** [January 5, 2022, 2:17am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841 "2022-01-05T02:17:29Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 5, 2022, 2:17am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/1 "2022-01-05T02:17:29Z")

</div>

I’ve been working on a plug-in to support the [Shaper Origin handheld CNC router](https://www.shapertools.com/en-us/) from within Rhino 7. Shaper Origin reads specifically formatted SVG files to do the cutting.

Because naming things is hard, and fun, the **ShaperSVG** command is in my **TunaHalf** plug-in. TunaHalf may someday include more tools for Two-and-a-half-D fabrication.

## Downloading TunaHalf

1. Install Rhino 7 (a non-expired eval will work)
2. Click [rhino://package/search?name=tunahalf](rhino://package/search?name=tunahalf)
3. Rhino will start, open the PackageManager, and show you the TunaHalf plug-in.
4. Select TunaHalf, then click **Install**
5. Restart Rhino

## Using ShaperSVG export

1. Model a part that you want to cut.
2. Run the **ShaperSVG** command in Rhino
3. Select the top surface of the part you want to cut. The top surface will be the un-cut surface of your workpiece.
4. (Optional) Select curves to engrave. Use curves to path trace for engraving.
5. Enter the SVG filename.
6. Upload the SVG file to [https://hub.shapertools.com/](https://hub.shapertools.com/), then download to your router.

## Features

ShaperSVG export detects holes, pockets, part outlines, and engraving curves. Pocket depths are added as non-cutting annotation geometry in the SVG file, and as attributes in the XML, in case Shaper Origin supports them in the future.

## Examples

1. Gnocchi/Cavatelli Pasta Texture Plate  
 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/5/8/7/5878d3bfcb90c02fd77c81059929d93dcfce568d.png)  
 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/9/e/3/9e343c428f2f5c6da99c7fd6d38822868ff9f057.jpeg)  
Engrave these curves into a piece of wood, then make tasty, fun-shaped pasta (pasta recipe not included).  
[plate3.svg.zip](https://discourse.mcneel.com/uploads/short-url/xkI2uCCpQOYyD1ofID2KKBdd3e8.zip) (9.0 KB)
2. 2003 Subaru Forester Camshaft Tool  
 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/b/c/4/bc44412c561c4b0612e82659bf373691cf201f83.png)  
[camshaft removal tools.zip](https://discourse.mcneel.com/uploads/short-url/96UY1AA4zW5opAL9CpSV4vjqyWT.zip) (133.3 KB) was useful in Dec 2021 when replacing the cylinder head gaskets on my son’s car. Why buy specialty tools from Subaru when you can cut them out of a 2x4? 3DM file and SVG files included in the zip archive.

## Share your work!

Please post in [the gallery](https://discourse.mcneel.com/c/gallery/46) and use the tag #ShaperSVG

## What? A bug?

Please tell me about it. Reply in this thread, or create a new one. Please attach your 3DM file, the SVG file, and a description of what didn’t work. I won’t be able to debug much from screen shots.

---

<div class="post-metadata">

**Author:** ![FlorianMeigel](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/florianmeigel/32/350880_2.png) [@FlorianMeigel](https://discourse.mcneel.com/u/FlorianMeigel)\
**Post date:** [January 7, 2022, 5:52pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/2 "2022-01-07T17:52:32Z")

</div>

Hey @brian

I have been working with the Shaper Origin since early 2019 and have been using Rhino since early 2021. So, I’m really happy that an .svg export from Rhino optimized for the Origin is now possible!

Keep up the good work. I really enjoy working with Rhino!

At the moment I have some difficulties:  
After the ShaperSVG export, a duplicate of the exported object is created and several points are positioned at random on the object.

 ![1](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/e/6/0/e60d804c26aef57f8953724c2c7297ed370ee51f.png)  
 ![2](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/9/1/f/91f384fec97746b7aab5354e00918568536b527f.png)

The cutting depths shown as guide lines (which is a great feature by the way) are shown in the .svg illegibly small.

 ![3](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/6/1/a/61abc6995441290a291eb9e1eba23f58133cbde4.png)

Even after several attempts with different objects, the .svg could not be detected by the origin.  
It is possible, of course, that the mistake is my fault. Still, I hope to be able to help. Attached is the 3DM file, SVG, and the error message of the Origin.

 ![4](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/e/d/2/ed29fcaa1c6b042b8d7a76cfb62ed48a23255875.jpeg)  
_“design could not be placed. Check the file format. Contact support@shapertools. com if you still have problems”_

Kind regards, Florian

![TEST file](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/e/3/3/e3315e0092a4d63b363f1a4d1a6a1f96e11a1d8e.svg)  
[TEST file.3dm](https://discourse.mcneel.com/uploads/short-url/99SuIewuy8ruwxuAh0aCjEju0PD.3dm) (433.8 KB)

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 8, 2022, 12:13am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/3 "2022-01-08T00:13:42Z")

</div>

Thanks for the bug report; I’ll have a new build out shortly that uses a completely different pocket and hole detection algorithm, and won’t duplicate the objects and points.

Once I have the new algorithm in place, I’ll try your model and fix whatever bugs remain.

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 9, 2022, 6:15am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/4 "2022-01-09T06:15:25Z")

</div>

**TunaHalf build 0.1.8043 is now released**

To install:

1. Click [rhino://package/search?name=tunahalf](rhino://package/search?name=tunahalf)
2. Click **Update** (or Install, if you haven’t already installed)

**New in 0.1.8043:**

- **ShaperSVG** outputs SVG files in either mm, cm, or inch units (scaling geometry as appropriate if your Rhino model is in feet or meters or some other unit system.) @FlorianMeigel I believe this is what caused problems with your model (your model was in millimeters but the SVG was written with units of inches. This made your model way too big for Origin, and resulted in microscopic pocket depth text.)
- **ShaperSVG** does a better job finding holes in non-planar surface geometry. The last version missed one of these three holes:  
 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/3/e/c/3ec2f2165e503a9625bf53cc801ac8c6c9f50aad.jpeg)
- **ShaperSVG** incorrectly duplicated geometry at the model origin, and created extra point objects. This was the result of debugging code being left in during export.

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 9, 2022, 7:11am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/5 "2022-01-09T07:11:44Z")

</div>

> [@FlorianMeigel](#):
>
> I have been working with the Shaper Origin since early 2019 and have been using Rhino since early 2021. So, I’m really happy that an .svg export from Rhino optimized for the Origin is now possible!

Florian, it’s great to have you helping try out this early, early prototype of an exporter. I just watched this [YouTube video describing your Shaper in Residence](https://www.youtube.com/watch?v=Pn3uGLuPh5E&ab_channel=Shaper). How exciting! It’s cool to see that you’re the person behind this joint, which I’ve seen several times and adored - I can’t wait to give it a try 😃

 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/6/d/d/6dd6f71cf38392264d8570e4030e72e616a4faa1.jpeg)

I look forward to seeing what kind of challenges you can throw at this! This part still doesn’t export properly. It’s amazing how easy it is for humans to see what’s supposed to happen here, but so much harder to detect with code! From the top, this is a pocket - either half way or 3/4 of the way through the stock.

 ![image](https://global.discourse-cdn.com/mcneel/uploads/default/original/4X/2/6/4/26420b5c1a273ac611bcc6d95278d12eaf796d72.jpeg)

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 17, 2022, 11:51pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/6 "2022-01-17T23:51:43Z")

</div>

**TunaHalf build 0.1.8052 is now released**

To install:

1. Click [rhino://package/search?name=tunahalf](rhino://package/search?name=tunahalf)
2. Click **Update** (or Install, if you haven’t already installed)

**New in TunaHalf 0.1.8052:**

1. Updated SVG formatting, including:
  1. Comment at the top of the file indicating the software that wrote the SVG.
  2. Stroke removed from black perimeter areas.
  3. Blue annotation showing depth of cut are grouped together to aid manual editing of files.
  4. Pockets are grouped with blue annotation text to aid manual editing of files.

2. New algorithm for detecting pockets. This does a good job in all the cases I’ve tried, except when there are chamfers on the sides of objects. I have an idea about how to fix this for the next version. The example in my previous post works well now.

Please give it a shot, and let me know if you see problems.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [January 26, 2022, 10:34am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/7 "2022-01-26T10:34:27Z")

</div>

Hello Brian,  
I just came across the SVG export plugin for Shaper Origin.

I have the problem that I get to the save dialog but no SVG file is generated?

What am I doing wrong?

Thanks in advance.  
Many greetings  
Peter

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 26, 2022, 7:26pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/8 "2022-01-26T19:26:38Z")

</div>

It might be that the geometry is causing an exception in Rhino, and the file isn’t being written. Can you please send me the 3dm file you’re trying to save? If you can’t post it publicly, please send me a DM here.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [January 26, 2022, 8:30pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/9 "2022-01-26T20:30:29Z")

</div>

Here I am sending you the file.  
Units are in millimeters  
[Deckplatte.3dm](https://discourse.mcneel.com/uploads/short-url/hZCfRDHGkX8LeaCCWK3AGgaF2Ig.3dm) (335.3 KB)

Many thanks for your help.

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 28, 2022, 11:30pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/10 "2022-01-28T23:30:56Z")

</div>

**TunaHalf build 0.2.1 is now released**

To install:

1. Click [rhino://package/search?name=tunahalf](rhino://package/search?name=tunahalf)
2. Click **Update** (or Install, if you haven’t already installed)

**New in TunaHalf 0.2.1**

1. Fixed a bug that @Peter_v_Stackelberg reported that caused an an infinite loop, and therefore no SVG file.

Please give it a shot, and let me know if you see problems.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [January 29, 2022, 12:00pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/11 "2022-01-29T12:00:54Z")

</div>

Hi Brian, thank you for the message.

Unfortunately, I still can’t save an SVG file.

I am sending you a new very simple test file here.

Maybe I’m just doing the wrong preparation?

1. I run the “ShaperSvg” command

2. I choose the zero plane (support plane for the milling machine)

3. I pick the edges to cut one by one.

4. In the save dialog I specify the path and the file name.

5. No corresponding file can then be found in the folder!?

Best regards, Peter

[Testdatei.3dm](https://discourse.mcneel.com/uploads/short-url/ligytLzJgJ5OQremQvDfqTh4TeQ.3dm) (110 KB)

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [January 31, 2022, 7:42pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/12 "2022-01-31T19:42:18Z")

</div>

Thanks for the description. What happens if you just press Enter when asked for curves? The intention (though this may be unclear) is that the curves are for engraving. If you press Enter instead of selecting curves, it might just work.

I wonder if I’m also being bitten by writing code that isn’t working in German when formatting strings. I’ll look.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [February 1, 2022, 9:57am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/13 "2022-02-01T09:57:03Z")

</div>

Ich habe es gerade genau so durchgeführt, wie Sie beschrieben haben.  
Leider wird immer noch keine SVG-Datei generiert.

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [February 2, 2022, 12:49am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/14 "2022-02-02T00:49:53Z")

</div>

Danke schön. My German is terrible, so I’m going to rely on Google Translate, and reply in English 😃

Let me publish a new version that has better error handling in it. It’ll pop up a big unhelpful (to you) error message that will likely be helpful to me when fixing this.

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [February 2, 2022, 2:05am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/15 "2022-02-02T02:05:36Z")

</div>

**TunaHalf build 0.2.2 is available**

To install:

1. Click [rhino://package/search?name=tunahalf](rhino://package/search?name=tunahalf)
2. Click **Update** (or Install, if you haven’t already installed)

**New in TunaHalf 0.2.2**

1. Better error reporting when something goes wrong.

@Peter_v_Stackelberg please give this build a try and send me the stack trace that should appear in a dialog box when things go wrong.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [February 2, 2022, 9:50am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/16 "2022-02-02T09:50:08Z")

</div>

I installed the update.  
The procedure:  
1.) “shaper svg” command  
2) Selection of the object surface  
3) save dialog  
4) No file is generated again.

Text from the new report field:  
" at TunaHalf.FeatureDetection.DetectOuterBoundary(Brep brep)  
at TunaHalf.FeatureDetection.DetectFeatures(Brep b, List`1& boundaries, List`1& pockets, List`1& holes, List`1& pocket\_depths)  
at TunaHalf.ShaperOriginCommand.RunCommand(RhinoDoc doc, RunMode mode)"

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [February 3, 2022, 5:22pm UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/17 "2022-02-03T17:22:17Z")

</div>

2 posts were split to a new topic: [SVG Export of Circles is Distorted](https://discourse.mcneel.com/t/svg-export-of-circles-is-distorted/137391)

---

<div class="post-metadata">

**Author:** ![brian](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/brian/32/504171_2.png) [@brian](https://discourse.mcneel.com/u/brian)\
**Post date:** [February 4, 2022, 4:59am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/18 "2022-02-04T04:59:52Z")

</div>

@Peter_v_Stackelberg is that all of the message? It seems like there’s perhaps something immediately before that that may help me understand the problem.

---

<div class="post-metadata">

**Author:** ![Peter\_v\_Stackelberg](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/peter_v_stackelberg/32/354758_2.png) [@Peter\_v\_Stackelberg](https://discourse.mcneel.com/u/Peter_v_Stackelberg)\
**Post date:** [February 4, 2022, 7:07am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/19 "2022-02-04T07:07:53Z")

</div>

I repeated the process:

"Please copy and paste the text below, and post the error and your model at  
[https://discourse.mcneel.com/t/shaper-origin-svg-export/](https://discourse.mcneel.com/t/shaper-origin-svg-export/)

bei TunaHalf.FeatureDetection.DetectOuterBoundary(Brep brep)  
bei TunaHalf.FeatureDetection.DetectFeatures(Brep b, List`1& boundaries, List`1& pockets, List`1& holes, List`1& pocket\_depths)  
bei TunaHalf.ShaperOriginCommand.RunCommand(RhinoDoc doc, RunMode mode)"  
[shapersvg\_screenshots.pdf](https://discourse.mcneel.com/uploads/short-url/t1OLXdroENakao7ODi7ak4u078w.pdf) (1.4 MB)

---

<div class="post-metadata">

**Author:** ![Eric\_Goossen](https://sea3.discourse-cdn.com/mcneel/user_avatar/discourse.mcneel.com/eric_goossen/32/167667_2.png) [@Eric\_Goossen](https://discourse.mcneel.com/u/Eric_Goossen)\
**Post date:** [February 16, 2022, 2:05am UTC](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841/20 "2022-02-16T02:05:37Z")

</div>

Hey, I just downloaded the plugin but keep getting this bug report. Thanks!

at TunaHalf.FeatureDetection.DetectOuterBoundary(Brep brep)  
at TunaHalf.FeatureDetection.DetectFeatures(Brep b, List`1& boundaries, List`1& pockets, List`1& holes, List`1& pocket\_depths)  
at TunaHalf.ShaperOriginCommand.RunCommand(RhinoDoc doc, RunMode mode)

[Next page](https://discourse.mcneel.com/t/shaper-origin-svg-export/135841.md?page=2)
