50 #ifdef ENABLE_OPENVOLUMEMESH_SUPPORT
52 #ifndef OVM_PROPERTY_VISUALIZER_HH
53 #define OVM_PROPERTY_VISUALIZER_HH
55 #include "../PropertyVisualizer.hh"
57 #include <ObjectTypes/VolumeMeshObject/VolumeMeshObject.hh>
59 #include <OpenFlipper/BasePlugin/PluginFunctionsViewControls.hh>
61 #include <ObjectTypes/VolumeMeshObject/VolumeMeshDrawModesContainer.hh>
63 #include <ACG/QtWidgets/QtHistogramWidget.hh>
67 template <
typename MeshT>
71 OVMPropertyVisualizer(MeshT* _mesh,
int objectID,
PropertyInfo _propertyInfo)
78 virtual ~OVMPropertyVisualizer(){
clear(); }
81 virtual void visualize(
bool _setDrawMode, QWidget* _widget);
89 virtual void removeProperty(){ emit log(
"Removing properties not yet implemented for OpenVolumeMeshs."); }
100 unsigned int getClosestPrimitiveId(
unsigned int _face,
ACG::Vec3d &_hitPoint);
103 template <
typename Type>
109 virtual void visualizeFaceProp(
bool _setDrawMode =
true);
110 virtual void visualizeEdgeProp(
bool _setDrawMode =
true);
111 virtual void visualizeHalfedgeProp(
bool _setDrawMode =
true);
112 virtual void visualizeVertexProp(
bool _setDrawMode =
true);
113 virtual void visualizeCellProp(
bool _setDrawMode =
true);
114 virtual void visualizeHalffaceProp(
bool _setDrawMode =
true);
116 template<
typename PropType>
117 void duplicateProperty_stage1();
119 template <
typename InnerType>
120 QString getPropertyText_(
unsigned int index);
122 virtual void setCellPropertyFromText(
unsigned int index, QString text);
123 virtual void setFacePropertyFromText(
unsigned int index, QString text);
124 virtual void setHalffacePropertyFromText(
unsigned int index, QString text);
125 virtual void setEdgePropertyFromText(
unsigned int index, QString text);
126 virtual void setHalfedgePropertyFromText(
unsigned int index, QString text);
127 virtual void setVertexPropertyFromText(
unsigned int index, QString text);
135 unsigned int getClosestCellId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
136 unsigned int getClosestFaceId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
137 unsigned int getClosestHalffaceId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
138 unsigned int getClosestEdgeId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
139 unsigned int getClosestHalfedgeId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
140 unsigned int getClosestVertexId(
unsigned int _face,
ACG::Vec3d& _hitPoint);
148 template<
typename Property>
152 CopyProperty(Property& p1,
const Property& p2, MeshT*& mesh) :
153 p1(p1), p2(p2), mesh(mesh) {}
155 template<
typename PrimitiveHandleT>
156 inline void operator() (
const PrimitiveHandleT &pr) {
167 #define CALLS_TO_VISUALIZE_PROP(Classname, Template, PropType) \
168 template <Template> \
169 void Classname::visualizeCellProp(bool _setDrawMode) \
171 OpenVolumeMesh::CellPropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_cell_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
172 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->cells_begin(), OVMPropertyVisualizer<MeshT>::mesh->cells_end());\
175 VolumeMeshObject<MeshT>* object;\
176 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
177 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.cellsColoredPerCell);\
181 void Classname::visualizeFaceProp(bool _setDrawMode)\
183 OpenVolumeMesh::FacePropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_face_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
184 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->faces_begin(), OVMPropertyVisualizer<MeshT>::mesh->faces_end());\
187 VolumeMeshObject<MeshT>* object;\
188 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
189 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.facesColoredPerFace);\
193 void Classname::visualizeHalffaceProp(bool _setDrawMode)\
195 OpenVolumeMesh::HalfFacePropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_halfface_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
196 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->halffaces_begin(), OVMPropertyVisualizer<MeshT>::mesh->halffaces_end());\
199 VolumeMeshObject<MeshT>* object;\
200 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
201 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.halffacesColoredPerHalfface);\
205 void Classname::visualizeEdgeProp(bool _setDrawMode)\
207 OpenVolumeMesh::EdgePropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_edge_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
208 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->edges_begin(), OVMPropertyVisualizer<MeshT>::mesh->edges_end());\
211 VolumeMeshObject<MeshT>* object;\
212 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
213 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.edgesColoredPerEdge);\
217 void Classname::visualizeHalfedgeProp(bool _setDrawMode)\
219 OpenVolumeMesh::HalfEdgePropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_halfedge_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
220 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->halfedges_begin(), OVMPropertyVisualizer<MeshT>::mesh->halfedges_end());\
223 VolumeMeshObject<MeshT>* object;\
224 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
225 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.halfedgesColoredPerHalfedge);\
229 void Classname::visualizeVertexProp(bool _setDrawMode)\
231 OpenVolumeMesh::VertexPropertyT<PropType> prop = OVMPropertyVisualizer<MeshT>::mesh->template request_vertex_property<PropType>(OVMPropertyVisualizer<MeshT>::propertyInfo.propName());\
232 visualizeProp(prop, OVMPropertyVisualizer<MeshT>::mesh->vertices_begin(), OVMPropertyVisualizer<MeshT>::mesh->vertices_end());\
235 VolumeMeshObject<MeshT>* object;\
236 PluginFunctions::getObject(OVMPropertyVisualizer<MeshT>::mObjectID, object);\
237 object->setObjectDrawMode(OVMPropertyVisualizer<MeshT>::drawModes.verticesColored);\
242 #if defined(INCLUDE_TEMPLATES) && !defined(OVM_PROPERTY_VISUALIZER_CC)
243 #include "OVMPropertyVisualizerT.cc"
This class provides easy access to DrawModes supported by OpenVolumeMesh.
virtual void clear()
Clears the property visualization.
virtual void removeProperty()
Removes the property.
virtual int getEntityCount()=0
Returns the number of entities.
virtual void setPropertyFromText(unsigned int index, QString text)=0
Returns the value of a property in text form.
virtual QString getHeader()=0
Returns the header for saving.
virtual QString getPropertyText(unsigned int i)=0
Returns the value of a property in text form.
virtual void duplicateProperty()
Duplicates the property.
This class vizualizes a property.
virtual void visualize(bool _setDrawMode, QWidget *_widget)
Visualizes the property.
Cellection of information about a property.