ObjectARX, AutoCAD. Среда программирования библиотеки C++

Строковые Преобразования


Функции acdbRToS () и acdbAngToS () преобразовывают значения, используемые в AutoCAD к строковым значениям, которые могут использоваться в выводе или как текстовые данные. AcdbRToS () функция преобразовывает реальное значение, и acdbAngToS () преобразовывает угол. Формат строки результата управляется значением переменных системы AutoCAD: модули и точность определены LUNITS и LUPREC для реальных (линейных) значений и AUNITS и AUPREC для угловых значений. Для и функционирует, DIMZIN dimensioning переменное средство управления, как продвижение и конечные нули написаны к строке результата. Дополнительные функции acdbDisToF () и acdbAngToF () преобразовывают строки назад в реальные значения (расстояния) или углы. Если пропускается строка, сгенерированная acdbRToS () или acdbAngToS (), acdbDisToF () и acdbAngToF () (соответственно), как гарантируют,  возвратят имеющее силу значение.

Например, следующие показы фрагмента вызывают к acdbRToS () (. Проверка Ошибки не показывается, но должна быть включена в приложения.)

Ads_real x = 17.5;

char fmtval [12];

// Точность - 3-ий параметр: 4 места в первом

// Вызвать, 2 места в другие.

AcdbRToS

(x, 1, 4, fmtval); // Режим 1 = научный

AcutPrintf

(" Значение, отформатированное как %s\n ", fmtval);

AcdbRToS

(x, 2, 2, fmtval); // Режим 2 = десятичное число

AcutPrintf



(" Значение, отформатированное как %s\n ", fmtval);

AcdbRToS

(x, 3, 2, fmtval); // Режим 3 = разработка

AcutPrintf

(" Значение, отформатированное как %s\n ", fmtval);

AcdbRToS

(x, 4, 2, fmtval); // Режим 4 = архитектурный

AcutPrintf

(" Значение, отформатированное как %s\n ", fmtval);

AcdbRToS

(x, 5, 2, fmtval); // Режим 5 = дробный

AcutPrintf

(" Значение, отформатированное как %s\n ", fmtval);

Они вызывают (принятие, что DIMZIN переменная равняется 0) отображают следующий

Значения на экране текста AutoCAD.

Значение, отформатированное как 1.7500E+01

Значение, отформатированное как 17.50

Значение, отформатированное как 1‘ -5.50 І


Значение, отформатированное как 1’ -5 1/2 І

Значение, отформатированное как 17 1/2

Когда UNITMODE переменная системы установлена в 1, который определяет, что модули отображены как введено, строка, возвращенная acdbRToS () отличается для разработки (режим равняется 3), архитектурный (режим равняется 4), и дробный (режим равняется 5) модулям. Например, первые две линии предшествующего типового вывода были бы, тот же самый, но последние строки будет появляться следующим образом:

Значение, отформатированное как 1 ‘ 5.50 І

Значение, отформатированное как 1 ‘ 5-1/2 І

Значение, отформатированное как 17-1/2

AcdbDisToF () функциональные дополнения acdbRToS (), так следующее вызывают, которые используют строки, сгенерированные в предыдущих примерах, весь результат набора к тому же самому значению, 17.5. (Снова, примеры не показывают проверку ошибок.)

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

Следующие показы фрагмента вызывают к acdbAngToS () которые являются подобными предыдущему acdbRToS () примеры.

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);

Они вызывают ( все еще принятие что DIMZIN равняется 0) отображают следующие значения на экране текста AutoCAD.

Angle formatted as 180

Angle formatted as 180d0¢0²

Angle formatted as 200.0000g

Angle formatted as 3.1416r

Angle formatted as W

ОБРАТИТЕ ВНИМАНИЕ, что  UNITMODE переменная системы также воздействует на строки, возвращенные acdbAngToS () когда это возвращает строку в модулях инспектора (режим равняется 4). Если UNITMODE равняется 0, возвращенная строка может включать пробелы (например, “ N 45d E ”); если UNITMODE равняется 1, строка не содержит никакие пробелы (например, “N45dE”).

AcdbAngToF() функциональные дополнения acdbAngToS (), так следующее вызывает весь набор параметр результата к тому же самому значению, 3.14159. (Это округлено до 3.1416 в примере, который использует радианы.)

AcdbAngToF ("180", 0, *result); // 0 = градусы

AcdbAngToF ("180d0" 0 \ "", 1, *result); // 1 = deg/min/sec

AcdbAngToF ("200.0000g", 2, *result); // 2 = grads

AcdbAngToF ("3.1416r", 3, *result); // 3 = радианы

AcdbAngToF ("W", 4, *result); // 4 = инспектор

ОБРАТИТЕ ВНИМАНИЕ, когда Вы имеете строку, которая определяет угол в градусах{*степенях*}, минутах, и секундах, Вы должны использовать наклонную черту влево (\), чтобы выйти из символа секунд (І) так, чтобы,  казалось,  не было конца строки. Второй из предшествующего acdbAngToF () примеры демонстрируют это.


Содержание раздела