Товарищи счастливые обладатели autocad2006 sp1, вас не затруднит проверить, исправлен ли этот глюк в сервис-паке?
Нет. Но выкрутится достаточно несложно. Достаточно проверять в worldDraw() состояние слоев на которых мы рисуем. Например, так:
Adesk::Boolean MyEntity::worldDraw (AcGiWorldDraw *mode) {
assertReadEnabled () ;
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 pLayer1(layer1,AcDb::kForRead);
AcDbLayerTableRecordPointer pLayer2(layer2,AcDb::kForRead);
if (pLayer1.openStatus() == Acad::eOk && !pLayer1->isOff() && !pLayer1->isFrozen()) {
mode->subEntityTraits().setLayer(layer1);
mode->geometry().circle(center,r1,normal);
}
if (pLayer2.openStatus() == Acad::eOk && !pLayer2->isOff() && !pLayer2->isFrozen()) {
mode->subEntityTraits().setLayer(layer2);
mode->geometry().circle(center,r2,normal);
}
}
return Adesk::kTrue;
}
Вариант не самый элегантный, но работает.