mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-14 00:24:38 +00:00
91 lines
4.3 KiB
C++
91 lines
4.3 KiB
C++
/****************************************************************************
|
|
* MeshLab o o *
|
|
* A versatile mesh processing toolbox o o *
|
|
* _ O _ *
|
|
* Copyright(C) 2005 \/)\/ *
|
|
* Visual Computing Lab /\/| *
|
|
* ISTI - Italian National Research Council | *
|
|
* \ *
|
|
* All rights reserved. *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
|
|
* for more details. *
|
|
* *
|
|
****************************************************************************/
|
|
|
|
#ifndef EDITPOINTPLUGIN_H
|
|
#define EDITPOINTPLUGIN_H
|
|
|
|
#include <QObject>
|
|
#include <common/plugins/interfaces/edit_plugin.h>
|
|
|
|
class EditPointPlugin : public QObject, public EditTool
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
enum {SELECT_DEFAULT_MODE, SELECT_FITTING_PLANE_MODE};
|
|
|
|
EditPointPlugin(int _editType);
|
|
virtual ~EditPointPlugin() {}
|
|
|
|
static const QString info();
|
|
|
|
void suggestedRenderingData(MeshModel & m, MLRenderingData& dt);
|
|
bool startEdit(MeshModel &/*m*/, GLArea * /*parent*/, MLSceneGLSharedDataContext* /*cont*/);
|
|
void endEdit(MeshModel &/*m*/, GLArea * /*parent*/, MLSceneGLSharedDataContext* /*cont*/);
|
|
void decorate(MeshModel &/*m*/, GLArea * /*parent*/, QPainter *p);
|
|
void mousePressEvent(QMouseEvent *, MeshModel &, GLArea * );
|
|
void mouseMoveEvent(QMouseEvent *, MeshModel &, GLArea * );
|
|
void mouseReleaseEvent(QMouseEvent *, MeshModel &/*m*/, GLArea * );
|
|
void keyPressEvent(QKeyEvent *, MeshModel &/*m*/, GLArea *);
|
|
void wheelEvent(QWheelEvent*, MeshModel &/*m*/, GLArea * );
|
|
|
|
private:
|
|
// How the selections are composed
|
|
typedef enum {SMAdd, SMClear,SMSub} ComposingSelMode;
|
|
ComposingSelMode composingSelMode;
|
|
|
|
// Could be SELECT_DEFAULT_MODE or SELECT_FITTING_PLANE_MODE
|
|
int editType;
|
|
|
|
bool isMousePressed;
|
|
bool haveToPick;
|
|
|
|
CMeshO::VertexPointer startingVertex;
|
|
vcg::Point2f startingClick;
|
|
|
|
float dist; // the selection's radius
|
|
float maxHop; // the maximus hop distance allowed between 2 adjacent points
|
|
float fittingRadiusPerc; // the percentage of the selection's radius used to interpolate points to find the plane
|
|
float fittingRadius; // fittingRadiusPerc * dist
|
|
float planeDist; // maximus distance that a point has from the plane in order to be selected
|
|
|
|
vcg::Plane3<CMeshO::ScalarType> fittingPlane;
|
|
|
|
// Used to draw the circle that shows how the plane is inclinated
|
|
CMeshO fittingCircle;
|
|
|
|
// ComponentVector: the points in the actual selection (red colored)
|
|
// BorderVector: the points in the actual border (yellow colored)
|
|
// NotReachableVector: points not reachable from the actual startingVertex (used to find the BorderVector)
|
|
// OldComponentVector: the previous selection: used to compose different selections
|
|
std::vector<CMeshO::VertexPointer> ComponentVector;
|
|
std::vector<CMeshO::VertexPointer> BorderVector;
|
|
std::vector<CMeshO::VertexPointer> NotReachableVector;
|
|
std::vector<CMeshO::VertexPointer> OldComponentVector;
|
|
|
|
QPoint cur;
|
|
QPoint currentMousePosition;
|
|
};
|
|
|
|
#endif
|