Тема: Создание нового документа не из application context

Здрасьте всем!
Подскажите пожалуйста - как в теле функции команды (в классе от AcRxArxApp) создать новый документ. Пробовал по принципу примера Docman через функции

//////////////////////////////////////
void newSyncDocHelper( void *pData)
{
    AcApDocument* pDoc = acDocManager->curDocument();
    if (acDocManager->isApplicationContext())
        acDocManager->appContextNewDocument((const char *)pData);
}
//////////////////////////////////////
void newSyncDoc()
{
    static char pData[] = "acad.dwt";
    AcApDocument* pDoc = acDocManager->curDocument();
    if (pDoc)
        acDocManager->executeInApplicationContext(newSyncDocHelper, (void *)pData);
}

Но получается, что передачи управлении функции в executeInApplicationContext выполнение приостанавливается до определенных действий с новым документом - закрыть, минимизировать и т.п.
Нужно, чтобы управление возвращалось сразу.
Может как-нибудь это обойти?

Re: Создание нового документа не из application context

  //////////////////////////////////////
  static void newSyncDocHelper( void *pData)
  {
      AcApDocument* pDoc = acDocManager->curDocument();
      if (acDocManager->isApplicationContext())
          acDocManager->appContextNewDocument((const char *)pData);
      acutPrintf("\nМы в новом документе!!!");
      [b]acDocManager->activateDocument(pDoc); // !!!!!!!!!![/b]
  }
  // - NewDoc.newdoc command (do not rename)
  static void NewDocnewdoc(void)
  {
    // Add your code for command NewDoc.newdoc here
    static char pData[] = "acad.dwt";
    AcApDocument* pDoc = acDocManager->curDocument();
    if (pDoc)
        acDocManager->executeInApplicationContext(newSyncDocHelper, (void *)pData);
    acutPrintf("\nМы в старом документе!!!");
  }

Оно?

Re: Создание нового документа не из application context

Не совсем...
Александр, Вы же знаете мою идею-фикс - строить аксонометрию в новом документе :)
Я просто хочу в функции или команде создать новый документ и там начертить ее.
То что Вы выделили, активирует старый документ. МОжно конечно опять вернуться в только-что созданный. Но хочется обойтись без прыганий туда-сюда...

Re: Создание нового документа не из application context

> Леонид
1) smile Это действительно идея-фикс,
о чем мы с ShaggyDoc уже Вам намекали. Это достаточно неудобно для пользователя. А перенести готовую аксонометрию в новый чертеж для него никакого труда не составит, если это все грамотно сделать.
2) Если же Вам так хочется, то продолжайте строить ее в application context в новом документе, а когда завершите - можете прыгать обратно.
3) Можете вообще написать команду, которая работает в application context (правда тогда не получится вызывать ее как lisp-функцию).

Re: Создание нового документа не из application context

1) Как человеку, проработавшему не один год в трехмерке, у меня рука не поворачивается дать пользователю размещать проекцию в модели... Модель - это святое... Опять же, мухи от котлет... :)
Хотя по идее пользователь должен сам выбирать, к чему я и стремлюсь.
2) Да, я уже так и делаю. Сразу не сообразил, постепенно возвращаюсь из отпуска :)
Спасибо!

Re: Создание нового документа не из application context

А почему не создать AcDbDatabase
записать в нее все что требуется
сохранить как файл
и открыть?
Это конечно если уж очень надо идею-фикс реализовать

Re: Создание нового документа не из application context

Леонид пишет:

Как человеку, проработавшему не один год в трехмерке, у меня рука не поворачивается дать пользователю размещать проекцию в модели...

Тогда размещай в листе, а не в модели другого dwg-файла.
Кстати, совет Романа, тоже очень разумен. Да и открывать даже не обязательно. Если пользователь захочет - сам откроет. Если он работает в однодокументном режиме, то у тебя сразу возникнут проблемы с открыванием другого чертежа в отдельном окне...

Re: Создание нового документа не из application context

Насчет AcDbDatabase.
Мысль свежая и достойная внимания, но...
Все бы хорошо, только вот вопрос - куда сохранять? В папку "Мои документы"? Меня бы, как пользователя, не устроило что программа внезапно начинает куда-то кидать файлы без моего ведома.
Хотя автокад и так этим постоянно занимается, но что уж тут поделаешь...
Насчет листа.
Имхо, это все не принципиально. Будет время, поэкспериметнирую и с листами :)

Re: Создание нового документа не из application context

> Леонид
Как это куда сохранять? А спросить у пользователя или он нам больше не указ? smile

Re: Создание нового документа не из application context

> Александр Ривилис
Я считаю так - пущай уж пользователь создаст документ, а там сам и решает, сохранять его или нет. Может, например, просто посмотреть надо, что получается. Вопросы про сохранение, я думаю, здесь не уместны.

Re: Создание нового документа не из application context

> Леонид
Тогда не забудьте по SDI=1 В этом случае нельзя пользоваться acDocManager->appContextNewDocument((const char *)pData);
И вообще нельзя создавать новый документ. SDI=1 может возникнуть если пользователь указал работать в однодокументном режиме или если загружено arx-приложение работающее только в однодокументном режиме. Это во всех версиях AutoCAD начиная с 2000.

Re: Создание нового документа не из application context

> Александр Ривилис
Про SDI я помню.
Если уж зашла про это речь, объясните мне пожалуйста, какой в нем смысл? Зачем этот режим вообще нужен? Есть ли такие ситуации когда без него нельзя обойтись? Что-то я лично сомневаюсь...

Re: Создание нового документа не из application context

> Леонид
Этот режим оставлен для совместимости с AutoCAD до 2000. Некоторые пользователи привыкли и предпочитают работать в однодокументном режиме. Кроме того, как я уже сказал, есть arx-приложения, которые работают только в однодокументном режиме.

Re: Создание нового документа не из application context

> Леонид
Дело не в необходимости какого-то режима. Просто когда пишется программа она должна учитывать максимально возможное количество вариантов "окружения", т.е. условий в которых она будет работать. Иначе - крах...