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.
У класса три метода:
Примеры задания цвета:
(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)
CAD-страница НП | Статьи | Download | English