几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(C++) (http://www.dimcax.com/hust/forumdisplay.php?f=34)
-   -   【转帖】如何精确获取acdbtext文本串的长度? (http://www.dimcax.com/hust/showthread.php?t=7455)

yang686526 2009-04-17 09:54 PM

【转帖】如何精确获取acdbtext文本串的长度?
 
如何精确获取acdbtext文本串的长度?
如何精确获取acdbtext文本串的长度?
如题
//以下代码只说明了如何实现该功能,并无
//检测措施,如要完善请自行添加
{
ads_name en;
ads_point pt;
acedentsel("\n选择实体:", en, pt);
acdbobjectid id;
acdbgetobjectid(id, en);
acdbentity *pent;
acdbopenobject(pent, id, acdb::kforread);
acdbtext *ptext;
//转换acdbentity指针为acdbtext类指针
ptext = acdbtext::cast(pent);
//strlen()是c++中的字符串处理函数
//用于获取字符串的长度
int i = strlen(ptext->textstring());
pent->close();
}
可能是我表达的不清楚,我要的不是字符个数,而是图形的长度,类似win32 api 函数 gettextextentpoint32 获取输出文本图形的长度。
还是不清楚你到底要什么?是不是整个图形所占用的字节数?
如图中所示,文本串“123456789”的长度就是起点和端点的坐标x的差(x2 - x1)
此主题相关图片如下:
/************************************************************************
*函数名: gettextlength
*功能: 计算cad中文字字符串长度的函数
*调用函数表:
*被调用函数表:
*输入参数: textid -- 字符串在cad中的id
*输出参数:
*返回值: cad状态
*其他:
************************************************************************/
acad::errorstatus gettextlength(acdbobjectid textid,double& textlengh)
{
acad::errorstatus es=acad::eok;
acdbentity *pent=null;
if((es=acdbopenobject(pent,textid,acdb::kforread))!=acad::eok)
return es;

acdbextents ext;
pent->getgeomextents(ext);
pent->close();
acgepoint3d minpt,maxpt;
minpt = ext.minpoint();
maxpt = ext.maxpoint();
textlengh = acutdistance(asdblarray(minpt),asdblarray(maxpt));

return es;
}
谢谢楼上的!
这方法我已经试过,对大部分的文本是正确的。但有一些文本就不正确。不知道是什么原因。


所有的时间均为北京时间。 现在的时间是 09:46 AM.