Тема: Замена шрифта в текстовом стиле
Написал функцию, которая меняет шрифт во всех текстовых стилях чертежа на заданный.
Если использую ее для установки shx-шрифта, то он успешно применяется, но при последующей загрузке чертежа выдается сообщение в командную строку - "txt.shx - файл обычного шрифта, а не файл форм."
и выдается диалог выбора компилированной формы shx.
При установке этого же шрифта через настройку стилей такой проблемы не возникает.
Что я упускаю?
// вызов - ReplaceAllFonts(_T("txt.shx")); BOOL ReplaceAllFonts( CString sFont, AcDbDatabase* pDb/*=0*/) { if(!pDb) pDb = acdbHostApplicationServices()->workingDatabase(); if(!pDb) { acutPrintf( _T("Ошибка доступа к базе данных чертежа")); return FALSE; } // перебираем стили Acad::ErrorStatus es; AcDbTextStyleTable* pTsTable=0; es = pDb->getTextStyleTable(pTsTable, AcDb::kForRead); if (es != Acad::eOk) { acutPrintf( _T("Ошибка доступа к таблице текстовых стилей чертежа %s"), pDb->originalFileName()); return FALSE; } AcDbTextStyleTableIterator *pTsIter; es = pTsTable->newIterator(pTsIter); if (es != Acad::eOk) { pTsTable->close(); acutPrintf( _T("Ошибка создания итератора к таблице текстовых стилей чертежа %s"), pDb->originalFileName()); return FALSE; } AcDbTextStyleTableRecord *pTsRecord; for (; !pTsIter->done(); pTsIter->step()) { es = pTsIter->getRecord(pTsRecord, AcDb::kForWrite); if (es != Acad::eOk) { delete pTsIter; pTsTable->close(); acutPrintf( _T("Ошибка доступа к текстовому стилю чертежа %s"), pDb->originalFileName()); return FALSE; } AcString styleName; pTsRecord->getName(styleName); if( 0 == sFont.Right(4).CompareNoCase(_T(".shx"))) { es = pTsRecord->setFileName(sFont.LockBuffer()); sFont.UnlockBuffer(); } else { TCHAR* pTypeFace; Adesk::Boolean bold,italic; int charset, pitch; es = pTsRecord->font( pTypeFace, bold, italic, charset, pitch); es = pTsRecord->setFont(sFont.LockBuffer(), bold, italic, charset, pitch); sFont.UnlockBuffer(); delete pTypeFace; } if (es != Acad::eOk) { delete pTsIter; pTsRecord->close(); pTsTable->close(); acutPrintf _T("Ошибка установки шрифта для стиля '%s' чертежа %s"), styleName.kwszPtr(), pDb->originalFileName()); return FALSE; } pTsRecord->close(); } delete pTsIter; pTsTable->close(); return TRUE; }