Управление форматом вывода данных чисел в Панели свойств AutoCAD
В статье Как показать правильно числовое значение в Панели Свойств (OPM)? в общих чертах описывается возможность управлять форматом вывода числовых значений в Панели свойств. Всё более-менее просто если свойство статическое. В этом случае имеется возможность указать формат числа в idl-файле. А вот в случае динамического свойства требуется выполнить специальную подготовку. Форматом вывода управляют методы GetCurrentValueName и GetCurrentValueType. Вот пример, обеспечивающий независящее от единиц представление действительного числа:
- STDMETHODIMP CDynLength::GetCurrentValueName (BSTR *pBstrName) {
- if ( pBstrName == NULL )
- return (E_POINTER) ;
- //////////////////////////////////////////////////////////////////////////
- // Возвращаем безразмерные единицы
- //////////////////////////////////////////////////////////////////////////
- *pBstrName =::SysAllocString (L"ACAD_NOUNITS") ;
- return (S_OK) ;
- }
- STDMETHODIMP CDynLength::GetCurrentValueType (VARTYPE *pVarType) {
- if ( pVarType == NULL )
- return (E_POINTER) ;
- //////////////////////////////////////////////////////////////////////////
- // Возвращаем пользовательский тип данных
- //////////////////////////////////////////////////////////////////////////
- *pVarType = VT_USERDEFINED;
- return (S_OK) ;
- }
Обратите внимание на то, что метод GetCurrentValueName возвращает строковое значение безразмерных единиц измерения "ACAD_NOUNITS", а метод GetCurrentValueType возвращая VT_USERDEFINED указывает использовать пользовательский тип единиц измерения.
Возможные значения единиц описаны в следующей таблице:
"ACAD_COLOR" - стандартный контрол для выбора цвета
"ACAD_LAYER" - стандартный контрол для выбора имени слоя
"ACAD_DISTANCE" – действительное число, описывающее расстояние в установленных AutoCAD единицах с установленной для расстояния точностью.
"ACAD_ANGLE" – действительное число описывающее угол в установленных единицах AutoCAD с установленной для углов точностью.
"ACAD_NOUNITS" – действительное число безотносительное к единицам AutoCAD.
"ACAD_LWEIGHT" – стандартный контрол для весов линий AutoCAD.
"ACAD_AREA" – действительное число, обозначающее площадь и соответствующим образом отформатированное в зависимости от значения системной переменной LUNITS.
В демонстрационном примере имеется три класса – три свойства в панели свойств:
CDynLength – безразмерная длина (ACAD_NOUNITS)
CDynDistance – зависящая от единиц измерения длина (ACAD_DISTANCE)
CDynAngle – зависящий от единиц угол (ACAD_ANGLE)
Полный исходный текст демонстрационного проекта: DynProps.zip
Обсуждение: http://adn-cis.org/forum/index.php?topic=5193
Опубликовано 09.03.2016Отредактировано 10.03.2016 в 02:12:11