想问一下各位,用C++在CAD二次开发中,对标注AcDbDimension文字的高度与宽度的获取方法。
28条回答 默认 最新
关注 获得0.45元问题酬金 🕒下午好,题主!目前:🟢[在线]
📢参考通义千问、由郭老师整理提供!
📣今日诗号:春风又绿江南岸,明月何时照我还。#include "acdb.h" #include "adslib.h" #include "aced.h" #include "dbmain.h" #include "dbdim.h" #include "dbtext.h" // 获取标注文字高度和宽度 void GetDimensionTextWidthHeight(AcDbDimension* pDim, double& dTextHeight, double& dTextWidth) { // 获取标注样式 AcDbObjectId dimStyleId = pDim->dimensionStyle(); AcDbDimStyleTableRecord* pStyle = nullptr; acdbOpenObject(pStyle, dimStyleId, AcDb::kForRead); // 获取文字高度 dTextHeight = pStyle->dimtxt(); // 获取文字宽度需要计算 AcDbMText* pMText = pDim->dimensionText(); if (pMText != nullptr) { // 获取文字内容 CString textString; pMText->getString(textString); // 获取文字样式 AcDbObjectId textStyleId = pMText->textStyle(); AcDbTextStyleTableRecord* pTextStyle = nullptr; acdbOpenObject(pTextStyle, textStyleId, AcDb::kForRead); // 计算文字宽度 dTextWidth = textString.GetLength() * dTextHeight * pTextStyle->xScale(); // 释放资源 pTextStyle->close(); pMText->close(); } // 释放资源 pStyle->close(); } // 测试函数 void TestGetDimensionTextWidthHeight() { // 获取当前图形数据库 AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase(); // 开始事务 AcDbBlockTableRecord* pBlockTableRecord; pDb->getSymbolTable(pBlockTableRecord, AcDb::kForRead); AcDbBlockTableRecordIterator* pIter; pBlockTableRecord->newIterator(pIter); AcTransaction* pTrans = pDb->transactionManager()->startTransaction(); // 遍历模型空间中的标注 for (pIter->start(); !pIter->done(); pIter->step()) { AcDbObjectId entId = pIter->objectId(); AcDbEntity* pEnt; if (acdbOpenObject(pEnt, entId, AcDb::kForRead) == Acad::eOk) { if (pEnt->isKindOf(AcDbDimension::desc())) { AcDbDimension* pDim = AcDbDimension::cast(pEnt); double dTextHeight, dTextWidth; GetDimensionTextWidthHeight(pDim, dTextHeight, dTextWidth); // 打印标注文字高度和宽度 acutPrintf(_T("\n标注文字高度:%.2f"), dTextHeight); acutPrintf(_T("\n标注文字宽度:%.2f\n"), dTextWidth); } pEnt->close(); } } // 结束事务 pTrans->commit(); delete pIter; pBlockTableRecord->close(); }
说明:
-
GetDimensionTextWidthHeight
函数:- 接收一个
AcDbDimension
对象指针作为参数。 - 获取标注样式并从中读取文字高度。
- 获取标注文字对象
AcDbMText
。 - 从
AcDbMText
对象中读取文字内容和文字样式。 - 计算文字宽度:
文字个数 * 文字高度 * 文字样式的 X 缩放比例
。 - 将计算得到的文字高度和宽度通过引用参数返回。
- 接收一个
-
TestGetDimensionTextWidthHeight
函数:- 获取当前图形数据库和模型空间。
- 遍历模型空间中的所有实体。
- 判断实体是否是标注类型 (
AcDbDimension
)。 - 如果是标注,则调用
GetDimensionTextWidthHeight
函数获取文字高度和宽度。 - 打印标注文字高度和宽度。
注意:
- 此代码仅供参考,实际应用中需要根据具体需求进行调整。
- 需要包含相应的头文件,例如
acdb.h
、adslib.h
、aced.h
、dbmain.h
、dbdim.h
、dbtext.h
等。 - 需要将此代码编译成 DLL 文件,并在 AutoCAD 中加载才能使用。
希望以上代码能够帮助您获取标注文字的高度和宽度!
解决 1无用-
悬赏问题
- ¥15 微生物组数据分析--微生物代谢物
- ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)
- ¥20 物理远程控制麦克风使用问题
- ¥15 打印预览会泄漏纸钱包密码吗
- ¥15 在hololens1上运行unity项目只有空窗口
- ¥25 TABLEAU PREP无法打开
- ¥15 百度帐号问题/centos
- ¥15 关于#c语言#的问题:求完整代码条件好说
- ¥100 HALCON DELPHI
- ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败