01/04/2015
Как перезагрузить типы линий из файла
Метод AcDbDatabase::loadLineTypeFile позволяет загрузить типы линий из lin-файла. Если в чертеже имеется одноименный тип линии, то метод loadLineTypeFile вернет код ошибки. Чтобы принудительно перезагрузить типы линий из lin-файла, нужно загрузить их в другую базу, а затем выполнить клонирование в текущую. Вот соответствующий код:
Код - C++: [Выделить]
- Acad::ErrorStatus es;
- AcDbDatabase *pDb =
- acdbHostApplicationServices()->workingDatabase();
- TCHAR szLtFile[MAX_PATH];
- if ( RTNORM !=
- acedFindFile(_T("TrimCADLinetypes.LIN"), szLtFile) )
- {
- acutPrintf(ACRX_T("\nlin-файл не найден!"));
- return ;
- }
- AcDbLinetypeTable *pLtTable = NULL;
- es = pDb->getLinetypeTable(pLtTable,AcDb::kForRead);
- ACHAR *szLtype = ACRX_T("FLATDOTS");
- bool isLinetypeLoaded = pLtTable->has(szLtype);
- es = pLtTable->close();
- if (isLinetypeLoaded)
- {
- // Тип линии уже загружен, попробуем перегрузить его
- AcDbDatabase *pTempDatabase
- = new AcDbDatabase(true, false );
- es = pTempDatabase->loadLineTypeFile
- (szLtype, szLtFile);
- if (Acad::eOk == es)
- {
- AcDbLinetypeTable *pTempLtTable;
- AcDbLinetypeTableRecord *pTempLtRec=NULL;
- es = pTempDatabase->getLinetypeTable(
- pTempLtTable,AcDb::kForRead);
- AcDbObjectId ltRecId = AcDbObjectId::kNull;
- es = pTempLtTable->getAt(szLtype, ltRecId);
- pTempLtTable->close();
- AcDbObjectIdArray objIdArray;
- objIdArray.append(ltRecId);
- AcDbIdMapping idMap;
- es = pDb->wblockCloneObjects(
- objIdArray,
- pDb->linetypeTableId(),
- idMap,
- AcDb::kDrcReplace);
- if (Acad::eOk == es)
- {
- acutPrintf(
- ACRX_T("\nТип линии перезагружен!"));
- }
- else
- {
- acutPrintf(
- ACRX_T("\nИзвините. Не получилось перезагрузить тип линии!"));
- }
- }
- else
- {
- acutPrintf(
- ACRX_T("\nОшибка загрузки типа линии из файла!"));
- }
- delete pTempDatabase;
- }
- else
- {// Еще не загружен такой тип линии – попробуем его загрузить
- if ( Acad::eOk ==
- pDb->loadLineTypeFile(szLtype, szLtFile))
- {
- acutPrintf(
- ACRX_T("\nТип линии загружен из файла!"));
- }
- else
- {
- acutPrintf(
- ACRX_T("\nОшибка загрузки типа линии из файла!"));
- }
- }
Источник: http://adndevblog.typepad.com/autocad/2015/03/reloading-linetype-from-file.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=2604
Опубликовано 01.04.2015