查看单个帖子
旧 2009-04-17, 09:54 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】如何精确获取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;
}
谢谢楼上的!
这方法我已经试过,对大部分的文本是正确的。但有一些文本就不正确。不知道是什么原因。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)