,鼠标拾取排序按钮被激活。具体每一个实体对应的一个序号的实现函数都是drawTextp(intx1, inty1, const QString& text),只是对于不同种类实体调用的参数不同而已 , 例如直线: drawTextp(midPoint.x+20,midPoint.y+20,QString::number(painter->m_n Indx)),其中调用的实际参数是直线段中点 x 坐标+20、y 坐标+20、实体在容器中的序号。具体手动排序方式界面设计与实现将在下面每一小节中进行具体的介绍。
(1)单个排序
单个实体排序,即一次只能对一个实体进行排序操作。首先要进入实体排序状态,然后选中单个实体,“单个排序”按钮才会被激活,单击“单个排序”按钮,弹出单个实体排序对话框,选择想要的加工序号,点击“OK”即可。单个实体排序操作的流程图如图 3.4
(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 所示。