diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt index 9da6d5f96de..971f19775ee 100644 --- a/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/CMakeLists.txt @@ -33,6 +33,8 @@ target_link_libraries(surface_mesh_io_plugin scene_surface_mesh_item scene_polyg polyhedron_demo_plugin(surf_io_plugin Surf_io_plugin) target_link_libraries(surf_io_plugin scene_polyhedron_item) +polyhedron_demo_plugin(surf_to_sm_io_plugin Surf_to_sm_io_plugin) +target_link_libraries(surf_to_sm_io_plugin scene_surface_mesh_item) find_package(VTK QUIET COMPONENTS diff --git a/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_to_sm_io_plugin.cpp b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_to_sm_io_plugin.cpp new file mode 100644 index 00000000000..bca3516e5b1 --- /dev/null +++ b/Polyhedron/demo/Polyhedron/Plugins/IO/Surf_to_sm_io_plugin.cpp @@ -0,0 +1,87 @@ +#include "Scene_surface_mesh_item.h" + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include + +#include "Color_map.h" +#include + +using namespace CGAL::Three; +class Surf_io_plugin: + public QObject, + public Polyhedron_demo_io_plugin_interface, + public Polyhedron_demo_plugin_helper +{ + Q_OBJECT + Q_INTERFACES(CGAL::Three::Polyhedron_demo_plugin_interface CGAL::Three::Polyhedron_demo_io_plugin_interface) + Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.PluginInterface/1.0") + Q_PLUGIN_METADATA(IID "com.geometryfactory.PolyhedronDemo.IOPluginInterface/1.0") + +public: + void init(QMainWindow* mainWindow, + CGAL::Three::Scene_interface* scene_interface, + Messages_interface*) { + //get the references + this->scene = scene_interface; + this->mw = mainWindow; + } + QList actions() const { + return QList(); + } + bool applicable(QAction*) const { return false;} + QString name() const { return "surf_to_sm_io_plugin"; } + QString nameFilters() const { return "Amira files (*.surf)"; } + bool canLoad() const{ return true; } + CGAL::Three::Scene_item* load(QFileInfo fileinfo); + + bool canSave(const CGAL::Three::Scene_item*) { return false; } + bool save(const CGAL::Three::Scene_item*, QFileInfo) { return false; } +}; + + +CGAL::Three::Scene_item* Surf_io_plugin::load(QFileInfo fileinfo) +{ + typedef Scene_surface_mesh_item::SMesh SMesh; + // Open file + std::ifstream in(fileinfo.filePath().toUtf8()); + if(!in) { + std::cerr << "Error! Cannot open file " << (const char*)fileinfo.filePath().toUtf8() << std::endl; + return NULL; + } + + std::vector patches; + std::vector material_data; + CGAL::Bbox_3 grid_box; + CGAL::cpp11::array grid_size = {{1, 1, 1}}; + read_surf(in, patches, material_data, grid_box, grid_size); + for(std::size_t i=0; isetColor(colors_[i]); + scene->addItem(patch); + scene->changeGroup(patch, group); + } + return group; +} + +#include "Surf_to_sm_io_plugin.moc" diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp index d56c57e3e23..2574d2f2614 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.cpp @@ -106,8 +106,7 @@ Scene_surface_mesh_item::Scene_surface_mesh_item(const Scene_surface_mesh_item& are_buffers_filled = false; } -Scene_surface_mesh_item::Scene_surface_mesh_item(SMesh* sm) - : CGAL::Three::Scene_item(Scene_surface_mesh_item_priv::NbOfVbos,Scene_surface_mesh_item_priv::NbOfVaos) +void Scene_surface_mesh_item::standard_constructor(SMesh* sm) { d = new Scene_surface_mesh_item_priv(sm, this); d->floated = false; @@ -175,6 +174,17 @@ Scene_surface_mesh_item::Scene_surface_mesh_item(SMesh* sm) d->compute_elements(); are_buffers_filled = false; } +Scene_surface_mesh_item::Scene_surface_mesh_item(SMesh* sm) + : CGAL::Three::Scene_item(Scene_surface_mesh_item_priv::NbOfVbos,Scene_surface_mesh_item_priv::NbOfVaos) +{ + standard_constructor(sm); +} + +Scene_surface_mesh_item::Scene_surface_mesh_item(SMesh sm) + : CGAL::Three::Scene_item(Scene_surface_mesh_item_priv::NbOfVbos,Scene_surface_mesh_item_priv::NbOfVaos) +{ + standard_constructor(new SMesh(sm)); +} Scene_surface_mesh_item* Scene_surface_mesh_item::clone() const diff --git a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h index 2a8f1aa6e48..f40924c446e 100644 --- a/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h +++ b/Polyhedron/demo/Polyhedron/Scene_surface_mesh_item.h @@ -33,7 +33,7 @@ public: // Takes ownership of the argument. Scene_surface_mesh_item(SMesh*); - + Scene_surface_mesh_item(SMesh); Scene_surface_mesh_item(const Scene_surface_mesh_item& other); ~Scene_surface_mesh_item(); @@ -52,6 +52,7 @@ public: SMesh* polyhedron(); const SMesh* polyhedron() const; void compute_bbox()const; + void standard_constructor(SMesh *sm); public Q_SLOTS: virtual void selection_changed(bool); protected: