产品咨询热线 400-871-5551     搜索     русский язык  |  English
x

首页 > 水刀研究院
图形实体手动排序
来源: 时间:2021-06-24 浏览:3480
单个排序,列表排序,鼠标拾取排序这三种排序方式都是在进入实体排序状态下才会被激活。
       单个排序,列表排序,鼠标拾取排序这三种排序方式都是在进入实体排序状态下才会被激活。单个排序、列表排序、及鼠标拾取排序按钮都设计成菜单栏“Modify的子按钮,在“Modify”菜单要显示的时候,就会发射出 about To Show()信号,从而调 用 “ 显 示 实 体 排 序 ” 槽 函 数 slot Modify Menu About To Show() , 在 函 数 里 判 断
display Entities Order Action 是否处于选中状态,如果处于选中状态,则列表排序list Sort Action 的 enable 属性变为 true ,列表排序按钮被激活,而对于单个排序single Sort Action 和鼠标拾取排序 mouse Sort Action 还需判断选中的实体数量,只有当选中的实体数量为 时,single Sort Action 的 enable 属性才变为 true,单个排序按钮被激活,而只有当选中的实体数量大于 时,mouse Sort Action 的 enable 属性才变为 true

鼠标拾取排序按钮被激活。具体每一个实体对应的一个序号的实现函数都是drawTextp(intx1,  inty1,  const  QString&  text),只是对于不同种类实体调用的参数不同而已 , 例如直线: drawTextp(midPoint.x+20,midPoint.y+20,QString::number(painter->m_n Indx)),其中调用的实际参数是直线段中点 坐标+20坐标+20、实体在容器中的序号。具体手动排序方式界面设计与实现将在下面每一小节中进行具体的介绍。

1)单个排序

       单个实体排序,即一次只能对一个实体进行排序操作。首先要进入实体排序状态,然后选中单个实体,“单个排序”按钮才会被激活,单击“单个排序”按钮,弹出单个实体排序对话框,选择想要的加工序号,点击“OK”即可。单个实体排序操作的流程图如图 3.4 
所示。自定义图形实体或是从文件中读取的图形实体都会被存到类RS_Entity Container 中的成员 QList<RS_Entity *> entities 中,通过在类中定义一些函数(方法)获取实体的信息,比如获取容器中的第一个实体指针,最后一个实体指针,给定序号指定的实体指针,因此可以得到当前实体的序号,然后通过 swap Entity(int index,  RS_Entity  *e)函数将被选中的实体指针插到指定的位置,其它的实体指针依次后移一个位置,并去除原来实体指针。单个实体排序的对话框及用到 Qt 中的一些组件如图 3.5 所示。单个实体序号 排序前和排序后的效果图分别如图 3.6 和图 3.7 所示。

 


2)列表排序
      列表排序,即一次可以对多个实体同时进行操作。首先要进入实体排序状态,单击“列表排序”按钮,弹出列表排序对话框,选择实体序号,然后点击“向上移”按钮,或是“向下移”按钮,或是“移到最前”按钮,或是“移到最后”按钮,最后点击“OK”即可。列表排序的对话框及用到 Qt 中的一些组件如图 3.8 所示。对话框中每一种按钮操作的响应都是通过信号和槽来实现的,例如“向上移”按钮,通过槽函数 slot Step Up()来实现整个操作。槽函数 slot Step Up()主要用到函数 swap Entity()(被选中的实体排到指定的位置,并去除原来的),函数 swap()(交换两个数)等,列表排序实现的过程如图 3.9 所示。列表排序前和排序后的效果图分别如图 3.10 和图 3.11 示。 

3)鼠标拾取排序
       当组成轮廓实体数量较多时,此时用单个排序或列表排序都会很长时间,效率不高,所以鼠标拾取排序是就是为了简便用户操作,提高效率而开发的。鼠标拾取排序操作的流程是:首先要进入实体排序状态,然后选中需要重排实体,“鼠标拾取排序”按钮才会被激活,单击“鼠标拾取排序”按钮,弹出鼠标拾取排序对话框,对话框中提示输入开始排序的位置,此数值小于或等于被选中的最小实体序号,设置完数值点击“OK”即可进入鼠标单击排序中,然后单击实体,所有需要重排的实体被单击完后,弹出是否按照此排序排序的对话框,点击“OK”即可。代码实现的思路是:建立三个临时表 QList<RS_Entity*>temple , QList<RS_Entity*>temple Entities QList<RS_Entity*>temple Entities2,通过 temple 等于创建实体时放入的链表 
entities 到容器中的实体指针,遍历链表 temple 中的实体指针,若实体被选中,则将实体指针放入链表 temple Entities 中,并将实体设置为不选中状态,然后对实体进行单击操作(若实体初始为不选中状态,单击实体一次,实体由不选中状态变成选中状态;若实体初始为选中状态,单击实体一次,实体由选中状态变成不选中状态,实体处于选中状态时默认呈虚红线显示,实体处于不选中状态时默认呈白实线显示),实体处于选中状态,判断实体是否处于选中状态,若是,就将实体指针加入链表 temple Entities2中并移除原来链表 temple Entities 中的实体指针,判断是否遍历完所有需要重排的实体指针(即链表 
temple Entities 是否为空),若是,就遍历链表 temple Entities2 中实体指针,移除链表 entities 中的实体指针并将链表 temple Entities2 中实体指针插入到链表entities 中。整个鼠标拾取排序操作的流程图如图 3.12 所示,鼠标拾取排序前后的效果图分别如图 3.13 和图 3.14 所示,代码实现的流程图如图 3.15 所示。
 



上一条:图形实体自动排序
下一条:图形实体换向的设计与实现
奥拓福水刀【官网】 版权所有 Copyright 2019-2025 辽ICP备2021002461号-1
首页
产品中心
电话咨询