Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue #5508 - Revived ANTIALIAS keyword in STYLE section #6225

Merged
merged 3 commits into from
Feb 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 15 additions & 27 deletions mapagg.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,6 @@
#include <pixman.h>
#endif

#ifdef AGG_ALIASED_ENABLED
#include "renderers/agg/include/agg_renderer_primitives.h"
#include "renderers/agg/include/agg_rasterizer_outline.h"
#endif

typedef mapserver::order_bgra band_order;

#define AGG_LINESPACE 1.33
Expand All @@ -89,16 +84,13 @@ typedef mapserver::rendering_buffer rendering_buffer;
typedef mapserver::renderer_base<pixel_format> renderer_base;
typedef mapserver::renderer_base<compop_pixel_format> compop_renderer_base;
typedef mapserver::renderer_scanline_aa_solid<renderer_base> renderer_scanline;
typedef mapserver::renderer_scanline_bin_solid<renderer_base> renderer_scanline_aliased;
typedef mapserver::rasterizer_scanline_aa<> rasterizer_scanline;
typedef mapserver::font_engine_freetype_int16 font_engine_type;
typedef mapserver::font_cache_manager<font_engine_type> font_manager_type;
typedef mapserver::conv_curve<font_manager_type::path_adaptor_type> font_curve_type;
typedef mapserver::glyph_raster_bin<color_type> glyph_gen;

#ifdef AGG_ALIASED_ENABLED
typedef mapserver::renderer_primitives<renderer_base> renderer_primitives;
typedef mapserver::rasterizer_outline<renderer_primitives> rasterizer_outline;
#endif
static color_type AGG_NO_COLOR = color_type(0, 0, 0, 0);

#define aggColor(c) mapserver::rgba8_pre((c)->red, (c)->green, (c)->blue, (c)->alpha)
Expand All @@ -116,11 +108,6 @@ class AGG2Renderer
public:

AGG2Renderer()
#ifdef AGG_ALIASED_ENABLED
:
m_renderer_primitives(m_renderer_base),
m_rasterizer_primitives(m_renderer_primitives)
#endif
{
stroke = NULL;
dash = NULL;
Expand All @@ -146,10 +133,7 @@ class AGG2Renderer
renderer_base m_renderer_base;
compop_renderer_base m_compop_renderer_base;
renderer_scanline m_renderer_scanline;
#ifdef AGG_ALIASED_ENABLED
renderer_primitives m_renderer_primitives;
rasterizer_outline m_rasterizer_primitives;
#endif
renderer_scanline_aliased m_renderer_scanline_aliased;
rasterizer_scanline m_rasterizer_aa;
rasterizer_scanline m_rasterizer_aa_gamma;
mapserver::scanline_p8 sl_poly; /*packed scanlines, works faster when the area is larger
Expand Down Expand Up @@ -201,16 +185,16 @@ int agg2RenderLine(imageObj *img, shapeObj *p, strokeStyleObj *style)
AGG2Renderer *r = AGG_RENDERER(img);
line_adaptor lines = line_adaptor(p);

#ifdef AGG_ALIASED_ENABLED
r->m_rasterizer_primitives.reset();
r->m_renderer_primitives.line_color(aggColor(style->color));
r->m_rasterizer_primitives.add_path(lines);
return MS_SUCCESS;
#endif

r->m_rasterizer_aa.reset();
r->m_rasterizer_aa.filling_rule(mapserver::fill_non_zero);
r->m_renderer_scanline.color(aggColor(style->color));
if (style->antialiased== MS_FALSE)
{
r->m_renderer_scanline_aliased.color(aggColor(style->color));
}
else
{
r->m_renderer_scanline.color(aggColor(style->color));
}

if (style->patternlength <= 0) {
if(!r->stroke) {
Expand Down Expand Up @@ -262,7 +246,10 @@ int agg2RenderLine(imageObj *img, shapeObj *p, strokeStyleObj *style)
}
r->m_rasterizer_aa.add_path(*r->stroke_dash);
}
mapserver::render_scanlines(r->m_rasterizer_aa, r->sl_line, r->m_renderer_scanline);
if (style->antialiased == MS_FALSE)
mapserver::render_scanlines(r->m_rasterizer_aa, r->sl_line, r->m_renderer_scanline_aliased);
else
mapserver::render_scanlines(r->m_rasterizer_aa, r->sl_line, r->m_renderer_scanline);
return MS_SUCCESS;
}

Expand Down Expand Up @@ -841,6 +828,7 @@ imageObj *agg2CreateImage(int width, int height, outputFormatObj *format, colorO
r->m_renderer_base.attach(r->m_pixel_format);
r->m_compop_renderer_base.attach(r->m_compop_pixel_format);
r->m_renderer_scanline.attach(r->m_renderer_base);
r->m_renderer_scanline_aliased.attach(r->m_renderer_base);
r->default_gamma = atof(msGetOutputFormatOption( format, "GAMMA", "0.75" ));
if(r->default_gamma <= 0.0 || r->default_gamma >= 1.0) {
r->default_gamma = 0.75;
Expand Down
1 change: 1 addition & 0 deletions mapcopy.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,7 @@ int msCopyStyle(styleObj *dst, styleObj *src)
MS_COPYSTELEM(gap);
MS_COPYSTELEM(linejoin);
MS_COPYSTELEM(linejoinmaxsize);
MS_COPYSTELEM(antialiased);
MS_COPYSTELEM(linecap);
MS_COPYSTELEM(symbol);
MS_COPYSTELEM(size);
Expand Down
8 changes: 6 additions & 2 deletions mapfile.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -2364,6 +2364,7 @@ int initStyle(styleObj *style)
style->polaroffsetpixel = style->polaroffsetangle = 0; /* no polar offset */
style->angle = 0;
style->autoangle= MS_FALSE;
style->antialiased = MS_TRUE;
style->opacity = 100; /* fully opaque */

msInitExpression(&(style->_geomtransform));
Expand Down Expand Up @@ -2426,8 +2427,11 @@ int loadStyle(styleObj *style)
style->autoangle=MS_TRUE;
}
break;
case(ANTIALIAS): /*ignore*/
msyylex();
case(ANTIALIAS):
if ((symbol = getSymbol(2, MS_TRUE,MS_FALSE)) == -1) return(-1);
if (symbol == MS_FALSE) {
style->antialiased = MS_FALSE;
}
break;
case(BACKGROUNDCOLOR):
if(loadColor(&(style->backgroundcolor), NULL) != MS_SUCCESS) return(MS_FAILURE);
Expand Down
1 change: 1 addition & 0 deletions maprendering.c
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -597,6 +597,7 @@ int msDrawLineSymbol(mapObj *map, imageObj *image, shapeObj *p,
s.linecap = style->linecap;
s.linejoin = style->linejoin;
s.linejoinmaxsize = style->linejoinmaxsize;
s.antialiased = style->antialiased;
s.width = width;
s.patternlength = style->patternlength;
for(i=0; i<s.patternlength; i++)
Expand Down
6 changes: 5 additions & 1 deletion mapserver.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -982,6 +982,9 @@ The :ref:`CLUSTER <cluster>` object. See :ref:`RFC 69 <rfc69>`.
/*should an angle be automatically computed*/
int autoangle;

/* should lines be drawn with antialiasing (default)? */
int antialiased;

colorObj color;
colorObj backgroundcolor;
colorObj outlinecolor;
Expand Down Expand Up @@ -3033,9 +3036,10 @@ extern "C" {
int linecap; /* MS_CJC_TRIANGLE, MS_CJC_SQUARE, MS_CJC_ROUND, MS_CJC_BUTT */
int linejoin; /* MS_CJC_BEVEL MS_CJC_ROUND MS_CJC_MITER */
double linejoinmaxsize;
int antialiased;
} strokeStyleObj;

#define INIT_STROKE_STYLE(s) { (s).width=0; (s).patternlength=0; (s).color=NULL; (s).linecap=MS_CJC_ROUND; (s).linejoin=MS_CJC_ROUND; (s).linejoinmaxsize=0;}
#define INIT_STROKE_STYLE(s) { (s).width=0; (s).patternlength=0; (s).color=NULL; (s).linecap=MS_CJC_ROUND; (s).linejoin=MS_CJC_ROUND; (s).linejoinmaxsize=0; (s).antialiased=MS_TRUE; }


/*
Expand Down
Binary file added msautotest/renderers/expected/line_aliased.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
35 changes: 35 additions & 0 deletions msautotest/renderers/line_aliased.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# RUN_PARMS: line_aliased.png [SHP2IMG] -m [MAPFILE] -i png -o [RESULT]
#
map

imagetype png
size 400 300
extent -166.245673 -55.551347 174.019748 53.883753
shapepath "../misc/data"
fontset "../misc/fonts.lst"
symbolset "symbolset"

OUTPUTFORMAT
NAME "png"
DRIVER AGG/PNG
MIMETYPE "image/png"
IMAGEMODE RGBA
EXTENSION "png"
FORMATOPTION "GAMMA=1.0"
END

layer
type line
data "testlines"
status default
name "lines"
class
style
color 128 128 128
width 5
ANTIALIAS FALSE
end
end
end

end
35 changes: 35 additions & 0 deletions msautotest/renderers/line_antialiased.map
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# RUN_PARMS: line_anti_aliased.png [SHP2IMG] -m [MAPFILE] -i png -o [RESULT]
#
map

imagetype png
size 400 300
extent -166.245673 -55.551347 174.019748 53.883753
shapepath "../misc/data"
fontset "../misc/fonts.lst"
symbolset "symbolset"

OUTPUTFORMAT
NAME "png"
DRIVER AGG/PNG
MIMETYPE "image/png"
IMAGEMODE RGBA
EXTENSION "png"
FORMATOPTION "GAMMA=1.0"
END

layer
type line
data "testlines"
status default
name "lines"
class
style
color 128 128 128
width 5
ANTIALIAS TRUE
end
end
end

end