Тема: Перерисовка объекта при перемещении Grips

Может кто знает, как отключить сабж?
Т.е. при перемещении ручки, объект клонируется и отрисовывается много раз, а хотелось бы либо отменить отрисовку до окнчания редактирования, либо хотябы поймать момент его окончания.
Я вызываю перерасчет графики своего объекта в moveGripPointsAt, а в связи с тем, что объем этих вычислений достаточно велик, то временами при движении ручек тормозит смертельно...

Re: Перерисовка объекта при перемещении Grips

> bird
1) Есть такая системная переменная DRAGMODE. Можно установить ее в 0 и тогда отрисовка будет только после конца редактирования. Но IMHO не следует делать это в dbx-файле.
2) Можно воспользоваться методом isDragging() базового класса в worldDraw()/viewportDraw() и в зависимости от значения рисовать или не рисовать графику.

Re: Перерисовка объекта при перемещении Grips

Adesk::Boolean MyEntity::worldDraw (AcGiWorldDraw *mode) {
   assertReadEnabled();
   if (!mode->isDragging()) {
    // Здесь рисуем...
   } else {
    // А здесь не рисуем, или рисуем упрощенно...
   }
   return Adesk::kTrue;
}

Re: Перерисовка объекта при перемещении Grips

Спасибо большо! это тоже очень пригодится, но вопрос-то в том, что в moveGripPointsAt вызывается метод, который производит сложные расчеты, как сделать так, чтобы он вызывался только по окончанию перемещения грипа?

Re: Перерисовка объекта при перемещении Grips

Я проверяю (transformBy moveGripPointsAt)
if ( objectId() != kNull )
{
   //значит объект в базе и все пересчитываем
}
else
{
   //объект временный для drag-нга значит можно схалявить
}

Re: Перерисовка объекта при перемещении Grips

Но имхо надо внимательно следить по ситуации

Re: Перерисовка объекта при перемещении Grips

Есть еще один вариант - переопределить в своем классе метод AcDbEntity::dragStatus(AcDb::DragStat st) для отметки начала и конца dragging. В ней запоминать текущее состояние в переменную (AcDb::DragStat curDrag) и в зависимости от ее значения выполнять (curDrag == AcDb::kDragStart) или не выполнять (curDrag != AcDb::kDragStart) расчет в moveGripPointsAt(...) Но тут тоже нужно будет очень внимательно проработать все ситуации.

Re: Перерисовка объекта при перемещении Grips

Только в 2002-м этого функционала нет :( (dragStatus)