Тема: Отрисовка объекта в разных слоях и печать

Проблема появилась такая:
Есть у меня объект который отрисовывается в разных слоях.
worldDraw()
...
_ARR<AcDbEntity*> primArr = Get...;
for ( int i = 0; i < prims.GetSize(); i++ )
{
   AcDbEntity* pCurEnt = primArr[i];
   mode->subEntityTraits().setLayer(layerFor_i_prim);
   pCurEnt->worldDraw(mode);
}
Т.е. объект распихивается по нескольким слоям. Мне это надо чтоб некоторые части объекта можно было отключать (ставить видимым/невидимым слой).
Все работает ОК. Ставлю слой как невидимый - соотвествующие часи объектов становятся на экране невидимыми. Т.е. все работает.
Проблема появляется с печатью. Вывожу на принтер - говорю нужному слою что он не печатается. А при печати объекта все равно ВСЕ его части печатаются не смотря на то, что в каком слое лежит и как настроен слой на печать или нет...
Видимо дело в том, что сам объект имеет слой, и если он включен на печать, то "потраха" AutoCAD-а не разбираются какие части объекта в каком слое и все подряд выводится на печать.
Как можно это полечить? Чтоб был один объект в разных слоях, и печатался так же как отображается (если печать слоя выключена, то соотвествующие части не печаьаются)...

Re: Отрисовка объекта в разных слоях и печать

> KonstantinM
Ничего лучше чем в worldDraw() проверять состояние слоя (или слоев) и для какого контекста выполняется worldDraw() и в зависимости от этого "рисовать" или "не рисовать" - еще не придумали.

Re: Отрисовка объекта в разных слоях и печать

Как можно определить в каком контексте выполняется отрисовка?
Если можно определить что worldDraw зовется для печати, то я с радостью не буду рисовать то что не надо.
Я просто плохо знаком с архитектурой печати, то как там все устроено.
Там зовется worldDraw для печати? И можно как-то определить контекст?

Re: Отрисовка объекта в разных слоях и печать

Вот пример:

Adesk::Boolean DoubleCircleClass::worldDraw (AcGiWorldDraw *mode) {
    assertReadEnabled () ;
    if (!mode->context()->isPlotGeneration()) {
//       if (!mode->isDragging()) {
        mode->subEntityTraits().setLayer(layer1);
        mode->geometry().circle(center,fabs(r1),normal);
        mode->subEntityTraits().setLayer(layer2);
        mode->geometry().circle(center,fabs(r2),normal);
//       }
    } else {
      AcDbLayerTableRecordPointer pl1(layer1,AcDb::kForRead);
      AcDbLayerTableRecordPointer pl2(layer2,AcDb::kForRead);
      if (pl1.openStatus() == Acad::eOk && pl1->isPlottable() && !pl1->isOff() && !pl1->isFrozen()) {
        mode->subEntityTraits().setLayer(layer1);
        mode->geometry().circle(center,fabs(r1),normal);
      }
      if (pl2.openStatus() == Acad::eOk && pl2->isPlottable() && !pl2->isOff() && !pl2->isFrozen()) {
        mode->subEntityTraits().setLayer(layer2);
        mode->geometry().circle(center,fabs(r2),normal);
      }
    }
    return Adesk::kTrue;
}