Управление SummaryInfo чертежа при помощи ObjectARX
Вам может понадобиться изменить свойства «Автор изменений» ("Last saved by") и «Редакция» ("Revision number"), а также другие пользовательские свойства чертежа. Класс AcDbDatabaseSummaryInfo из ObjectARX SDK вам поможет. Эквивалент в AutoCAD .Net API - структура "DatabaseSummaryInfo". Но в отличие от C++, некоторые свойства, такие как "LastSavedBy" и "RevisionNumber" только для чтения в .NET. Вы можете воспользоваться COM API для получения и установки этих свойств. Это особенно удобно в случае, когда вы управляете AutoCAD из внешнего приложения или используете VBA.
После того как свойство "LastSavedBy" изменено, важно сохранить базу под другим именем. Если этого не сделать, то команда _SAVE AutoCAD автоматически использует системный логин и сохранит его в этом поле.
Ниже образец кода ObjectARX C++ для установки свойства «Автор изменений» и «Редакция» и получения других свойств.
- Acad::ErrorStatus es;
- AcDbDatabaseSummaryInfo *pInfo;
- AcDbDatabase *pCurDb = NULL;
- ACHAR* info;
- ACHAR* key;
- ACHAR* value;
- int customQty;
- int index;
- pCurDb = acdbHostApplicationServices()->workingDatabase();
- // Указатель на SummaryInfo текущей базы
- es = acdbGetSummaryInfo(pCurDb, pInfo);
- acutPrintf(L"\nСвойства этого чертежа:" );
- es = pInfo->getTitle(info);
- if (info)
- {
- acutPrintf(L"\nНазвание = %s" , info);
- }
- es = pInfo->getSubject(info);
- if (info)
- {
- acutPrintf(L"\nТема = %s" , info);
- }
- es = pInfo->getAuthor(info);
- if (info)
- {
- acutPrintf(L"\nАвтор = %s" , info);
- }
- es = pInfo->getKeywords(info);
- if (info)
- {
- acutPrintf(L"\nКлючевые слова = %s" , info);
- }
- es = pInfo->getComments(info);
- if (info)
- {
- acutPrintf(L"\nКомментарий = %s" , info);
- }
- es = pInfo->setLastSavedBy(L"Captain CAD" );
- es = pInfo->getLastSavedBy(info);
- acutPrintf(L"\nАвтор изменений = %s" , info);
- es = pInfo->getHyperlinkBase(info);
- if (info)
- {
- acutPrintf(L"\nБаза гиперссылки = %s" , info);
- }
- es = pInfo->setRevisionNumber(L"1" );
- es = pInfo->getRevisionNumber(info);
- acutPrintf(L"\nРедакция = %s" , info);
- customQty = pInfo->numCustomInfo();
- if (customQty > 0)
- {
- acutPrintf(L"\nПользовательская информация:\n" );
- acutPrintf(L"\nИмя\t\tЗначение\n" );
- for (index = 0; index < customQty; index++)
- {
- pInfo->getCustomSummaryInfo(index, key, value);
- if (key)
- {
- acutPrintf(L"\n%s" , key);
- }
- if (value)
- {
- acutPrintf(L"\t\t%s" , value);
- }
- acdbFree(key);
- acdbFree(value);
- }
- }
- else
- {
- acutPrintf(L"\n\nВ чертеже нет никаких пользовательских свойств");
- }
- es = acdbPutSummaryInfo(pInfo);
- acdbFree(info);
- pCurDb->saveAs(ACRX_T("D:\\Temp\\MyTestArx.dwg" ));
Для установки свойств при помощи COM API:
- oAcadApp.ActiveDocument.Database.SummaryInfo.LastSavedBy = "Autodesk"
- oAcadApp.ActiveDocument.SaveAs("D:\\Temp\\MyTest.dwg" )
Источник: http://adndevblog.typepad.com/autocad/2015/04/manipulate-drawing-summaryinfo-using-objectarx.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2700
Опубликовано 13.05.2015