HT 发表于 2010-9-8 11:15:00

[求助]加入AcdbTEXT实体后怎么改变它的坐标呢?

<p>&nbsp;&nbsp;&nbsp;&nbsp; 如题,我现在构造了一个AcdbText实体并加进了图纸中,我现在要编程移动它的位置,但好像不行。</p>
<p>利用AcdbText::setpositon()并不能移动它的位置,这是什么原因呢,难道ObjectARX对AcdbText实体不能移动位置吗? Autodesk公司没有提供这个功能的函数吗?</p>

th_gsb 发表于 2010-9-8 13:15:00

<p>是否可以把你修改Text位置的代码传上来看看。</p>
<p>setPosition函数应该没有问题。</p>

HT 发表于 2010-9-8 19:06:00

<p><font face="Verdana">AcDbText* pText=new AcDbText;<br/>pText-&gt;setTextStyle(0);<br/>pText-&gt;setTextString(datestr);<br/>pText-&gt;setPosition(AcGePoint3d(500,100,0));//这里设置位置之后就不能修改了,如果我想修改这个位置怎么办?</font></p>
<p><font face="Verdana">pText-&gt;setHorizontalMode(AcDb::kTextRight);<br/>pText-&gt;setVerticalMode(AcDb::kTextBottom);<br/>pText-&gt;setAlignmentPoint(AcGePoint3d(500,100,0));<br/>pText-&gt;adjustAlignment(acdbCurDwg());<br/>addToModelSpace(pText-&gt;id(), pText);</font></p>

th_gsb 发表于 2010-9-9 09:08:00

<p><font face="Verdana">我已经写了一个段程序,你试试吧。这段代码我测试过了,没问题。</font></p>
<p><font face="Verdana">{<br/>&nbsp;&nbsp;//声明变量<br/>&nbsp;&nbsp;ads_name ssname;<br/>&nbsp;&nbsp;ads_point pt;<br/>&nbsp;&nbsp;int result = acedEntSel(_T("\n请选择一个Text实体:"),ssname,pt);<br/>&nbsp;&nbsp;if(result!=RTNORM) return;<br/>&nbsp;&nbsp;//将ads_name转为AcDbObjectId<br/>&nbsp;&nbsp;AcDbObjectId objId = AcDbObjectId::kNull;<br/>&nbsp;&nbsp;Acad::ErrorStatus es = acdbGetObjectId(objId,ssname);<br/>&nbsp;&nbsp;if (es!=Acad::eOk) return;<br/>&nbsp;&nbsp;//写方式打开要编辑的实体<br/>&nbsp;&nbsp;AcDbEntity* pEntity = NULL;<br/>&nbsp;&nbsp;es = acdbOpenAcDbEntity(pEntity,objId,AcDb::kForWrite);<br/>&nbsp;&nbsp;if (es!=Acad::eOk) return;<br/>&nbsp;&nbsp;//强制转换为AcDbText<br/>&nbsp;&nbsp;AcDbText* pText = AcDbText::cast(pEntity);<br/>&nbsp;&nbsp;if (pText!=NULL)<br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;//修改坐标到原点(你可以根据你的需求修改坐标点)<br/>&nbsp;&nbsp;&nbsp;es = pText-&gt;setPosition(AcGePoint3d(0,0,0));<br/>&nbsp;&nbsp;&nbsp;//切记要关闭实体,因为是写打开的<br/>&nbsp;&nbsp;&nbsp;pText-&gt;close();<br/>&nbsp;&nbsp;}<br/>&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;pEntity-&gt;close();<br/>&nbsp;}</font></p>

luowy 发表于 2010-9-10 10:18:00

<p>lz设定setPosition后,不能设定对齐模式,一旦设了对齐模式,AcDbText的位置就不能由setPosition来确定,而是使用setAlignmentPoint,这个在帮助文档有说明</p>
<p>&nbsp;</p>
<p>另外,pText-&gt;id(),这个是错误的,pText还没发送到modalspace,是没有Id的,而且你那函数addto...的第一个参数传入的id对象引用,是要修改的,因此不能使用pText-&gt;id()</p>

xgready 发表于 2011-5-16 11:34:32

对,5楼说的很正确。

bluelightcsy 发表于 2011-5-16 20:37:53

放进数据库。要移动旋转,transformBy

longge7685 发表于 2012-3-8 19:10:47


lz设定setPosition后,不能设定对齐模式,一旦设了对齐模式,AcDbText的位置就不能由setPosition来确定,而是使用setAlignmentPoint,这个在帮助文档有说明

另外,pText->id(),这个是错误的,pText还没发送到modalspace,是没有Id的,而且你那函数addto...的第一个参数传入的id对象引用,是要修改的,因此不能使用pText->id()



楼上的朋友,我也遇到这种问题,我设置了对齐点,但为什么绘制的文本都在原点(0,0,0)处,怎么回事啊?
页: [1]
查看完整版本: [求助]加入AcdbTEXT实体后怎么改变它的坐标呢?