1. 小細節修正

  2. 程式碼顯示功能

  3. 路徑計算問題

Pyslvs 界面

繪圖選項

新增顯示尺度和反黑背景的選項。

佈署面板

由於碰到一些小障礙,所以就先作模擬面板的部份。

之所以使用嵌入的 Widget,是因為必須一面看著畫布作調整,所以都放在主視窗作業會比較好。

不過之間的傳輸功能還在研究,和視窗設定的形式不一樣,不能在關閉的瞬間偵測。

右鍵選單

由於發現會受表格標頭欄厚度的影響,微調了一下右鍵選單的位置,不過這些定值會因為字體大小而改變。

拆開滑鼠游標的 X Y 位置作像素調整:

def on_point_context_menu(self, point):
    pos = QPoint(point.x()+43, point.y()+23)
    action = self.popMenu_point.exec_(self.Entiteis_Point.mapToGlobal(pos))
    ...

以及偵測加入項目後出現欄的寬度:

def on_link_context_menu(self, point):
    if self.Entiteis_Link.rowCount()==0: pos = QPoint(point.x()+3, point.y()+23)
    else: pos = QPoint(point.x()+15, point.y()+23)

存檔提示

視窗標題會在修改後,未存檔時多出星號。

讀檔、開新檔案、存檔後星號會消失。

在沒有星號的情形下,關閉程式時不會提示是否存檔。

圖形顏色對應

利用 Python 的 dict 鍵值功能作顏色對應表,基本概念如下:

dict = {key1 : value1, key2 : value2}
dict[key1] 得 value1
dict[key2] 得 value2

可以使用 zip 來將兩個 list 縫合,顏色代碼對應 Qt 的 Name space。

self.Color = dict(zip(self.re_Color, val_Color))

這樣就可得(無定義則用綠色):

try: pen.setColor(self.Color[self.table_style.item(i, 1).text()])
except KeyError: pen.setColor(Qt.green)

以下是目前支援的顏色表:


Print 程式碼

新增一個功能,會在監視窗中 Print 所有迴圈呈現的程式碼。

這個功能目前僅只於 print,之後會做成顯示在視窗中、存成文字的功能。


路徑計算問題

將約束帶入後似乎出現了問題,還在研究如何解決。

路徑計算功能能夠畫出指定點(可複數)的移動軌跡,設定視窗中使用兩個表單達成這個功能。

結果計算後變成 180° 之後的軌跡出現錯亂。

下圖繪製 Point2 和 Point3 的軌跡,Point3 的圓周運動是一切正常,但是 Point2 在繞回來時運算不知道為何出了嚴重的錯誤,畫在不可能出現的位置。

由於這部份功能的程式滿大的,也是用自己的邏輯手寫的,可能會漏一些沒注意的地方,檢查費了不少功夫。

原理是用一整個 list object 傳送座標群的,包含選擇的點,從 start angle 到 end angle 的範圍,理論上是三維的。

不過迴圈迭代時有點小毛病,所以改成 object[0] 是第一個點的 X 軸,object[1] 是 Y 軸,object[2] 是第二個點的 X 軸,以此類推。

#取鏈用的迴圈
for i in range(0, len(self.Path), 2):
    X_path = self.Path[i]
    Y_path = self.Path[i+1]

可能是 slvs 程式庫的約束處理問題,因為我是先將「呆鍊」組成三角形後才約束「連桿」接起,因而動到主動軸的點,產生了這個問題。

相反地,「客製化」零件的約束順序採用最保險的方式,所以沒有這個問題。

歸納幾個解決方式,是製作以下功能(都會加入):

  1. 調整表格順序的功能(決定優先權,比較好知道原因)。

  2. 優先偵測主動軸的參照點,優先定義與其相關的連桿約束。

之前提到的,因為這部份程式碼滿大的,跨了3個檔案,所以可能要一些時間處理。


Comments

comments powered by Disqus