28#include <easy3d/util/resource.h>
29#include <easy3d/util/initializer.h>
36int main(
int argc,
char **argv) {
40 const std::string file_name = resource::directory() +
"/data/quad_mesh/P.off";
42 PickerViewer viewer(EXAMPLE_TITLE);
43 if (!viewer.add_model(file_name)) {
44 LOG(ERROR) <<
"failed to load model. Please make sure the file exists and format is correct.";
Definition: collider.cpp:182
void initialize(bool use_log_file, bool use_setting_file, const std::string &resource_dir)
Initialization of Easy3D.
Definition: initializer.cpp:35
27#ifndef EASY3D_TUTORIAL_PICKER_VIEWER_H
28#define EASY3D_TUTORIAL_PICKER_VIEWER_H
30#include <easy3d/viewer/viewer.h>
41 explicit PickerViewer(
const std::string &title);
46 bool mouse_press_event(
int x,
int y,
int button,
int modifiers)
override;
The base class of renderable 3D models.
Definition: model.h:49
The built-in Easy3D viewer.
Definition: viewer.h:61
virtual Model * add_model(const std::string &file_name, bool create_default_drawables=true)
Add a model from a file to the viewer to be visualized. On success, the viewer will be in charge of t...
Definition: viewer.cpp:1204
28#include <easy3d/gui/picker_surface_mesh.h>
29#include <easy3d/core/surface_mesh.h>
30#include <easy3d/renderer/drawable_lines.h>
31#include <easy3d/renderer/drawable_triangles.h>
32#include <easy3d/renderer/renderer.h>
33#include <easy3d/util/logging.h>
39PickerViewer::PickerViewer(
const std::string &title)
41 camera()->setUpVector(
vec3(0, 1, 0));
42 camera()->setViewDirection(
vec3(0, 0, -1));
45 "------------ Picker Viewer usage ---------- \n"
46 "Press the mouse to pick a face \n"
47 "------------------------------------------- \n";
51bool PickerViewer::mouse_press_event(
int x,
int y,
int button,
int modifiers) {
52 auto model =
dynamic_cast<SurfaceMesh *
>(current_model());
55 auto face = picker.pick_face(model, x, y);
57 std::cout <<
"picked face " << face << std::endl;
61 auto drawable = model->renderer()->get_triangles_drawable(
"faces");
62 auto triangle_range = model->get_face_property<std::pair<int, int> >(
"f:triangle_range");
63 if (triangle_range && face.is_valid()) {
64 const auto& range = triangle_range[face];
65 drawable->set_highlight_range(range);
66 drawable->set_highlight(
true);
69 drawable->set_highlight_range(std::make_pair(-1, -1));
70 drawable->set_highlight(
false);
73 LOG_IF(!triangle_range, ERROR) <<
"face property 'f:triangle_range' not defined";
76 return Viewer::mouse_press_event(x, y, button, modifiers);
80Model* PickerViewer::add_model(
const std::string& file_name) {
81 Model* model = Viewer::add_model(file_name,
true);
Renderer * renderer()
Gets the renderer of this model.
Definition: model.h:94
LinesDrawable * get_lines_drawable(const std::string &name) const
Definition: renderer.cpp:295
A halfedge data structure for polygonal meshes of 2-manifold.
Definition: surface_mesh.h:52
Implementation of picking elements (i.e, vertices, faces, edges) from a surface mesh.
Definition: picker_surface_mesh.h:44