CATIA二次開發交互設計原理
今天午飯後漫步看見一株銀杏,顯擺在樓宇一角,總感覺有絲凄涼。都說情由心生,不會是我狀態不好吧,Mark下。容我生硬一轉,還是寫寫CAA開發中的交互設計吧。
交互設計是對象選擇的重要手段,如在零部件的裝配參考、投圖的視圖方向選擇上,人類智慧不可或缺。不同於元素遍歷,可根據名稱或其屬性來自動選擇,我以為在一個獨立的程序執行過程中,需要人為因素介入的設計方式稱之為交互設計。
在CATIA中,交互設計的機製為State(狀態)機制,通過一個或者多個state構建,或者確切的地說是繪製了一個程序的操作圖(Graph,理解為操作邏輯)。state之間滿足一定的condition(條件)可實現轉換,進而,可定義響應transition(轉換)和執行方法。那麼何為state、condition、和transition?總之我們構建state就是為了選擇對象。
在解釋之前,先引入一個概念:Agent(代理),我們基於交互用滑鼠去拾取,點選等過來的有且僅會有一個對象(可以用一個類型去表徵),對象和agent一一對應,可以直接從agent中獲取。比如,求曲面過一個點的法線,需要給定點、曲面兩個對象,才能求出法線。此時點和曲面表現為兩個Agent。
State界定了對象選擇的獨立性(類似於命名空間的概念),定義一個state需要視業務邏輯而定,有幾個選擇對象,就定義幾個Agent,一般將選擇獨立的Agent歸類為一組,一組謂之一個state,也就是說,在一個state下,只能選擇在其中定義過的agent,而不能選擇外部state中的agent。Condition是根據agent的對象是否被選擇來界定的,一旦選擇就確定了一種condition,然後,可定義狀態的transition和執行方法。
在前面提及的「過點創建曲面法線」的交互方式可以有多種定義,如下所示:
- 可以只構建一個state,一個state下支持選擇兩個對象,操作邏輯是,選擇點、選擇面,結束操作。中間,不能更改選擇過的對象,也就是必須一次選對。
- 也可以定義兩種state,每一個state由一個agent構建,操作邏輯是選擇點、選擇面、選擇點、選擇面………直到選擇滿意,如果曲面選擇錯誤,只能循環回去把點選擇了,才能回到選擇面上面來,如果點選擇錯誤了,就又饒回來了。
上述方案均有操作不便之處,為了提高用戶操作的友好型,一般會引入輔助agent,用於state跳轉,讓用戶在任何state下都能夠很快切換到對應的的state下,來選擇正確的agent,讓用戶有最大的後悔度。
事實上,CATIA就是這麼操作的,會用List控制項去做輔助,因此,上面的設計方案可以是:定義兩種state,共4個agent,基於2方案的情況下,在每個狀態中加入了點、曲面的輔助agent,且允許一個狀態原地踏步,如果曲面選擇錯誤,無需重新選擇點,可以在當前state下繼續選擇曲面,如果想重新選擇點,則可以藉助點的輔助agent轉到到另一個state上,進行選擇。
該方案transition有6個:
分別是兩個「不同state轉換」
state1-->state2: select 曲面輔助agentnstate2-->state1: select 點輔助agentn
四個「相同state轉換」
state1-->state1: select 點agentnstate1-->state1: select 點輔助agentnstate2-->state2: select 曲面agentnstate2-->state2: select 曲面輔助agentn
attention:相關代碼會在後面給上。
推薦閱讀: