anchor.diff:  function TSliceGeometryIC.GenerateTileCalc(const aExtent: TExtent; aBitmap: FMX.Graphics.TBitmap; aPixelWidth, aPixelHeight: Double): TGenerateTileStatus;
   var
     isgop: TPair<TWDID, TSliceGeometryICObject>;
  -  polygon: TPolygon;
     capacityFactor: Double;
  -  // polygon drawing
  -  part: TWDGeometryPart;
  -  point: TWDGeometryPoint;
  -  x, y, xPrev, yPrev{, xn, yn}: Double;
  +  path: TPathData;
     bufferExtent: TExtent;
     colors: TGeoColors;
   begin
  
positive.code:           if bufferExtent.Intersects(isgop.Value.fExtent) then
            begin
              colors := fPalette.ValueToColors(isgop.Value.texture);
              aBitmap.Canvas.Stroke.Color := colors.mainColor;
  
              // geometry is multi line, create polygons to right with width based on capacity
              setLength(polygon, 5); // will auto close so only 4 points needed
              for part in isgop.Value.fGeometry.parts do
              begin
                x := NaN;
                for point in part.points do
                begin
                  // recalc coordinates relative to extent and in pixels
                  xPrev := x;
                  yPrev := y;
                  x := (point.X-aExtent.XMin)/aPixelWidth;
                  y := (aExtent.YMax-point.Y)/aPixelHeight;
                  if not IsNaN(xPrev) then
                  begin
                    aBitmap.Canvas.StrokeThickness := isgop.Value.value*capacityFactor;
                    if colors.fillColor<>0
                    then aBitmap.Canvas.DrawLine(TPointF.Create(xPrev, yPrev), TPointF.Create(x,y), 1);
                    if colors.outlineColor<>0
                    then aBitmap.Canvas.DrawPolygon(polygon, 1);
                  end;
                end;
              end;
  
            end;
          end;
        finally
  
negative.code: begin
    // recalc extent
    fMaxExtent := fCurrentSlice.fMaxExtent.Intersection(fRefSlice.fMaxExtent);
    fDataVersion := fDataVersion+1; // trigger new set of tiles in cache
    fLayer.signalRefresh(timeStamp);
  end;
  
  