,鼠標拾取排序按鈕被激活。具體每一個實體對應的一個序號的實現函數都是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 所示。