Polygon fill algo?

Mark Waddingham mark at livecode.com
Tue Feb 16 02:23:44 EST 2021


On 2021-02-16 05:55, Richard Gaskin via use-livecode wrote:
> My expectation was almost beyond anything reasonable, but it would
> seem useful if there was some way to make it happen:  imagine if each
> segment within a list of discontiguous points was rendered as though
> it's a separate object, back to front.
> 
> It's not going to kill me to use separate graphics to hide the
> portions of the vertices I need covered, but it sure would have been
> nifty if I'd found a way to have a single poly object render as though
> it were many.

So the even-odd fill rule will not give you what you want - overlapping 
regions alternate.

The non-zero fill rule can give you what you want - but you need to make 
sure that all your sub-polygons go 'in the same direction'. (NB: Fixed 
width font ASCII art follows):

These two overlapping rects both go clock-wise so everything is filled.

   |--->---|
   |.......|
   |...|--->---|
   ^...|...|...|
   |...|...|...|
   |-- |---|...v
       |.......|
       |-------|

The left rect goes anti-clockwise and the right rect goes clockwise:

   |---<---|
   |.......|
   |...|--->---|
   v...|   |...|
   |...|   |...|
   |-- |---|...v
       |.......|
       |-------|

Notionally:
    - the non-zero winding rule works by starting on the left of each 
scanline and scanning to the right
    - there is a winding counter which starts at 0.
    - at any pixel, if the winding counter is non-zero the pixel is 
filled.
    - if an edge is crossed which goes 'down', the winding counter is 
decreased
    - if an edge is crossed which goes 'up', the winding counter is 
increased

Hope this helps!

Warmest Regards,

Mark.

-- 
Mark Waddingham ~ mark at livecode.com ~ http://www.livecode.com/
LiveCode: Everyone can create apps




More information about the use-livecode mailing list