- UID
- 786079
- 积分
- 17
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2019-4-11
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 DCMZ 于 2020-7-28 18:04 编辑
我用AcgitextStyle获取了单行文本的宽度和高度,代码如下所贴。
问题出来了,有的文本(如第1行,下图),输出的宽高正常,而有的(如第2、3行,下图),输出的宽高就有问题。我分析原因,有问题的是单行文本高度和宽度因子不是默认的,二是后面输入的,所以有问题。
我现在就是不知道是哪个参数来调整呢。
void CDcText::getWH(AcDbObjectId objID , double txtScale = 1)
{
AcDbText *pTxt = NULL;
acdbOpenObject(pTxt, objID);
ACHAR *txt;//文本内容
txt = pTxt->textString();
AcDbObjectId txtStyleID;//文本样式ID
txtStyleID = pTxt->textStyle();
AcDbTextStyleTableRecord *pTxtStyleRcd = new AcDbTextStyleTableRecord;
acdbOpenObject(pTxtStyleRcd, txtStyleID);
ACHAR *stylename;//文本样式名称
pTxtStyleRcd->getName(stylename);
AcGiTextStyle iStyle;
fromAcDbTextStyle(iStyle, txtStyleID);
pTxt->close();
pTxtStyleRcd->close();
AcGePoint2d ptWH = iStyle.extents(txt, Adesk::kFalse, _tcslen(txt), Adesk::kTrue);//宽高坐标点对
txtW = ptWH.x;//文本宽
txtH = ptWH.y;//文本高
pt_leftlower = AcGePoint2d(Position.x, Position.y);//左下角点
pt_rightlower = AcGePoint2d(Position.x +txtW, Position.y);//右下角点
pt_rightupper = AcGePoint2d(Position.x + txtW, Position.y + txtH);//右上角点
pt_leftupper = AcGePoint2d(Position.x , Position.y + txtH);//左上角点
pt_rightlower.rotateBy(Rotation, pt_leftlower);//考虑角度后的右下角点
pt_rightupper.rotateBy(Rotation ,pt_leftlower);//考虑角度后的右上角点
pt_leftupper.rotateBy(Rotation, pt_leftlower);//考虑角度后的左上角点
AcGePoint2d ptMid;//中点坐标
ptMid.x = (pt_leftlower.x + pt_rightupper.x) / 2;
ptMid.y = (pt_leftlower.y + pt_rightupper.y) / 2;
pt_leftlower.scaleBy(txtScale, ptMid);//考虑放缩后的左下点
pt_rightlower.scaleBy(txtScale, ptMid);//考虑放缩后的右下点
pt_rightupper.scaleBy(txtScale, ptMid);//考虑放缩后的右上点
pt_leftupper.scaleBy(txtScale, ptMid);//考虑放缩后的左上点
}
|
|