fix bug with exporting of translate plans
This commit is contained in:
parent
f2e35aaf0d
commit
fa4061a630
|
@ -24,6 +24,9 @@
|
||||||
History
|
History
|
||||||
|
|
||||||
$Log: not supported by cvs2svn $
|
$Log: not supported by cvs2svn $
|
||||||
|
Revision 1.7 2007/06/13 09:17:14 andrenucci
|
||||||
|
Fix problem with scale
|
||||||
|
|
||||||
Revision 1.5 2007/05/29 10:09:29 cignoni
|
Revision 1.5 2007/05/29 10:09:29 cignoni
|
||||||
Added a const (and reformatted)
|
Added a const (and reformatted)
|
||||||
|
|
||||||
|
@ -80,7 +83,7 @@ public:
|
||||||
|
|
||||||
static const int DEFAULT_LINE_WIDTH=2;
|
static const int DEFAULT_LINE_WIDTH=2;
|
||||||
|
|
||||||
//in singlefile export make the grid of sessiones
|
//in single-file export make the grid of sessiones
|
||||||
int numCol;
|
int numCol;
|
||||||
int numRow;
|
int numRow;
|
||||||
|
|
||||||
|
@ -113,6 +116,12 @@ private:
|
||||||
|
|
||||||
//Text details
|
//Text details
|
||||||
bool showDetails;
|
bool showDetails;
|
||||||
|
|
||||||
|
//Starting offset
|
||||||
|
float Xmin, Ymin;
|
||||||
|
Point2f* minPos;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// construction
|
// construction
|
||||||
public:
|
public:
|
||||||
|
@ -134,6 +143,9 @@ public:
|
||||||
width=10; //width of the windows
|
width=10; //width of the windows
|
||||||
height=10; //height of the windows
|
height=10; //height of the windows
|
||||||
showDetails=true;
|
showDetails=true;
|
||||||
|
Xmin=0;
|
||||||
|
Ymin=0;
|
||||||
|
minPos= new Point2f(0,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// public methods
|
// public methods
|
||||||
|
@ -204,11 +216,15 @@ public:
|
||||||
int getWidth(){return width;}
|
int getWidth(){return width;}
|
||||||
bool showTextDetails(){return showDetails;}
|
bool showTextDetails(){return showDetails;}
|
||||||
int getHeight(){return height;}
|
int getHeight(){return height;}
|
||||||
|
|
||||||
|
void setMinPoint(Point2f* p){
|
||||||
|
minPos = p;
|
||||||
|
}
|
||||||
|
Point2f* getminPoint(){return (minPos);}
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
//const int SVGProperties::DEFAULT_LINE_WIDTH = 2;
|
|
||||||
//const char * SVGProperties::DEFAULT_LINE_COLOR = "black";
|
|
||||||
//const char * SVGProperties::DEFAULT_LINE_CAP = "round";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SVG exporter.
|
* SVG exporter.
|
||||||
|
@ -240,7 +256,16 @@ public:
|
||||||
float scale= pro.getScale();
|
float scale= pro.getScale();
|
||||||
vector<EdgeMeshType*>::iterator it;
|
vector<EdgeMeshType*>::iterator it;
|
||||||
int i=0;
|
int i=0;
|
||||||
|
Point2f pmin(100000000.0f, 100000000.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());
|
||||||
|
}
|
||||||
|
pro.setMinPoint(new Point2f(pmin[0],pmin[1]));
|
||||||
for(it=(*vp).begin(); it!=(*vp).end(); it++){
|
for(it=(*vp).begin(); it!=(*vp).end(); it++){
|
||||||
|
|
||||||
EdgeMeshType* ed;
|
EdgeMeshType* ed;
|
||||||
|
@ -250,35 +275,34 @@ public:
|
||||||
|
|
||||||
int x=pro.getViewBox().V(0);
|
int x=pro.getViewBox().V(0);
|
||||||
int y=pro.getViewBox().V(1);
|
int y=pro.getViewBox().V(1);
|
||||||
|
/*
|
||||||
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/pro.numCol,y, (x/pro.numCol)*i, 40);
|
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/pro.numCol,y, (x/pro.numCol)*i, 40);
|
||||||
|
*/
|
||||||
Save(ed,o,pro);
|
Save(ed,o,pro, i);
|
||||||
|
|
||||||
if(pro.showTextDetails()){
|
if(pro.showTextDetails()){
|
||||||
fprintf(o,"<text x= \" %d \" y= \"30 \" font-family= \"Verdana \" font-size= \"30 \" >",(x/pro.numCol)*i);
|
fprintf(o,"<text x= \" %d \" y= \"30 \" font-family= \"Verdana \" font-size= \"30 \" >\n",(x/pro.numCol)*i);
|
||||||
fprintf(o,"Slice n\°:%d </text>", i);}
|
fprintf(o,"Slice num:%d </text>\n", i);}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
fprintf(o, "</svg>");
|
fprintf(o, "</svg>");
|
||||||
fclose(o);
|
fclose(o);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
//! Save with the given SVG properties.
|
||||||
|
|
||||||
//! Save with the given SVG properties.
|
|
||||||
static bool Save(EdgeMeshType *mp, const char *filename, SVGProperties & props )
|
static bool Save(EdgeMeshType *mp, const char *filename, SVGProperties & props )
|
||||||
{
|
{
|
||||||
|
|
||||||
FILE * o = fopen(filename,"w");
|
FILE * o = fopen(filename,"w");
|
||||||
if (o==NULL)
|
if (o==NULL)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
WriteXmlHead(o, props.getWidth(),props.getHeight(), props.getViewBox(), props.getPosition());
|
WriteXmlHead(o, props.getWidth(),props.getHeight(), props.getViewBox(), props.getPosition());
|
||||||
|
|
||||||
|
props.setPosition(Point2d(0,40));
|
||||||
Save(mp, o, props);
|
Save(mp, o, props, 0);
|
||||||
|
fprintf(o, "</svg>");
|
||||||
fprintf(o, "</svg>");
|
|
||||||
|
|
||||||
// final xml tags
|
// final xml tags
|
||||||
|
|
||||||
|
@ -286,8 +310,10 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Save(EdgeMeshType *mp, FILE* o, SVGProperties props)
|
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)
|
// build vector basis (n, v1, v2)
|
||||||
Point3d p1(0.0,0.0,0.0);
|
Point3d p1(0.0,0.0,0.0);
|
||||||
Point3d p2(1.0,0.0,0.0);
|
Point3d p2(1.0,0.0,0.0);
|
||||||
|
@ -302,12 +328,13 @@ public:
|
||||||
|
|
||||||
v1.Normalize();
|
v1.Normalize();
|
||||||
Point3d v2 = v1 ^ props.projPlane()->Direction();
|
Point3d v2 = v1 ^ props.projPlane()->Direction();
|
||||||
|
//Global points
|
||||||
|
vector<vector<Point2f>>* glb;
|
||||||
std::vector<Point2f> pts;
|
std::vector<Point2f> pts;
|
||||||
pts.clear();
|
pts.clear();
|
||||||
Point2f pmin(100000000.0f, 100000000.0f);
|
Point2f pmin(100000000.0f, 100000000.0f);
|
||||||
Point2f pmax(-100000000.0f, -100000000.0f);
|
Point2f pmax(-100000000.0f, -100000000.0f);
|
||||||
|
Point3d bbMin;
|
||||||
|
|
||||||
typename EdgeMeshType::EdgeIterator i;
|
typename EdgeMeshType::EdgeIterator i;
|
||||||
|
|
||||||
|
@ -318,14 +345,19 @@ public:
|
||||||
|
|
||||||
p1 = (*i).V(0)->P();
|
p1 = (*i).V(0)->P();
|
||||||
p2 = (*i).V(1)->P();
|
p2 = (*i).V(1)->P();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Point3d p1d(p1[0], p1[1], p1[2]);
|
Point3d p1d(p1[0], p1[1], p1[2]);
|
||||||
Point3d p2d(p2[0], p2[1], p2[2]);
|
Point3d p2d(p2[0], p2[1], p2[2]);
|
||||||
|
|
||||||
|
|
||||||
// Project the line on the reference plane
|
// Project the line on the reference plane
|
||||||
|
|
||||||
Point3d p1proj = props.projPlane()->Projection(p1d);
|
Point3d p1proj = props.projPlane()->Projection(p1d);
|
||||||
Point3d p2proj = props.projPlane()->Projection(p2d);
|
Point3d p2proj = props.projPlane()->Projection(p2d);
|
||||||
|
|
||||||
|
|
||||||
// Convert the 3D coordinates of the line to the uv coordinates of the plane
|
// Convert the 3D coordinates of the line to the uv coordinates of the plane
|
||||||
Point2f pt1(static_cast<float>(p1proj * v1), static_cast<float>(p1proj * v2));
|
Point2f pt1(static_cast<float>(p1proj * v1), static_cast<float>(p1proj * v2));
|
||||||
Point2f pt2(static_cast<float>(p2proj * v1), static_cast<float>(p2proj * v2));
|
Point2f pt2(static_cast<float>(p2proj * v1), static_cast<float>(p2proj * v2));
|
||||||
|
@ -341,35 +373,54 @@ public:
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Point2f bbp(static_cast<float>(bbMin * v1), static_cast<float>(bbMin * v2));
|
||||||
float scale=props.getScale();
|
if(!preCal){
|
||||||
|
float scale=props.getScale();
|
||||||
|
|
||||||
// line settings
|
// line settings
|
||||||
Point2d pos=props.getPosition();
|
Point2d pos=props.getPosition();
|
||||||
|
|
||||||
fprintf(o, " <g stroke=\"%s\" stroke-linecap=\"%s\" > \n",
|
fprintf(o, " <g stroke=\"%s\" stroke-linecap=\"%s\" > \n",
|
||||||
props.lineColor(), props.lineCapStyle());
|
props.lineColor(), props.lineCapStyle());
|
||||||
float maxEdges= math::Max((pmax[0]-pmin[0]), (pmax[1]-pmin[1]));
|
float maxEdges= math::Max((pmax[0]-pmin[0]), (pmax[1]-pmin[1]));
|
||||||
Draw_proportions_scale(o,maxEdges, props);
|
if (numSlice==0)
|
||||||
std::vector<Point2f>::iterator itPoints;
|
Draw_proportions_scale(o,maxEdges, props);
|
||||||
for(itPoints = pts.begin(); itPoints != pts.end(); ++itPoints)
|
fprintf(o, "<svg id = \" %d \">\n", numSlice );
|
||||||
{
|
int x=props.getViewBox().V(0);
|
||||||
Point2f p1 = *itPoints;
|
int y=props.getViewBox().V(1);
|
||||||
++itPoints;
|
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);
|
||||||
Point2f p2 = *itPoints;
|
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<Point2f>::iterator itPoints;
|
||||||
|
for(itPoints = pts.begin(); itPoints != pts.end(); ++itPoints)
|
||||||
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),
|
Point2f p1 = *itPoints;
|
||||||
pos.X()+((p2[0] - pmin[0]) * scale), pos.Y()+((p2[1] - pmin[1]) * scale ));
|
++itPoints;
|
||||||
|
Point2f p2 = *itPoints;
|
||||||
fprintf(o, " stroke-width = \"%d\" ",props.lineWidth());
|
if(numSlice==0){
|
||||||
fprintf(o, "/>\n");
|
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 ));
|
||||||
|
fprintf(o, " stroke-width = \"%d\" ",props.lineWidth());
|
||||||
|
fprintf(o, "/>\n");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
fprintf(o, " <line x1=\"%f\" y1=\"%f\" x2=\"%f\" y2=\"%f\" \n",
|
||||||
|
pos.X()+((p1[0]-props.getminPoint()->X()) * scale), pos.Y()+((p1[1]-props.getminPoint()->Y()) * scale),
|
||||||
|
pos.X()+((p2[0]-props.getminPoint()->X()) * scale), pos.Y()+((p2[1]-props.getminPoint()->Y()) * scale ));
|
||||||
|
fprintf(o, " stroke-width = \"%d\" ",props.lineWidth());
|
||||||
|
fprintf(o, "/>\n");}
|
||||||
}
|
}
|
||||||
|
fprintf(o, "</svg>");
|
||||||
fprintf(o, " </g>\n");
|
fprintf(o, " </g>\n");
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
Point2f* p=props.getminPoint();
|
||||||
|
p->X()=pmin[0];
|
||||||
|
p->Y()=pmin[1];
|
||||||
|
props.setMinPoint(p);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -416,6 +467,7 @@ public:
|
||||||
fprintf(o, " </rdf:RDF> \n");
|
fprintf(o, " </rdf:RDF> \n");
|
||||||
fprintf(o, " </metadata> \n");
|
fprintf(o, " </metadata> \n");
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue