Тема: Работа с CAcUiDialog

Добрый день
Ситуация:
Необходимо в диалоговом окне CAcUiDialog  по нажатию кнопы выполнять некоторый полезный код по работе с базой и документом чертежа.
Диалог вызываю через зарегистрированную команду
ACED_ARXCOMMAND_ENTRY_AUTO с параметрами ACRX_CMD_TRANSPARENT | ACRX_CMD_USEPICKSET | ACRX_CMD_REDRAW
Проблема:
Если создавать функции по работе с документом чертежа (базой) в класе диалога, ограничиваеться функциональность. К примеру, выделить все объекты и по нажатию на кнопку далога считать все выделенные не удаеться, в то время, как если эту функцию описать в acrxEntryPoint.cpp и вызвать в теле зарегистрированной команды  - все работает.
Как огранизовать написание такого кода, чтобы получить правильную работу в контексте диалога?
Или как вызывать функции описаные в acrxEntryPoint.cpp из диалога, будут ли они правильно работать?
Заранее спасибо!

Re: Работа с CAcUiDialog

Может я чего-то не понял, но по-моему делается так.
Создаешь комманду в  acrxEntryPoint.cpp
Через нее делаешь DoModal() для диалога.
И не забудь подключить arxHeaders.h
У меня все замечательно работает.
Уживается и акад и внешняя база и т.д. :)
А полезный код можно писать прям в классе диалога.

Re: Работа с CAcUiDialog

Да так и делаю
Для того чтобы правильно отработал такой вот код

static int GetAllSelectedEntity(AcDbObjectIdArray &ids)
    {
        ids.setLogicalLength(0); // Чистим массив
        resbuf *pSet = NULL;
        if (acedSSGetFirst(NULL,&pSet) == RTNORM && pSet && pSet->restype == RTPICKS) {
            ads_name ss; ads_name_set(pSet->resval.rlname,ss);
            long nss = 0; acedSSLength(ss,&nss);
            ids.setLogicalLength(nss);
            for (int i = 0; i < nss; i++) {
                ads_name en;       acedSSName(ss,i,en);
                AcDbObjectId id;   acdbGetObjectId(id,en);
                ids[i] = id;
            }
        }
        acutRelRb(pSet);
        return ids.length();
    }

необходимо наличие параметров ACRX_CMD_USEPICKSET | ACRX_CMD_REDRAW в зарегистрированной команде.
Но если эту функцию описать в класе диалога, и выполнить из негоже - код не получает список выделенных энтити!
Может необходимо что-то указывать в класе диалога?

Re: Работа с CAcUiDialog

так по порядку.
1. Если писать эту функцию в классе диалога, то лучше так:

int CDialog::GetAllSelectedEntity(AcDbObjectIdArray &ids)

2. во вторых так: :)

int CDialog::GetAllSelectedEntity(AcDbObjectIdArray &ids)
{
    ids.setLogicalLength(0); // Чистим массив
//    resbuf *pSet = NULL;
    ads_name ss;
    if(acedSSGet("_A", NULL, NULL, NULL, ss)!= RTNORM) return 0;
//    if (acedSSGetFirst(NULL,&pSet) == RTNORM && pSet && pSet->restype == RTPICKS)
    {
//      ads_name ss; ads_name_set(pSet->resval.rlname,ss);
      long nss = 0; acedSSLength(ss,&nss);
      ids.setLogicalLength(nss);
      for (int i = 0; i < nss; i++)
      {
        ads_name en;       acedSSName(ss,i,en);
        AcDbObjectId id;   acdbGetObjectId(id,en);
        ids[i] = id;
      }
    }
//    acutRelRb(pSet);
    return ids.length();
  }

Я тут чуток поменял, протестировал у себя. все работает

Re: Работа с CAcUiDialog

Static я тоже не писал :)
А что было в корне не так?
Спасиб за помошь, буду пробовать

Re: Работа с CAcUiDialog

acedSSGetFirst НЕ ТАК
С ней много мороки, а результат правильный, токо если правильно задал параметры.
Мой вариант проще.

Re: Работа с CAcUiDialog

Спасибо Николай!
Учтем

Re: Работа с CAcUiDialog

Николай,
acedSSGet("_A", NULL, NULL, NULL, ss)
acedSSLength(ss,&nss);
возвращает количество всех примитивов на чертеже не зависимо от того, выделенные они или нет. Даже если нет выделенных.
Как все-таки взять только выделенные?

Re: Работа с CAcUiDialog

> Pavel D.
acedSSGet("_I", NULL, NULL, NULL, ss);

Re: Работа с CAcUiDialog

Невероятно :)
Спасибо Александр

Re: Работа с CAcUiDialog

> Pavel D.
Невероятно что? :)

Re: Работа с CAcUiDialog

Куча параметров и тут такое не интуитивно понятное I (Implied)
Перевод мне не многое открыл :)

Re: Работа с CAcUiDialog

англицкий для программиста - это основное :)
Но еще есть и проги-переводчики :)

Re: Работа с CAcUiDialog

Согласен на все 120%  :)))))