File failed to load: https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/config/TeX-MML-AM_CHTML/MathJax.js
DGtal 2.0.0
LibBoard::GouraudTriangle Struct Reference

A triangle with shaded filling according to colors given for each vertex. More...

#include <Board/Shapes.h>

Inheritance diagram for LibBoard::GouraudTriangle:
[legend]

Public Member Functions

 GouraudTriangle (const Point &p0, const DGtal::Color &color0, const Point &p1, const DGtal::Color &color1, const Point &p2, const DGtal::Color &color2, int subdivisions, int depth=-1)
 GouraudTriangle (const Point &p0, float brightness0, const Point &p1, float brightness1, const Point &p2, float brightness2, const DGtal::Color &fillColor, int subdivisions, int depth=-1)
const std::string & name () const
Point center () const
GouraudTrianglerotate (double angle, const Point &center)
GouraudTriangle rotated (double angle, const Point &center) const
GouraudTrianglerotate (double angle)
GouraudTriangle rotated (double angle) const
GouraudTriangle translated (double dx, double dy) const
GouraudTriangle scaled (double sx, double sy) const
GouraudTriangle scaled (double s) const
void scaleAll (double s)
void flushPostscript (std::ostream &stream, const TransformEPS &transform) const
void flushFIG (std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
void flushSVG (std::ostream &stream, const TransformSVG &transform) const
void flushCairo (cairo_t *cr, const TransformCairo &transform) const
void flushTikZ (std::ostream &stream, const TransformTikZ &transform) const
GouraudTriangleclone () const
Public Member Functions inherited from LibBoard::Polyline
 Polyline (const std::vector< Point > &points, bool closed, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 Polyline (const Path &path, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
 Polyline (bool closed, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)
const std::string & name () const
Point center () const
Polylineoperator<< (const Point &p)
Pointoperator[] (const unsigned int n)
Polylinerotate (double angle, const Point &center)
Polyline rotated (double angle, const Point &center) const
Polylinerotate (double angle)
Polyline rotated (double angle) const
Polylinetranslate (double dx, double dy)
Polyline translated (double dx, double dy) const
Shapescale (double sx, double sy)
Shapescale (double s)
Polyline scaled (double sx, double sy) const
Polyline scaled (double s) const
void scaleAll (double s)
void flushPostscript (std::ostream &stream, const TransformEPS &transform) const
void flushFIG (std::ostream &stream, const TransformFIG &transform, std::map< DGtal::Color, int > &colormap) const
void flushSVG (std::ostream &stream, const TransformSVG &transform) const
void flushCairo (cairo_t *cr, const TransformCairo &transform) const
void flushTikZ (std::ostream &stream, const TransformTikZ &transform) const
Rect boundingBox () const
Polylineclone () const
Public Member Functions inherited from LibBoard::Shape
 Shape (DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, LineStyle style, const LineCap cap, const LineJoin join, int depth)
virtual ~Shape ()
bool filled () const
ShaperotateDeg (double angle, const Point &center)
ShaperotateDeg (double angle)
Rect bbox ()
Shapeoperator-- ()
Shapeoperator++ ()
int depth () const
virtual void depth (int)
virtual void shiftDepth (int shift)
const DGtal::ColorpenColor () const
const DGtal::ColorfillColor () const

Protected Attributes

DGtal::Color _color0
DGtal::Color _color1
DGtal::Color _color2
int _subdivisions
Protected Attributes inherited from LibBoard::Polyline
Path _path
Protected Attributes inherited from LibBoard::Shape
int _depth
DGtal::Color _penColor
DGtal::Color _fillColor
double _lineWidth
LineStyle _lineStyle
LineCap _lineCap
LineJoin _lineJoin

Static Private Attributes

static const std::string _name

Additional Inherited Members

Public Types inherited from LibBoard::Shape
enum  LineCap { ButtCap = 0 , RoundCap , SquareCap }
enum  LineJoin { MiterJoin = 0 , RoundJoin , BevelJoin }
enum  LineStyle {
  SolidStyle = 0 , DashStyle , DotStyle , DashDotStyle ,
  DashDotDotStyle , DashDotDotDotStyle
}
Protected Member Functions inherited from LibBoard::Shape
std::string svgProperties (const TransformSVG &transform) const
std::string postscriptProperties () const
void setCairoDashStyle (cairo_t *cr, LineStyle type) const
std::string tikzProperties (const TransformTikZ &transform) const

Detailed Description

A triangle with shaded filling according to colors given for each vertex.

The GouraudTriangle structure.

Definition at line 1223 of file Board/Shapes.h.

Constructor & Destructor Documentation

◆ GouraudTriangle() [1/2]

LibBoard::GouraudTriangle::GouraudTriangle ( const Point & p0,
const DGtal::Color & color0,
const Point & p1,
const DGtal::Color & color1,
const Point & p2,
const DGtal::Color & color2,
int subdivisions,
int depth = -1 )

Definition at line 2094 of file Shapes.cpp.

2099 : Polyline( std::vector<Point>(), true, DGtal::Color::None, DGtal::Color::None,
2100 0.0f, SolidStyle, ButtCap, MiterJoin, depthValue ),
2101 _color0( color0 ), _color1( color1 ), _color2( color2 ), _subdivisions( subdivisions ) {
2102 _path << p0;
2103 _path << p1;
2104 _path << p2;
2105
2106 Shape::_fillColor.red( ( color0.red() + color1.red() + color2.red() ) / 3 );
2107 Shape::_fillColor.green( ( color0.green() + color1.green() + color2.green() ) / 3 );
2108 Shape::_fillColor.blue( ( color0.blue() + color1.blue() + color2.blue() ) / 3 );
2109}
void green(const unsigned char aGreenValue)
static const Color None
Definition Color.h:421
void red(const unsigned char aRedValue)
void blue(const unsigned char aBlueValue)
Polyline(const std::vector< Point > &points, bool closed, DGtal::Color penColor, DGtal::Color fillColor, double lineWidth, const LineStyle lineStyle=SolidStyle, const LineCap cap=ButtCap, const LineJoin join=MiterJoin, int depth=-1)

References _color0, _color1, _color2, LibBoard::Polyline::_path, _subdivisions, DGtal::Color::blue(), LibBoard::Shape::ButtCap, DGtal::Color::green(), LibBoard::Shape::MiterJoin, LibBoard::Polyline::Polyline(), DGtal::Color::red(), and LibBoard::Shape::SolidStyle.

Referenced by clone(), flushPostscript(), flushSVG(), rotated(), rotated(), scaled(), scaled(), and translated().

◆ GouraudTriangle() [2/2]

LibBoard::GouraudTriangle::GouraudTriangle ( const Point & p0,
float brightness0,
const Point & p1,
float brightness1,
const Point & p2,
float brightness2,
const DGtal::Color & fillColor,
int subdivisions,
int depth = -1 )

Definition at line 2111 of file Shapes.cpp.

2117 : Polyline( std::vector<Point>(), true, DGtal::Color::None, DGtal::Color::None,
2118 0.0f, SolidStyle, ButtCap, MiterJoin, depthValue ),
2119 _color0( fill ), _color1( fill ), _color2( fill ), _subdivisions( subdivisions )
2120{
2121 _path << p0;
2122 _path << p1;
2123 _path << p2;
2124 _color0.red( static_cast<unsigned char>( std::min( 255.0f, _color0.red() * brightness0 ) ) );
2125 _color0.green( static_cast<unsigned char>( std::min( 255.0f, _color0.green() * brightness0 ) ) );
2126 _color0.blue( static_cast<unsigned char>( std::min( 255.0f, _color0.blue() * brightness0 ) ) );
2127 _color1.red( static_cast<unsigned char>( std::min( 255.0f, _color1.red() * brightness1 ) ) );
2128 _color1.green( static_cast<unsigned char>( std::min( 255.0f, _color1.green() * brightness1 ) ) );
2129 _color1.blue( static_cast<unsigned char>( std::min( 255.0f, _color1.blue() * brightness1 ) ) );
2130 _color2.red( static_cast<unsigned char>( std::min( 255.0f, _color2.red() * brightness2 ) ) );
2131 _color2.green( static_cast<unsigned char>( std::min( 255.0f, _color2.green() * brightness2 ) ) );
2132 _color2.blue( static_cast<unsigned char>( std::min( 255.0f, _color2.blue() * brightness2 ) ) );
2133
2134 Shape::_fillColor.red( ( _color0.red() + _color1.red() + _color2.red() ) / 3 );
2135 Shape::_fillColor.green( ( _color0.green() + _color1.green() + _color2.green() ) / 3 );
2136 Shape::_fillColor.blue( ( _color0.blue() + _color1.blue() + _color2.blue() ) / 3 );
2137}

References _color0, _color1, _color2, LibBoard::Polyline::_path, _subdivisions, LibBoard::Shape::ButtCap, LibBoard::Shape::MiterJoin, LibBoard::Polyline::Polyline(), and LibBoard::Shape::SolidStyle.

Member Function Documentation

◆ center()

Point LibBoard::GouraudTriangle::center ( ) const
virtual

Returns the gravity center of the shape.

Returns
The center of the shape.

Implements LibBoard::Shape.

Definition at line 2140 of file Shapes.cpp.

2140 {
2141 return ( _path[0] + _path[1] + _path[2] ) / 3.0;
2142}

References LibBoard::Polyline::_path.

Referenced by rotate(), and rotated().

◆ clone()

GouraudTriangle * LibBoard::GouraudTriangle::clone ( ) const
virtual

Return a copy of the shape.

Returns
copye of the shape.

Implements LibBoard::Shape.

Definition at line 2194 of file Shapes.cpp.

2194 {
2195 return new GouraudTriangle(*this);
2196}
GouraudTriangle(const Point &p0, const DGtal::Color &color0, const Point &p1, const DGtal::Color &color1, const Point &p2, const DGtal::Color &color2, int subdivisions, int depth=-1)
Definition Shapes.cpp:2094

References GouraudTriangle().

◆ flushCairo()

void LibBoard::GouraudTriangle::flushCairo ( cairo_t * cr,
const TransformCairo & transform ) const
virtual

Writes the cairo code of the shape in a cairo drawing context according to a transform.

Parameters
crThe cairo drawing context.
transformA 2D transform to be applied.

Implements LibBoard::Shape.

Definition at line 2299 of file Shapes.cpp.

2301{
2302}

◆ flushFIG()

void LibBoard::GouraudTriangle::flushFIG ( std::ostream & stream,
const TransformFIG & transform,
std::map< DGtal::Color, int > & colormap ) const
virtual

Sends the Triangle to a FIG file format stream.

Warning! Because shading would generally require more colors in the colormap than allowed by the FIG file format, rendering a Gouraud triangle in an XFig file is the same as rendering a simple triangle whose filling color is the average of the vertex colors.

Parameters
streamoutput stream
transformtransform
colormapcolormap

Implements LibBoard::Shape.

Definition at line 2228 of file Shapes.cpp.

2231{
2232
2233 DGtal::Color c( static_cast<unsigned char>((_color0.red() + _color1.red() + _color2.red() )/3.0),
2234 static_cast<unsigned char>((_color0.green() + _color1.green() + _color2.green())/3.0),
2235 static_cast<unsigned char>((_color0.blue() + _color1.blue() + _color2.blue())/3.0 ));
2236 Polyline( _path, DGtal::Color::None, c, 0.0f ).flushFIG( stream, transform, colormap );
2237
2238 // if ( ! _subdivisions ) {
2239 // Polyline::flushFIG( stream, transform, colormap );
2240 // return;
2241 // }
2242// TODO : Handle extended colormap through clustering...
2243// const Point & p0 = _points[0];
2244// const Point & p1 = _points[1];
2245// const Point & p2 = _points[2];
2246// Point p01( 0.5*(p0.x+p1.x), 0.5*(p0.y+p1.y) );
2247// DGtal::Color c01( (_color0.red() + _color1.red())/2,
2248// (_color0.green() + _color1.green())/2,
2249// (_color0.blue() + _color1.blue())/2 );
2250// Point p12( 0.5*(p1.x+p2.x), 0.5*(p1.y+p2.y) );
2251// DGtal::Color c12( (_color1.red() + _color2.red())/2,
2252// (_color1.green() + _color2.green())/2,
2253// (_color1.blue() + _color2.blue())/2 );
2254// Point p20( 0.5*(p2.x+p0.x), 0.5*(p2.y+p0.y) );
2255// DGtal::Color c20( (_color2.red() + _color0.red())/2,
2256// (_color2.green() + _color0.green())/2,
2257// (_color2.blue() + _color0.blue())/2 );
2258// GouraudTriangle( p0, _color0, p20, c20, p01, c01, _subdivisions - 1, _depth ).flushFIG( stream, transform, colormap );
2259// GouraudTriangle( p1, _color1, p01, c01, p12, c12, _subdivisions - 1, _depth ).flushFIG( stream, transform, colormap );
2260// GouraudTriangle( p2, _color2, p20, c20, p12, c12, _subdivisions - 1, _depth ).flushFIG( stream, transform, colormap );
2261// GouraudTriangle( p01, c01, p12, c12, p20, c20, _subdivisions - 1, _depth ).flushFIG( stream, transform, colormap );
2262}

References _color0, _color1, _color2, LibBoard::Polyline::_path, DGtal::Color::None, and LibBoard::Polyline::Polyline().

◆ flushPostscript()

void LibBoard::GouraudTriangle::flushPostscript ( std::ostream & stream,
const TransformEPS & transform ) const
virtual

Sends the triangle to a Postscript document.

Parameters
streamoutput stream
transformtransform

Implements LibBoard::Shape.

Definition at line 2199 of file Shapes.cpp.

2201{
2202 if ( ! _subdivisions ) {
2203 Polyline::flushPostscript( stream, transform );
2204 return;
2205 }
2206 const Point & p0 = _path[0];
2207 const Point & p1 = _path[1];
2208 const Point & p2 = _path[2];
2209 Point p01( 0.5*(p0.x+p1.x), 0.5*(p0.y+p1.y) );
2210 DGtal::Color c01( (_color0.red() + _color1.red())/2,
2211 (_color0.green() + _color1.green())/2,
2212 (_color0.blue() + _color1.blue())/2 );
2213 Point p12( 0.5*(p1.x+p2.x), 0.5*(p1.y+p2.y) );
2214 DGtal::Color c12( (_color1.red() + _color2.red())/2,
2215 (_color1.green() + _color2.green())/2,
2216 (_color1.blue() + _color2.blue())/2 );
2217 Point p20( 0.5*(p2.x+p0.x), 0.5*(p2.y+p0.y) );
2218 DGtal::Color c20( (_color2.red() + _color0.red())/2,
2219 (_color2.green() + _color0.green())/2,
2220 (_color2.blue() + _color0.blue())/2 );
2221 GouraudTriangle( p0, _color0, p20, c20, p01, c01, _subdivisions - 1, _depth ).flushPostscript( stream, transform );
2222 GouraudTriangle( p1, _color1, p01, c01, p12, c12, _subdivisions - 1, _depth ).flushPostscript( stream, transform );
2223 GouraudTriangle( p2, _color2, p20, c20, p12, c12, _subdivisions - 1, _depth ).flushPostscript( stream, transform );
2224 GouraudTriangle( p01, c01, p12, c12, p20, c20, _subdivisions - 1, _depth ).flushPostscript( stream, transform );
2225}
void flushPostscript(std::ostream &stream, const TransformEPS &transform) const
Definition Shapes.cpp:1736
MyPointD Point

References _color0, _color1, _color2, LibBoard::Shape::_depth, LibBoard::Polyline::_path, _subdivisions, LibBoard::Polyline::flushPostscript(), GouraudTriangle(), LibBoard::Point::x, and LibBoard::Point::y.

◆ flushSVG()

void LibBoard::GouraudTriangle::flushSVG ( std::ostream & stream,
const TransformSVG & transform ) const
virtual

Writes the SVG code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.

Implements LibBoard::Shape.

Definition at line 2265 of file Shapes.cpp.

2267{
2268 if ( ! _subdivisions ) {
2269 Polyline::flushSVG( stream, transform );
2270 return;
2271 }
2272 const Point & p0 = _path[0];
2273 const Point & p1 = _path[1];
2274 const Point & p2 = _path[2];
2275 Point p01( 0.5*(p0.x+p1.x), 0.5*(p0.y+p1.y) );
2276 DGtal::Color c01( (_color0.red() + _color1.red())/2,
2277 (_color0.green() + _color1.green())/2,
2278 (_color0.blue() + _color1.blue())/2 );
2279 Point p12( 0.5*(p1.x+p2.x), 0.5*(p1.y+p2.y) );
2280 DGtal::Color c12( (_color1.red() + _color2.red())/2,
2281 (_color1.green() + _color2.green())/2,
2282 (_color1.blue() + _color2.blue())/2 );
2283 Point p20( 0.5*(p2.x+p0.x), 0.5*(p2.y+p0.y) );
2284 DGtal::Color c20( (_color2.red() + _color0.red())/2,
2285 (_color2.green() + _color0.green())/2,
2286 (_color2.blue() + _color0.blue())/2 );
2287 GouraudTriangle( p0, _color0, p20, c20, p01, c01,
2288 _subdivisions - 1, _depth ).flushSVG( stream, transform );
2289 GouraudTriangle( p1, _color1, p01, c01, p12, c12,
2290 _subdivisions - 1, _depth ).flushSVG( stream, transform );
2291 GouraudTriangle( p2, _color2, p20, c20, p12, c12,
2292 _subdivisions - 1, _depth ).flushSVG( stream, transform );
2293 GouraudTriangle( p01, c01, p12, c12, p20, c20,
2294 _subdivisions - 1, _depth ).flushSVG( stream, transform );
2295}
void flushSVG(std::ostream &stream, const TransformSVG &transform) const
Definition Shapes.cpp:1792

References _color0, _color1, _color2, LibBoard::Shape::_depth, LibBoard::Polyline::_path, _subdivisions, LibBoard::Polyline::flushSVG(), GouraudTriangle(), LibBoard::Point::x, and LibBoard::Point::y.

◆ flushTikZ()

void LibBoard::GouraudTriangle::flushTikZ ( std::ostream & stream,
const TransformTikZ & transform ) const
virtual

Writes the TikZ code of the shape in a stream according to a transform.

Parameters
streamThe output stream.
transformA 2D transform to be applied.

Implements LibBoard::Shape.

Definition at line 2306 of file Shapes.cpp.

2308{
2309 // FIXME: unimplemented
2310 stream << "% FIXME: GouraudTriangle::flushTikZ unimplemented" << std::endl;
2311}

◆ name()

const std::string & LibBoard::GouraudTriangle::name ( ) const
virtual

Returns the generic name of the shape (e.g., Circle, Rectangle, etc.)

Returns
object name

Reimplemented from LibBoard::Shape.

Definition at line 2089 of file Shapes.cpp.

2090{
2091 return _name;
2092}
static const std::string _name

References _name.

◆ rotate() [1/2]

GouraudTriangle & LibBoard::GouraudTriangle::rotate ( double angle)
virtual

Rotate the shape around its center.

Parameters
angleThe rotation angle in radian.
Returns
A reference to the shape itself.

Implements LibBoard::Shape.

Definition at line 2158 of file Shapes.cpp.

2159{
2161}
GouraudTriangle & rotate(double angle, const Point &center)
Definition Shapes.cpp:2145
double angle(const DGtal::Z2i::RealPoint &point)

References angle(), center(), and rotate().

◆ rotate() [2/2]

GouraudTriangle & LibBoard::GouraudTriangle::rotate ( double angle,
const Point & center )
virtual

Rotate the shape around a given center of rotation.

Parameters
angleThe rotation angle in radian.
centerThe center of rotation.
Returns
A reference to the shape itself.

Implements LibBoard::Shape.

Definition at line 2145 of file Shapes.cpp.

2146{
2147 _path.rotate( angle, rotCenter );
2148 return *this;
2149}

References LibBoard::Polyline::_path, and angle().

Referenced by rotate(), rotated(), and rotated().

◆ rotated() [1/2]

GouraudTriangle LibBoard::GouraudTriangle::rotated ( double angle) const

Definition at line 2164 of file Shapes.cpp.

2165{
2166 return GouraudTriangle(*this).rotate( angle, center() );
2167}

References angle(), center(), GouraudTriangle(), and rotate().

◆ rotated() [2/2]

GouraudTriangle LibBoard::GouraudTriangle::rotated ( double angle,
const Point & center ) const

Definition at line 2152 of file Shapes.cpp.

2153{
2154 return GouraudTriangle(*this).rotate( angle, rotCenter );
2155}

References angle(), GouraudTriangle(), and rotate().

◆ scaleAll()

void LibBoard::GouraudTriangle::scaleAll ( double s)
virtual

Scales all the values (positions, dimensions, etc.) associated with the shape.

Parameters
sThe scaling factor.

Implements LibBoard::Shape.

Definition at line 2188 of file Shapes.cpp.

2189{
2190 _path.scaleAll( s );
2191}

References LibBoard::Polyline::_path.

◆ scaled() [1/2]

GouraudTriangle LibBoard::GouraudTriangle::scaled ( double s) const

Definition at line 2182 of file Shapes.cpp.

2183{
2184 return static_cast<GouraudTriangle &>( GouraudTriangle(*this).scale( s, s ) );
2185}

References GouraudTriangle().

◆ scaled() [2/2]

GouraudTriangle LibBoard::GouraudTriangle::scaled ( double sx,
double sy ) const

Returns a scaled copy of the triangle.

Parameters
sxScale factor along the x axis.
syScale factor along the y axis.
Returns
A scaled copy of the arrow.

Definition at line 2176 of file Shapes.cpp.

2177{
2178 return static_cast<GouraudTriangle &>( GouraudTriangle(*this).scale( sx, sy ) );
2179}

References GouraudTriangle().

◆ translated()

GouraudTriangle LibBoard::GouraudTriangle::translated ( double dx,
double dy ) const

Returns a translated copy of the triangle.

Parameters
dxThe shift along the x axis.
dyThe shift along the y axis.
Returns
A translated copy of the line.

Definition at line 2170 of file Shapes.cpp.

2171{
2172 return static_cast<GouraudTriangle &>( GouraudTriangle(*this).translate( dx, dy ) );
2173}

References GouraudTriangle().

Field Documentation

◆ _color0

DGtal::Color LibBoard::GouraudTriangle::_color0
protected

◆ _color1

DGtal::Color LibBoard::GouraudTriangle::_color1
protected

◆ _color2

DGtal::Color LibBoard::GouraudTriangle::_color2
protected

◆ _name

const std::string LibBoard::GouraudTriangle::_name
staticprivate

The generic name of the shape.

Definition at line 1325 of file Board/Shapes.h.

Referenced by name().

◆ _subdivisions

int LibBoard::GouraudTriangle::_subdivisions
protected

Definition at line 1331 of file Board/Shapes.h.

Referenced by flushPostscript(), flushSVG(), GouraudTriangle(), and GouraudTriangle().


The documentation for this struct was generated from the following files: