![]() |
【转帖】如何精确获取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. |