Decals resp. polygons with holes

Hi!

I’ve created a logo for my PCBs using Inkscape - like the Horizon Docs recommend.
But can’t create polygons that have holes.

Any tips how to fix the letter “e”?

Cheers,
jue

The problem is that polygons don’t support holes. To work around this limitation, remove the hole in inkscape as such:

e

Thank you for your reply! I tried to adapt to your approach and created little tool, that converts many polygons into one. So I’m able to go inside the polygon and create holes.

The idea seems to work, but Horzion doesn’t render this correctly. See the picture below: on the left side you can see my example decal. On the right side you see the correctly rendered Gerber.

The source of my decal:

{
    "arcs": {},
    "junctions": {},
    "lines": {},
    "name": "",
    "polygons": {
        "db335df2-3559-479e-896b-4ab4a479d306": {
            "layer": 20,
            "parameter_class": "",
            "vertices": [
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        5000000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -3750000,
                        3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -3750000,
                        -3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        3750000,
                        -3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        3750000,
                        3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -2500000,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -2500000,
                        1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        2500000,
                        1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        2500000,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        -1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -2500000,
                        -1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -2500000,
                        -2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        2500000,
                        -2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        2500000,
                        -1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        -1250000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        2500000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        3750000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        0,
                        5000000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -5000000,
                        5000000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        -5000000,
                        -5000000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        5000000,
                        -5000000
                    ],
                    "type": "line"
                },
                {
                    "arc_center": [
                        0,
                        0
                    ],
                    "arc_reverse": false,
                    "position": [
                        5000000,
                        5000000
                    ],
                    "type": "line"
                }
            ]
        }
    },
    "texts": {},
    "type": "decal",
    "uuid": "db476f85-001f-49c1-a4f8-9e3f9d4ca7ca"
}

Is this a bug? Or am I abusing something here?

FYI - I’ve fallen in a deep rabbit hole and learned a lot about polygons … well and I tried to implement a sweep line algorithm, which splits the polygon into segments. I still have to find a bug, but the idea seems to work :slight_smile:

Currently, it’s pure JavaScript and I plan to come up with a SVG Path to Horizon EDA Decal online converter.