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

30/08/2013

Выбор примитивов пространства Модели из пространства Листа без предварительного выбора видового экрана средствами ObjectARX

Вопрос:
Как можно выбрать примитивы Модели находясь в Листе без предварительного выбора видового экрана?

Ответ:
В ObjectARX есть недокументированная функция acedNEntSelPEx(), которая позволяет сделать именно это. Она даже позволяет передать точку указания при помощи параметра ‘pickflag’, так что вы сами можете обеспечить точку в пространстве листа.

Вот пример кода:

Код - C++: [Выделить]
  1. extern int acedNEntSelPEx ( const TCHAR *str, ads_name entres,
  2.                             ads_point ptres, int pickflag,
  3.                             ads_matrix xformres,
  4.                             struct resbuf **refstkres,
  5.                             unsigned int uTransSpaceFlag,
  6.                             int* gsmarker);
  7. static void asdkSelectEnt_sel(void)
  8. {
  9.   int     gsmarker = -1;
  10.   ads_name  ename;
  11.   struct resbuf *rbChain;
  12.   ads_point  selPt;
  13.   ads_matrix tranMat;
  14.  
  15.   // Выбираем единственный объект. Если это вставка блока или подпримитив внутри блока,
  16.   // тогда rbChain не будет равным null.
  17.   unsigned int uTransSpaceFlag = 1;
  18.   // установим uTransSpaceFlag в 0, если текущее пространство – пространство модели
  19.   struct resbuf rb;
  20.   acedGetVar(_T("CVPORT"), &rb);
  21.   if (rb.resval.rint != 1)
  22.     uTransSpaceFlag = 0;  // Model space
  23.  
  24.   // А теперь выберем примитив
  25.   int stat = acedNEntSelPEx(_T("\nВыберите объект: "), ename,
  26.            selPt, 0, tranMat, &rbChain, uTransSpaceFlag, &gsmarker);
  27.   // Если все нормально
  28.   if (RTNORM == stat)
  29.   {
  30.     // открываем выбранный примитив
  31.     AcDbObjectId objId;
  32.     acdbGetObjectId(objId,ename);
  33.     AcDbObjectPointer<AcDbEntity> pEnt(objId,AcDb::kForRead);
  34.     if (pEnt.openStatus() == Acad::eOk)
  35.       pEnt->list();
  36.   }
  37. }

 

Источник: http://adndevblog.typepad.com/autocad/2012/12/selecting-objects-from-paperspace-into-modelspace-without-pre-selecting-a-viewport-using-objectarx.html

Обсуждение: http://adn-cis.org/forum/index.php?topic=194

Опубликовано 30.08.2013