ADN Open CIS
Сообщество программистов Autodesk в СНГ

09/03/2016

Управление форматом вывода данных чисел в Панели свойств AutoCAD

В статье Как показать правильно числовое значение в Панели Свойств (OPM)? в общих чертах описывается возможность управлять форматом вывода числовых значений в Панели свойств. Всё более-менее просто если свойство статическое. В этом случае имеется возможность указать формат числа в idl-файле. А вот в случае динамического свойства требуется выполнить специальную подготовку. Форматом вывода управляют методы GetCurrentValueName и GetCurrentValueType. Вот пример, обеспечивающий независящее от единиц представление действительного числа:

Код - C++: [Выделить]
  1. STDMETHODIMP CDynLength::GetCurrentValueName (BSTR *pBstrName) {
  2.                 if ( pBstrName == NULL )
  3.                                return (E_POINTER) ;
  4.   //////////////////////////////////////////////////////////////////////////
  5.   //              Возвращаем безразмерные единицы
  6.   //////////////////////////////////////////////////////////////////////////
  7.   *pBstrName =::SysAllocString (L"ACAD_NOUNITS") ;
  8.                 return (S_OK) ;
  9. }
  10. STDMETHODIMP CDynLength::GetCurrentValueType (VARTYPE *pVarType) {
  11.                 if ( pVarType == NULL )
  12.                                return (E_POINTER) ;
  13.   //////////////////////////////////////////////////////////////////////////
  14.   //              Возвращаем пользовательский тип данных
  15.   //////////////////////////////////////////////////////////////////////////
  16.                 *pVarType = VT_USERDEFINED;
  17.  
  18.                 return (S_OK) ;
  19. }

 

Обратите внимание на то, что метод 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 в 03:12:11