現在座標軟體其實比較多了,不過,好用的幾乎都商品化,要註冊付費才能正常的使用。真不想花錢,或是懶得找,上面的 blog 中可以找到改良過的 Wiimote Whiteboard。不過,我測試過,它放在比較上方的連結所下載的 version 1.2 有 bugs ,程式中的定位按鈕(Calibrate Location)按下去沒反應,游標控制的 checkbox 點選以後不會立即有效,左上角會固定出現滑鼠指標.......,在文章下方的回應中, Per Thomas 有貼了一個 Version1.3 的連結,記得要下載這個修正過的版本:
這支程式除了解決了 Windows 7 64 bit 的問題,它還在工具的最上方加了一個可以進行藍芽連線的按鈕(Connect),看了 source ,它是直接用系統的函數來進行這部份的功能,不像我的 WiimoteAutoConnect 是靠別人開發的函數庫(其實也只用到它整個功能的一丁點而已)。不過,試了一下,藍芽配對連線的部份用起來怪怪的,而且,被它嘗試連線失敗以後,Wiimote 的四個藍色 LED 就一直閃個不停,連我的 WiimoteAutoConnect 都會搜尋不到任何藍芽裝置,必須把 Wiimote 電源切掉再重開才能正常使用。有空我再來追一下它的 source ,看能不能把這個 bug 除掉。
對我來說,使用 Smoothboard 最大的好處是,當我們在找尋 Wiimote 擺放的最佳位置時,左下角的 IR dot 觀側區會讓我清楚的看到紅外線筆在哪一個相對位置,這樣,可以很快調整的 Wiimote 的位置及角度。另一個就是當 Wiimote 的『可視範圍』大於螢幕時,我們可以自訂那些區域感應到紅外線時要執行的功能。這樣的需求,拿 Per Thomas 的這個版本來改,應該是可行的。時間~時間~想做的事很多,我需要的是時間啦!
後記
還是忍不住把 source 拿來修改了,目前多加了以下的功能:
我想研究出如何判斷一個點是否在某個四邊形內的演算法以後,就可以再加入在畫面外按滑鼠時的自訂功能。另外,改了半天都無法解決 AutoConnect 連線功能時好時壞的情形,需要再研究一番。反正可以暫時用我自己的
WiimoteAutoConnect 。
檔案下載
後記
還是忍不住把 source 拿來修改了,目前多加了以下的功能:
- 可以在下面灰底的小矩形中監看 IR dots 在 Wiimote 的視界中大概的位置。
- 加入了右鍵的功能,只要在原地按著 IR pen 約 2 秒鐘(會出現旋轉的圈圈),觸發的滑鼠事件會自動變成右鍵按一下。不過,因為是模擬的,和直接按滑鼠右鍵有一點點不同,在某些軟體下和想像的運作方式可能會不同。以 Windows 的小畫家為例,在使用畫筆時,按右鍵是以背景色(或顏色2)來上色,但是在這種模擬右鍵下,只能畫出一個點,而無法使用拖曳的方式來畫出線,此缺點可以用下面另一種按滑鼠右鍵來替代。
- 在螢幕以外的範圍按,可執行指定的功能:目前提供螢幕左右兩側,按上面時送方向鍵〔上〕,按下面時送方向鍵〔下〕;如果在螢幕下方按一下,〔下一次的滑鼠按鍵會變成右鍵〕。這裡的右鍵因為是像切換開關一樣,要在螢幕中再按一下才開始執行右鍵的功能,所以支援滑鼠的拖曳,不會有前述長按後執行右鍵無法拖曳的問題。
- 視窗最小化以後會自動由工作列上消失,以滑鼠點選一下在 System Tray 的小圖示以後才會還原回來。
- 加了中文化的功能,如果用的是中文視窗(zh-TW)會自動顯示中文。
檔案下載
- 請注意:個人對 C# 並不熟,純以此程式練習修改,好玩而已,不負連帶責任,也無法指導別人如何修改,抱歉,在此先聲明。
- 我依 1.3 版修改而來的 1.3.1.11 版:WiimoteWhiteboard_1.3.1.11.zip (2012.01.15更新)
更新紀錄
- 2012.01.15 加入一個 OutsideScreenToggles.ini ,裡面記錄了螢幕外由左上角開始順時針旋轉的 12 個感應區塊要做什麼動作,依照此設定執行指令。目前尚差一個圖形化設定的界面。暫時得自行參考 Virtual Key Codes 的資料。
- 2012.01.14 修正長按的圓形動畫會閃爍的問題。把訊息中文化,如果是 zh-TW 會自動換成正體中文。
- 2012.01.14 對準螢幕「長按」時會出現「旋轉圓形」的動畫,提醒準備進入一次右鍵的模式。
- 2012.01.12 將 WiimoteLib 的 source 置入專案中,這樣就不用 WiimoteLib.dll ,只要一個 WiimoteWhiteboard.exe 就可以使用。
- 2012.01.11 稍微修改了在超出螢幕下方按一下,讓它在下一次的滑鼠模擬是右鍵的動作,可以執行右鍵的拖曳動作。
解決電量如果超過 100% 程式會出現錯誤而結束的問題。 - 2012.01.10 本來以為要判斷是否在螢幕範圍內 click 會很複雜,繞了一大圈,原來利用 warpedPos 就可以知道經過轉換以後的滑鼠游標位置,因為轉換過的座標是矩形的,所以要判斷是在哪一個「象限」click 變成很容易:小於 0 或大於 Width / Height 的通通是在螢幕外按。這樣一來,要加入 Outside Screen Toggle 的功能就可行,目前加入在右側的部份按會變成 Mouse Right Click 測試。有空再加入設定的畫面,這樣就可以自訂功能。
另外,修改了 MoveMouse ,把原來在超過螢幕按一下,滑鼠游標仍會移動,改成不移動。 - 2012.01.09 加入最小化後不佔工作列,利用 NotifyIcon 讓它縮到「System Tray」。
- 2012.01.08 修改判斷是否使用 MS Bluetooth Stack 的程式碼,改用 BluetoothFindFirstRadio 來判斷。
- 2012.01.07 將網路上下載回來的 1.3 source 改了一下,加入可監看 IR dots 的功能和右鍵的功能,AutoConnect 的部份有稍做修改,但未把問題徹底解決。
我想增加控制燈號的功能,但是在WiimoteMainForm.cs中(其餘沒改)加入一個CheckBox寫的事件卻沒用(其中一部分如下,是控制LED2)
回覆刪除Wiimote wm = new Wiimote();
private bool LED2 = false;
private void
LEDBox2_CheckedChanged(object sender, EventArgs e)
{
if (LEDBox2.Checked)
{
LED2 = true;
wm.SetLEDs(LED1, LED2, LED3, LED4);
}
else
{
LED2 = false;
wm.SetLEDs(LED1, LED2, LED3, LED4);
}
}
請問還需要加入什麼
剛剛忘了提到
回覆刪除我是使用您提供的1.3.1.11版修改的
樓上這位訪客您好:
回覆刪除其實我對 C# 並沒有那麼熟,都是邊試邊看再修正,真要我回答,只能猜啦!
我看原來的 source 中,有關 Wiimote 的控制是寫在 Controller Class 中,WiimoteMainForm.cs 中的事件再去引發 Controller 中的事件讓它執行,這樣說不知對不對,您參考看看。
終於搞定了
回覆刪除把
wm.SetLEDs(LED1, LED2, LED3, LED4);
改成
controller.wm.SetLEDs(LED1, LED2, LED3, LED4);
再將Controller.cs裡的
Wiimote wm = new Wiimote();
改成
internal Wiimote wm = new Wiimote();
就行了
恭喜您解決了問題。
回覆刪除thanks alot! and thanks for google translate :D
回覆刪除