Нужна возможность показать пользователю графический объект (или элемент графического объекта) на чертеже. Пользователю предоставлена возможность из редактора данных графического объекта показать точку на нем.
До этого в своем CustomEntity в worldDraw рисовал крест с двух AcDbXline.
Но тут проблема в том, что такое "выделение" ломает работу Undo/Redo, хотя пользователь просто хотел увидеть объект на чертеже, а само Entity не изменилось.
Решил сделать такое «выделение» через AcGsView. Вот пример моего кода в команде:
// Получаем номер текущего вида
struct resbuf rb;
int rt = acedGetVar(_T("CVPORT"), &rb);
if (rt != RTNORM){
acutPrintf(_T("\nОшибка ! "));
return;
}
int vportNum = rb.resval.rint;
AcGsView *pAutoCADView = acgsGetCurrent3dAcGsView(vportNum);
if (pAutoCADView == NULL){
AcGsKernelDescriptor desc;
desc.addRequirement( AcGsKernelDescriptor::k3DDrawing );
pAutoCADView = acgsObtainAcGsView(vportNum, desc);
if (pAutoCADView == NULL)
return;
}
AcGsManager *gsManager = acgsGetGsManager();
if (!gsManager)
return;
if (!descriptor)
descriptor = new AcGsKernelDescriptor();
descriptor->addSupport(AcGsKernelDescriptor::k3DDrawing);
pGraphicsKernel = AcGsManager::acquireGraphicsKernel(*descriptor);
if (!pGraphicsKernel)
return;
pGsViewModel = gsManager->getDBModel(*pGraphicsKernel);
AcDbXline* xGsViewline = new AcDbXline();
xGsViewline->setColorIndex(5);
xGsViewline->setBasePoint(AcGePoint3d(0.0, 0.0, 0.0));
xGsViewline->setSecondPoint(AcGePoint3d(1.0, 0.0, 0.0));
xGsViewline->setLineWeight(AcDb::kLnWt060);
pAutoCADView->add(xGsViewline, pGsViewModel);
AcDbXline* yGsViewline = new AcDbXline();
yGsViewline->setColorIndex(5);
yGsViewline->setBasePoint(AcGePoint3d(0.0, 0.0, 0.0));
yGsViewline->setSecondPoint(AcGePoint3d(0.0, 1.0, 0.0));
yGsViewline->setLineWeight(AcDb::kLnWt060);
pAutoCADView->add(xGsViewline, pGsViewModel);
pAutoCADView->invalidate();
pAutoCADView->update();
Мои AcDbXLine отображаются, но тут такая проблема что после перемещения вида по чертежу они пропадают, а мне нужно отображать пока пользователь не отключит подсветку.
Нужно что-то вроде сетки AutoCAD которая отображается всегда. Если есть идеи или решения такой проблемы, буду благодарен за помощь.