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

11/08/2014

Преобразование цветов между RGB и AutoCAD ACI в ObjectARX

Преобразование цвета в RGB к ближайшему эквивалентному индексу в палитре индексов AutoCAD (ACI) может быть сделано при помощи методов loopUpACI и lookUpRGB, реализованных в классе AcCmEntityColor.

Следующий пример использует метод lookUpRGB() для конвертации индекса цвета 47 в соотвествующий цвет в RGB, а затем используя полученный RGB найдем ближайший индексный цвет при помощи метода lookUpACI()

А вот и код:

Код - C++: [Выделить]
  1. AcCmEntityColor cEntityColor;
  2.  
  3. Adesk::UInt8 iIndex = 47;
  4.  
  5. // Получаем эквивалент в RGB
  6. Adesk::UInt32 nValue = cEntityColor.lookUpRGB(iIndex);
  7.  
  8. Adesk::UInt8 blue, green, red;
  9.  
  10. // Теперь выполним обратное преобразование, первые 8 бит - голубой
  11. blue = nValue;
  12.  
  13. // сдвигаем nValue вправо и для получения зеленого
  14. nValue = nValue >> 8;
  15. // получаем зеленый
  16. green = nValue;
  17.  
  18. // еще сдвигаем вправо на 8 бит для получения красного
  19. nValue = nValue >> 8;
  20. // получаем красный
  21. red = nValue;
  22.  
  23. AcCmColor cColor;
  24. cColor.setRGB(red, green, blue);
  25.  
  26. // Получаем индексный цвет (ACI) для RGB
  27. Adesk::UInt8 aci = AcCmEntityColor::lookUpACI(
  28.                                                 cColor.red(),
  29.                                                 cColor.green(),
  30.                                                 cColor.blue()
  31.                                              );

 

Источник:  http://adndevblog.typepad.com/autocad/2012/05/color-translation-between-rgb-and-autocad-aci-using-objectarx.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=905

Опубликовано 11.08.2014