anchor.diff:                        end;
                       end;
                     end;
  -                    (*
  -                    end
  -                    else
  -                    begin
  -                      // draw centered line around path with capacity as width
  -                      if IsNaN(isgop.Value.value) then
  -                      begin
  -                        xn := 0.5*{(1+}isgop.Value.value2*capacityFactor{)}*xn/l;
  -                        yn := 0.5*{(1+}isgop.Value.value2*capacityFactor{)}*yn/l;
  -                      end
  -                      else
  -                      begin
  -                        xn := 0.5*{(1+}isgop.Value.value*capacityFactor{)}*xn/l;
  -                        yn := 0.5*{(1+}isgop.Value.value*capacityFactor{)}*yn/l;
  -                      end;
  -
  -                      polygon[0].X := xPrev-xn;
  -                      polygon[0].Y := yPrev-yn;
  -                      polygon[1].X := x-xn;
  -                      polygon[1].Y := y-yn;
  -                      polygon[2].X := x+xn;
  -                      polygon[2].Y := y+yn;
  -                      polygon[3].X := xPrev+xn;
  -                      polygon[3].Y := yPrev+yn;
  -                      polygon[4].X := xPrev-xn;
  -                      polygon[4].Y := yPrev-yn;
  -
  -                      // draw
  -                      if colors.fillColor<>0 then
  -                      begin
  -                        aBitmap.Canvas.Fill.Color := colors.fillColor;
  -                        aBitmap.Canvas.FillPolygon(polygon, 1);
  -                      end;
  -                      if colors.outlineColor<>0 then
  -                      begin
  -                        aBitmap.Canvas.Stroke.Color := colors.outlineColor;
  -                        aBitmap.Canvas.DrawPolygon(polygon, 1);
  -                      end;
  -                    end;
  -                  end;
  -                  *)
                   end;
                 end;
               end;
  
positive.code: var
    isgop: TPair<TWDID, TSliceGeometryObject>;
    path: TPathData;
  begin
    aBitmap.Canvas.BeginScene;
    try
      aBitmap.Canvas.Clear(0);
      aBitmap.Canvas.Fill.Kind := TBrushKind.Solid;
      fDataLock.BeginRead;
      try
        for isgop in fGeometries do
        begin
          if aExtent.Intersects(isgop.Value.fExtent) then
          begin
            path := GeometryToPath(aExtent, aPixelWidth, aPixelHeight, isgop.Value.fGeometry);
            try
              if Assigned(fPalette)
              then aBitmap.Canvas.Stroke.Color := fPalette.ValueToColors(isgop.Value.value).mainColor
              else aBitmap.Canvas.Stroke.Color := TAlphaColorRec.Blue or TAlphaColorRec.Alpha;
              //aBitmap.Canvas.StrokeThickness := 2; // todo: default width?
              aBitmap.Canvas.Stroke.Thickness := 2;
              aBitmap.Canvas.DrawPath(path, 1);
            finally
              path.Free;
  
negative.code:     try
        aBitmap.Canvas.Clear(0);
        aBitmap.Canvas.Fill.Kind := TBrushKind.Solid;
        bufferExtent := aExtent.Inflate(1.2); // todo: radius is taken into account in extent of TSliceLocationObject so this should not be necessary
        for isgop in fLocations do
        begin
          if bufferExtent.Intersects(isgop.Value.fExtent) then
  