思考點線面的繪製過程:
1. 考慮itool與控制項axmapcontrol的引數傳遞,這裡hookhelper的hook屬性用axmapcontrol.object賦值。axmapcontrol(.net物件)對mapcontrol(com物件)進行了封裝。
2. 明顯所有的繪製都涉及控制項這幾個事件mouse_down、mouse_move、mouse_up、doubleclick;事件是控制項的,imapcontrolevents2中幾個事件的定義:
而itool中只有如下三個過載的方法,注意引數不一樣。
所以必然有乙個機制實現了繪製事件的多型。
根據蔣波濤的外掛程式框架,我似乎理解了這種機制。實際是在ui層控制項的mouse_down、mouse_move、mouse_up事件方法中呼叫虛基類basetool(itool)的方法,進一步,呼叫的是currenttool的過載方法。ui層控制項-〉基類basetool-〉currenttool順次呼叫。
這樣就解釋了直接給ui層控制項新增mouse_down、mouse_move、mouse_up自定義事件響應函式時候會和現有的itool中的方法產生衝突,因為是將tool的過載方法和自定義的事件響應函式同時新增到了事件的鏈上,因而順次執行了。
這種思路實現了ui介面和繪製圖形互動動作的分離,是通過icommand這個中間物件實現的,從ui介面中抽象出全新的一層,通過onclick方法和ui介面控制項的事件繫結。
idisplayfeedback物件實現了繪製邏輯和互動動作的分離。idisplayfeedback具有快取繪製的幾何物件的功能,很奇妙。
繪製圖形有兩種關聯滑鼠事件的方式:
一種如arcgis的徹底抽象,ui(滑鼠鍵盤事件是介面的)和itool(抽象滑鼠鍵盤事件)分離,繪製流程用idisplayfeedback抽象。
另一種將繪製的將滑鼠鍵盤事件與圖形放在一起,即抽象出乙個圖形類如點、線、面,這種方式估計國內很多的繪圖軟體都是如此吧。比如抽象乙個draw基類,有滑鼠事件。
在三維球中,由於螢幕繪製是按照幀率來顯示的,或者說何時螢幕繪製不受控制。居然會這樣:在繪製過程中使用臨時渲染物件,最後滑鼠雙擊結束時再刪除臨時渲染物件,再構造乙個新的渲染物件。
更試圖用乙個控制類囊括所有的繪製操作。
這可能真的很保密啊!
點線面的意義 對點線面的認知
點 認識點點,辭海 的解釋是 細小的痕跡。在 幾何學上,點只有位置,而在 形態學中,點 還具有大小 形狀 色彩 肌理等造型元素。在 自然界,海邊的沙石是點,落在玻璃窗上的 雨滴是點,夜幕中滿天星星是點,空氣中的塵埃也是點。點的表情 具體為形象的點,可用各種工具表現出現,不同形態的點呈現出不同的視覺特...
opengl畫點線面
1 關於點 點的大小預設為1個畫素,但也可以改變之。改變的命令為glpointsize,其函式原型如下 void glpointsize glfloat size size必須大於0.0f,預設值為1.0f,單位為 畫素 注意 對於具體的opengl實現,點的大小都有個限度的,如果設定的size超過...
點線面的特點 描述點線面狀事物分布特徵
描述點線面狀事物分布特徵 點狀事物 分布是否均勻 方位 疏密 與其它地理事物的聯絡 氣候 地形 河流 交通等 線狀事物 1.線狀地理事物 山脈 河流 交通線 分界線 海岸線 等值線 空間分布特點描述 總體概況 位置 平直彎曲 特殊形狀 走向 延伸方向 區域性分布 分段描述其走向和延伸方向 2.描述多...