The functions acdbRToS() and acdbAngToS() convert values used in AutoCAD to string values that can be used in output or as textual data. The acdbRToS() function converts a real value, and acdbAngToS() converts an angle. The format of the result string is controlled by the value of AutoCAD system variables: the units and precision are specified by LUNITS and LUPREC for real (linear) values and by AUNITS and AUPREC for angular values. For both functions, the DIMZIN dimensioning variable controls how leading and trailing zeros are written to the result string. The complementary functions acdbDisToF() and acdbAngToF() convert strings back into real (distance) values or angles. If passed a string generated by acdbRToS() or acdbAngToS(), acdbDisToF() and acdbAngToF() (respectively) are guaranteed to return a valid value.
For example, the following fragment shows calls to acdbRToS(). (Error checking is not shown but should be included in applications.)
ads_real x = 17.5;
char fmtval[12];
//Precision is the 3rd argument: 4 places in the first
// call, 2 places in the others.
acdbRToS(x, 1, 4, fmtval); // Mode 1 = scientific
acutPrintf("Value formatted as %s\n", fmtval);
acdbRToS(x, 2, 2, fmtval); // Mode 2 = decimal
acutPrintf("Value formatted as %s\n", fmtval);
acdbRToS(x, 3, 2, fmtval); // Mode 3 = engineering
acutPrintf("Value formatted as %s\n", fmtval);
acdbRToS(x, 4, 2, fmtval); // Mode 4 = architectural
acutPrintf("Value formatted as %s\n", fmtval);
acdbRToS(x, 5, 2, fmtval); // Mode 5 = fractional
acutPrintf("Value formatted as %s\n", fmtval);
These calls (assuming that the DIMZIN variable equals 0) display the following values on the AutoCAD text screen.
Value formatted as 1.7500E+01
Value formatted as 17.50
Value formatted as 1′-5.50″
Value formatted as 1′-5 1/2″
Value formatted as 17 1/2
When the UNITMODE system variable is set to 1, which specifies that units are displayed as entered, the string returned by acdbRToS() differs for engineering (mode equals 3), architectural (mode equals 4), and fractional (mode equals 5) units. For example, the first two lines of the preceding sample output would be the same, but the last three lines would appear as follows:
Value formatted as 1′5.50″
Value formatted as 1′5-1/2″
Value formatted as 17-1/2
The acdbDisToF() function complements acdbRToS(), so the following calls, which use the strings generated in the previous examples, all set result to the same value, 17.5. (Again, the examples do not show error checking.)
acdbDisToF("1.7500E+01", 1, &result); // 1 = scientific
acdbDisToF("17.50", 2, &result); // 2 = decimal
// Note the backslashes. Needed for inches.
acdbDisToF("1'-5.50\"", 3, &result); // 3 = engineering
acdbDisToF("1'-5 1/2\"", 4, &result); // 4 = architectural
acdbDisToF("17 1/2", 5, &result); // 5 = fractional
The following fragment shows calls to acdbAngToS() that are similar to the previous acdbRToS() examples.
ads_real ang = 3.14159;
char fmtval[12];
// Precision is the 3rd argument: 0 places in the first
// call, 4 places in the next 3, 2 in the last.
acdbAngToS(ang, 0, 0, fmtval); // Mode 0 = degrees
acutPrintf("Angle formatted as %s\n", fmtval);
acdbAngToS(ang, 1, 4, fmtval); // Mode 1 = deg/min/sec
acutPrintf("Angle formatted as %s\n", fmtval);
acdbAngToS(ang, 2, 4, fmtval); // Mode 2 = grads
acutPrintf("Angle formatted as %s\n", fmtval);
acdbAngToS(ang, 3, 4, fmtval); // Mode 3 = radians
acutPrintf("Angle formatted as %s\n", fmtval);
acdbAngToS(ang, 4, 2, fmtval); // Mode 4 = surveyor's
acutPrintf("Angle formatted as %s\n", fmtval);
These calls (still assuming that DIMZIN equals 0) display the following values on the AutoCAD text screen.
Angle formatted as 180
Angle formatted as 180d0′0″
Angle formatted as 200.0000g
Angle formatted as 3.1416r
Angle formatted as W
The acdbAngToF() function complements acdbAngToS(), so the following calls all set the result argument to the same value, 3.14159. (This is rounded up to 3.1416 in the example that uses radians.)
acdbAngToF("180", 0, &result); // 0 = degrees
acdbAngToF("180d0'0\"", 1, &result); // 1 = deg/min/sec
acdbAngToF("200.0000g", 2, &result); // 2 = grads
acdbAngToF("3.1416r", 3, &result); // 3 = radians
acdbAngToF("W", 4, &result); // 4 = surveyor's