Developer Documentation
MeshObjectInfoPlugin.hh
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4  * Copyright (c) 2001-2015, RWTH-Aachen University *
5  * Department of Computer Graphics and Multimedia *
6  * All rights reserved. *
7  * www.openflipper.org *
8  * *
9  *---------------------------------------------------------------------------*
10  * This file is part of OpenFlipper. *
11  *---------------------------------------------------------------------------*
12  * *
13  * Redistribution and use in source and binary forms, with or without *
14  * modification, are permitted provided that the following conditions *
15  * are met: *
16  * *
17  * 1. Redistributions of source code must retain the above copyright notice, *
18  * this list of conditions and the following disclaimer. *
19  * *
20  * 2. Redistributions in binary form must reproduce the above copyright *
21  * notice, this list of conditions and the following disclaimer in the *
22  * documentation and/or other materials provided with the distribution. *
23  * *
24  * 3. Neither the name of the copyright holder nor the names of its *
25  * contributors may be used to endorse or promote products derived from *
26  * this software without specific prior written permission. *
27  * *
28  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41 
42 
43 
44 //=============================================================================
45 //
46 // CLASS InfoMeshObjectPlugin
47 //
48 // Author: David Bommes <bommes@cs.rwth-aachen.de>
49 //=============================================================================
50 
51 #ifndef INFOPLUGIN_HH
52 #define INFOPLUGIN_HH
53 
54 //== INCLUDES =================================================================
55 
56 #include <QObject>
57 
67 
68 #include "infoDialog.hh"
69 #include "infoBar.hh"
70 
71 //== CLASS DEFINITION =========================================================
72 
73 
79 {
80  Q_OBJECT
81  Q_INTERFACES(BaseInterface)
82  Q_INTERFACES(InformationInterface)
83  Q_INTERFACES(LoggingInterface)
84  Q_INTERFACES(StatusbarInterface)
85  Q_INTERFACES(LoadSaveInterface)
86  Q_INTERFACES(PythonInterface)
87 
88  Q_PLUGIN_METADATA(IID "org.OpenFlipper.Plugins.Plugin-MeshObjectInfo")
89 
90  signals:
91  // BaseInterface
92  void setSlotDescription(QString _slotName, QString _slotDescription,
93  QStringList _parameters, QStringList _descriptions);
94 
95  // LoggingInterface
96  void log(Logtype _type, QString _message);
97  void log(QString _message);
98 
99  // StatusbarInterface
100  void addWidgetToStatusbar(QWidget* _widget);
101 
102  private slots :
103 
104  // BaseInterface
105  void initializePlugin();
106  void pluginsInitialized();
107  void slotObjectUpdated( int _identifier, const UpdateType& _type );
108  void slotObjectSelectionChanged( int _identifier );
109  void slotAllCleared();
110 
111  // LoadSaveInterface
112  void objectDeleted( int _identifier );
113 
114  void noguiSupported( ) {} ;
115 
116  // InformationInterface
117  void slotInformationRequested(const QPoint _clickedPoint, DataType _type);
119 
120  void slotShowHistogram();
121 
122  public :
123 
124  // default constructor
126 
127  // default destructor
129 
131  QString name(){ return (QString("InfoMeshObject")); };
132 
134  QString description() { return (QString(tr("Provides Information on Mesh Objects"))); };
135 
136  private :
137  InfoDialog* info_;
138 
139  InfoBar* infoBar_;
140 
141  template< class MeshT >
142  void printMeshInfo( MeshT* _mesh, int _id, unsigned int _face, ACG::Vec3d& _hitPoint );
143 
145  void updateData( int _identifier , const UpdateType& _type, const bool deleted);
146 
147 //===========================================================================
150 //===========================================================================
151 
152  public slots:
153 
155  int vertexCount(int _id);
157  int edgeCount(int _id);
159  int faceCount(int _id);
161  int boundaryCount(int _id);
163  int componentCount(int _id);
164 
166  int genus(int _id);
168  Vector cog(int _id);
170  Vector boundingBoxMin(int _id);
172  Vector boundingBoxMax(int _id);
174  Vector boundingBoxSize(int _id);
175 
177  double edgeLength(int _id, int _edgeHandle);
179  double faceArea (int _id, int _faceHandle);
181  double aspectRatio(int _id, int _faceHandle);
183  int vertexValence (int _id, int _vertexHandle);
184 
186  double minEdgeLength(int _id);
188  double maxEdgeLength(int _id);
190  double meanEdgeLength(int _id);
191 
192  public slots:
193  QString version() { return QString("1.0"); };
194 
195  private:
197  void setDescriptions();
198 
200  template< class MeshT >
201  int getClosestVertexInFace(MeshT* _mesh, int _face_idx, ACG::Vec3d& _hitPoint);
202 
204  template< class MeshT >
205  int getClosestEdgeInFace(MeshT* _mesh, int _face_idx, const ACG::Vec3d& _hitPoint);
206 
208  template< class MeshT >
209  int getClosestVertexFromEdge(MeshT* _mesh, int _edge_idx, ACG::Vec3d& _hitPoint);
210 
212  template< class MeshT >
213  void getEdgeLengths(MeshT* _mesh, double &min, double &max, double &mean);
214 
216  bool getEdgeLengths(int _id, double &min, double &max, double &mean);
217 
220  private:
221  BaseObjectData *lastPickedObject_;
222  int lastPickedObjectId_;
223 };
224 
225 #endif //MOVEPLUGIN_HH
226 
int getClosestVertexFromEdge(MeshT *_mesh, int _edge_idx, ACG::Vec3d &_hitPoint)
Get closest vertex index from an edge.
int getClosestEdgeInFace(MeshT *_mesh, int _face_idx, const ACG::Vec3d &_hitPoint)
Get closest edge index from a face.
Vector boundingBoxSize(int _id)
get the size of the bounding box
Update type class.
Definition: UpdateType.hh:60
int vertexCount(int _id)
get total number of vertices for a given object
Logtype
Log types for Message Window.
int vertexValence(int _id, int _vertexHandle)
get vertex valence
Interface for all plugins which want to Load or Save files and create Objects.
Control OpenFlippers status bar.
Interface class for providing information on objects.
QString version()
set scripting slot descriptions
Vector boundingBoxMax(int _id)
get maximum bounding box point
DataType supportedDataTypes()
Get data type for information requests.
int genus(int _id)
get the genus of the given object
Vector boundingBoxMin(int _id)
get minumum bounding box point
int getClosestVertexInFace(MeshT *_mesh, int _face_idx, ACG::Vec3d &_hitPoint)
Get closest vertex index from a face.
int edgeCount(int _id)
get total number of edges for a given object
void getEdgeLengths(MeshT *_mesh, double &min, double &max, double &mean)
Get edge lengths.
Interface for all Plugins which do logging to the logging window of the framework.
int componentCount(int _id)
get the number of components for a given object
QString description()
Description of the Plugin.
double edgeLength(int _id, int _edgeHandle)
get the length of an edge
double faceArea(int _id, int _faceHandle)
get the area of a face
Vector cog(int _id)
get the center of gravity
void slotInformationRequested(const QPoint _clickedPoint, DataType _type)
Show information dialog on clicked object.
Interface class from which all plugins have to be created.
double aspectRatio(int _id, int _faceHandle)
get the aspect ratio of a face
QString name()
Name of the Plugin.
Plugin to visualize information about objects in the scene.
int boundaryCount(int _id)
get the number of boundaries for a given object
double meanEdgeLength(int _id)
get the mean edge length
double maxEdgeLength(int _id)
get the maximal edge length
Predefined datatypes.
Definition: DataTypes.hh:83
void updateData(int _identifier, const UpdateType &_type, const bool deleted)
Slot that updates the visualization.
double minEdgeLength(int _id)
get the minimal edge length
void setDescriptions()
set scripting slot descriptions
void pluginsInitialized()
initialize the plugin
int faceCount(int _id)
get total number of faces for a given object
Interface class for exporting functions to python.