19/02/2014
Создаем копию текущего документа в новом документе.
Вопрос:
Как можно создать точную копию текущего документа в новом документе?
Решение:
Одно из решений – сначала создание временного файла-шаблона из текущего файла, а затем создание нового чертежа из этого шаблона. Затем шаблон можно удалить. Вот шаги, которые последовательно нужно проделать:
- Выполняем операцию Wblock для текущего чертежа.
- Сохраняем чертеж как файл шаблона (с расширением DWT) по временному пути на жестком диске
- Из контекста приложения создаем новый документ из предварительно созданного шаблона.
- Если необходимо удаляем временный файл с жесткого диска.
Код - C++: [Выделить]
- // Вспомогательная функция: создает новый документ
- void newDocHelper(void *pData)
- {
- AcApDocument* pDoc = acDocManager->curDocument();
- if (acDocManager->isApplicationContext())
- {
- acDocManager->appContextNewDocument((const ACHAR *)pData);
- }
- else
- {
- acutPrintf(L"\nОшибка: мы в контексте документа: %s\n",pDoc->fileName());
- }
- }
- // Обратите внимание, что мы используем путь "C:/temp.dwt" для размещения
- // временного файла. Измените местоположение в соответствии с вашими
- // условиями.
- void copydwg()
- {
- // TODO: Код команды
- AcDbDatabase *pDb = NULL;
- AcDbDatabase *pnewDb = NULL;
- pDb = acdbHostApplicationServices()->workingDatabase();
- assert( pDb != NULL );
- if( pDb->wblock(pnewDb) != Acad::eOk ) {
- acutPrintf(L"Не могу выполнить wblock.\n");
- return;
- }
- if( pnewDb->saveAs(L"C:/temp.dwt") != Acad::eOk) {
- acutPrintf(L"Не могу сохранить как C:/temp.dwt файл.\n");
- delete pnewDb;
- return;
- }
- delete pnewDb;
- static wchar_t pData[] = L"c:/temp.dwt";
- acDocManager->executeInApplicationContext(newDocHelper, (void *)pData);
- // 'remove' – это C-функция для удаления файлов и ее синтаксис
- //int remove(const wchar_t *path );
- remove("c:/temp.dwt");
- }
Внимание: Не регистрируйте эту команду с флагом 'ACRX_CMD_SESSION' так как AcDbDatabase::wblock() не сможет выполниться в этом контексте.
Обсуждение: http://adn-cis.org/forum/index.php?topic=542
Опубликовано 19.02.2014