Get the App
SLTechnology News&Howtos  ›  Servers  › 

AGG lesson 14 agg::conv_dash rendering dashed lines

Shulou Source: shulou.com Published: 2022-06-02 19:52:37 10月02日 Update

1 file reference and parameter description

File definition: include/agg_conv_dash.h

Class definition:

Template

Conv_dash (VertexSource& vs):

Conv_adaptor_vcgen (vs)

Note: you need to pass the vertex source as a construction parameter.

Void add_dash (double dash_len, double gap_len)

The first parameter is the length of the solid line, and the second parameter is the distance between the two solid lines. By building several solid lines apart from the gap_len, the effect of the dashed line is achieved.

2 experience in use

At the beginning, I thought that agg::conv_stroke and agg::conv_dash conflict with each other, that the former is rendered solid line, the latter is rendered dashed line, in fact, the former is the outline of rendering any graphics, dashed line is also a kind of contour line, but it is just a split bar!

3 exampl

The code is as follows:

Agg::path_storage ps1

Ps1.move_to (200200)

Ps1.line_to (1300, 1300)

Agg::conv_dashdash (ps1)

/ / the first parameter is the length of the solid line, and the second parameter is the distance between the two solid lines.

/ / solid lines with a distance of 25 to achieve the effect of dotted lines

Dash.add_dash (5pm 25); / / you can see the effect by making different adjustments, if it is 5pm 5.

/ / may not have any effect at all!

Agg::conv_strokestroke (dash)

/ / add to the renderer

Ras.add_path (stroke)

/ / render the lines to the memory image, ready to display

Agg::render_scanlines_aa_solid (ras,sl,renb,agg::rgba8 (255j0pl 0))

Ras.reset ()

4 width of the dashed line

If the length of the current dash_len is relatively short, you can cancel anti-aliasing and speed up the rendering. You can compare the results and try to use the stroke.width function to set the width. Dash does not provide a function to set the lineweight.

5 cancel the anti-aliasing of dotted lines

Ras.gamma (agg::gamma_threshold, 0.5)

Examples are as follows:

Ras.reset ()

Agg::path_storage ps

Ps.move_to (30pr 40)

Ps.line_to (1300, 1400)

Agg::conv_dash dash (ps)

Dash.add_dash (10Pol 30)

Agg::conv_strokestroke (dash)

Ras.add_path (stroke)

/ / stroke.width (5); / / Test linewidth

Ras.gamma (agg::gamma_threshold (0.5)); / / Test anti-aliasing

Agg::render_scanlines_aa_solid (ras,sl,renb,agg::rgba8 (255j0pl 0))

Tags: Solid lines dashed lines parameters effects aliasing length between examples functions widths files contours tests differences code memory just graphics pictures actual Apple Docker Huawei Linux macOS MariaDB Microsoft MySQL NVidia OPPO Reno Microsoft Redmi macOS Shulou Technology Apple