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

13/06/2014

Сброс текущего цвета при установке текущим другого слоя

Установка текущего цвета при помощи системной переменной CECOLOR помогает создавать примитивы с определенным цветом вне зависимости от цвета слоя. Но когда мы устанавливаем другой слой текущим нам может захотеться, чтобы цвет совпал с цветом нового текущего слоя.

Итак. Как автоматически менять текущий цвет на цвет Послою (BYLAYER) при изменении текущего слоя?

Текущий цвет может быть установлен при помощи метода AcDbDatabase::setCecolor(). Вы можете получить уведомление об изменении системной переменной, если создадите реактор, унаследованный от AcEditorReactor и переопределите его метод sysVarChanged(). Системная переменная текущего слоя: CLAYER.

Код - C++: [Выделить]
  1. class MyEditorReactor : public AcEditorReactor
  2. {
  3.     public:
  4.        void sysVarChanged(const ACHAR* varName, Adesk::Boolean success);
  5. };
  6.  
  7. MyEditorReactor *pReactor = NULL;
  8.  
  9. /*
  10. * Устанавливаем текущий цвет
  11. */
  12. void setCurColor(int index)
  13. {
  14.    AcCmColor color;
  15.    color.setColorIndex(index);
  16.    acdbHostApplicationServices()->workingDatabase()->setCecolor(color);
  17. }
  18.  
  19. /*
  20. * Изменение системной переменной
  21. */
  22. void MyEditorReactor::sysVarChanged(const ACHAR* varName, Adesk::Boolean
  23. success)
  24. {
  25.    if(success)
  26.    {
  27.     // Изменяем текущий цвет "Послою"
  28.     // если поменялся текущий слой
  29.     if(!_tcscmp(L"CLAYER",varName))
  30.         setCurColor(256);
  31.    }
  32. }
  33.  
  34. void initApp()
  35. {
  36.     pReactor  = new MyEditorReactor;
  37.     if(pReactor)
  38.         acedEditor->addReactor(pReactor);
  39. }
  40.  
  41. void unloadApp()
  42. {
  43.     if(pReactor)
  44.         acedEditor->removeReactor(pReactor);
  45. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/11/resetting-current-color-when-a-different-layer-is-set-as-current.html

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

Опубликовано 13.06.2014
Отредактировано 14.06.2014 в 02:30:12