nc2t 发表于 2008-4-25 07:59:00

再谈实体旋转与拖动的问题

<p>有那位兄弟知道,怎样模仿CAD中的旋转实体命令(rotate)和拖动实体命令(Move)的效果。</p><p>实体的旋转与拖动我尝试过用AcEdJig函数,但是这个函数只能拖动和旋转一个实体,(请问能用AcEdJig编辑多个实体么?)</p><p>并且,在拖动和旋转的过程中,会显示出一些不应该的效果</p><p>比如我用AcEdJig拖动和旋转,一个带属性(AcDbAttribute)的块引用(这个块中也存在块定义(AcDbAttributeDefintion))的过程中。都会显示相应块的块定义。例如我在块中添加的块定义的tag="textTag",则在拖动和旋转的过程中,总会显示“textTag”这个字符。</p><p>但是CAD中move一个实体和rotate一个实体的时候,则不会这样。</p><p>归根到底,我就是想知道怎样模仿CAD中,旋转和移动一个实体的那种效果,CAD是怎么做到的。</p>

bluelightcsy 发表于 2008-4-25 19:20:00

.......还是你呀?那方法是对的。你可以别把AcDbAttributeDefinition加进块里面嘛!那样不是不会显示出来?Jig完之后还是把原来的实体移过去就行了呀。

nc2t 发表于 2008-4-26 19:59:00

<p>呵呵~<font face="Verdana" color="#000000">bluelightcsy 兄弟还是我~</font></p><p><font face="Verdana">我是在jig中按照要移动的pBlockReference,创建一个临时的pBlockReferenceTemp(根据原来的BlockId,重新创建一个临时的块表记录,这个块表记录中不包含AcDbAttributeDefinition),但是,原来的pBlockReference中包含AcDbAttribute啊,而且我要求在移动(或旋转)的过程中,要随时显示要移动的pBlockReference和其包含的AcDbAttribute。</font></p><p><font face="Verdana">也就是说在移动过程中,必须pBlockReference和AcDbAttribute同时显示。</font></p><p><font face="Verdana">但是JIg不能同时移动多个实体。我不知道应该怎么解决</font></p><p><font face="Verdana">你看CAD中的移动和旋转命令。可以移动和旋转任何数量的实体。我就是想要那种效果。不知道CAD是怎么做到的?</font></p><p><font face="Verdana">再次感谢bluelightcsy 兄弟,关注我的帖子.....</font></p>

bluelightcsy 发表于 2008-4-27 20:42:00

....这么说吧,有一个块A,里面有一个属性,名字叫B,值为C。你想移动的时候显示成什么样?根据我的理解,你要显示A,B?是这样吗?

nc2t 发表于 2008-5-3 18:22:00

<p>实在不好意思了~~bluelightcsy兄弟,最近事情很多,比较忙,没来的论坛</p><p>我想无论是在拖动或者旋转的过程中,都是显示A和C,</p><p>也就是说我只是想显示属性值</p><p>要是再通俗一点说,</p><p>你在CAD中做一个简单的包含属性定义的块,然后用insert命令插入一个块参照。&lt;---这是准备工作</p><p>然后用移动命令或者旋转命令,操作这个块参照。要的就是那种效果</p><p>我做了一个简单的图。你可以直接用移动或者旋转命令操作一下图中的实体。就是那种效果</p><p>感谢兄弟关注</p>

bluelightcsy 发表于 2008-5-8 12:48:00

<p>。。。还是没搞明白你想显示撒。总之显示撒都是可以做到的。拿你的图来说,你是想显示BJ而不是10和50这具体的数字吧?试一下下面代码,把所有AttributeDefinition变成Attribute.</p><p>&nbsp;&nbsp;&nbsp; AcDbAttribute* pEnt = NULL;<br/>&nbsp;&nbsp;&nbsp; pEnt = new AcDbAttribute();<br/>&nbsp;&nbsp;&nbsp; if(NULL == pEnt)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Acad::eOutOfMemory;</p><p>&nbsp;&nbsp;&nbsp; // set the parameters of the AcDbAttribute<br/>&nbsp;&nbsp;&nbsp; // set ENTITY common fields<br/>&nbsp;&nbsp;&nbsp; ((AcDbAttribute*)pEnt)-&gt;setPropertiesFrom(pAttribDef);</p><p>&nbsp;&nbsp;&nbsp; // set ATTDEF common fields<br/>&nbsp;&nbsp;&nbsp; ((AcDbAttribute*)pEnt)-&gt;setInvisible(Adesk::kFalse);<br/>&nbsp;&nbsp;&nbsp; // put in default value for test<br/>&nbsp;&nbsp;&nbsp; ((AcDbAttribute*)pEnt)-&gt;setTextString(pAttribDef-&gt;tag());</p><p>&nbsp;&nbsp;&nbsp; // append the attribute to the block reference<br/>&nbsp;&nbsp;&nbsp; pBlockRef-&gt;appendAttribute(pEnt);</p>

nc2t 发表于 2008-5-9 18:09:00

<p>谢谢楼上兄弟~我使用一个代理的类实现了要求</p>
页: [1]
查看完整版本: 再谈实体旋转与拖动的问题