Program Listing for File ClothoidAsyPlot.cc¶
↰ Return to documentation for file (ClothoidAsyPlot.cc)
#include "Clothoids.hh"
namespace G2lib {
AsyPlot::AsyPlot( string _filename, bool _showAxes )
: filename(_filename)
, showAxes(_showAxes)
{
UTILS_ASSERT( openFile(), "Failed to open file {}\n", filename );
initFile();
}
AsyPlot::~AsyPlot() {
if ( showAxes ) displayAxes();
if ( closeFile() ) compileFile();
}
void
AsyPlot::compileFile() {
string cmdComp = "asy -f pdf "+ filename;
system(cmdComp.c_str());
string pdfFile = filename.substr(0,filename.find(".asy")) + ".pdf";
std::cout << pdfFile << std::endl;
string cmdOpen = "(okular " + pdfFile + " &> /dev/null )&";
system(cmdOpen.c_str());
}
void
AsyPlot::initFile() {
file
<< "// File generated automatically from C++ \n\n\n"
<< "import graph;\n"
<< "include \"clothoidLib.asylib\";\n"
<< "size(14cm,7cm);\n"
<< "\n\n\n";
}
void
AsyPlot::drawClothoid( ClothoidCurve const & c,
string const & penna,
real_type offset ) const {
if (offset == 0.) {
file
<< "path pclot = clothoidPoints(("
<< c.xBegin() << ','
<< c.yBegin() << "),"
<< c.thetaBegin() << ','
<< c.kappaBegin() << ','
<< c.dkappa() << ','
<< c.length() << ','
<< "100,0);\n"
<< "pen penna = " << penna << ";\n"
<< "draw(pclot, penna);\n\n";
} else {
file
<< "path pclot = clothoidOffset(("
<< c.xBegin() << ','
<< c.yBegin() << "),"
<< c.thetaBegin() << ','
<< c.kappaBegin() << ','
<< c.dkappa() << ','
<< c.length() << ','
<< "100,"
<< offset
<< "); \n"
<< "pen penna = " << penna << ";\n"
<< "draw(pclot, penna);\n\n";
}
}
void
AsyPlot::dot( real_type x, real_type y, string const & penna ) const {
file << "dot((" << x << "," << y << ")," << penna << ");\n\n";
}
void
AsyPlot::triangle( Triangle2D const & t, string const & penna ) const {
file
<< "draw((" << t.x1() << "," << t.y1() << ") -- "
<< '(' << t.x2() << ',' << t.y2() << ") -- "
<< '(' << t.x3() << ',' << t.y3() << ") -- cycle, "
<< penna << ");\n\n";
}
void
AsyPlot::drawRect( real_type x0, real_type y0,
real_type x1, real_type y1,
real_type x2, real_type y2,
real_type x3, real_type y3,
string const & penna ) const {
file
<< "fill((" << x0 << "," << y0 << ") -- "
<< '(' << x1 << ',' << y1 << ") -- "
<< '(' << x2 << ',' << y2 << ") -- "
<< '(' << x3 << ',' << y3 << ") -- cycle, "
<< penna << ");\n\n";
}
void
AsyPlot::displayAxes() const {
file
<< "xaxis(\"$x$\", black+fontsize(7pt),xmin=0,xmax=5,Ticks(Step=2,step=1,NoZero,Size=.8mm, size=.4mm));\n"
<< "yaxis(\"$y$\", black+fontsize(7pt),ymin=0,ymax=5,Ticks(Step=2,step=1,NoZero,Size=.8mm, size=.4mm));\n";
}
void
AsyPlot::displayAxes( string const & labX,
string const & labY,
real_type xmin,
real_type xmax,
real_type ymin,
real_type ymax ) const {
file
<< "xaxis(\"" << labX << "\", black+fontsize(7pt),xmin="
<< xmin << ",xmax=" << xmax
<< ",Ticks(Step=2,step=1,NoZero,Size=.8mm, size=.4mm));\n"
<< "yaxis(\"" << labY << "\", black+fontsize(7pt),ymin="
<< ymin << ",ymax=" << ymax
<< ",Ticks(Step=2,step=1,NoZero,Size=.8mm, size=.4mm));\n";
}
void
AsyPlot::drawLine( real_type x0, real_type y0,
real_type x1, real_type y1,
string const & penna ) const {
file
<< "draw((" << x0 << "," << y0 << ") -- "
<< "(" << x1 << "," << y1 << "), " << penna << ");\n\n";
}
void
AsyPlot::label( string const & text,
real_type x,
real_type y,
string const & placement,
string const & penna ) const {
file
<< "label(\"" << text << "\", (" << x << ", " << y << "), "
<< (!placement.empty() ? placement + ", " : "")
<< penna << ");\n\n";
}
bool
AsyPlot::openFile() {
file.open(filename.c_str());
return file.is_open();
}
bool
AsyPlot::closeFile() {
file.close();
return !file.is_open();
}
}