找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 24|回复: 0

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

[复制链接]

0

主题

0

回帖

26

积分

管理员

积分
26
发表于 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. }
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|膜结构网

GMT+8, 2024-12-27 06:55 , Processed in 0.106701 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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