#include "sif.h" #include "language.h" // changes to this array must be mirrored in enum SIFReservedWordType CHAR *gcppcSIFReservedWords[sifrwtSize] = { "SIF_SFF", "units", "coord_precision", "desired_accuracy", "tm", "tac", "tab", "taf", "r", "tf", "tsb", "tsf", "face", "f", "NURBS", "bezier", "loop", "body", "lumpset", "lump", "nested2d", "boundary2d", "shell", "surface", "bspline2d", "bezier2d", "uniform", "bezier", "t", "triangles", "nested1d", "boundary1d", "contour", "circle", "path", "arc", "v", "def", "inst", "tv", "tx", "ty", "tz", "rv", "rx", "ry", "rz", "sv", "sa", "sx", "sy", "sz", "mo", "mx", "my", "mz", "e" }; VOID WriteSIFValue(const INT_32 iPrecisionExp, const FLOAT fValue) { // FLOAT fMult, fTrunc; DOUBLE dMult, dTrunc; dMult = fValue * pow( /*(Steve)*/(DOUBLE)10, (DOUBLE) (-iPrecisionExp)); dMult = floor(dMult+0.5); dTrunc = dMult * pow(/*(Steve)*/(DOUBLE)10, (DOUBLE)iPrecisionExp); #ifndef WIN32 if ( (DOUBLE)((INT_64)dTrunc) == dTrunc ) #else if ( (DOUBLE)(dTrunc) == dTrunc ) #endif { // NOTE: when langlib compiled with ndebug, this clause never // seems to be executed - integers printed w/ all their precision. fprintf(gfpOutputFile, "%.0f", dTrunc); } else { fprintf(gfpOutputFile, "(%s %.0f %ld)", gcppcSIFReservedWords[sifrwtExponential], dMult, iPrecisionExp); } } VOID WriteSIFPoint(const INT_32 iPrecisionExp, const Point &pt) { WriteSIFValue(iPrecisionExp, pt(X)); fprintf(gfpOutputFile, " "); WriteSIFValue(iPrecisionExp, pt(Y)); fprintf(gfpOutputFile, " "); WriteSIFValue(iPrecisionExp, pt(Z)); } VOID WriteSIFVector(const INT_32 iPrecisionExp, const Vector &v) { WriteSIFValue(iPrecisionExp, v(X)); fprintf(gfpOutputFile, " "); WriteSIFValue(iPrecisionExp, v(Y)); fprintf(gfpOutputFile, " "); WriteSIFValue(iPrecisionExp, v(Z)); } /* VOID WriteSIFTransforms(const INT_32 iPrecisionExp, const UINT_32 uiIndent, const Matrix &m) { Vector vTrans, vScale, vRot; DOUBLE dTheta; m.Decompose(vTrans, vScale, vRot, &dTheta); // Write the Rotation Matrix WriteIndent(uiIndent); fprintf(gfpOutputFile, "(%s ", gcppcSIFReservedWords[sifrwtRotate]); WriteSIFVector(iPrecisionExp, vRot); fprintf(gfpOutputFile, " "); WriteSIFValue(iPrecisionExp, TODEG(dTheta)); fprintf(gfpOutputFile, ")\n"); // Write the Scale Matrix WriteIndent(uiIndent); fprintf(gfpOutputFile, "(%s ", gcppcSIFReservedWords[sifrwtScaleX]); WriteSIFValue(iPrecisionExp, vScale[X]); fprintf(gfpOutputFile, ")\n"); WriteIndent(uiIndent); fprintf(gfpOutputFile, "(%s ", gcppcSIFReservedWords[sifrwtScaleY]); WriteSIFValue(iPrecisionExp, vScale[Y]); fprintf(gfpOutputFile, ")\n"); WriteIndent(uiIndent); fprintf(gfpOutputFile, "(%s ", gcppcSIFReservedWords[sifrwtScaleZ]); WriteSIFValue(iPrecisionExp, vScale[Z]); fprintf(gfpOutputFile, ")\n"); // Write the Translation Matrix WriteIndent(uiIndent); fprintf(gfpOutputFile, "(%s ", gcppcSIFReservedWords[sifrwtTranslate]); WriteSIFVector(iPrecisionExp, vTrans); fprintf(gfpOutputFile, ")\n"); } */