epwt 发表于 2010-11-11 16:08:00

[求助]AcDbText 文字对不齐问题

<p><font face="Verdana">&nbsp;</font></p>
<p><font face="Verdana">......</font></p>
<p><font face="Verdana">&nbsp;AcDbText *pText=new AcDbText ;</font></p>
<p><font face="Verdana">&nbsp;pText-&gt;setPosition(startPt);<br/>&nbsp;pText-&gt;setTextString(_T("12"));<br/>&nbsp;pText-&gt;setHeight(200);<br/>&nbsp;pText-&gt;setVerticalMode(AcDb::TextVertMode::<font face="Verdana">kTextVertMid</font>);<br/>&nbsp;pText-&gt;setHorizontalMode(AcDb::TextHorzMode::kTextCenter);<br/>&nbsp;pText-&gt;setAlignmentPoint(startPt);</font></p>
<p>......</p>
<p><font face="Verdana">&nbsp;</p>
<p>运行后为什么文字不在<font style="BACKGROUND-COLOR: #ffffff">startPt</font>处对正?<br/></p>
<p>求高手指点,谢谢!!。。。</p></font>

epwt 发表于 2010-11-12 09:19:00

这个问题真的很棘手啊,求大家指点。

epwt 发表于 2010-11-17 09:19:00

<p>先把帖子顶起,请大家指点啊。</p>
<p>C++里面为什么这么难控制啊。</p>

bluelightcsy 发表于 2010-12-24 11:06:51

你设置了Vertical和Horizontal的对齐方式,会造成对不齐,你需要确定你想怎么样对齐先。
对齐受几个因素影响
1. 对齐方式
2. 对齐点
3. 插入点
根据你上面的代码,设置成默认对齐方式,应该是左对齐,Vertcial方向也用默认的。其实你把对齐方式的2个函数都不用调用,会有默认的值。

epwt 发表于 2010-12-27 13:21:49

恩,好的,谢谢。
当时用了比较极端的方法,找到了中间点的坐标,
然后把startPt的位置定到中间点。
试试大侠的方法。

bluelightcsy 发表于 2010-12-27 14:39:44

试好了,告诉大家结果。我记得我当时做的时候是AcDbAttributeDefinition.AcDbText的子类。好像就Align和Fit的对齐方式比较搞,其他的对齐方式都蛮明显的。你用Attdef加一个属性,然后通过属性面板去改对齐方式,看到Grip点的变动,就能明白是怎么对齐的了。

松竹 发表于 2010-12-29 09:19:50

本帖最后由 松竹 于 2010-12-29 09:21 编辑

AcDbText *pText=new AcDbText ;

pText->setPosition(startPt);// 删除这一行就可以
pText->setTextString(_T("12"));
pText->setHeight(200);
pText->setVerticalMode(AcDb::TextVertMode::kTextVertMid);
pText->setHorizontalMode(AcDb::TextHorzMode::kTextCenter);
pText->setAlignmentPoint(startPt);

只有当对齐方式是左下对齐时,才需要设置位置点,即调用setPosition()。
页: [1]
查看完整版本: [求助]AcDbText 文字对不齐问题