Увы и ах, понадобилось работать в ACAD2013 SP2 Eng / Rus, другой для этой задачи нет и не предвидится. Надо создать текстовый стиль, использующий ttf-шрифт. Шрифт гарантированно установлен в системе. Использую код из официальной документации:
[CommandMethod("UpdateTextFont")]
public static void UpdateTextFont()
{
// Get the current document and database
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
// Start a transaction
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// Open the current text style for write
TextStyleTableRecord acTextStyleTblRec;
acTextStyleTblRec = acTrans.GetObject(acCurDb.Textstyle, OpenMode.ForWrite) as TextStyleTableRecord;
// Get the current font settings
Autodesk.AutoCAD.GraphicsInterface.FontDescriptor acFont;
acFont = acTextStyleTblRec.Font;
// Update the text style's typeface with "PlayBill"
Autodesk.AutoCAD.GraphicsInterface.FontDescriptor acNewFont;
acNewFont = new Autodesk.AutoCAD.GraphicsInterface.FontDescriptor("Arial", acFont.Bold, acFont.Italic, acFont.CharacterSet, acFont.PitchAndFamily);
acTextStyleTblRec.Font = acNewFont;
acDoc.Editor.Regen();
// Save the changes and dispose of the transaction
acTrans.Commit();
}
}
Со страницы
https://knowledge.autodesk.com/search-result/caas/CloudHelp/cloudhelp/2016/ENU/AutoCAD-ActiveX/files/GUID-DB668114-2395-43C6-858C-2F2514C4BF46-htm.html нашел примерные описания CharacterSet и PitchAndFamily (в ObjectARX SDK 2013 смотрел, но не обнаружил - может, плохо искал):
' CharSet parameter
Public Const ANSI_CHARSET = 0
Public Const DEFAULT_CHARSET = 1
Public Const SYMBOL_CHARSET = 2
Public Const SHIFTJIS_CHARSET = 128
Public Const OEM_CHARSET = 255
' Pitch Values
Public Const DEFAULT_PITCH = 0
Public Const FIXED_PITCH = 1
Public Const VARIABLE_PITCH = 2
' Family Values
Public Const FF_DONTCARE = 0 ' Don't care or don't know.
Public Const FF_ROMAN = 16 ' Variable stroke width, serifed.
Public Const FF_SWISS = 32 ' Variable stroke width, sans-serifed.
Public Const FF_MODERN = 48 ' Constant stroke width, serifed or sans-serifed.
Public Const FF_SCRIPT = 64 ' Cursive, etc.
Public Const FF_DECORATIVE = 80 ' Old English, etc.
' TrueType Flag
Public Const TMPF_TRUETYPE = &H4 ' c# -> 0x4
Во-первых, я не очень понимаю, как высчитывается значение PitchAndFamily: в момент отладки значение от "исходного шрифта" равно 34. Это как? 32+2? А как же флаг TrueType?
И, во-вторых - и это самое главное! - если после UpdateTextFont вызывать окно настроек текстовых стилей, то ACAD тупо валится:
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: acad.exe
Версия приложения: 25.0.204.0
Отметка времени приложения: 516ce058
Имя модуля с ошибкой: heidi11.dll
Версия модуля с ошибкой: 11.0.55.0
Отметка времени модуля с ошибкой: 4f3088ec
Код исключения: c000041d
Смещение исключения: 00000000000319c5
Версия ОС: 6.1.7601.2.1.0.256.48
Код языка: 1049
Дополнительные сведения 1: fb82
Дополнительные сведения 2: fb82fab4641f8439d656a778ac384a64
Дополнительные сведения 3: a2f4
Дополнительные сведения 4: a2f482d8614c21cbae37285e17491eff
Что и в каком месте я делаю не так? К сожалению, самостоятельно мозгов не хватает разобраться.