Тема: Как программно реализовать zoomExtents(extents)?

Необходимо внутри команды программно отобразить на текущем чертеже необходимую область, в которую попадает некоторый AcDbExtents.

Т.е. в текущем чертеже сделать zoom Extents. При этом после zoom-а на нужную область чертежа команда, в которой идет работа, продолжается и взаимодействует с пользователем. Т.е. sendStringToExecute не подходят.

Есть метод AcGsView::zoomExtents(minPoint, maxPoint), но используя эту функцию я получаю ряд трудностей. 
1. Проблемно достать AcGsView.
https://www.caduser.ru/forum/post218669.html#p218669

В этом случае AcGsView, создается новый (если выставить флаг False, то он получается NULL).
2. Но если получить AcGsView и дернуть zoomExtents, то таки попадаем на нужную область чертежа. Но при первой попытке потягать план мышью, сразу возвращаемся в предыдущие состояние отображения.
3. Кроме этого требуется сделать RegenAll дабы вернуть совсем в исходное состояние, ибо объекты при их выделении начинают отрисовывать свои локальные оси и т.п. проблемы.

Так что воспользоваться этим функционалом не получилось.

Как эту фичу можно реализовать программно еще...? Заранее благодарен.

Re: Как программно реализовать zoomExtents(extents)?

////////////////////////////////////////////////////////////////////////////
//
// This is command 'ZOOMEXT, by Fenton Webb [Apr/17/2002], DevTech, Autodesk
void asdkzoomExt()
{
// get the extents of the drawing
AcDbViewTableRecord view;
AcGePoint3d max =
acdbHostApplicationServices()->workingDatabase()->extmax(),
min = acdbHostApplicationServices()->workingDatabase()->extmin();

AcGePoint2d max_2d (max, max);
AcGePoint2d min_2d (min, min);
// now set the view centre point
view.setCenterPoint (min_2d + (max_2d - min_2d) / 2.0);
// now height and width of view
view.setHeight(max_2d - min_2d);
view.setWidth (max_2d - min_2d);
// set the view
acedSetCurrentView (&view, NULL);
// updates the extents
acdbHostApplicationServices()->workingDatabase()->updateExt(TRUE);
}

////////////////////////////////////////////////////////////////////////////
//
// This is command 'ZOOMWIN, by Fenton Webb [Apr/17/2002], DevTech, Autodesk
void asdkzoomWin()
{
AcGePoint3d max, min;
// get the window coords
int res = acedGetPoint (NULL, "\nPick zoom window pnt : ",
asDblArray(min));
// if ok
if (res == RTNORM)
{
res = acedGetCorner (asDblArray(min), "\nPick other corner : ",
asDblArray(max));
// get the extents of the drawing
AcDbViewTableRecord view;

AcGePoint2d max_2d (max, max);
AcGePoint2d min_2d (min, min);
// now set the view centre point
view.setCenterPoint (min_2d + (max_2d - min_2d) / 2.0);
// now height and width of view
view.setHeight(max_2d - min_2d);
view.setWidth (max_2d - min_2d);
// set the view
acedSetCurrentView (&view, NULL);
// updates the extents
acdbHostApplicationServices()->workingDatabase()->updateExt(TRUE);
}
}

:D

Re: Как программно реализовать zoomExtents(extents)?

есть еще такой способ. я отвечал как-то на автодесковском форуме:

http://forums.autodesk.com/t5/Autodesk- … rue#M27740