OpenOrienteering / mapper

OpenOrienteering Mapper is a software for creating maps for the orienteering sport.
https://www.openorienteering.org/apps/mapper/
GNU General Public License v3.0
400 stars 106 forks source link

cut-hole tool behaviour is xor like #322

Closed dg0yt closed 9 years ago

dg0yt commented 10 years ago

dl3sdo reported on Sourceforge [tickets:#322]:

Applying the cut-hole tool works different than expected, see attached omap. If the hole is not completely inside the area (left side), the result is an xor If the hole is applied to overlapping areas (right side) is either fails completely or does an xor.

Attachments (on Sourceforge):

dg0yt commented 10 years ago

dl3sdo posted on Sourceforge:

If the 'cutout' circle is drawn outside the area, consequently a filled circle is drawn instead.

dg0yt commented 10 years ago

Diff:


--- old
+++ new
@@ -1,3 +1,3 @@
-Applying the cutout tool works different than expected, see attached omap.
-If the cutout is not completely inside the area (left side), the result is an xor
-If the cutout is applied to overlapping areas (right side) is either fails completely or does an xor.
+Applying the cut-hole tool works different than expected, see attached omap.
+If the hole is not completely inside the area (left side), the result is an xor
+If the hole is applied to overlapping areas (right side) is either fails completely or does an xor.
dg0yt commented 10 years ago

Actually, this is the cut-hole tool.

At the moment, this tool simply adds another segment to an existing path This works like cut-hole for some cases, but in general the outcomes is defined by the fill rule Qt::OddEvenFill. See Qt::FillRule, QPainterPath details.

As an alternative (which might be what ordinary users expect) the tool could use the boolean difference (cf. Area-difference tool) to remove parts of the original object.

However, experimenting with the example map shows that the boolean tools (for the proposed alternative: area-difference tool; from the original report: cutout tool) suffer from insufficient integration between Mapper and the Clipper polygon library. Various boolean operations result in incorrect outcomes and issue this warning:

:::text
BooleanTool::rebuildSegment: end error too high in decreasing general case: [some number]
dg0yt commented 10 years ago
dg0yt commented 10 years ago