OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline > Class Template Reference

#include </home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/SLA/AGGRaster.hpp>

Inheritance diagram for Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >:
Collaboration diagram for Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >:

Public Types

using TColor = typename PixelRenderer::color_type
using TValue = typename TColor::value_type
using TPixel = typename PixelRenderer::pixel_type
enum  Orientation { roLandscape , roPortrait }
using TMirroring = std::array<bool, 2>

Public Member Functions

template<class GammaFn>
 AGGRaster (const Resolution &res, const PixelDim &pd, const Trafo &trafo, const TColor &foreground, const TColor &background, GammaFn &&gammafn)
Trafo trafo () const override
 Get the resolution of the raster.
Resolution resolution () const
PixelDim pixel_dimensions () const
void draw (const ExPolygon &poly) override
 Draw a polygon with holes.
EncodedRaster encode (RasterEncoder encoder) const override
void clear (const TColor color)

Static Public Attributes

static const constexpr TMirroring NoMirror = {false, false}
static const constexpr TMirroring MirrorX = {true, false}
static const constexpr TMirroring MirrorY = {false, true}
static const constexpr TMirroring MirrorXY = {true, true}

Protected Member Functions

void flipy (agg::path_storage &path) const
void flipx (agg::path_storage &path) const
double getPx (const Point &p)
double getPy (const Point &p)
agg::path_storage to_path (const Polygon &poly)
template<class PointVec>
agg::path_storage _to_path (const PointVec &v)
template<class PointVec>
agg::path_storage _to_path_flpxy (const PointVec &v)
template<class PointVec>
agg::path_storage to_path (const PointVec &v)
template<class P>
void _draw (const P &poly)

Protected Attributes

Resolution m_resolution
PixelDim m_pxdim_scaled
std::vector< TPixel > m_buf
agg::rendering_buffer m_rbuf
PixelRenderer m_pixrenderer
agg::renderer_base< PixelRenderer > m_raw_renderer
Renderer< agg::renderer_base< PixelRenderer > > m_renderer
Trafo m_trafo
Scanline m_scanlines
Rasterizer m_rasterizer

Detailed Description

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
class Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >

Member Typedef Documentation

◆ TColor

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
using Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::TColor = typename PixelRenderer::color_type

◆ TMirroring

using Slic3r::sla::RasterBase::TMirroring = std::array<bool, 2>
inherited

◆ TPixel

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
using Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::TPixel = typename PixelRenderer::pixel_type

◆ TValue

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
using Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::TValue = typename TColor::value_type

Member Enumeration Documentation

◆ Orientation

Enumerator
roLandscape 
roPortrait 
@ roPortrait
Definition RasterBase.hpp:65
@ roLandscape
Definition RasterBase.hpp:65

Constructor & Destructor Documentation

◆ AGGRaster()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
template<class GammaFn>
Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::AGGRaster ( const Resolution & res,
const PixelDim & pd,
const Trafo & trafo,
const TColor & foreground,
const TColor & background,
GammaFn && gammafn )
inline
141 , m_buf(res.pixels())
142 , m_rbuf(reinterpret_cast<TValue *>(m_buf.data()),
143 unsigned(res.width_px),
144 unsigned(res.height_px),
145 int(res.width_px *PixelRenderer::num_components))
149 , m_trafo(trafo)
150 {
151 // Visual Studio compiler gives warnings about possible division by zero.
152 assert(pd.w_mm != 0 && pd.h_mm != 0);
153 if (pd.w_mm != 0 && pd.h_mm != 0) {
154 m_pxdim_scaled.w_mm /= pd.w_mm;
155 m_pxdim_scaled.h_mm /= pd.h_mm;
156 }
157 m_renderer.color(foreground);
159
160 m_rasterizer.gamma(gammafn);
161 }
Definition AGGRaster.hpp:47
PixelRenderer m_pixrenderer
Definition AGGRaster.hpp:61
typename TColor::value_type TValue
Definition AGGRaster.hpp:50
Trafo m_trafo
Definition AGGRaster.hpp:66
PixelDim m_pxdim_scaled
Definition AGGRaster.hpp:56
void clear(const TColor color)
Definition AGGRaster.hpp:178
std::vector< TPixel > m_buf
Definition AGGRaster.hpp:58
Renderer< agg::renderer_base< PixelRenderer > > m_renderer
Definition AGGRaster.hpp:64
Rasterizer m_rasterizer
Definition AGGRaster.hpp:68
agg::renderer_base< PixelRenderer > m_raw_renderer
Definition AGGRaster.hpp:63
Trafo trafo() const override
Get the resolution of the raster.
Definition AGGRaster.hpp:163
Resolution m_resolution
Definition AGGRaster.hpp:55
agg::rendering_buffer m_rbuf
Definition AGGRaster.hpp:59

Member Function Documentation

◆ _draw()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
template<class P>
void Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::_draw ( const P & poly)
inlineprotected
122 {
123 m_rasterizer.reset();
124
125 m_rasterizer.add_path(to_path(contour(poly)));
126 for(auto& h : holes(poly)) m_rasterizer.add_path(to_path(h));
127
129 }
Scanline m_scanlines
Definition AGGRaster.hpp:67
agg::path_storage to_path(const Polygon &poly)
Definition AGGRaster.hpp:82
const Polygon & contour(const ExPolygon &p)
Definition AGGRaster.hpp:30
const Polygons & holes(const ExPolygon &p)
Definition AGGRaster.hpp:31

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::draw().

Here is the caller graph for this function:

◆ _to_path()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
template<class PointVec>
agg::path_storage Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::_to_path ( const PointVec & v)
inlineprotected
85 {
87
88 auto it = v.begin();
89 path.move_to(getPx(*it), getPy(*it));
90 while(++it != v.end()) path.line_to(getPx(*it), getPy(*it));
91 path.line_to(getPx(v.front()), getPy(v.front()));
92
93 return path;
94 }
double getPx(const Point &p)
Definition AGGRaster.hpp:80
double getPy(const Point &p)
Definition AGGRaster.hpp:81

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::to_path().

Here is the caller graph for this function:

◆ _to_path_flpxy()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
template<class PointVec>
agg::path_storage Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::_to_path_flpxy ( const PointVec & v)
inlineprotected
97 {
99
100 auto it = v.begin();
101 path.move_to(getPy(*it), getPx(*it));
102 while(++it != v.end()) path.line_to(getPy(*it), getPx(*it));
103 path.line_to(getPy(v.front()), getPx(v.front()));
104
105 return path;
106 }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::to_path().

Here is the caller graph for this function:

◆ clear()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
void Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::clear ( const TColor color)
inline
178{ m_raw_renderer.clear(color); }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::AGGRaster().

Here is the caller graph for this function:

◆ draw()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
void Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::draw ( const ExPolygon & poly)
inlineoverridevirtual

Draw a polygon with holes.

Implements Slic3r::sla::RasterBase.

171{ _draw(poly); }
void _draw(const P &poly)
Definition AGGRaster.hpp:121

◆ encode()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
EncodedRaster Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::encode ( RasterEncoder encoder) const
inlineoverridevirtual

Implements Slic3r::sla::RasterBase.

174 {
175 return encoder(m_buf.data(), m_resolution.width_px, m_resolution.height_px, 1);
176 }

◆ flipx()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
void Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::flipx ( agg::path_storage & path) const
inlineprotected
76 {
77 path.flip_x(0, double(m_resolution.width_px));
78 }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::to_path().

Here is the caller graph for this function:

◆ flipy()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
void Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::flipy ( agg::path_storage & path) const
inlineprotected
71 {
72 path.flip_y(0, double(m_resolution.height_px));
73 }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::to_path().

Here is the caller graph for this function:

◆ getPx()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
double Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::getPx ( const Point & p)
inlineprotected
80{ return p(0) * m_pxdim_scaled.w_mm; }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::_to_path(), and Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::_to_path_flpxy().

Here is the caller graph for this function:

◆ getPy()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
double Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::getPy ( const Point & p)
inlineprotected
81{ return p(1) * m_pxdim_scaled.h_mm; }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::_to_path(), and Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::_to_path_flpxy().

Here is the caller graph for this function:

◆ pixel_dimensions()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
PixelDim Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::pixel_dimensions ( ) const
inline
166 {
167 return {SCALING_FACTOR / m_pxdim_scaled.w_mm,
169 }

Referenced by Slic3r::sla::raster_to_polygons().

Here is the caller graph for this function:

◆ resolution()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Resolution Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::resolution ( ) const
inline
164{ return m_resolution; }

Referenced by marchsq::_RasterTraits< Slic3r::sla::RasterGrayscaleAA >::cols(), Slic3r::sla::raster_to_polygons(), and marchsq::_RasterTraits< Slic3r::sla::RasterGrayscaleAA >::rows().

Here is the caller graph for this function:

◆ to_path() [1/2]

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
template<class PointVec>
agg::path_storage Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::to_path ( const PointVec & v)
inlineprotected
109 {
110 auto path = m_trafo.flipXY ? _to_path_flpxy(v) : _to_path(v);
111
112 path.translate_all_paths(m_trafo.center_x * m_pxdim_scaled.w_mm,
113 m_trafo.center_y * m_pxdim_scaled.h_mm);
114
115 if(m_trafo.mirror_x) flipx(path);
116 if(m_trafo.mirror_y) flipy(path);
117
118 return path;
119 }
agg::path_storage _to_path(const PointVec &v)
Definition AGGRaster.hpp:84
void flipx(agg::path_storage &path) const
Definition AGGRaster.hpp:75
agg::path_storage _to_path_flpxy(const PointVec &v)
Definition AGGRaster.hpp:96
void flipy(agg::path_storage &path) const
Definition AGGRaster.hpp:70

◆ to_path() [2/2]

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
agg::path_storage Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::to_path ( const Polygon & poly)
inlineprotected
82{ return to_path(poly.points); }

Referenced by Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::_draw(), and Slic3r::sla::AGGRaster< agg::pixfmt_gray8, agg::renderer_scanline_aa_solid >::to_path().

Here is the caller graph for this function:

◆ trafo()

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Trafo Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::trafo ( ) const
inlineoverridevirtual

Get the resolution of the raster.

Implements Slic3r::sla::RasterBase.

163{ return m_trafo; }

Referenced by Slic3r::sla::raster_to_polygons().

Here is the caller graph for this function:

Member Data Documentation

◆ m_buf

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
std::vector<TPixel> Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_buf
protected

◆ m_pixrenderer

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
PixelRenderer Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_pixrenderer
protected

◆ m_pxdim_scaled

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
PixelDim Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_pxdim_scaled
protected

◆ m_rasterizer

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Rasterizer Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_rasterizer
protected

◆ m_raw_renderer

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
agg::renderer_base<PixelRenderer> Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_raw_renderer
protected

◆ m_rbuf

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
agg::rendering_buffer Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_rbuf
protected

◆ m_renderer

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Renderer<agg::renderer_base<PixelRenderer> > Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_renderer
protected

◆ m_resolution

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Resolution Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_resolution
protected

◆ m_scanlines

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Scanline Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_scanlines
protected

◆ m_trafo

template<class PixelRenderer, template< class > class Renderer, class Rasterizer = agg::rasterizer_scanline_aa<>, class Scanline = agg::scanline_p8>
Trafo Slic3r::sla::AGGRaster< PixelRenderer, Renderer, Rasterizer, Scanline >::m_trafo
protected

◆ MirrorX

const constexpr TMirroring Slic3r::sla::RasterBase::MirrorX = {true, false}
staticconstexprinherited
69{true, false};

◆ MirrorXY

const constexpr TMirroring Slic3r::sla::RasterBase::MirrorXY = {true, true}
staticconstexprinherited
71{true, true};

◆ MirrorY

const constexpr TMirroring Slic3r::sla::RasterBase::MirrorY = {false, true}
staticconstexprinherited
70{false, true};

◆ NoMirror

const constexpr TMirroring Slic3r::sla::RasterBase::NoMirror = {false, false}
staticconstexprinherited
68{false, false};

Referenced by Slic3r::sla::RasterBase::Trafo::Trafo().


The documentation for this class was generated from the following file:
  • /home/runner/work/OrcaSlicer/OrcaSlicer/src/libslic3r/SLA/AGGRaster.hpp