From 1a38451a1aa0c69647cc2891068833c99b68e302 Mon Sep 17 00:00:00 2001
From: cnr-isti-vclab <paolo.cignoni@isti.cnr.it>
Date: Thu, 12 Jul 2007 11:02:06 +0000
Subject: [PATCH] Scale in SingleFile mode changed, it have to be calcolated
 before draw.

---
 wrap/io_edgemesh/export_svg.h | 43 +++++++++++++++++++++++++++--------
 1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/wrap/io_edgemesh/export_svg.h b/wrap/io_edgemesh/export_svg.h
index 6c7a88ab..9bada6b7 100644
--- a/wrap/io_edgemesh/export_svg.h
+++ b/wrap/io_edgemesh/export_svg.h
@@ -24,6 +24,9 @@
   History
 
 $Log: not supported by cvs2svn $
+Revision 1.10  2007/07/10 07:48:41  cignoni
+changed a template >> into > >
+
 Revision 1.9  2007/07/10 06:58:31  cignoni
 added a missing typename
 
@@ -124,6 +127,7 @@ private:
     //Starting offset
 	float Xmin, Ymin;
 	Point2f* minPos;
+	Point2f* maxPos;
 
 	
 
@@ -154,6 +158,7 @@ public:
 		Xmin=0;
 		Ymin=0;
 		minPos= new Point2f(0,0);
+		maxPos= new Point2f(0,0);
 	}
 
 // public methods
@@ -228,7 +233,11 @@ public:
 	void setMinPoint(Point2f* p){
 		 minPos = p;
 	}
+	void setMaxPoint(Point2f* p){
+		 maxPos = p;
+	}
 	Point2f* getminPoint(){return (minPos);}
+	Point2f* getmaxPoint(){return (maxPos);}
 	
 
 };
@@ -265,15 +274,23 @@ public:
 		typename std::vector<EdgeMeshType*>::iterator it;
         int i=0;
 		Point2f pmin(100000000.0f,  100000000.0f);
+		Point2f pmax(-10000000.0f, -10000000.0f);
 		for(it=(*vp).begin(); it!=(*vp).end(); it++){
 			EdgeMeshType* ed;
 		    ed=(*it);
 			Save(ed,o,pro, -2);
-			Point2f* p=pro.getminPoint();
-			pmin[0]=min(pmin[0], p->X());
-			pmin[1]=min(pmin[1], p->Y());
+			Point2f* pmi=pro.getminPoint();
+			Point2f* pma=pro.getmaxPoint();
+			pmin[0]=min(pmin[0], pmi->X());
+			pmin[1]=min(pmin[1], pmi->Y());
+			pmax[0]=max(pmax[0], pma->X());
+			pmax[1]=max(pmax[1], pma->Y());
 		}
+		float maxEdge=max(pmax[0]-pmin[0], pmax[1]-pmin[1]);
+		float scl = (pro.getViewBox().V(0)/pro.numCol) /maxEdge ;
+		pro.setScale(scl);
 		pro.setMinPoint(new Point2f(pmin[0],pmin[1]));
+		pro.setMaxPoint(new Point2f(pmax[0],pmax[1]));
 		for(it=(*vp).begin(); it!=(*vp).end(); it++){
             
 			EdgeMeshType* ed;
@@ -308,7 +325,7 @@ public:
 	  WriteXmlHead(o, props.getWidth(),props.getHeight(), props.getViewBox(), props.getPosition());
 	  		
         props.setPosition(Point2d(0,40));
-		Save(mp, o, props, 0);
+		Save(mp, o, props, -1);
         fprintf(o, "</svg>");
 		
 
@@ -321,6 +338,7 @@ public:
 	 static void Save(EdgeMeshType *mp, FILE* o, SVGProperties  props, int numSlice)
 	{ 
 		bool preCal=false;
+		
 		if(numSlice==-2) preCal=true; 
 		// build vector basis (n, v1, v2)
 		Point3d p1(0.0,0.0,0.0);
@@ -396,7 +414,10 @@ public:
 			fprintf(o, "<svg id = \" %d \">\n", numSlice );
 			int x=props.getViewBox().V(0);
 			int y=props.getViewBox().V(1);
+			if(numSlice>=0)
 			fprintf(o, "<rect width= \" %d \" height= \" %d \" x=\"%d \" y=\" %d \" style= \" stroke-width:1; fill-opacity:0.0; stroke:rgb(0,0,0)\" /> \n",x/props.numCol,y,  (x/props.numCol)*numSlice, 40);
+			else
+			fprintf(o, "<rect width= \" %d \" height= \" %d \" x=\"%d \" y=\" %d \" style= \" stroke-width:1; fill-opacity:0.0; stroke:rgb(0,0,0)\" /> \n",x/props.numCol,y,  0, 40);
 			
 			
 			std::vector<Point2f>::iterator itPoints;
@@ -405,7 +426,7 @@ public:
 				Point2f p1 = *itPoints;
 				++itPoints;
 				Point2f p2 = *itPoints;
-				if(numSlice==0){
+				if(numSlice==-1){
 					fprintf(o, "        <line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" \n", 
 				    pos.X()+((p1[0]-pmin[0]) * scale), pos.Y()+((p1[1]-pmin[1]) * scale),
 				   pos.X()+((p2[0]-pmin[0]) * scale), pos.Y()+((p2[1]-pmin[1]) * scale ));
@@ -423,10 +444,14 @@ public:
 		fprintf(o, "  </g>\n");
 		}
 		else{
-			Point2f* p=props.getminPoint();
-			p->X()=pmin[0];
-			p->Y()=pmin[1];
-			props.setMinPoint(p);
+			Point2f* pmi=props.getminPoint();
+			Point2f* pma=props.getmaxPoint();
+			pmi->X()=pmin[0];
+			pmi->Y()=pmin[1];
+			pma->X()=pmax[0];
+			pma->Y()=pmax[1];
+			props.setMinPoint(pmi);
+			props.setMaxPoint(pma);
 
 		}
 	}