13/06/2014
					Сброс текущего цвета при установке текущим другого слоя
Установка текущего цвета при помощи системной переменной CECOLOR помогает создавать примитивы с определенным цветом вне зависимости от цвета слоя. Но когда мы устанавливаем другой слой текущим нам может захотеться, чтобы цвет совпал с цветом нового текущего слоя.
Итак. Как автоматически менять текущий цвет на цвет Послою (BYLAYER) при изменении текущего слоя?
Текущий цвет может быть установлен при помощи метода AcDbDatabase::setCecolor(). Вы можете получить уведомление об изменении системной переменной, если создадите реактор, унаследованный от AcEditorReactor и переопределите его метод sysVarChanged(). Системная переменная текущего слоя: CLAYER.
Код - C++: [Выделить]
- class MyEditorReactor : public AcEditorReactor
 - {
 - public:
 - void sysVarChanged(const ACHAR* varName, Adesk::Boolean success);
 - };
 - MyEditorReactor *pReactor = NULL;
 - /*
 - * Устанавливаем текущий цвет
 - */
 - void setCurColor(int index)
 - {
 - AcCmColor color;
 - color.setColorIndex(index);
 - acdbHostApplicationServices()->workingDatabase()->setCecolor(color);
 - }
 - /*
 - * Изменение системной переменной
 - */
 - void MyEditorReactor::sysVarChanged(const ACHAR* varName, Adesk::Boolean
 - success)
 - {
 - if(success)
 - {
 - // Изменяем текущий цвет "Послою"
 - // если поменялся текущий слой
 - if(!_tcscmp(L"CLAYER",varName))
 - setCurColor(256);
 - }
 - }
 - void initApp()
 - {
 - pReactor = new MyEditorReactor;
 - if(pReactor)
 - acedEditor->addReactor(pReactor);
 - }
 - void unloadApp()
 - {
 - if(pReactor)
 - acedEditor->removeReactor(pReactor);
 - }
 
Обсуждение: http://adn-cis.org/forum/index.php?topic=802
Опубликовано 13.06.2014Отредактировано 14.06.2014 в 02:30:12