pxmlw6n2f/Gazebo_Distributed_TCP/gazebo/gui/ModelSnap.hh

117 lines
4.1 KiB
C++

/*
* Copyright (C) 2014 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#ifndef _GAZEBO_MODEL_SNAP_HH_
#define _GAZEBO_MODEL_SNAP_HH_
#include <string>
#include <vector>
#include "gazebo/common/MouseEvent.hh"
#include "gazebo/common/KeyEvent.hh"
#include "gazebo/math/Pose.hh"
#include "gazebo/rendering/RenderTypes.hh"
#include "gazebo/common/SingletonT.hh"
#include "gazebo/util/system.hh"
namespace gazebo
{
namespace gui
{
class ModelSnapPrivate;
/// \class ModelSnap ModelSnap.hh gui/Gui.hh
/// \brief A gui tool for snapping one model to another.
class GZ_GUI_VISIBLE ModelSnap : public SingletonT<ModelSnap>
{
/// \brief Constructor
private: ModelSnap();
/// \brief Destructor
private: virtual ~ModelSnap();
/// \brief Initialize the model snapping tool.
public: void Init();
/// \brief Clear the model snapping tool. This explicity cleans up the
/// internal state of the singleton and prepares it for exit.
public: void Clear();
/// \brief Reset the model snapping tool.
public: void Reset();
/// \brief Clean up the model snap tool.
public: void Fini();
/// \brief Calculate the translation and rotation needed to snap the
/// centroid of a mesh triangle of a visual to another, taking into
/// account any pose offsets.
/// \param[in] _triangleSrc vertices of target triangle being snapped to.
/// \param[in] _triangleDest vertices of the other triangle that will be
/// moved.
/// \param[in] _visualSrc Visual being moved by the snap action.
public: void Snap(const std::vector<math::Vector3> &_triangleSrc,
const std::vector<math::Vector3> &_triangleDest,
rendering::VisualPtr _visualSrc);
/// \brief Calculate the translation and rotation needed to snap the
/// centroid of a mesh triangle of a visual to another, taking into
/// account any pose offsets.
/// \param[in] _triangleSrc vertices of target triangle being snapped to.
/// \param[in] _triangleDest vertices of the other triangle that will be
/// moved.
/// \param[in] _poseSrc Pose offset of triangleB relative to its model
/// visual.
/// \param[out] _trans Translation output.
/// \param[out] _rotation Rotation output.
public: void GetSnapTransform(
const std::vector<math::Vector3> &_triangleSrc,
const std::vector<math::Vector3> &_triangleDest,
const math::Pose &_poseSrc, math::Vector3 &_trans,
math::Quaternion &_rot);
/// \brief Process an object translate mouse press event.
/// \param[in] _event Mouse event.
public: void OnMousePressEvent(const common::MouseEvent &_event);
/// \brief Process an object translate mouse move event.
/// \param[in] _event Mouse event.
public: void OnMouseMoveEvent(const common::MouseEvent &_event);
/// \brief Process an object translate mouse release event.
/// \param[in] _event Mouse event.
public: void OnMouseReleaseEvent(const common::MouseEvent &_event);
/// \brief Publish visual's pose to the server
/// \param[in] _vis Pointer to the visual whose pose is to be published.
private: void PublishVisualPose(rendering::VisualPtr _vis);
/// \brief Update the visual representation of the snap spot.
private: void Update();
/// \brief This is a singleton class.
private: friend class SingletonT<ModelSnap>;
/// \internal
/// \brief Pointer to private data.
private: ModelSnapPrivate *dataPtr;
};
}
}
#endif