Тема: Как помигать цветом примитива из AcDbBlockReference?
Доброго дня всем.
Требуется спозиционироваться на произвольный примитив, смасштабировать его в поле видимости и помигать им. Первые две задачи решены, а для третьей хорошего решения пока не вижу, обращаюсь к вам за помощью. ObjectARX 2000.
Сначала помигать надо было полилинией. Это решалось примерно следующим образом (для трех миганий):
MyClass::Flick(); { m_aEnt = entId; m_bFlick = false; for (int i=0; i<6; i++) acedCommand(RTSTR, "FLICKCOLOR", RTNONE); } // обработчик команды "FLICKCOLOR" void load_objects_class::FlickColor() { AcDbEntity* pEnt; if (Acad::eOk == acdbOpenAcDbEntity(pEnt, m_aEnt, AcDb::kForWrite)) { int ci = (m_bFlick = !m_bFlick) ? 2 : m_nColor; if (m_nColor == -1) m_nColor = pEnt->colorIndex(); else Sleep(500); pEnt->setColorIndex(ci); Ent->close(); } }
Здесь единственный отрицательный момент, это что в командном окне 6 раз печатается FLICKCOLOR. Попытки использовать функции типа Update(), Redraw() в тот момент к успеху не привели. Но это как бы маленький вопрос - можно ли было сделать лучше, что надо было использовать.
Полилиния прекрасно меняла цвет на желтый и затем на исходный. Тоже и хэтч. А теперь возникла необходимость применить это мигание к AcDbBlockReference, состоящий, скажем, из текста и хэтча. Причем, мигать надо одним экземпляром, AcDbObjectId (объекта AcDbBlockReference) которого известен.
Вопрос в следующем. Насколько я понял, просматривая доки, достучаться до составляющих одного экземпляра AсDbBlockReference невозможно. Можно только до его AcDbBlockTableRecord, т.е., меняя цвета сразу всех объектов AcDbBlockReference.
Выход, который мне кажется возможным - создавать еще такой же AcDbBlockTableRecord, но желтый. И для мигания переключать их методом AсDbBlockReference::setBlockTableRecord для одного элемента чертежа.
Есть ли лучшее решение?
И можно ли оптимизировать мигание, заставить примтив перерисовываться в пределах одной функции ObjectARX?
Спасибо.