Skip to content

A simple header-only library for generating SVG files from C++

Notifications You must be signed in to change notification settings

vincentlaucsb/svg

Repository files navigation

SVG for C++

Build Status codecov

Purpose

This a header-only library for generating SVG files from a simple C++ interface. It can also perform non-trivial tasks such as calculating a bounding box for an SVG's elements, or merging several graphics together.

Want to see more? Read the documentation.

Basic Usage

#include "svg.hpp"
#include <fstream>

int main() {
    SVG::SVG root;

    // Basic CSS support
    root.style("circle").set_attr("fill", "#000000")
        .set_attr("stroke", "#000000");
    root.style("rect#my_rectangle").set_attr("fill", "red");

    // Method 1 of adding elements - add_child<>()
    auto shapes = root.add_child<SVG::Group>();
    auto rect = shapes->add_child<SVG::Rect>("my_rectangle");

    // Method 2 of adding elements - operator<<
    *shapes << SVG::Circle(-100, -100, 100) << SVG::Circle(100, 100, 100);

    // Reference elements by id, tag, class name, etc...
    root.get_element_by_id("my_rectangle")
        ->set_attr("x", 20).set_attr("y", 20)
        .set_attr("width", 40).set_attr("height", 40);

    std::cout << "There are " << root.get_children<SVG::Circle>().size() <<
        " circles." << std::endl;

    // Automatically scale width and height to fit elements
    root.autoscale();

    // Output our drawing
    std::ofstream outfile("my_drawing.svg");
    outfile << std::string(root);
}

Output

<svg height="420.0" viewBox="-210.0 -210.0 420.0 420.0" width="420.0" xmlns="http://www.w3.org/2000/svg">
	<style type="text/css">
		<![CDATA[
			circle {
				fill: #000000;
				stroke: #000000;
			}
			rect#my_rectangle {
				fill: red;
			}
		]]>
	</style>
	<g>
		<rect height="40" id="my_rectangle" width="40" x="20" y="20" />
		<circle cx="-100.0" cy="-100.0" r="100.0" />
		<circle cx="100.0" cy="100.0" r="100.0" />
	</g>
</svg>

Simple Animations

This package supports creating basic animations via CSS keyframes via the frame_animate() function.

About

A simple header-only library for generating SVG files from C++

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages