mirror of https://github.com/CGAL/cgal
105 lines
2.4 KiB
C++
105 lines
2.4 KiB
C++
#include "Scene_polyhedron_item.h"
|
|
#include "Polyhedron_type.h"
|
|
#include <CGAL/IO/Polyhedron_iostream.h>
|
|
|
|
#include <QObject>
|
|
#include <CGAL/gl_render.h>
|
|
|
|
Scene_polyhedron_item::Scene_polyhedron_item()
|
|
: Scene_item_with_display_list(),
|
|
poly(new Polyhedron)
|
|
{
|
|
}
|
|
|
|
Scene_polyhedron_item::Scene_polyhedron_item(Polyhedron* const p)
|
|
: Scene_item_with_display_list(),
|
|
poly(p)
|
|
{
|
|
}
|
|
|
|
Scene_polyhedron_item::Scene_polyhedron_item(const Polyhedron& p)
|
|
: Scene_item_with_display_list(),
|
|
poly(new Polyhedron(p))
|
|
{
|
|
}
|
|
|
|
// Scene_polyhedron_item::Scene_polyhedron_item(const Scene_polyhedron_item& item)
|
|
// : Scene_item_with_display_list(item),
|
|
// poly(new Polyhedron(*item.poly))
|
|
// {
|
|
// }
|
|
|
|
Scene_polyhedron_item::~Scene_polyhedron_item()
|
|
{
|
|
delete poly;
|
|
}
|
|
|
|
Scene_polyhedron_item*
|
|
Scene_polyhedron_item::clone() const {
|
|
return new Scene_polyhedron_item(*poly);
|
|
}
|
|
|
|
// Load polyhedron from .OFF file
|
|
bool
|
|
Scene_polyhedron_item::load(std::istream& in)
|
|
{
|
|
in >> *poly;
|
|
return in && !isEmpty();
|
|
}
|
|
|
|
// Write polyhedron to .OFF file
|
|
bool
|
|
Scene_polyhedron_item::save(std::ostream& out) const
|
|
{
|
|
out << *poly;
|
|
return out;
|
|
}
|
|
|
|
QString
|
|
Scene_polyhedron_item::toolTip() const
|
|
{
|
|
if(!poly)
|
|
return QString();
|
|
|
|
return QObject::tr("<p><b>%1</b> (mode: %5, color: %6)</p>"
|
|
"<p>Number of vertices: %2<br />"
|
|
"Number of edges: %3<br />"
|
|
"Number of facets: %4</p>")
|
|
.arg(this->name())
|
|
.arg(poly->size_of_vertices())
|
|
.arg(poly->size_of_halfedges()/2)
|
|
.arg(poly->size_of_facets())
|
|
.arg(this->renderingModeName())
|
|
.arg(this->color().name());
|
|
}
|
|
|
|
// Points/Wireframe/Flat/Gouraud OpenGL drawing in a display list
|
|
void Scene_polyhedron_item::direct_draw() const {
|
|
gl_render_facets(*poly);
|
|
}
|
|
|
|
Polyhedron*
|
|
Scene_polyhedron_item::polyhedron() { return poly; }
|
|
const Polyhedron*
|
|
Scene_polyhedron_item::polyhedron() const { return poly; }
|
|
|
|
bool
|
|
Scene_polyhedron_item::isEmpty() const {
|
|
return (poly == 0) || poly->empty();
|
|
}
|
|
|
|
Scene_polyhedron_item::Bbox
|
|
Scene_polyhedron_item::bbox() const {
|
|
const Point& p = *(poly->points_begin());
|
|
CGAL::Bbox_3 bbox(p.x(), p.y(), p.z(), p.x(), p.y(), p.z());
|
|
for(Polyhedron::Point_iterator it = poly->points_begin();
|
|
it != poly->points_end();
|
|
++it) {
|
|
bbox = bbox + it->bbox();
|
|
}
|
|
return Bbox(bbox.xmin(),bbox.ymin(),bbox.zmin(),
|
|
bbox.xmax(),bbox.ymax(),bbox.zmax());
|
|
}
|
|
|
|
#include "Scene_polyhedron_item.moc"
|