* Commons define and prototype function for all export functions
*/
-#define SHOW_DIGS_DOUBLE 15
+#define MAX_DOUBLE 1E15
+#define SHOW_DIGS_DOUBLE 20
#define MAX_DOUBLE_PRECISION 15
#define MAX_DIGS_DOUBLE (SHOW_DIGS_DOUBLE + 2) /* +2 mean add dot and sign */
{
POINT2D pt;
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
+
if ( i ) ptr += sprintf(ptr, ",");
ptr += sprintf(ptr, "[%s,%s]", x, y);
}
{
POINT4D pt;
getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
trim_trailing_zeros(z);
+
if ( i ) ptr += sprintf(ptr, ",");
ptr += sprintf(ptr, "[%s,%s,%s]", x, y, z);
}
{
POINT2D pt;
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
+
if ( i ) ptr += sprintf(ptr, " ");
ptr += sprintf(ptr, "%s,%s", x, y);
}
{
POINT4D pt;
getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
trim_trailing_zeros(z);
+
if ( i ) ptr += sprintf(ptr, " ");
ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
}
{
POINT2D pt;
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
+
if ( i ) ptr += sprintf(ptr, " ");
if (is_deegree)
ptr += sprintf(ptr, "%s %s", y, x);
{
POINT4D pt;
getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
trim_trailing_zeros(z);
+
if ( i ) ptr += sprintf(ptr, " ");
if (is_deegree)
ptr += sprintf(ptr, "%s %s %s", y, x, z);
{
POINT2D pt;
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
+
if ( i ) ptr += sprintf(ptr, " ");
ptr += sprintf(ptr, "%s,%s", x, y);
}
{
POINT4D pt;
getPoint4d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, pt.y);
+ else
+ sprintf(y, "%g", pt.y);
trim_trailing_zeros(y);
- sprintf(z, "%.*f", precision, pt.z);
+
+ if (fabs(pt.z) < MAX_DOUBLE)
+ sprintf(z, "%.*f", precision, pt.z);
+ else
+ sprintf(z, "%g", pt.z);
trim_trailing_zeros(z);
+
if ( i ) ptr += sprintf(ptr, " ");
ptr += sprintf(ptr, "%s,%s,%s", x, y, z);
}
POINT2D pt;
getPoint2d_p(point->point, 0, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
+
/* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y);
trim_trailing_zeros(y);
if (circle) ptr += sprintf(ptr, "x=\"%s\" y=\"%s\"", x, y);
/* Starting point */
getPoint2d_p(pa, 0, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1 : pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1 : pt.y);
trim_trailing_zeros(y);
+
ptr += sprintf(ptr,"%s %s l", x, y);
/* All the following ones */
for (i=1 ; i < end ; i++)
{
lpt = pt;
+
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x -lpt.x);
+ if (fabs(pt.x -lpt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x -lpt.x);
+ else
+ sprintf(x, "%g", pt.x -lpt.x);
trim_trailing_zeros(x);
+
/* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision,
- fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
+ if (fabs(pt.y -lpt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision,
+ fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
+ else
+ sprintf(y, "%g",
+ fabs(pt.y -lpt.y) ? (pt.y - lpt.y) * -1: (pt.y - lpt.y));
trim_trailing_zeros(y);
+
ptr += sprintf(ptr," %s %s", x, y);
}
for (i=0 ; i < end ; i++)
{
getPoint2d_p(pa, i, &pt);
- sprintf(x, "%.*f", precision, pt.x);
+
+ if (fabs(pt.x) < MAX_DOUBLE)
+ sprintf(x, "%.*f", precision, pt.x);
+ else
+ sprintf(x, "%g", pt.x);
trim_trailing_zeros(x);
+
/* SVG Y axis is reversed, an no need to transform 0 into -0 */
- sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1:pt.y);
+ if (fabs(pt.y) < MAX_DOUBLE)
+ sprintf(y, "%.*f", precision, fabs(pt.y) ? pt.y * -1:pt.y);
+ else
+ sprintf(y, "%g", fabs(pt.y) ? pt.y * -1:pt.y);
trim_trailing_zeros(y);
+
if (i == 1) ptr += sprintf(ptr, " L ");
else if (i) ptr += sprintf(ptr, " ");
ptr += sprintf(ptr,"%s %s", x, y);