ADN Open CIS
Сообщество программистов Autodesk в СНГ

16/03/2015

Доступ к AcGsView ассоциированному с видом

В версиях до AutoCAD 2015, функция acgsGetGsView давала доступ к AcGsView вида. В AutoCAD 2015 этой функции нет и она заменена двумя другими новыми: acgsGetCurrentAcGsView и acgsGetCurrent3dAcGsView. Следующий пример кода показывает в чем разница и как их использовать:

Код - C++: [Выделить]
  1. #include "acgs.h"
  2.        
  3.  // До AutoCAD 2015
  4.  
  5.  // Получаем номер вида
  6.  struct  resbuf  rb;
  7.  int  rt = acedGetVar(_T("CVPORT" ), &rb);
  8.  if (rt != RTNORM)
  9.  {
  10.         acutPrintf(_T("\nОшибка !" ));
  11.         return ;
  12.  }
  13.  int  vportNum = rb.resval.rint;
  14.  
  15.  // Получаем GS View ассоциированный с видом
  16.  AcGsView *pView1 = acgsGetGsView
  17.                          (vportNum, false );
  18.  // Если стиль не 2D-каркас у AutoCAD
  19.  // то pView не равен 0
  20.  if (pView1)
  21.  {   // Мы в одном из тонированных стилей
  22.      // или GS view уже был создан
  23.      // и ассоциирован с видом
  24.      acutPrintf(ACRX_T("Мы в тонированном стиле..." ));
  25.  }
  26.  else
  27.  {
  28.      // Мы в стиле 2D-каркас или GsView еще не был создан
  29.      // для этого вида...
  30.      // Чтобы создать GS View и ассоциировать его с видом
  31.      // используем следующий код:
  32.      // AcGsView *pView2 = acgsGetGsView(vportNum, true);
  33.      //if(pView2 != NULL)
  34.      //{
  35.      //    acutPrintf(ACRX_T("Создаём 3D GS View  
  36.      //            и ассоциируем его с видом..."));
  37.      //}
  38.  
  39.         acutPrintf(ACRX_T("Мы в режиме 2D-каркас..." ));
  40.  }
  41.  
  42.  
  43.  // Для AutoCAD 2015+
  44.  
  45.  // Получаем номер текущего вида
  46.  struct  resbuf  rb;
  47.  int  rt = acedGetVar(_T("CVPORT" ), &rb);
  48.  if (rt != RTNORM)
  49.  {
  50.         acutPrintf(_T("\nОшибка ! " ));
  51.         return ;
  52.  }
  53.  int  vportNum = rb.resval.rint;
  54.  
  55.  Acad::ErrorStatus es;
  56.  
  57.  // Получаем GS View в зависимости от 2D или 3D
  58.  AcGsView *pGsView1 = acgsGetCurrentAcGsView(vportNum);
  59.  ASSERT(pGsView1 != NULL);
  60.  
  61.  // Возвращаем 3D GS view если он ассоциирован с
  62.  // видом. В противном случае возвращается ноль.  
  63.  // Но нулевое значение не дает нам оснований считать
  64.  // что мы в 2D-каркас режиме, так как 3d AcGsView может быть создан
  65.  // и ассоциирован с видом.
  66.  AcGsView *pGsView2 = acgsGetCurrent3dAcGsView(vportNum);
  67.  if (pGsView2 != NULL)
  68.  {
  69.      // Мы уже в тонированном режиме или
  70.      // 3D GS view был создан и ассоциирован с видом
  71.         acutPrintf(ACRX_T("Мы в тонированном режиме..." ));
  72.  }
  73.  else
  74.  {
  75.      // Мы в 2D-каркас режиме и 3D GS view не был
  76.      // еще создан
  77.      // Можем создать 3D GS View.
  78.                       
  79.      // После того как 3D GS view будет создан
  80.      // и acgsGetCurrentAcGsView и  acgsGetCurrent3dAcGsView  
  81.      // будут возвращать созданный GS View.
  82.  
  83.      // Для того чтобы создать GS View и ассоциировать его с видом
  84.      // нужно использовать следующий код :
  85.         /*
  86.         AcGsKernelDescriptor desc;
  87.         desc.addRequirement( AcGsKernelDescriptor::k3DDrawing );
  88.         AcGsView* pView2 = acgsObtainAcGsView(vportNum, desc);
  89.         if(pView2 != NULL)
  90.         {
  91.                acutPrintf(ACRX_T("Создали 3D GS View  
  92.                  и ассоциировали его с видом.."));
  93.         }
  94.         */
  95.  
  96.         acutPrintf(ACRX_T("Мы в 2D-каркас режиме..." ));
  97.  }

 

Источник: 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