$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
From: JakeVoytko_at_[hidden]
Date: 2007-08-03 16:06:44
Author: jakevoytko
Date: 2007-08-03 16:06:40 EDT (Fri, 03 Aug 2007)
New Revision: 38426
URL: http://svn.boost.org/trac/boost/changeset/38426
Log:
Started adding clipping to document
Text files modified: 
   sandbox/SOC/2007/visualization/boost/svg_plot/detail/svg_tag.hpp |    68 +++++++++++++++++++++++++-------------- 
   sandbox/SOC/2007/visualization/boost/svg_plot/svg.hpp            |    15 +++++--                                 
   2 files changed, 53 insertions(+), 30 deletions(-)
Modified: sandbox/SOC/2007/visualization/boost/svg_plot/detail/svg_tag.hpp
==============================================================================
--- sandbox/SOC/2007/visualization/boost/svg_plot/detail/svg_tag.hpp	(original)
+++ sandbox/SOC/2007/visualization/boost/svg_plot/detail/svg_tag.hpp	2007-08-03 16:06:40 EDT (Fri, 03 Aug 2007)
@@ -46,6 +46,8 @@
 protected:
     svg_style style_info;
     std::string id_name;
+	std::string class_name;
+	std::string clip_name;
 
 public:
     virtual void write(std::ostream& rhs) = 0;
@@ -55,11 +57,35 @@
 
     }
 
+	void write_elements(std::ostream& rhs)
+	{
+		if(id_name.size())
+		{
+			rhs << " id=\"" << id_name << "\"";
+		}
+
+		if(class_name.size())
+		{
+			rhs << " class=\"" << class_name << "\"";
+		}
+
+		if(clip_name.size())
+		{
+			rhs << " clip-path=\"" << id_name << "\" ";
+		}
+	}
+
    svg_style& style(){ return style_info; }
    const svg_style& style() const{ return style_info; }
 
    void id(const std::string& _id) { id_name = _id; }
-   std::string id( ) { return std::string(id_name); }
+   std::string id( ) { return id_name; }
+
+   void clip(const std::string& _name){ clip_name = _name; }
+   std::string clip( ) { return clip_name; }
+
+   void xml_class(const std::string& _class) { class_name = _class; }
+   std::string xml_class() { return class_name; }
 };
 
 // -----------------------------------------------------------------
@@ -80,7 +106,9 @@
 
     void write(std::ostream& rhs)
     {
-        rhs<<"<rect x=\""<<x<<"\""
+        rhs<<"<rect";
+		write_elements(rhs);
+		rhs<<"x=\""<<x<<"\""
                     <<" y=\""<<y<<"\" "
                     <<" width=\""<<width<<"\" "
                     <<" height=\""<<height<<"\"/>"
@@ -105,7 +133,9 @@
 
     void write(std::ostream& rhs)
     {
-        rhs<<"<circle cx=\""
+        rhs<<"<circle";
+		write_elements(rhs);
+		rhs<<"cx=\""
            <<x<<"\" cy=\""
            <<y<<"\" r=\""
            <<radius<<"\"/>";
@@ -130,7 +160,9 @@
 
     void write(std::ostream& rhs)
     {
-        rhs<<"<line x1=\""<<x1<<"\" y1=\""<<y1<<"\" x2=\""<<x2<<"\" y2=\""
+        rhs<<"<line ";
+		write_elements(rhs);
+		rhs<<"x1=\""<<x1<<"\" y1=\""<<y1<<"\" x2=\""<<x2<<"\" y2=\""
             <<y2<<"\"/>";
     }
 };
@@ -199,7 +231,9 @@
             break;
         }
 
-        rhs << "<text x=\"" << x_coord << "\""
+        rhs << "<text ";
+		write_elements(rhs);
+		rhs<<"x=\"" << x_coord << "\""
             <<" y=\"" << y_coord << "\" ";
         
         if(output != "")
@@ -613,7 +647,9 @@
 
     void write(std::ostream& o_str)
     {
-        o_str<<"<path d=\"";
+        o_str<<"<path ";
+		write_elements(o_str);
+		o_str<<"d=\"";
            
         for(ptr_vector<path_point>::iterator i = path.begin();
             i!=path.end();
@@ -642,17 +678,9 @@
 {
 private: 
     ptr_vector<svg_element> children;
-    std::string clip_name;
-
-    bool clip_on;
     
 public:
 
-    g_element():clip_on(false)
-    {
-
-    }
-
     svg_element& operator[](unsigned int i)
     {
         return children[i];
@@ -667,6 +695,7 @@
     {
         rhs << "<g ";
 
+		write_elements(rhs);
         style_info.write(rhs);
 
         rhs<< " >" << std::endl;
@@ -703,17 +732,6 @@
         children.clear();
     }
 
-    void use_clip(bool _use)
-    {
-        clip_on = _use;
-    }
-     
-    void clip(const std::string& _name)
-    {
-        clip_on = true;
-        clip_name = _name;
-    }
-
     g_element& circle(double x, double y, double radius = 5.)
     {
         children.push_back(new circle_element(x, y, radius));
Modified: sandbox/SOC/2007/visualization/boost/svg_plot/svg.hpp
==============================================================================
--- sandbox/SOC/2007/visualization/boost/svg_plot/svg.hpp	(original)
+++ sandbox/SOC/2007/visualization/boost/svg_plot/svg.hpp	2007-08-03 16:06:40 EDT (Fri, 03 Aug 2007)
@@ -13,6 +13,7 @@
 #include <ostream>
 #include <fstream>
 #include <exception>
+#include <vector>
 
 #include "detail/svg_tag.hpp"
 #include "svg_style.hpp"
@@ -28,6 +29,8 @@
     
     g_element document;
 
+	std::vector<clip_path_element> clip_paths;
+
 private:
 
     // -----------------------------------------------------------------
@@ -35,15 +38,17 @@
     // -----------------------------------------------------------------
     void _write_document(std::ostream& s_out)
     {
-        //Write color information
-
-        //Write all visual elements
+        //Write clip paths
+		for(size_t i=0; i<clip_paths.size(); ++i)
+        {
+            clip_paths[ (unsigned int)i ].write(s_out);
+        }
+        
+		//Write all visual elements
         for(size_t i=0; i<document.size(); ++i)
         {
             document[ (unsigned int)i ].write(s_out);
         }
-
-        //end g tag
     }
 
     // -----------------------------------------------------------------