CAD-страница НП | Статьи | Download | English

Н.Н.Полещук. Класс AcCmColor

Начиная с версии 2000, стало возможным цвету в системе AutoCAD задавать 16,7 миллионов значений из полной палитры. Остались допустимыми в DXF-коде 62 примитива существовавшие ранее основные цифровые значения (от 1 до 255), специальные 0 (ByBlock) и 256 (ByLayer), затем к ним добавилось значение 257 (ByEntity). Для оттенков из полной палитры цветов используется DXF-код 420 примитива. Его значение является 24-битовым числом, формируемым из компонентов R (красный), G (зеленый) и B (синий) по формуле:

mycol = 164 * R + 162 * G + B,

где каждое из целых чисел R, G и B может принимать значения от 0 до 255. Кроме того, в качестве цвета примитива в DXF-коде 432 примитива может фигурировать строка с наименованием цвета из альбома цветов, например: "RAL 1002".

Для хранения такого обширного множества значений в системе AutoCAD был создан специальный класс AcCmColor. Объект этого класса может хранить в себе любое из перечисленных выше значений цвета. При установке системы AutoCAD данный класс регистрируется в реестре Windows, после чего создать объект этого класса в Visual LISP можно с помощью метода GetInterfaceObject по следующей схеме:

(setq mycol (vlax-GetInterfaceObject (vlax-get-acad-object) "AutoCAD.AcCmColor.18"))


Для справки - в других языках:
VBA
Dim color As New AcadAcCmColor
Set color = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.18")

C++ (ObjectARX)
AcCmColor m_color;
C# (.NET)
Autodesk.AutoCAD.Colors.Color m_color;
Visual Basic (.NET)
Dim m_color As Autodesk.AutoCAD.Colors.Color


Класс AcCmColor имеет номер версии, которая указывается при вызове метода GetInterfaceObject после "AutoCAD.AcCmColor.":
15 - для AutoCAD 2000-2002,
16 - для AutoCAD 2004-2006,
17 - для AutoCAD 2007-2009,
18 - для AutoCAD 2010-2012.

У класса три метода:

  • SetColorBookColor - задание цвета с помощью названия из альбома цветов;
  • SetNames - формирование имени цвета и имени альбома для цвета;
  • SetRGB - задание цвета с помощью компонент R, G, B.
    Класс имеет восемь свойств:
  • Blue - значение синего (B) компонента цвета;
  • BookName - имя альбома цветов;
  • ColorIndex - номер цвета (если выбран метод задания цвета с помощью номера от 0 до 256);
  • ColorMethod - метод для задания цвета (целое число от 192 до 200, напр., acColorMethodByRGB = 194, acColorMethodByACI = 195);
  • ColorName - имя цвета;
  • EntityColor - номер цвета в виде длинного (32-битового) целого числа (если выбран метод задания с помощью компонент R, G, B);
  • Green - значение зеленого (G) компонента цвета;
  • Red - значение красного (R) компонента цвета.

    Примеры задания цвета:
    (vla-SetRGB mycol 83 127 19)
    (vla-put-ColorIndex mycol 5)

    Пример изменения цвета последнего примитива на значение mycol:
    (vla-put-TrueColor (vlax-ename->vla-object (entlast)) mycol)

    По окончании работы необходимо освободить память, занимаемую объектом:
    (vlax-release-object mycol)


    Примечание. Другой способ создания объекта класса AcCmColor:
    (setq yourcol (vlax-create-object "AutoCAD.AcCmColor.18"))

    CAD-страница НП | Статьи | Download | English