SVG for C++
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions
svg.hpp File Reference
#include <iostream>
#include <algorithm>
#include <fstream>
#include <math.h>
#include <map>
#include <deque>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
#include <memory>
#include <type_traits>
#include <typeinfo>

Go to the source code of this file.

Classes

struct  SVG::QuadCoord
 
class  SVG::AttributeMap
 Base class for anything that has attributes (e.g. SVG elements, CSS stylesheets) More...
 
class  SVG::Element
 Abstract base class for all SVG elements. More...
 
class  SVG::Element::BoundingBox
 Represents the top left and bottom right corners of a bounding rectangle. More...
 
class  SVG::Shape
 Base class for any SVG elements that have a width and height. More...
 
class  SVG::SVG
 
class  SVG::SVG::Style
 
class  SVG::Path
 
class  SVG::Text
 
class  SVG::Group
 
class  SVG::Line
 
class  SVG::Rect
 
class  SVG::Circle
 
class  SVG::Polygon
 

Namespaces

 SVG
 Main namespace for SVG for C++.
 
 util
 Various utility and mathematical functions.
 

Macros

#define PI   3.14159265
 
#define SVG_TYPE_CHECK   static_assert(std::is_base_of<Element, T>::value, "Child must be an SVG element.")
 
#define APPROX_EQUALS(x, y, tol)   bool(abs(x - y) < tol)
 

Typedefs

using SVG::SelectorProperties = std::map< std::string, AttributeMap >
 
using SVG::SVGAttrib = std::map< std::string, std::string >
 
using SVG::Point = std::pair< double, double >
 
using SVG::Margins = QuadCoord
 

Enumerations

enum  Orientation { COLINEAR, CLOCKWISE, COUNTERCLOCKWISE }
 

Functions

std::string SVG::to_string (const double &value)
 
std::string SVG::to_string (const Point &point)
 
std::string SVG::to_string (const std::map< std::string, AttributeMap > &css, const size_t indent_level=0)
 
std::vector< Point > SVG::bounding_polygon (const std::vector< Shape *> &shapes)
 
SVG SVG::frame_animate (std::vector< SVG > &frames, const double fps)
 
SVG SVG::merge (SVG &left, SVG &right, const Margins &margins=DEFAULT_MARGINS)
 
std::vector< Point > SVG::util::polar_points (int n, int a, int b, double radius)
 
template<typename T >
SVG::util::min_or_not_nan (T first, T second)
 
template<typename T >
SVG::util::max_or_not_nan (T first, T second)
 
Orientation SVG::util::orientation (Point &p1, Point &p2, Point &p3)
 
std::vector< Point > SVG::util::convex_hull (std::vector< Point > &points)
 
std::vector< Point > SVG::bounding_polygon (std::vector< Shape *> &shapes)
 

Function Documentation

◆ convex_hull()

std::vector<Point> SVG::util::convex_hull ( std::vector< Point > &  points)
inline

Compute the convex hull of a set of points via Jarvis' gift wrapping algorithm

Ref: https://www.geeksforgeeks.org/convex-hull-set-1-jarviss-algorithm-or-wrapping/

◆ max_or_not_nan()

template<typename T >
T SVG::util::max_or_not_nan ( first,
second 
)
inline

Return the largest number or the number that is not NAN Returns NAN if both are NAN

◆ min_or_not_nan()

template<typename T >
T SVG::util::min_or_not_nan ( first,
second 
)
inline

Return the smallest number or the number that is not NAN Returns NAN if both are NAN

◆ polar_points()

std::vector< Point > SVG::util::polar_points ( int  n,
int  a,
int  b,
double  radius 
)
inline

Return n equidistant points (oriented counterclockwise) located on the perimeter of a circle of radius r centered at (a, b)

Note: Drawing an edge between each consecutive pair of points creates a convex polygon

Return n equidistant points (oriented counterclockwise) located on the perimeter of a circle of radius r centered at (a, b)

Note: Drawing an edge between each consecutive pair of points creates a convex polygon