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