天气与日历 切换到窄版

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

如何用C++在CAD二次开发中,对标注AcDbDimension文字的高度与宽度的获取方法?

[复制链接]
  • TA的每日心情
    开心
    昨天 06:36
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    105

    主题

    11

    回帖

    1308

    积分

    管理员

    积分
    1308
    QQ
    发表于 2024-10-5 12:48:07 | 显示全部楼层 |阅读模式
    1. #include "acdb.h"
    2. #include "adslib.h"
    3. #include "aced.h"
    4. #include "dbmain.h"
    5. #include "dbdim.h"
    6. #include "dbtext.h"

    7. // 获取标注文字高度和宽度
    8. void GetDimensionTextWidthHeight(AcDbDimension* pDim, double& dTextHeight, double& dTextWidth)
    9. {
    10.   // 获取标注样式
    11.   AcDbObjectId dimStyleId = pDim->dimensionStyle();
    12.   AcDbDimStyleTableRecord* pStyle = nullptr;
    13.   acdbOpenObject(pStyle, dimStyleId, AcDb::kForRead);

    14.   // 获取文字高度
    15.   dTextHeight = pStyle->dimtxt();

    16.   // 获取文字宽度需要计算
    17.   AcDbMText* pMText = pDim->dimensionText();
    18.   if (pMText != nullptr)
    19.   {
    20.     // 获取文字内容
    21.     CString textString;
    22.     pMText->getString(textString);

    23.     // 获取文字样式
    24.     AcDbObjectId textStyleId = pMText->textStyle();
    25.     AcDbTextStyleTableRecord* pTextStyle = nullptr;
    26.     acdbOpenObject(pTextStyle, textStyleId, AcDb::kForRead);

    27.     // 计算文字宽度
    28.     dTextWidth = textString.GetLength() * dTextHeight * pTextStyle->xScale();

    29.     // 释放资源
    30.     pTextStyle->close();
    31.     pMText->close();
    32.   }

    33.   // 释放资源
    34.   pStyle->close();
    35. }

    36. // 测试函数
    37. void TestGetDimensionTextWidthHeight()
    38. {
    39.   // 获取当前图形数据库
    40.   AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
    41.   // 开始事务
    42.   AcDbBlockTableRecord* pBlockTableRecord;
    43.   pDb->getSymbolTable(pBlockTableRecord, AcDb::kForRead);
    44.   AcDbBlockTableRecordIterator* pIter;
    45.   pBlockTableRecord->newIterator(pIter);
    46.   AcTransaction* pTrans = pDb->transactionManager()->startTransaction();

    47.   // 遍历模型空间中的标注
    48.   for (pIter->start(); !pIter->done(); pIter->step())
    49.   {
    50.     AcDbObjectId entId = pIter->objectId();
    51.     AcDbEntity* pEnt;
    52.     if (acdbOpenObject(pEnt, entId, AcDb::kForRead) == Acad::eOk)
    53.     {
    54.       if (pEnt->isKindOf(AcDbDimension::desc()))
    55.       {
    56.         AcDbDimension* pDim = AcDbDimension::cast(pEnt);
    57.         double dTextHeight, dTextWidth;
    58.         GetDimensionTextWidthHeight(pDim, dTextHeight, dTextWidth);

    59.         // 打印标注文字高度和宽度
    60.         acutPrintf(_T("\n标注文字高度:%.2f"), dTextHeight);
    61.         acutPrintf(_T("\n标注文字宽度:%.2f\n"), dTextWidth);
    62.       }
    63.       pEnt->close();
    64.     }
    65.   }

    66.   // 结束事务
    67.   pTrans->commit();
    68.   delete pIter;
    69.   pBlockTableRecord->close();
    70. }
    复制代码

     

     

     

     

    如何用C++在CAD二次开发中,对标注AcDbDimension文字的高度与宽度的获取方法?
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|中国膜结构网_中国空间膜结构协会

    GMT+8, 2024-11-1 10:34 , Processed in 0.128991 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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