16/03/2015
Доступ к AcGsView ассоциированному с видом
В версиях до AutoCAD 2015, функция acgsGetGsView давала доступ к AcGsView вида. В AutoCAD 2015 этой функции нет и она заменена двумя другими новыми: acgsGetCurrentAcGsView и acgsGetCurrent3dAcGsView. Следующий пример кода показывает в чем разница и как их использовать:
Код - C++: [Выделить]
- #include "acgs.h"
- // До AutoCAD 2015
- // Получаем номер вида
- struct resbuf rb;
- int rt = acedGetVar(_T("CVPORT" ), &rb);
- if (rt != RTNORM)
- {
- acutPrintf(_T("\nОшибка !" ));
- return ;
- }
- int vportNum = rb.resval.rint;
- // Получаем GS View ассоциированный с видом
- AcGsView *pView1 = acgsGetGsView
- (vportNum, false );
- // Если стиль не 2D-каркас у AutoCAD
- // то pView не равен 0
- if (pView1)
- { // Мы в одном из тонированных стилей
- // или GS view уже был создан
- // и ассоциирован с видом
- acutPrintf(ACRX_T("Мы в тонированном стиле..." ));
- }
- else
- {
- // Мы в стиле 2D-каркас или GsView еще не был создан
- // для этого вида...
- // Чтобы создать GS View и ассоциировать его с видом
- // используем следующий код:
- // AcGsView *pView2 = acgsGetGsView(vportNum, true);
- //if(pView2 != NULL)
- //{
- // acutPrintf(ACRX_T("Создаём 3D GS View
- // и ассоциируем его с видом..."));
- //}
- acutPrintf(ACRX_T("Мы в режиме 2D-каркас..." ));
- }
- // Для AutoCAD 2015+
- // Получаем номер текущего вида
- struct resbuf rb;
- int rt = acedGetVar(_T("CVPORT" ), &rb);
- if (rt != RTNORM)
- {
- acutPrintf(_T("\nОшибка ! " ));
- return ;
- }
- int vportNum = rb.resval.rint;
- Acad::ErrorStatus es;
- // Получаем GS View в зависимости от 2D или 3D
- AcGsView *pGsView1 = acgsGetCurrentAcGsView(vportNum);
- ASSERT(pGsView1 != NULL);
- // Возвращаем 3D GS view если он ассоциирован с
- // видом. В противном случае возвращается ноль.
- // Но нулевое значение не дает нам оснований считать
- // что мы в 2D-каркас режиме, так как 3d AcGsView может быть создан
- // и ассоциирован с видом.
- AcGsView *pGsView2 = acgsGetCurrent3dAcGsView(vportNum);
- if (pGsView2 != NULL)
- {
- // Мы уже в тонированном режиме или
- // 3D GS view был создан и ассоциирован с видом
- acutPrintf(ACRX_T("Мы в тонированном режиме..." ));
- }
- else
- {
- // Мы в 2D-каркас режиме и 3D GS view не был
- // еще создан
- // Можем создать 3D GS View.
- // После того как 3D GS view будет создан
- // и acgsGetCurrentAcGsView и acgsGetCurrent3dAcGsView
- // будут возвращать созданный GS View.
- // Для того чтобы создать GS View и ассоциировать его с видом
- // нужно использовать следующий код :
- /*
- AcGsKernelDescriptor desc;
- desc.addRequirement( AcGsKernelDescriptor::k3DDrawing );
- AcGsView* pView2 = acgsObtainAcGsView(vportNum, desc);
- if(pView2 != NULL)
- {
- acutPrintf(ACRX_T("Создали 3D GS View
- и ассоциировали его с видом.."));
- }
- */
- acutPrintf(ACRX_T("Мы в 2D-каркас режиме..." ));
- }
Источник: http://adndevblog.typepad.com/autocad/2015/03/accessing-acgsview-associated-with-viewport.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=1927
Опубликовано 16.03.2015