210 lines
5.9 KiB
C
210 lines
5.9 KiB
C
|
|
/*
|
||
|
|
* Software License Agreement (BSD License)
|
||
|
|
*
|
||
|
|
* Point Cloud Library (PCL) - www.pointclouds.org
|
||
|
|
* Copyright (c) 2011, Willow Garage, Inc.
|
||
|
|
* Copyright (c) 2012-, Open Perception, Inc.
|
||
|
|
*
|
||
|
|
* All rights reserved.
|
||
|
|
*
|
||
|
|
* Redistribution and use in source and binary forms, with or without
|
||
|
|
* modification, are permitted provided that the following conditions
|
||
|
|
* are met:
|
||
|
|
*
|
||
|
|
* * Redistributions of source code must retain the above copyright
|
||
|
|
* notice, this list of conditions and the following disclaimer.
|
||
|
|
* * Redistributions in binary form must reproduce the above
|
||
|
|
* copyright notice, this list of conditions and the following
|
||
|
|
* disclaimer in the documentation and/or other materials provided
|
||
|
|
* with the distribution.
|
||
|
|
* * Neither the name of the copyright holder(s) nor the names of its
|
||
|
|
* contributors may be used to endorse or promote products derived
|
||
|
|
* from this software without specific prior written permission.
|
||
|
|
*
|
||
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||
|
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||
|
|
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||
|
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
|
||
|
|
#pragma once
|
||
|
|
|
||
|
|
#include <pcl/visualization/keyboard_event.h>
|
||
|
|
|
||
|
|
namespace pcl
|
||
|
|
{
|
||
|
|
namespace visualization
|
||
|
|
{
|
||
|
|
class MouseEvent
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
enum Type
|
||
|
|
{
|
||
|
|
MouseMove = 1,
|
||
|
|
MouseButtonPress,
|
||
|
|
MouseButtonRelease,
|
||
|
|
MouseScrollDown,
|
||
|
|
MouseScrollUp,
|
||
|
|
MouseDblClick
|
||
|
|
};
|
||
|
|
|
||
|
|
enum MouseButton
|
||
|
|
{
|
||
|
|
NoButton = 0,
|
||
|
|
LeftButton,
|
||
|
|
MiddleButton,
|
||
|
|
RightButton,
|
||
|
|
VScroll /*other buttons, scroll wheels etc. may follow*/
|
||
|
|
};
|
||
|
|
|
||
|
|
/** Constructor.
|
||
|
|
* \param[in] type event type
|
||
|
|
* \param[in] button The Button that causes the event
|
||
|
|
* \param[in] x x position of mouse pointer at that time where event got fired
|
||
|
|
* \param[in] y y position of mouse pointer at that time where event got fired
|
||
|
|
* \param[in] alt whether the ALT key was pressed at that time where event got fired
|
||
|
|
* \param[in] ctrl whether the CTRL key was pressed at that time where event got fired
|
||
|
|
* \param[in] shift whether the Shift key was pressed at that time where event got fired
|
||
|
|
* \param[in] selection_mode whether we are in selection mode
|
||
|
|
*/
|
||
|
|
inline MouseEvent (const Type& type, const MouseButton& button,
|
||
|
|
unsigned int x, unsigned int y,
|
||
|
|
bool alt, bool ctrl, bool shift,
|
||
|
|
bool selection_mode = false);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return type of mouse event
|
||
|
|
*/
|
||
|
|
inline const Type&
|
||
|
|
getType () const;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \brief Sets the mouse event type
|
||
|
|
*/
|
||
|
|
inline void
|
||
|
|
setType (const Type& type);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return the Button that caused the action
|
||
|
|
*/
|
||
|
|
inline const MouseButton&
|
||
|
|
getButton () const;
|
||
|
|
|
||
|
|
/** \brief Set the button that caused the event */
|
||
|
|
inline void
|
||
|
|
setButton (const MouseButton& button);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return the x position of the mouse pointer at that time where the event got fired
|
||
|
|
*/
|
||
|
|
inline unsigned int
|
||
|
|
getX () const;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return the y position of the mouse pointer at that time where the event got fired
|
||
|
|
*/
|
||
|
|
inline unsigned int
|
||
|
|
getY () const;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return returns the keyboard modifiers state at that time where the event got fired
|
||
|
|
*/
|
||
|
|
inline unsigned int
|
||
|
|
getKeyboardModifiers () const;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* \return selection mode status
|
||
|
|
*/
|
||
|
|
inline bool
|
||
|
|
getSelectionMode () const;
|
||
|
|
|
||
|
|
protected:
|
||
|
|
Type type_;
|
||
|
|
MouseButton button_;
|
||
|
|
unsigned int pointer_x_;
|
||
|
|
unsigned int pointer_y_;
|
||
|
|
unsigned int key_state_;
|
||
|
|
bool selection_mode_;
|
||
|
|
};
|
||
|
|
|
||
|
|
MouseEvent::MouseEvent (const Type& type, const MouseButton& button,
|
||
|
|
unsigned x, unsigned y,
|
||
|
|
bool alt, bool ctrl, bool shift,
|
||
|
|
bool selection_mode)
|
||
|
|
: type_ (type)
|
||
|
|
, button_ (button)
|
||
|
|
, pointer_x_ (x)
|
||
|
|
, pointer_y_ (y)
|
||
|
|
, key_state_ (0)
|
||
|
|
, selection_mode_ (selection_mode)
|
||
|
|
{
|
||
|
|
if (alt)
|
||
|
|
key_state_ = KeyboardEvent::Alt;
|
||
|
|
|
||
|
|
if (ctrl)
|
||
|
|
key_state_ |= KeyboardEvent::Ctrl;
|
||
|
|
|
||
|
|
if (shift)
|
||
|
|
key_state_ |= KeyboardEvent::Shift;
|
||
|
|
}
|
||
|
|
|
||
|
|
const MouseEvent::Type&
|
||
|
|
MouseEvent::getType () const
|
||
|
|
{
|
||
|
|
return (type_);
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
MouseEvent::setType (const Type& type)
|
||
|
|
{
|
||
|
|
type_ = type;
|
||
|
|
}
|
||
|
|
|
||
|
|
const MouseEvent::MouseButton&
|
||
|
|
MouseEvent::getButton () const
|
||
|
|
{
|
||
|
|
return (button_);
|
||
|
|
}
|
||
|
|
|
||
|
|
void
|
||
|
|
MouseEvent::setButton (const MouseButton& button)
|
||
|
|
{
|
||
|
|
button_ = button;
|
||
|
|
}
|
||
|
|
|
||
|
|
unsigned int
|
||
|
|
MouseEvent::getX () const
|
||
|
|
{
|
||
|
|
return (pointer_x_);
|
||
|
|
}
|
||
|
|
|
||
|
|
unsigned int
|
||
|
|
MouseEvent::getY () const
|
||
|
|
{
|
||
|
|
return (pointer_y_);
|
||
|
|
}
|
||
|
|
|
||
|
|
unsigned int
|
||
|
|
MouseEvent::getKeyboardModifiers () const
|
||
|
|
{
|
||
|
|
return (key_state_);
|
||
|
|
}
|
||
|
|
|
||
|
|
bool
|
||
|
|
MouseEvent::getSelectionMode () const
|
||
|
|
{
|
||
|
|
return (selection_mode_);
|
||
|
|
}
|
||
|
|
|
||
|
|
} //namespace visualization
|
||
|
|
} //namespace pcl
|