Skip to content
24 November 2010 / Jeffrey Hermanto Halimsetiawan

InkCanvas dengan Windows MultiPoint Mouse SDK – Part 2


Contoh Program - Multipoint Ink Canvas

Contoh Program - Multipoint Ink Canvas

Sebelumnya, telah dibahas bagaimana cara membuat sebuah control InkCanvas dapat dikenai event mouse drag yang dilakukan oleh multipoint cursor pada post  InkCanvas dengan Windows MultiPoint Mouse SDK. Namun, program yang dibuat di post sebelumnya belum mampu menangani jika terjadi event mouse drag oleh beberapa multipoint cursor secara simultan. Untuk dapat mengakomodasi hal tersebut, beberapa perubahan terkait harus dilakukan dengan memanfaatkan deviceID dari setiap mouse yang terhubung pada komputer.

Beberapa perubahan yang harus dilakukan antara lain:

  1. Ubah variabel penanda sedang di-drag, koordinat sebelum dan koordinat sesudah suatu mouse sesuai dengan jumlah mouse yang terhubung pada komputer. Oleh karena itu, semua variabel yang ada diubah dalam bentuk array.
  2. private int _secondX;
    private int _secondY;
    private int _firstX;
    private int _firstY;
    private bool _isDraw = false;
    
    private Point[] _arrPointFirst;
    private Point[] _arrPointSecond;
    private bool[] _arrIsDraw;
    
  3. Definisikan sebuah method yang akan dipanggil ketika program telah melakukan registrasi instans MultipointSDK karena pada saat itu akan dikenali berapa jumlah mouse yang terhubung pada komputer.
  4. private void InitializeState()
    {
        if (_arrIsDraw == null)
        {
            int mouseCount = MultipointSdk.Instance.MouseDeviceList.Count;
            _arrIsDraw = new bool[mouseCount];
            _arrPointFirst = new Point[mouseCount];
            _arrPointSecond = new Point[mouseCount];
            for (int i = 0; i < mouseCount; i++)
            {
                _arrIsDraw[i] = false;
                _arrPointFirst[i] = new Point();
                _arrPointSecond[i] = new Point();
            }
        }
    }
    
  5. Lakukan sedikit perubahan pada definisi method mpbDrawing_MultiPointMouseDownEvent dengan mengambil deviceID dari mouse terlebih dahulu.
  6. private void mpbDrawing_MultiPointMouseDownEvent(object sender, RoutedEventArgs e)
    {
        InitializeState();
        MultipointMouseEventArgs args = (MultipointMouseEventArgs)e;
        DeviceInfo mouseObject = args.DeviceInfo;
        MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
        int x = (int)mpDevice.Position.X;
        int y = (int)mpDevice.Position.Y;
    
        int deviceId = args.DeviceInfo.Id;
    
        if (!_arrIsDraw[deviceId])
        {
            _arrIsDraw[deviceId] = true;
            _arrPointSecond[deviceId].X = x;
            _arrPointSecond[deviceId].Y = y;
            _arrPointFirst[deviceId].X = x;
            _arrPointFirst[deviceId].Y = y;
        }
        else
        {
            mpbDrawing_MultiPointMouseUpEvent(sender, e);
        }
    }
    
  7. Lakukan sedikit perubahan pada definisi method mpbDrawing_MultipointMouseMoveEvent dengan mengambil deviceID dari mouse terlebih dahulu.
  8. private void mpbDrawing_MultipointMouseMoveEvent(object sender, RoutedEventArgs e)
    {
        InitializeState();
        MultipointMouseEventArgs args = e as MultipointMouseEventArgs;
        int deviceId = args.DeviceInfo.Id;
        if (_arrIsDraw[deviceId])
        {
            DeviceInfo mouseObject = args.DeviceInfo;
            MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
    
            int x = (int)mpDevice.Position.X;
            int y = (int)mpDevice.Position.Y;
    
            _arrPointFirst[deviceId].X = _arrPointSecond[deviceId].X;
            _arrPointFirst[deviceId].Y = _arrPointSecond[deviceId].Y;
            _arrPointSecond[deviceId].X = x;
            _arrPointSecond[deviceId].Y = y;
    
            AddLine(_arrPointFirst[deviceId].X, _arrPointFirst[deviceId].Y,
                    _arrPointSecond[deviceId].X, _arrPointSecond[deviceId].Y);
        }
    }
    
  9. Lakukan sedikit perubahan pada definisi method mpbDrawing_MultiPointMouseUpEvent dengan mengambil deviceID dari mouse terlebih dahulu.
  10. private void mpbDrawing_MultiPointMouseUpEvent(object sender, RoutedEventArgs e)
    {
        InitializeState();
        MultipointMouseEventArgs args = (MultipointMouseEventArgs)e;
    
        DeviceInfo mouseObject = args.DeviceInfo;
        MultipointMouseDevice mpDevice = (MultipointMouseDevice)mouseObject.DeviceVisual;
        int x = (int)mpDevice.Position.X;
        int y = (int)mpDevice.Position.Y;
    
        int deviceId = args.DeviceInfo.Id;
        _arrIsDraw[deviceId] = false;
    }
    

Berikut adalah demo video program sederhana ini :

Selamat mencoba😀

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: