mirror of https://github.com/CGAL/cgal
189 lines
6.4 KiB
C++
189 lines
6.4 KiB
C++
#ifndef SCENE_POLYHEDRON_ITEM_H
|
|
#define SCENE_POLYHEDRON_ITEM_H
|
|
|
|
#include "Scene_polyhedron_item_config.h"
|
|
#include <CGAL/Three/Scene_print_item_interface.h>
|
|
#include <CGAL/Three/Scene_item.h>
|
|
#include <CGAL/Three/TextRenderer.h>
|
|
#include "Polyhedron_type_fwd.h"
|
|
#include "Polyhedron_type.h"
|
|
#include <iostream>
|
|
#include <QOpenGLVertexArrayObject>
|
|
#include <QOpenGLBuffer>
|
|
#include <QOpenGLShaderProgram>
|
|
#include <QOpenGLTexture>
|
|
#include <set>
|
|
#include <vector>
|
|
|
|
#include <QColor>
|
|
#include <CGAL/Three/Scene_zoomable_item_interface.h>
|
|
|
|
class QMenu;
|
|
struct Scene_polyhedron_item_priv;
|
|
|
|
// This class represents a polyhedron in the OpenGL scene
|
|
class SCENE_POLYHEDRON_ITEM_EXPORT Scene_polyhedron_item
|
|
: public CGAL::Three::Scene_item,
|
|
public CGAL::Three::Scene_zoomable_item_interface,
|
|
public CGAL::Three::Scene_print_item_interface{
|
|
Q_INTERFACES(CGAL::Three::Scene_print_item_interface)
|
|
Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PrintInterface/1.0")
|
|
Q_OBJECT
|
|
Q_INTERFACES(CGAL::Three::Scene_zoomable_item_interface)
|
|
Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.ZoomInterface/1.0")
|
|
public:
|
|
typedef Polyhedron Face_graph;
|
|
typedef boost::property_map<Face_graph, boost::vertex_index_t>::type Vertex_selection_map;
|
|
typedef boost::property_map<Face_graph, boost::face_index_t>::type Face_selection_map;
|
|
|
|
enum STATS {
|
|
NB_VERTICES = 0,
|
|
NB_CONNECTED_COMPOS,
|
|
NB_BORDER_EDGES,
|
|
IS_PURE_TRIANGLE,
|
|
NB_DEGENERATED_FACES,
|
|
HOLES,
|
|
AREA,
|
|
VOLUME,
|
|
SELFINTER,
|
|
NB_FACETS,
|
|
MIN_AREA,
|
|
MAX_AREA,
|
|
MED_AREA,
|
|
MEAN_AREA,
|
|
MIN_ALTITUDE,
|
|
MIN_ASPECT_RATIO,
|
|
MAX_ASPECT_RATIO,
|
|
MEAN_ASPECT_RATIO,
|
|
GENUS,
|
|
NB_EDGES,
|
|
MIN_LENGTH,
|
|
MAX_LENGTH,
|
|
MID_LENGTH,
|
|
MEAN_LENGTH,
|
|
NB_NULL_LENGTH,
|
|
MIN_ANGLE,
|
|
MAX_ANGLE,
|
|
MEAN_ANGLE
|
|
};
|
|
|
|
bool has_stats()const Q_DECL_OVERRIDE{return true;}
|
|
QString computeStats(int type)Q_DECL_OVERRIDE;
|
|
CGAL::Three::Scene_item::Header_data header() const Q_DECL_OVERRIDE;
|
|
TextListItem* textItems;
|
|
Scene_polyhedron_item();
|
|
// Scene_polyhedron_item(const Scene_polyhedron_item&);
|
|
Scene_polyhedron_item(const Polyhedron& p);
|
|
Scene_polyhedron_item(Polyhedron* const p);
|
|
~Scene_polyhedron_item();
|
|
|
|
Scene_polyhedron_item* clone() const Q_DECL_OVERRIDE;
|
|
|
|
// IO
|
|
bool load(std::istream& in);
|
|
bool load_obj(std::istream& in);
|
|
bool save(std::ostream& out) const;
|
|
bool save_obj(std::ostream& out) const;
|
|
|
|
// Function for displaying meta-data of the item
|
|
virtual QString toolTip() const Q_DECL_OVERRIDE;
|
|
|
|
// Function to override the context menu
|
|
QMenu* contextMenu() Q_DECL_OVERRIDE;
|
|
|
|
// Indicate if rendering mode is supported
|
|
virtual bool supportsRenderingMode(RenderingMode m) const Q_DECL_OVERRIDE;
|
|
// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list
|
|
void draw() const Q_DECL_OVERRIDE{}
|
|
virtual void draw(CGAL::Three::Viewer_interface*) const Q_DECL_OVERRIDE;
|
|
virtual void drawEdges() const Q_DECL_OVERRIDE{}
|
|
virtual void drawEdges(CGAL::Three::Viewer_interface* viewer) const Q_DECL_OVERRIDE;
|
|
virtual void drawPoints(CGAL::Three::Viewer_interface*) const Q_DECL_OVERRIDE;
|
|
|
|
// Get wrapped polyhedron
|
|
Polyhedron* polyhedron();
|
|
const Polyhedron* polyhedron() const;
|
|
|
|
Face_graph* face_graph() { return polyhedron(); }
|
|
const Face_graph* face_graph() const { return polyhedron(); }
|
|
|
|
// Get dimensions
|
|
bool isFinite() const Q_DECL_OVERRIDE { return true; }
|
|
bool isEmpty() const Q_DECL_OVERRIDE;
|
|
void compute_bbox() const Q_DECL_OVERRIDE;
|
|
|
|
Vertex_selection_map vertex_selection_map();
|
|
Face_selection_map face_selection_map();
|
|
|
|
std::vector<QColor>& color_vector();
|
|
void set_color_vector_read_only(bool on_off);
|
|
bool is_color_vector_read_only();
|
|
|
|
int getNumberOfNullLengthEdges();
|
|
int getNumberOfDegeneratedFaces();
|
|
bool triangulated();
|
|
bool self_intersected();
|
|
//! If b is true, the item will use buffers to render the color.
|
|
//! If b is false, it will use a uniform value. For example, when
|
|
//! using the mesh segmentation plugin, the item must be multicolor.
|
|
void setItemIsMulticolor(bool b);
|
|
//! @returns `true` if the item has multiple colors at the same time.
|
|
bool isItemMulticolor();
|
|
|
|
void printPrimitiveId(QPoint point, CGAL::Three::Viewer_interface*viewer)Q_DECL_OVERRIDE;
|
|
void printPrimitiveIds(CGAL::Three::Viewer_interface*viewer) const Q_DECL_OVERRIDE;
|
|
bool testDisplayId(double x, double y, double z, CGAL::Three::Viewer_interface*)const Q_DECL_OVERRIDE;
|
|
|
|
|
|
//! @returns `true` if `f` is the first facet intersected by a raytracing
|
|
bool intersect_face(double orig_x,
|
|
double orig_y,
|
|
double orig_z,
|
|
double dir_x,
|
|
double dir_y,
|
|
double dir_z,
|
|
Polyhedron::Facet_handle f);
|
|
|
|
public Q_SLOTS:
|
|
virtual void invalidateOpenGLBuffers() Q_DECL_OVERRIDE;
|
|
virtual void selection_changed(bool) Q_DECL_OVERRIDE;
|
|
virtual void setColor(QColor c) Q_DECL_OVERRIDE;
|
|
virtual void show_feature_edges(bool);
|
|
void show_only_feature_edges(bool);
|
|
void enable_facets_picking(bool);
|
|
void set_erase_next_picked_facet(bool);
|
|
void set_flat_disabled(bool b);
|
|
|
|
void select(double orig_x,
|
|
double orig_y,
|
|
double orig_z,
|
|
double dir_x,
|
|
double dir_y,
|
|
double dir_z) Q_DECL_OVERRIDE;
|
|
void update_vertex_indices();
|
|
void update_facet_indices();
|
|
void update_halfedge_indices();
|
|
void invalidate_aabb_tree();
|
|
void itemAboutToBeDestroyed(Scene_item *) Q_DECL_OVERRIDE;
|
|
|
|
Q_SIGNALS:
|
|
void selection_done();
|
|
void selected_vertex(void*);
|
|
void selected_facet(void*);
|
|
void selected_edge(void*);
|
|
void selected_halfedge(void*);
|
|
void item_is_about_to_be_changed(); // emitted in invalidateOpenGLBuffers()
|
|
public:
|
|
typedef Scene_item Base;
|
|
typedef Polyhedron::Facet_iterator Facet_iterator;
|
|
protected:
|
|
friend struct Scene_polyhedron_item_priv;
|
|
Scene_polyhedron_item_priv* d;
|
|
|
|
public:
|
|
void zoomToPosition(const QPoint &point, CGAL::Three::Viewer_interface *)const Q_DECL_OVERRIDE;
|
|
|
|
}; // end class Scene_polyhedron_item
|
|
|
|
#endif // SCENE_POLYHEDRON_ITEM_H
|