Получение информации обо всех системных переменных
В AutoCAD 2015 появилось новое API - AcEdSysVarIterator.
Класс “AcEdSysVarIterator” обеспечивает возможность пройтись по всем доступным системным переменным и получить их имена, типы данных, диапазоны (если доступны), значение «только для чтения» и где они хранятся.
Внимание: системные переменные, которые имеют флаг скрытости (т.е. "*" в качестве первого символа в имени) пропускаются этим итератором. В настоящее время мы можем получить всю информацию при помощи утилиты "SYSVDLG", включая скрытые системные переменные. Это API может пригодиться тем, кто хочет автоматизировать работу с системными переменными в клиентском приложении.
Дополнительная информация есть в документации.
- static void SysVarInfo()
- {
- /* Перебираем все системные переменные */
- AcEdSysVarIterator* pIterator = new AcEdSysVarIterator();
- while (pIterator->done() != true)
- {
- const AcRxVariable* rxvar = pIterator->getSysVar();
- acutPrintf(_T("\n******** Информация о системной переменной *************"));
- const AcString name = rxvar->name();
- acutPrintf(_T("\nИмя: %s"), name.kACharPtr());
- short pt = rxvar->primaryType();
- acutPrintf(_T("\nОсновной тип: %d"),pt);
- AcRxVariable::SecondaryType secondaryType = rxvar->secondaryType();
- acutPrintf(_T("\nДополнительный тип: %s"), getSecondaryType(secondaryType).kACharPtr());
- short tf = rxvar->typeFlags();
- acutPrintf(_T("\nФлаги: %d"),tf);
- AcRxVariable::StorageType storageType = rxvar->storageType();
- acutPrintf(_T("\nВид хранения: %s"), getStorageType(storageType).kACharPtr());
- const AcRxVariable::Range* range = rxvar->range();
- int lowerBound=-1,upperBound=-1;
- if(range != nullptr)
- {
- lowerBound = range->lowerBound;
- upperBound = range->upperBound;
- }
- acutPrintf(_T("\nДиапазон значений: от %d до %d"), lowerBound,upperBound);
- bool isRO = rxvar->isReadOnly();
- AcString readwrite = isRO ? _T("Только для чтения") : _T("Для чтение и записи");
- acutPrintf(_T("\nСистемная переменная: %s"),readwrite.kACharPtr());
- acutPrintf(_T("\n-----------------------"));
- pIterator->step();
- }
- /* Устанавливаем указатель на первую системную переменную */
- pIterator->reset();
- delete pIterator;
- }
- /* Вспомогательные функции */
- const static AcString getStorageType(AcRxVariable::StorageType storageType)
- {
- AcString storageInfo = "";
- switch(storageType)
- {
- case 0:
- storageInfo = _T("Приложение, не сохраняется");
- break;
- case 1:
- storageInfo = _T("Приложение, хранится отдельно для каждого пользователя");
- break;
- case 2:
- storageInfo = _T("Приложение, хранится в каждом профиле AutoCAD");
- break;
- case 3:
- storageInfo = _T("Документ, хранится в чертеже");
- break;
- case 4:
- storageInfo = _T("Вид (AcDbViewport или AcDbViewportTableRecord), хранится в чертеже.");
- break;
- default:
- break;
- }
- return storageInfo;
- }
- const static AcString getSecondaryType(AcRxVariable::SecondaryType secondaryType)
- {
- AcString secondaryInfo = _T("");
- switch(secondaryType)
- {
- case 0:
- secondaryInfo = _T("Вторичный тип неопределен");
- break;
- case 1:
- secondaryInfo = _T("Двоичная переменная. Действительна только при primaryDataType==RTSHORT");
- break;
- case 2:
- secondaryInfo = _T("Переменная - символ RealDWG. Действительна только при primaryDataType==RTSTR");
- break;
- case 3:
- secondaryInfo = _T("Переменная представляет площадь. Действительна только при primaryDataType==RTREAL");
- case 4:
- secondaryInfo = _T("Переменная представляет расстояние. Действительна только при primaryDataType==RTREAL");
- break;
- case 5:
- secondaryInfo = _T("Переменная представляет угол. Действительна только при primaryDataType==RTREAL");
- break;
- case 6:
- if(secondaryType == AcRxVariable::kSecondaryTypeUnitlessReal)
- secondaryInfo = _T("Переменная представляет безразмерное значение. Действительна только при primaryDataType==RTREAL");
- else
- secondaryInfo = _T("Отмечает последнее значение в перечислении");
- break;
- default:
- break;
- }
- return secondaryInfo;
- }
Информация о системных переменных в командной строке:
Обсуждение: http://adn-cis.org/forum/index.php?topic=1912
Опубликовано 04.03.2015