天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 88|回复: 1

objectarx代码 新建 大字体M_big, M_hz, 将当前图纸内所有字体中 大字体的改为M_big

[复制链接]
  • TA的每日心情
    开心
    2024-8-31 15:58
  • 签到天数: 89 天

    [LV.6]常住居民II

    488

    主题

    207

    回帖

    3366

    积分

    管理员

    积分
    3366
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    objectarx代码  新建 大字体M_big, M_hz, 将当前图纸内所有字体中 大字体的改为M_big  其他改成M_hz
    1. 在ObjectARX中修改AutoCAD图纸中所有文本的字体涉及遍历图纸上的所有文本对象,并修改其字体设置。下面是一个使用ObjectARX的示例代码,展示了如何创建新的字体样式并将图纸上的文本对象的字体更改为新创建的字体样式。
    2. 请确保你的开发环境已经配置好ObjectARX SDK,并且你熟悉AutoCAD ObjectARX编程。以下代码片段展示了如何创建字体样式并修改现有文字对象的字体。注意,实际的代码可能需要根据你的AutoCAD版本和具体需求进行调整。
    3. ```cpp
    4. #include "rxregsvc.h"
    5. #include "aced.h"
    6. #include "acdb.h"
    7. #include "acdbtext.h"
    8. #include "acdbstyler.h"
    9. // 注册函数,将在加载时调用
    10. ACRX_DXF_DEFINE_MEMBERS(TextFontChangerApp);
    11. class TextFontChangerApp : public AcRxApplication {
    12. public:
    13.     Acad::ErrorStatus rxInit() override {
    14.         acedInit();
    15.         return AcRxApplication::rxInit();
    16.     }
    17.     void rxExit() override {
    18.         acedReset();
    19.     }
    20.     // 自定义命令函数
    21.     void changeTextFonts() {
    22.         // 创建字体样式
    23.         AcDbStyleTable *styleTbl = acdbHostApplicationServices()->workingDatabase()->styleTable();
    24.         styleTbl->upgradeOpen();
    25.         AcDbObjectId bigFontId, hzFontId;
    26.         // 创建大字体样式
    27.         AcDbStyleTableRecord *bigStyle = new AcDbStyleTableRecord;
    28.         bigStyle->setDatabase(styleTbl->database(), false);
    29.         bigStyle->setName("M_big");
    30.         bigStyle->setHeight(5.0); // 设置字体高度
    31.         bigStyle->setFontName("gbcbig.shx"); // 设置字体文件
    32.         bigFontId = styleTbl->append(bigStyle);
    33.         delete bigStyle;
    34.         // 创建其他字体样式
    35.         AcDbStyleTableRecord *hzStyle = new AcDbStyleTableRecord;
    36.         hzStyle->setDatabase(styleTbl->database(), false);
    37.         hzStyle->setName("M_hz");
    38.         hzStyle->setHeight(3.0); // 设置字体高度
    39.         hzStyle->setFontName("gbenor.shx"); // 设置字体文件
    40.         hzFontId = styleTbl->append(hzStyle);
    41.         delete hzStyle;
    42.         // 遍历所有文本对象
    43.         acdbHostApplicationServices()->workingDatabase()->reGen();
    44.         AcDbObjectId id;
    45.         AcDbObjectIterator *iter = acdbHostApplicationServices()->workingDatabase()->newIterator(AcDb::kForText);
    46.         iter->start();
    47.         while (iter->next(id)) {
    48.             AcDbText *txtObj = acdbDynamicCast<AcDbText*>(id.openObject(AcDb::kForWrite));
    49.             if (txtObj != NULL) {
    50.                 if (txtObj->height() > 4.0) { // 更改大字体的文本
    51.                     txtObj->setStyleId(bigFontId);
    52.                 } else { // 更改其他文本
    53.                     txtObj->setStyleId(hzFontId);
    54.                 }
    55.                 txtObj->close();
    56.             }
    57.         }
    58.         iter->close();
    59.         delete iter;
    60.     }
    61. };
    62. // 注册应用程序
    63. ACRX_EXPORT ACRX_DLL指数 TextFontChangerApp theApp;
    64. // 命令入口点
    65. void acrxCmdFuncChangeTextFonts(void*, void*) {
    66.     TextFontChangerApp *app = static_cast<TextFontChangerApp*>(theApp);
    67.     app->changeTextFonts();
    68. }
    69. ```
    70. 在这个示例中,我们创建了两个新的字体样式`M_big`和`M_hz`,并根据文本对象的高度更改其字体样式。`changeTextFonts`函数遍历所有文本对象,并根据文本的高度更改其字体样式。
    71. 为了使用这个功能,你需要注册一个命令,例如`acrxCmdFuncChangeTextFonts`,并在AutoCAD的命令行中调用它,或者将其绑定到一个菜单项上。请注意,字体文件名(例如`gbcbig.shx`和`gbenor.shx`)需要根据你的AutoCAD安装和所需的字体进行更改。
    72. 最后,确保在实际部署前测试这个功能,以验证它是否按预期工作,并处理任何潜在的错误或异常情况。在处理大量文本对象时,性能也是一个需要考虑的因素。
    复制代码

     

     

     

     

    objectarx代码  新建 大字体M_big, M_hz, 将当前图纸内所有字体中 大字体的改为M_big
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
  • TA的每日心情
    开心
    4 天前
  • 签到天数: 138 天

    [LV.7]常住居民III

    850

    主题

    625

    回帖

    4765

    积分

    管理员

    积分
    4765
    QQ
    发表于 2024-6-30 16:35:58 | 显示全部楼层
    1. Acad::ErrorStatus es;
    2.     AcApDocument* pDoc;
    3.     AcDbDatabase* pDb;
    4.     pDoc = acDocManager->curDocument();
    5.     pDb = pDoc->database();
    6.     AcDbTextStyleTable* pTextTbl;
    7.     AcDbTextStyleTableIterator *pTextIterator;
    8.     es = pDb->getTextStyleTable(pTextTbl, AcDb::kForRead);
    9.     pTextTbl->newIterator(pTextIterator);        //获取迭代器
    10.     vector<wstring> fontList;
    11.     for (pTextIterator->start(); !pTextIterator->done(); pTextIterator->step()) {
    12.         AcDbTextStyleTableRecord *pTextRecord;
    13.         es = pTextIterator->getRecord(pTextRecord, AcDb::kForRead);
    14.         TCHAR* pFontName = NULL;
    15.         es = pTextRecord->fileName(pFontName);   //获取字体名称
    16.         if (es == Acad::eOk) {
    17.             AddToFontList(pFontName, fontList);
    18.         }
    19.         es = pTextRecord->bigFontFileName(pFontName);   //获取大字体名称
    20.         if (es == Acad::eOk) {
    21.             AddToFontList(pFontName, fontList);
    22.         }
    23.     }
    24.     pTextTbl->close();
    复制代码
    objectarx代码  新建 大字体M_big, M_hz, 将当前图纸内所有字体中 大字体的改为M_big
    深圳市诺科空间膜结构有限公司 专业膜结构设计施工20年,一级设计一级施工  www.nkmjg.cn 欢迎联系电话:138-2526-2292
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池| |网站地图

    GMT+8, 2024-9-8 09:31 , Processed in 0.064021 second(s), 25 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表