hatched icon indicating copy to clipboard operation
hatched copied to clipboard

Shapely error

Open mssmison opened this issue 4 years ago • 8 comments

I'm running into this error:

ERROR:shapely.geos:TopologyException: Input geom 0 is invalid: Ring Self-intersection at or near point 96 320 at 96 320 Error: The operation 'GEOSDifference_r' could not be performed. Likely cause is invalidity of the geometry <shapely.geometry.polygon.Polygon object at 0x00000268A8F91DF0>

mssmison avatar Apr 15 '21 04:04 mssmison

Hello, could you provide the exact command used as well as the image in question?

abey79 avatar Apr 15 '21 16:04 abey79

Hi, You bet!

vpype hatched --levels 64 128 192 -s 0.5 -p 4 starwars.jpg layout a4 show

starwars

mssmison avatar Apr 16 '21 02:04 mssmison

Good day, Have you had a chance to review this issue? I've tried a couple more images and am getting a similar error.

On Thu., Apr. 15, 2021, 9:55 a.m. Antoine Beyeler @.***> wrote:

Hello, could you provide the exact command used as well as the image in question?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/plottertools/hatched/issues/3#issuecomment-820582044, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABUNMOBW2UNGZHQX256ZYLTI4K6LANCNFSM426UZW6Q .

mssmison avatar Apr 22 '21 17:04 mssmison

Sorry for the response time.

This plug-in is indeed not very robust and this crash happens when the computed "zone" are geometrically too complex. It wouldn't be very difficult to improve but this is unfortunately rather low in my priority list.

The easiest way to deal with these errors is to use the --blur parameter, e.g.:

vpype hatched --levels 64 128 200  -b 20 -p 4 -d starwars.jpg
image

Changing the levels can also help since the zone geometry is largely affected by them. Note that I use the -d parameter so hatched displays a "debug" view of the zones.

abey79 avatar Apr 28 '21 09:04 abey79

No need to apologize! Thank you very much for sharing your work to begin with.

Cheers!

On Wed., Apr. 28, 2021, 2:11 a.m. Antoine Beyeler @.***> wrote:

Sorry for the response time.

This plug-in is indeed not very robust and this crash happens when the computed "zone" are geometrically too complex. It wouldn't be very difficult to improve but this is unfortunately rather low in my priority list.

The easiest way to deal with these errors is to use the --blur parameter, e.g.:

vpype hatched --levels 64 128 200 -b 20 -p 4 -d starwars.jpg

[image: image] https://user-images.githubusercontent.com/49431240/116377835-dff1ac80-a811-11eb-93c9-121d56ca2048.png

Changing the levels can also help since the zone geometry is largely affected by them. Note that I use the -d parameter so hatched displays a "debug" view of the zones.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/plottertools/hatched/issues/3#issuecomment-828292237, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABUNMINEW6F2FUKEHQ5X6LTK7GMPANCNFSM426UZW6Q .

mssmison avatar Apr 28 '21 13:04 mssmison

Hi @abey79 I don't mind taking this one next. But I have no idea on the process to fix it. If you give me some lights I can pick this up and try to fix it

mariana-s-fernandes avatar Feb 18 '22 20:02 mariana-s-fernandes

@mariana-s-fernandes Honestly, I don't recall what I had in mind when I wrote the comment above. Basically these errors arise when the shape of the various zones become too complex and somehow result in some invalid Shapely polygon. Smoothing the input image helps by simplifying the zones and reducing the risk of them becoming invalid for Shapely.

Properly handling this probably entails:

  1. Properly detecting the situation (e.g. checking for .valid at various steps, possibly identifying the nature of invalidity).
  2. Fixing the shape. This is much tricker and I don't think there is any single good way of doing it. Maybe doing a tiny bit of double buffer (with positive then negative offset)? Maybe delete some probably-useless, tiny polygons from the input?

abey79 avatar Feb 19 '22 10:02 abey79

I have run the code above using the new hatched version (with the shapely updates) and I don't get the error. But I will test with other examples

mariana-s-fernandes avatar Feb 19 '22 11:02 mariana-s-fernandes