From 06adb5e51e68e95e6a0312624b3898f8638c4a44 Mon Sep 17 00:00:00 2001 From: papush! Date: Wed, 4 Mar 2020 10:41:03 +0100 Subject: [PATCH] archivage initial --- Makefile | 766 +++++++++++++++++++++++++++++++++++++++++++ main.cpp | 11 + mainwindow.cpp | 496 ++++++++++++++++++++++++++++ mainwindow.h | 79 +++++ mainwindow.ui | 515 +++++++++++++++++++++++++++++ meshviewerwidget.cpp | 383 ++++++++++++++++++++++ meshviewerwidget.h | 87 +++++ starterLight.pro | 53 +++ 8 files changed, 2390 insertions(+) create mode 100644 Makefile create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui create mode 100644 meshviewerwidget.cpp create mode 100644 meshviewerwidget.h create mode 100644 starterLight.pro diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e62497d --- /dev/null +++ b/Makefile @@ -0,0 +1,766 @@ +############################################################################# +# Makefile for building: starterLight +# Generated by qmake (3.1) (Qt 5.13.2) +# Project: starterLight.pro +# Template: app +# Command: /usr/lib/qt5/bin/qmake -o Makefile starterLight.pro +############################################################################# + +MAKEFILE = Makefile + +EQ = = + +####### Compiler, tools and options + +CC = gcc +CXX = g++ +DEFINES = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB +CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES) +INCPATH = -I. -I../OpenMesh/inc -I /usr/include/qt5 -I /usr/include/qt5/QtOpenGL -I /usr/include/qt5/QtWidgets -I /usr/include/qt5/QtGui -I /usr/include/qt5/QtCore -I. -I /usr/include/libdrm -I. -I/usr/lib/qt5/mkspecs/linux-g++ +QMAKE = /usr/lib/qt5/bin/qmake +DEL_FILE = rm -f +CHK_DIR_EXISTS= test -d +MKDIR = mkdir -p +COPY = cp -f +COPY_FILE = cp -f +COPY_DIR = cp -f -R +INSTALL_FILE = install -m 644 -p +INSTALL_PROGRAM = install -m 755 -p +INSTALL_DIR = cp -f -R +QINSTALL = /usr/lib/qt5/bin/qmake -install qinstall +QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe +DEL_FILE = rm -f +SYMLINK = ln -f -s +DEL_DIR = rmdir +MOVE = mv -f +TAR = tar -cf +COMPRESS = gzip -9f +DISTNAME = starterLight1.0.0 +DISTDIR = /home/papush/m1/mgm/tp1/starterLight/.tmp/starterLight1.0.0 +LINK = g++ +LFLAGS = -Wl,-O1 -Wl,-rpath,/usr/lib +LIBS = $(SUBLIBS) -lglut -lGLU -L/home/papush/m1/mgm/tp1/starterLight/../OpenMesh/liblinux/ -lOpenMeshCore /usr/lib/libQt5OpenGL.so /usr/lib/libQt5Widgets.so /usr/lib/libQt5Gui.so /usr/lib/libQt5Core.so -lGL -lpthread +AR = ar cqs +RANLIB = +SED = sed +STRIP = strip + +####### Output directory + +OBJECTS_DIR = ./ + +####### Files + +SOURCES = main.cpp \ + mainwindow.cpp \ + meshviewerwidget.cpp moc_mainwindow.cpp \ + moc_meshviewerwidget.cpp +OBJECTS = main.o \ + mainwindow.o \ + meshviewerwidget.o \ + moc_mainwindow.o \ + moc_meshviewerwidget.o +DIST = /usr/lib/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/qt5/mkspecs/common/unix.conf \ + /usr/lib/qt5/mkspecs/common/linux.conf \ + /usr/lib/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/qt5/mkspecs/qconfig.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3danimation.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dcore.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dextras.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dinput.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquick.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3drender.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3drender_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/qt5/mkspecs/features/default_post.prf \ + /usr/lib/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/qt5/mkspecs/features/qt.prf \ + /usr/lib/qt5/mkspecs/features/resources.prf \ + /usr/lib/qt5/mkspecs/features/moc.prf \ + /usr/lib/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/qt5/mkspecs/features/uic.prf \ + /usr/lib/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/qt5/mkspecs/features/yacc.prf \ + /usr/lib/qt5/mkspecs/features/lex.prf \ + starterLight.pro mainwindow.h \ + meshviewerwidget.h main.cpp \ + mainwindow.cpp \ + meshviewerwidget.cpp +QMAKE_TARGET = starterLight +DESTDIR = +TARGET = starterLight + + +first: all +####### Build rules + +starterLight: ui_mainwindow.h $(OBJECTS) + $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) + +Makefile: starterLight.pro /usr/lib/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/qt5/mkspecs/features/spec_pre.prf \ + /usr/lib/qt5/mkspecs/common/unix.conf \ + /usr/lib/qt5/mkspecs/common/linux.conf \ + /usr/lib/qt5/mkspecs/common/sanitize.conf \ + /usr/lib/qt5/mkspecs/common/gcc-base.conf \ + /usr/lib/qt5/mkspecs/common/gcc-base-unix.conf \ + /usr/lib/qt5/mkspecs/common/g++-base.conf \ + /usr/lib/qt5/mkspecs/common/g++-unix.conf \ + /usr/lib/qt5/mkspecs/qconfig.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3danimation.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3danimation_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dcore.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dcore_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dextras.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dextras_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dinput.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dinput_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquick.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquick_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3drender.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_3drender_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_concurrent.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_core.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_core_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_dbus.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_dbus_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_gui.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_gui_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_input_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_network.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_network_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_opengl.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_opengl_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_printsupport.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qml.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qml_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmltest.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_qmltest_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quick.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quick_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_service_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_sql.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_sql_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_testlib.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_testlib_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_widgets.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_widgets_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xml.pri \ + /usr/lib/qt5/mkspecs/modules/qt_lib_xml_private.pri \ + /usr/lib/qt5/mkspecs/features/qt_functions.prf \ + /usr/lib/qt5/mkspecs/features/qt_config.prf \ + /usr/lib/qt5/mkspecs/linux-g++/qmake.conf \ + /usr/lib/qt5/mkspecs/features/spec_post.prf \ + .qmake.stash \ + /usr/lib/qt5/mkspecs/features/exclusive_builds.prf \ + /usr/lib/qt5/mkspecs/features/toolchain.prf \ + /usr/lib/qt5/mkspecs/features/default_pre.prf \ + /usr/lib/qt5/mkspecs/features/resolve_config.prf \ + /usr/lib/qt5/mkspecs/features/default_post.prf \ + /usr/lib/qt5/mkspecs/features/warn_on.prf \ + /usr/lib/qt5/mkspecs/features/qt.prf \ + /usr/lib/qt5/mkspecs/features/resources.prf \ + /usr/lib/qt5/mkspecs/features/moc.prf \ + /usr/lib/qt5/mkspecs/features/unix/opengl.prf \ + /usr/lib/qt5/mkspecs/features/uic.prf \ + /usr/lib/qt5/mkspecs/features/unix/thread.prf \ + /usr/lib/qt5/mkspecs/features/qmake_use.prf \ + /usr/lib/qt5/mkspecs/features/file_copies.prf \ + /usr/lib/qt5/mkspecs/features/testcase_targets.prf \ + /usr/lib/qt5/mkspecs/features/exceptions.prf \ + /usr/lib/qt5/mkspecs/features/yacc.prf \ + /usr/lib/qt5/mkspecs/features/lex.prf \ + starterLight.pro + $(QMAKE) -o Makefile starterLight.pro +/usr/lib/qt5/mkspecs/features/spec_pre.prf: +/usr/lib/qt5/mkspecs/common/unix.conf: +/usr/lib/qt5/mkspecs/common/linux.conf: +/usr/lib/qt5/mkspecs/common/sanitize.conf: +/usr/lib/qt5/mkspecs/common/gcc-base.conf: +/usr/lib/qt5/mkspecs/common/gcc-base-unix.conf: +/usr/lib/qt5/mkspecs/common/g++-base.conf: +/usr/lib/qt5/mkspecs/common/g++-unix.conf: +/usr/lib/qt5/mkspecs/qconfig.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3danimation.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3danimation_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dcore.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dcore_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dextras.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dextras_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dinput.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dinput_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dlogic_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquick.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquick_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickanimation_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickextras_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickinput_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickrender_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3dquickscene2d_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3drender.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_3drender_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_concurrent.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_concurrent_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_core.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_core_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_dbus.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_dbus_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_edid_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_egl_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_fb_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_glx_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_gui.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_gui_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_input_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_kms_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_network.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_network_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_opengl.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_opengl_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_packetprotocol_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_printsupport.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_printsupport_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qml.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qml_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qmldebug_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qmldevtools_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qmltest.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_qmltest_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quick.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quick_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quickparticles_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quickshapes_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_quickwidgets_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_service_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_sql.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_sql_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_testlib.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_testlib_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_theme_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_widgets.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_widgets_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_xkbcommon_support_private.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_xml.pri: +/usr/lib/qt5/mkspecs/modules/qt_lib_xml_private.pri: +/usr/lib/qt5/mkspecs/features/qt_functions.prf: +/usr/lib/qt5/mkspecs/features/qt_config.prf: +/usr/lib/qt5/mkspecs/linux-g++/qmake.conf: +/usr/lib/qt5/mkspecs/features/spec_post.prf: +.qmake.stash: +/usr/lib/qt5/mkspecs/features/exclusive_builds.prf: +/usr/lib/qt5/mkspecs/features/toolchain.prf: +/usr/lib/qt5/mkspecs/features/default_pre.prf: +/usr/lib/qt5/mkspecs/features/resolve_config.prf: +/usr/lib/qt5/mkspecs/features/default_post.prf: +/usr/lib/qt5/mkspecs/features/warn_on.prf: +/usr/lib/qt5/mkspecs/features/qt.prf: +/usr/lib/qt5/mkspecs/features/resources.prf: +/usr/lib/qt5/mkspecs/features/moc.prf: +/usr/lib/qt5/mkspecs/features/unix/opengl.prf: +/usr/lib/qt5/mkspecs/features/uic.prf: +/usr/lib/qt5/mkspecs/features/unix/thread.prf: +/usr/lib/qt5/mkspecs/features/qmake_use.prf: +/usr/lib/qt5/mkspecs/features/file_copies.prf: +/usr/lib/qt5/mkspecs/features/testcase_targets.prf: +/usr/lib/qt5/mkspecs/features/exceptions.prf: +/usr/lib/qt5/mkspecs/features/yacc.prf: +/usr/lib/qt5/mkspecs/features/lex.prf: +starterLight.pro: +qmake: FORCE + @$(QMAKE) -o Makefile starterLight.pro + +qmake_all: FORCE + + +all: Makefile starterLight + +dist: distdir FORCE + (cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR) + +distdir: FORCE + @test -d $(DISTDIR) || mkdir -p $(DISTDIR) + $(COPY_FILE) --parents $(DIST) $(DISTDIR)/ + $(COPY_FILE) --parents /usr/lib/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.h meshviewerwidget.h $(DISTDIR)/ + $(COPY_FILE) --parents main.cpp mainwindow.cpp meshviewerwidget.cpp $(DISTDIR)/ + $(COPY_FILE) --parents mainwindow.ui $(DISTDIR)/ + + +clean: compiler_clean + -$(DEL_FILE) $(OBJECTS) + -$(DEL_FILE) *~ core *.core + + +distclean: clean + -$(DEL_FILE) $(TARGET) + -$(DEL_FILE) .qmake.stash + -$(DEL_FILE) Makefile + + +####### Sub-libraries + +mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean + +mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all + +check: first + +benchmark: first + +compiler_rcc_make_all: +compiler_rcc_clean: +compiler_moc_predefs_make_all: moc_predefs.h +compiler_moc_predefs_clean: + -$(DEL_FILE) moc_predefs.h +moc_predefs.h: /usr/lib/qt5/mkspecs/features/data/dummy.cpp + g++ -pipe -O2 -Wall -W -dM -E -o moc_predefs.h /usr/lib/qt5/mkspecs/features/data/dummy.cpp + +compiler_moc_header_make_all: moc_mainwindow.cpp moc_meshviewerwidget.cpp +compiler_moc_header_clean: + -$(DEL_FILE) moc_mainwindow.cpp moc_meshviewerwidget.cpp +moc_mainwindow.cpp: mainwindow.h \ + ../OpenMesh/inc/OpenMesh/Core/IO/MeshIO.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_store.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_types.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_rbo.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/omstream.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/mostream.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/GenProg.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_spec.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/NumLimitsT.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/Config.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Status.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_fundamentals.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_string.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/StoreRestore.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOManager.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/Options.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/BaseReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/BaseImporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/BaseKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/PropertyContainer.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Property.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Handles.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/BaseProperty.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/BaseWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/BaseExporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/ImporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/color_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Attributes.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/ExporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOInstances.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OBJReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OFFReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/PLYReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/STLReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OMReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormat.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Endian.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormatT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OBJWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OFFWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/STLWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OMWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/BinaryHelper.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/PLYWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayItems.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernelT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/IteratorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/CirculatorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/FinalMeshItemsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/AttribKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/MathDefs.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/LoopSchemeMaskT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.cc \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /home/papush/m1/mgm/tp1/starterLight/moc_predefs.h -I/usr/lib/qt5/mkspecs/linux-g++ -I/home/papush/m1/mgm/tp1/starterLight -I/home/papush/m1/mgm/tp1/OpenMesh/inc -I/usr/include/qt5 -I/usr/include/qt5/QtOpenGL -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I/usr/include/c++/9.2.0 -I/usr/include/c++/9.2.0/x86_64-unknown-linux-gnu -I/usr/include/c++/9.2.0/backward -I/usr/lib/gcc/x86_64-unknown-linux-gnu/9.2.0/include -I/usr/local/include -I/usr/lib/gcc/x86_64-unknown-linux-gnu/9.2.0/include-fixed -I/usr/include mainwindow.h -o moc_mainwindow.cpp + +moc_meshviewerwidget.cpp: meshviewerwidget.h \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh \ + moc_predefs.h \ + /usr/lib/qt5/bin/moc + /usr/lib/qt5/bin/moc $(DEFINES) --include /home/papush/m1/mgm/tp1/starterLight/moc_predefs.h -I/usr/lib/qt5/mkspecs/linux-g++ -I/home/papush/m1/mgm/tp1/starterLight -I/home/papush/m1/mgm/tp1/OpenMesh/inc -I/usr/include/qt5 -I/usr/include/qt5/QtOpenGL -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I/usr/include/c++/9.2.0 -I/usr/include/c++/9.2.0/x86_64-unknown-linux-gnu -I/usr/include/c++/9.2.0/backward -I/usr/lib/gcc/x86_64-unknown-linux-gnu/9.2.0/include -I/usr/local/include -I/usr/lib/gcc/x86_64-unknown-linux-gnu/9.2.0/include-fixed -I/usr/include meshviewerwidget.h -o moc_meshviewerwidget.cpp + +compiler_moc_objc_header_make_all: +compiler_moc_objc_header_clean: +compiler_moc_source_make_all: +compiler_moc_source_clean: +compiler_uic_make_all: ui_mainwindow.h +compiler_uic_clean: + -$(DEL_FILE) ui_mainwindow.h +ui_mainwindow.h: mainwindow.ui \ + /usr/lib/qt5/bin/uic \ + meshviewerwidget.h \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh + /usr/lib/qt5/bin/uic mainwindow.ui -o ui_mainwindow.h + +compiler_yacc_decl_make_all: +compiler_yacc_decl_clean: +compiler_yacc_impl_make_all: +compiler_yacc_impl_clean: +compiler_lex_make_all: +compiler_lex_clean: +compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean compiler_uic_clean + +####### Compile + +main.o: main.cpp mainwindow.h \ + ../OpenMesh/inc/OpenMesh/Core/IO/MeshIO.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_store.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_types.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_rbo.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/omstream.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/mostream.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/GenProg.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_spec.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/NumLimitsT.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/Config.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Status.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_fundamentals.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_string.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/StoreRestore.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOManager.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/Options.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/BaseReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/BaseImporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/BaseKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/PropertyContainer.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Property.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Handles.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/BaseProperty.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/BaseWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/BaseExporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/ImporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/color_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Attributes.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/ExporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOInstances.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OBJReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OFFReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/PLYReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/STLReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OMReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormat.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Endian.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormatT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OBJWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OFFWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/STLWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OMWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/BinaryHelper.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/PLYWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayItems.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernelT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/IteratorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/CirculatorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/FinalMeshItemsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/AttribKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/MathDefs.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/LoopSchemeMaskT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.cc + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp + +mainwindow.o: mainwindow.cpp mainwindow.h \ + ../OpenMesh/inc/OpenMesh/Core/IO/MeshIO.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_store.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_types.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_rbo.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/omstream.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/mostream.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/GenProg.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_spec.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/NumLimitsT.hh \ + ../OpenMesh/inc/OpenMesh/Tools/Utils/Config.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Status.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_fundamentals.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_string.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/SR_binary_vector_of_bool.inl \ + ../OpenMesh/inc/OpenMesh/Core/IO/StoreRestore.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOManager.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/Options.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/BaseReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/BaseImporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/BaseKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/PropertyContainer.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Property.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Handles.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/BaseProperty.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/SingletonT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/BaseWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/BaseExporter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/importer/ImporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/vector_traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/color_cast.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Attributes.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/exporter/ExporterT.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/IOInstances.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OBJReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OFFReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/PLYReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/STLReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/reader/OMReader.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormat.hh \ + ../OpenMesh/inc/OpenMesh/Core/Utils/Endian.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/OMFormatT.cc \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OBJWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OFFWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/STLWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/OMWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/BinaryHelper.hh \ + ../OpenMesh/inc/OpenMesh/Core/IO/writer/PLYWriter.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyConnectivity.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernel.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayItems.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/ArrayKernelT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/IteratorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/CirculatorsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/Traits.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/FinalMeshItemsT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/AttribKernelT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/MathDefs.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/PolyMeshT.cc \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/LoopSchemeMaskT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Mesh/TriMeshT.cc \ + ui_mainwindow.h \ + meshviewerwidget.h + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp + +meshviewerwidget.o: meshviewerwidget.cpp meshviewerwidget.h \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/Vector11T.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/config.h \ + ../OpenMesh/inc/OpenMesh/Core/System/compiler.hh \ + ../OpenMesh/inc/OpenMesh/Core/System/OpenMeshDLLMacros.hh \ + ../OpenMesh/inc/OpenMesh/Core/Geometry/VectorT_inc.hh + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o meshviewerwidget.o meshviewerwidget.cpp + +moc_mainwindow.o: moc_mainwindow.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp + +moc_meshviewerwidget.o: moc_meshviewerwidget.cpp + $(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_meshviewerwidget.o moc_meshviewerwidget.cpp + +####### Install + +install: FORCE + +uninstall: FORCE + +FORCE: + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..b48f94e --- /dev/null +++ b/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..5d60010 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,496 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" + +/* **** début de la partie à compléter **** */ + +void MainWindow::showSelections(MyMesh* _mesh) +{ + // on réinitialise les couleurs de tout le maillage + resetAllColorsAndThickness(_mesh); + + /* **** à compléter ! **** cette fonction utilise les variables de + * sélection vertexSelection, edgeSelection et faceSelection qui + * sont les ID des élements sélectionnés et qui sont égales à -1 + * si la sélection est vide + */ + if (vertexSelection >= 0 && vertexSelection < _mesh->n_vertices() - 1) { + VertexHandle vh = _mesh->vertex_handle(vertexSelection); + _mesh->set_color(vh, MyMesh::Color(255, 0, 0)); + _mesh->data(vh).thickness = 5; + } + if (edgeSelection >= 0 && edgeSelection < _mesh->n_edges() - 1) { + EdgeHandle eh = _mesh->edge_handle(edgeSelection); + _mesh->data(eh).thickness = 5; + _mesh->set_color(eh, MyMesh::Color(255, 0, 0)); + } + if (faceSelection >= 0 && faceSelection < _mesh->n_faces() - 1) { + _mesh->set_color(_mesh->face_handle(faceSelection), + MyMesh::Color(255, 0, 0)); + } + + // on affiche le nouveau maillage + displayMesh(_mesh); +} + + +void MainWindow::showSelectionsNeighborhood(MyMesh* _mesh) +{ + // on réinitialise les couleurs de tout le maillage + resetAllColorsAndThickness(_mesh); + + /* **** à compléter ! **** cette fonction utilise les variables de + * sélection vertexSelection, edgeSelection et faceSelection qui + * sont les ID des élements sélectionnés et qui sont égales à -1 + * si la sélection est vide et affiche en plus le voisinage de + * chaque sélection : + * - les faces voisines les faces + * - les faces adjacentes pour les arêtes + * - les arêtes incidentes pour les sommets + */ + if (vertexSelection >= 0 && vertexSelection < _mesh->n_vertices() - 1) { + VertexHandle vh = _mesh->vertex_handle(vertexSelection); + for (auto ve_it = _mesh->ve_iter(vh); ve_it.is_valid(); ++ve_it) { + _mesh->set_color(*ve_it, MyMesh::Color(255, 0, 0)); + _mesh->data(*ve_it).thickness = 5; + } + } + if (edgeSelection >= 0 && edgeSelection < _mesh->n_edges() - 1) { + EdgeHandle eh = _mesh->edge_handle(edgeSelection); + HalfedgeHandle heh0 = _mesh->halfedge_handle(eh, 0); + HalfedgeHandle heh1 = _mesh->halfedge_handle(eh, 1); + FaceHandle fh0 = _mesh->face_handle(heh0); + FaceHandle fh1 = _mesh->face_handle(heh1); + _mesh->set_color(fh0, MyMesh::Color(255, 0, 0)); + _mesh->set_color(fh1, MyMesh::Color(255, 0, 0)); + } + if (faceSelection >= 0 && faceSelection < _mesh->n_faces() - 1) { + FaceHandle fh = _mesh->face_handle(faceSelection); + for (auto ff_it = _mesh->ff_iter(fh); ff_it.is_valid(); ++ff_it) { + _mesh->set_color(*ff_it, MyMesh::Color(255, 0, 0)); + } + } + + // on affiche le nouveau maillage + displayMesh(_mesh); +} + + + +void MainWindow::showBorder(MyMesh* _mesh) +{ + // on réinitialise l'affichage + resetAllColorsAndThickness(_mesh); + + /* **** à compléter ! **** */ + for (auto heh_it = _mesh->halfedges_begin(); heh_it != _mesh->halfedges_end(); ++heh_it) { + if (_mesh->is_boundary(*heh_it)) { + EdgeHandle eh = _mesh->edge_handle(*heh_it); + _mesh->set_color(eh, MyMesh::Color(255, 100, 150)); + _mesh->data(eh).thickness = 5; + } + } + + // on affiche le nouveau maillage + displayMesh(_mesh); +} + + +void MainWindow::showPath(MyMesh* _mesh, int v1, int v2) +{ + // on réinitialise l'affichage + resetAllColorsAndThickness(_mesh); + + // point de départ et point d'arrivée en vert et en gros + _mesh->set_color(_mesh->vertex_handle(v1), MyMesh::Color(0, 255, 0)); + _mesh->set_color(_mesh->vertex_handle(v2), MyMesh::Color(0, 255, 0)); + _mesh->data(_mesh->vertex_handle(v1)).thickness = 12; + _mesh->data(_mesh->vertex_handle(v2)).thickness = 12; + + /* **** à compléter ! **** */ + + // on affiche le nouveau maillage + displayMesh(_mesh); +} + +/* **** fin de la partie à compléter **** */ + + +/* **** début de la partie boutons et IHM **** */ + +void MainWindow::on_pushButton_bordure_clicked() +{ + showBorder(&mesh); +} + +void MainWindow::on_pushButton_voisinage_clicked() +{ + // changement de mode entre avec et sans voisinage + if(modevoisinage) + { + ui->pushButton_voisinage->setText("Repasser en mode normal"); + modevoisinage = false; + } + else + { + ui->pushButton_voisinage->setText("Passer en mode voisinage"); + modevoisinage = true; + } + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + + +void MainWindow::on_pushButton_vertexMoins_clicked() +{ + // mise à jour de l'interface + vertexSelection = vertexSelection - 1; + ui->labelVertex->setText(QString::number(vertexSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_vertexPlus_clicked() +{ + // mise à jour de l'interface + vertexSelection = vertexSelection + 1; + ui->labelVertex->setText(QString::number(vertexSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_edgeMoins_clicked() +{ + // mise à jour de l'interface + edgeSelection = edgeSelection - 1; + ui->labelEdge->setText(QString::number(edgeSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_edgePlus_clicked() +{ + // mise à jour de l'interface + edgeSelection = edgeSelection + 1; + ui->labelEdge->setText(QString::number(edgeSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_faceMoins_clicked() +{ + // mise à jour de l'interface + faceSelection = faceSelection - 1; + ui->labelFace->setText(QString::number(faceSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_facePlus_clicked() +{ + // mise à jour de l'interface + faceSelection = faceSelection + 1; + ui->labelFace->setText(QString::number(faceSelection)); + + // on montre la nouvelle selection + if(!modevoisinage) + showSelections(&mesh); + else + showSelectionsNeighborhood(&mesh); +} + +void MainWindow::on_pushButton_afficherChemin_clicked() +{ + // on récupère les sommets de départ et d'arrivée + int indexV1 = ui->spinBox_v1_chemin->value(); + int indexV2 = ui->spinBox_v2_chemin->value(); + + showPath(&mesh, indexV1, indexV2); +} + + +void MainWindow::on_pushButton_chargement_clicked() +{ + // fenêtre de sélection des fichiers + QString fileName = QFileDialog::getOpenFileName(this, tr("Open Mesh"), "", tr("Mesh Files (*.obj)")); + + // chargement du fichier .obj dans la variable globale "mesh" + OpenMesh::IO::read_mesh(mesh, fileName.toUtf8().constData()); + + // initialisation des couleurs et épaisseurs (sommets et arêtes) du mesh + resetAllColorsAndThickness(&mesh); + + // on affiche le maillage + displayMesh(&mesh); +} + +/* **** fin de la partie boutons et IHM **** */ + + + +/* **** fonctions supplémentaires **** */ + +// permet d'initialiser les couleurs et les épaisseurs des élements du maillage +void MainWindow::resetAllColorsAndThickness(MyMesh* _mesh) +{ + for (MyMesh::VertexIter curVert = _mesh->vertices_begin(); curVert != _mesh->vertices_end(); curVert++) + { + _mesh->data(*curVert).thickness = 1; + _mesh->set_color(*curVert, MyMesh::Color(0, 0, 0)); + } + + for (MyMesh::FaceIter curFace = _mesh->faces_begin(); curFace != _mesh->faces_end(); curFace++) + { + _mesh->set_color(*curFace, MyMesh::Color(150, 150, 150)); + } + + for (MyMesh::EdgeIter curEdge = _mesh->edges_begin(); curEdge != _mesh->edges_end(); curEdge++) + { + _mesh->data(*curEdge).thickness = 1; + _mesh->set_color(*curEdge, MyMesh::Color(0, 0, 0)); + } +} + +// charge un objet MyMesh dans l'environnement OpenGL +void MainWindow::displayMesh(MyMesh* _mesh, DisplayMode mode) +{ + GLuint* triIndiceArray = new GLuint[_mesh->n_faces() * 3]; + GLfloat* triCols = new GLfloat[_mesh->n_faces() * 3 * 3]; + GLfloat* triVerts = new GLfloat[_mesh->n_faces() * 3 * 3]; + + int i = 0; + + if(mode == DisplayMode::TemperatureMap) + { + QVector values; + for (MyMesh::VertexIter curVert = _mesh->vertices_begin(); curVert != _mesh->vertices_end(); curVert++) + values.append(fabs(_mesh->data(*curVert).value)); + qSort(values); + + float range = values.at(values.size()*0.8); + + MyMesh::ConstFaceIter fIt(_mesh->faces_begin()), fEnd(_mesh->faces_end()); + MyMesh::ConstFaceVertexIter fvIt; + + for (; fIt!=fEnd; ++fIt) + { + fvIt = _mesh->cfv_iter(*fIt); + if(_mesh->data(*fvIt).value > 0){triCols[3*i+0] = 255; triCols[3*i+1] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+2] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + else{triCols[3*i+2] = 255; triCols[3*i+1] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+0] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + if(_mesh->data(*fvIt).value > 0){triCols[3*i+0] = 255; triCols[3*i+1] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+2] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + else{triCols[3*i+2] = 255; triCols[3*i+1] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+0] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + if(_mesh->data(*fvIt).value > 0){triCols[3*i+0] = 255; triCols[3*i+1] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+2] = 255 - std::min((_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + else{triCols[3*i+2] = 255; triCols[3*i+1] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0); triCols[3*i+0] = 255 - std::min((-_mesh->data(*fvIt).value/range) * 255.0, 255.0);} + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; + } + } + + if(mode == DisplayMode::Normal) + { + MyMesh::ConstFaceIter fIt(_mesh->faces_begin()), fEnd(_mesh->faces_end()); + MyMesh::ConstFaceVertexIter fvIt; + for (; fIt!=fEnd; ++fIt) + { + fvIt = _mesh->cfv_iter(*fIt); + triCols[3*i+0] = _mesh->color(*fIt)[0]; triCols[3*i+1] = _mesh->color(*fIt)[1]; triCols[3*i+2] = _mesh->color(*fIt)[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + triCols[3*i+0] = _mesh->color(*fIt)[0]; triCols[3*i+1] = _mesh->color(*fIt)[1]; triCols[3*i+2] = _mesh->color(*fIt)[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + triCols[3*i+0] = _mesh->color(*fIt)[0]; triCols[3*i+1] = _mesh->color(*fIt)[1]; triCols[3*i+2] = _mesh->color(*fIt)[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; + } + } + + if(mode == DisplayMode::ColorShading) + { + MyMesh::ConstFaceIter fIt(_mesh->faces_begin()), fEnd(_mesh->faces_end()); + MyMesh::ConstFaceVertexIter fvIt; + for (; fIt!=fEnd; ++fIt) + { + fvIt = _mesh->cfv_iter(*fIt); + triCols[3*i+0] = _mesh->data(*fvIt).faceShadingColor[0]; triCols[3*i+1] = _mesh->data(*fvIt).faceShadingColor[1]; triCols[3*i+2] = _mesh->data(*fvIt).faceShadingColor[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + triCols[3*i+0] = _mesh->data(*fvIt).faceShadingColor[0]; triCols[3*i+1] = _mesh->data(*fvIt).faceShadingColor[1]; triCols[3*i+2] = _mesh->data(*fvIt).faceShadingColor[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; ++fvIt; + triCols[3*i+0] = _mesh->data(*fvIt).faceShadingColor[0]; triCols[3*i+1] = _mesh->data(*fvIt).faceShadingColor[1]; triCols[3*i+2] = _mesh->data(*fvIt).faceShadingColor[2]; + triVerts[3*i+0] = _mesh->point(*fvIt)[0]; triVerts[3*i+1] = _mesh->point(*fvIt)[1]; triVerts[3*i+2] = _mesh->point(*fvIt)[2]; + triIndiceArray[i] = i; + + i++; + } + } + + + ui->displayWidget->loadMesh(triVerts, triCols, _mesh->n_faces() * 3 * 3, triIndiceArray, _mesh->n_faces() * 3); + + delete[] triIndiceArray; + delete[] triCols; + delete[] triVerts; + + GLuint* linesIndiceArray = new GLuint[_mesh->n_edges() * 2]; + GLfloat* linesCols = new GLfloat[_mesh->n_edges() * 2 * 3]; + GLfloat* linesVerts = new GLfloat[_mesh->n_edges() * 2 * 3]; + + i = 0; + QHash > edgesIDbyThickness; + for (MyMesh::EdgeIter eit = _mesh->edges_begin(); eit != _mesh->edges_end(); ++eit) + { + float t = _mesh->data(*eit).thickness; + if(t > 0) + { + if(!edgesIDbyThickness.contains(t)) + edgesIDbyThickness[t] = QList(); + edgesIDbyThickness[t].append((*eit).idx()); + } + } + QHashIterator > it(edgesIDbyThickness); + QList > edgeSizes; + while (it.hasNext()) + { + it.next(); + + for(int e = 0; e < it.value().size(); e++) + { + int eidx = it.value().at(e); + + MyMesh::VertexHandle vh1 = _mesh->to_vertex_handle(_mesh->halfedge_handle(_mesh->edge_handle(eidx), 0)); + linesVerts[3*i+0] = _mesh->point(vh1)[0]; + linesVerts[3*i+1] = _mesh->point(vh1)[1]; + linesVerts[3*i+2] = _mesh->point(vh1)[2]; + linesCols[3*i+0] = _mesh->color(_mesh->edge_handle(eidx))[0]; + linesCols[3*i+1] = _mesh->color(_mesh->edge_handle(eidx))[1]; + linesCols[3*i+2] = _mesh->color(_mesh->edge_handle(eidx))[2]; + linesIndiceArray[i] = i; + i++; + + MyMesh::VertexHandle vh2 = _mesh->from_vertex_handle(_mesh->halfedge_handle(_mesh->edge_handle(eidx), 0)); + linesVerts[3*i+0] = _mesh->point(vh2)[0]; + linesVerts[3*i+1] = _mesh->point(vh2)[1]; + linesVerts[3*i+2] = _mesh->point(vh2)[2]; + linesCols[3*i+0] = _mesh->color(_mesh->edge_handle(eidx))[0]; + linesCols[3*i+1] = _mesh->color(_mesh->edge_handle(eidx))[1]; + linesCols[3*i+2] = _mesh->color(_mesh->edge_handle(eidx))[2]; + linesIndiceArray[i] = i; + i++; + } + edgeSizes.append(qMakePair(it.key(), it.value().size())); + } + + ui->displayWidget->loadLines(linesVerts, linesCols, i * 3, linesIndiceArray, i, edgeSizes); + + delete[] linesIndiceArray; + delete[] linesCols; + delete[] linesVerts; + + GLuint* pointsIndiceArray = new GLuint[_mesh->n_vertices()]; + GLfloat* pointsCols = new GLfloat[_mesh->n_vertices() * 3]; + GLfloat* pointsVerts = new GLfloat[_mesh->n_vertices() * 3]; + + i = 0; + QHash > vertsIDbyThickness; + for (MyMesh::VertexIter vit = _mesh->vertices_begin(); vit != _mesh->vertices_end(); ++vit) + { + float t = _mesh->data(*vit).thickness; + if(t > 0) + { + if(!vertsIDbyThickness.contains(t)) + vertsIDbyThickness[t] = QList(); + vertsIDbyThickness[t].append((*vit).idx()); + } + } + QHashIterator > vitt(vertsIDbyThickness); + QList > vertsSizes; + + while (vitt.hasNext()) + { + vitt.next(); + + for(int v = 0; v < vitt.value().size(); v++) + { + int vidx = vitt.value().at(v); + + pointsVerts[3*i+0] = _mesh->point(_mesh->vertex_handle(vidx))[0]; + pointsVerts[3*i+1] = _mesh->point(_mesh->vertex_handle(vidx))[1]; + pointsVerts[3*i+2] = _mesh->point(_mesh->vertex_handle(vidx))[2]; + pointsCols[3*i+0] = _mesh->color(_mesh->vertex_handle(vidx))[0]; + pointsCols[3*i+1] = _mesh->color(_mesh->vertex_handle(vidx))[1]; + pointsCols[3*i+2] = _mesh->color(_mesh->vertex_handle(vidx))[2]; + pointsIndiceArray[i] = i; + i++; + } + vertsSizes.append(qMakePair(vitt.key(), vitt.value().size())); + } + + ui->displayWidget->loadPoints(pointsVerts, pointsCols, i * 3, pointsIndiceArray, i, vertsSizes); + + delete[] pointsIndiceArray; + delete[] pointsCols; + delete[] pointsVerts; +} + + +MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) +{ + vertexSelection = -1; + edgeSelection = -1; + faceSelection = -1; + + modevoisinage = false; + + ui->setupUi(this); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..b41b618 --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,79 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include + +namespace Ui { +class MainWindow; +} + +using namespace OpenMesh; +using namespace OpenMesh::Attributes; + +struct MyTraits : public OpenMesh::DefaultTraits +{ + // use vertex normals and vertex colors + VertexAttributes( OpenMesh::Attributes::Normal | OpenMesh::Attributes::Color ); + // store the previous halfedge + HalfedgeAttributes( OpenMesh::Attributes::PrevHalfedge ); + // use face normals face colors + FaceAttributes( OpenMesh::Attributes::Normal | OpenMesh::Attributes::Color ); + EdgeAttributes( OpenMesh::Attributes::Color ); + // vertex thickness + VertexTraits{float thickness; float value; Color faceShadingColor;}; + // edge thickness + EdgeTraits{float thickness;}; +}; +typedef OpenMesh::TriMesh_ArrayKernelT MyMesh; + + +enum DisplayMode {Normal, TemperatureMap, ColorShading}; + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + + explicit MainWindow(QWidget *parent = 0); + ~MainWindow(); + + // les 4 fonctions à compléter + void showSelections(MyMesh* _mesh); + void showSelectionsNeighborhood(MyMesh* _mesh); + void showPath(MyMesh* _mesh, int v1, int v2); + void showBorder(MyMesh* _mesh); + + void displayMesh(MyMesh *_mesh, DisplayMode mode = DisplayMode::Normal); + void resetAllColorsAndThickness(MyMesh* _mesh); + +private slots: + + void on_pushButton_chargement_clicked(); + void on_pushButton_vertexMoins_clicked(); + void on_pushButton_vertexPlus_clicked(); + void on_pushButton_edgeMoins_clicked(); + void on_pushButton_edgePlus_clicked(); + void on_pushButton_faceMoins_clicked(); + void on_pushButton_facePlus_clicked(); + void on_pushButton_afficherChemin_clicked(); + void on_pushButton_voisinage_clicked(); + void on_pushButton_bordure_clicked(); + +private: + + bool modevoisinage; + + MyMesh mesh; + + int vertexSelection; + int edgeSelection; + int faceSelection; + + Ui::MainWindow *ui; +}; + +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..72e8ff4 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,515 @@ + + + MainWindow + + + + 0 + 0 + 632 + 408 + + + + MainWindow + + + + + + + + 150 + 0 + + + + + 150 + 0 + + + + + 4 + + + 3 + + + 3 + + + 3 + + + 3 + + + + + + 200 + 0 + + + + Charger OBJ + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + Sélections courantes : + + + + + + + + 1 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + v : + + + + + + + + 0 + 0 + + + + - + + + + + + + + 0 + 0 + + + + -1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + 0 + 0 + + + + + 1 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + e : + + + + + + + + 0 + 0 + + + + - + + + + + + + + 0 + 0 + + + + -1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 10 + 0 + + + + + + + + + + + + + + + + 1 + + + 2 + + + 2 + + + 2 + + + 2 + + + + + + 0 + 0 + + + + f : + + + + + + + + 0 + 0 + + + + - + + + + + + + + 0 + 0 + + + + -1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + Passer en mode voisinage + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + Afficher la bordure + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 2 + + + 1 + + + 2 + + + 2 + + + 2 + + + + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + 0 + 0 + + + + v1 : + + + + + + + + + + + 0 + 0 + + + + v2 : + + + + + + + + + + + + + Afficher le chemin + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + 0 + 0 + 632 + 22 + + + + + + TopToolBarArea + + + false + + + + + + + + MeshViewerWidget + QWidget +
meshviewerwidget.h
+ 1 +
+
+ + +
diff --git a/meshviewerwidget.cpp b/meshviewerwidget.cpp new file mode 100644 index 0000000..0aa928d --- /dev/null +++ b/meshviewerwidget.cpp @@ -0,0 +1,383 @@ +#include "meshviewerwidget.h" + +MeshViewerWidget::MeshViewerWidget(QWidget*_parent) : QGLWidget(_parent) +{ + triToDraw = 0; + linesToDraw = 0; + pointsToDraw = 0; + + setMouseTracking(true); + setFocus(); +} + +MeshViewerWidget::MeshViewerWidget( QGLFormat& _fmt, QWidget* _parent ) : QGLWidget( _fmt, _parent ) +{ + setMouseTracking(true); + setFocus(); +} + +void MeshViewerWidget::initializeGL() +{ + glClearColor(1.0, 1.0, 1.0, 1.0); + glEnable( GL_DEPTH_TEST ); + + glLoadIdentity(); + + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glGetDoublev(GL_MODELVIEW_MATRIX, modelview_matrix_); + set_scene_pos(Vec3f(0.0, 0.0, 0.0), 1.0); + + glEnable( GL_MULTISAMPLE ); +} + +void MeshViewerWidget::translate( const OpenMesh::Vec3f& _trans ) +{ + glLoadIdentity(); + glTranslated( _trans[0], _trans[1], _trans[2] ); + glMultMatrixd( modelview_matrix_ ); + glGetDoublev( GL_MODELVIEW_MATRIX, modelview_matrix_); +} + +void MeshViewerWidget::resizeGL( int _w, int _h ) +{ + update_projection_matrix(); + glViewport(0, 0, _w, _h); + updateGL(); +} + +void MeshViewerWidget::reloadPOV() +{ + glLoadIdentity(); + glMatrixMode(GL_MODELVIEW); + glLoadIdentity(); + glGetDoublev(GL_MODELVIEW_MATRIX, modelview_matrix_); + set_scene_pos(Vec3f(0.0, 0.0, 0.0), 1.0); + updateGL(); +} + +void MeshViewerWidget::loadMesh(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* triangles, int nTriangles) +{ + GLfloat* vertsColsArray = new GLfloat[nVerts * 2]; + + for(int i = 0; i < nVerts; i = i + 3) + { + int j = 2 * i; + vertsColsArray[j] = colors[i] / 255.0; + vertsColsArray[j+1] = colors[i+1] / 255.0; + vertsColsArray[j+2] = colors[i+2] / 255.0; + + vertsColsArray[j+3] = verts[i]; + vertsColsArray[j+4] = verts[i+1]; + vertsColsArray[j+5] = verts[i+2]; + } + + glGenBuffers( 2, TriDataBuffers ); + + glBindBuffer(GL_ARRAY_BUFFER, TriDataBuffers[0]); + glBufferData(GL_ARRAY_BUFFER, nVerts * 2 * sizeof(GLfloat), vertsColsArray, GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, TriDataBuffers[1]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, nTriangles * sizeof(GLuint), triangles, GL_STATIC_DRAW); + + triToDraw = nTriangles; + + init = true; + + delete[] vertsColsArray; + + updateGL(); +} + +void MeshViewerWidget::loadLines(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* lines, int nLines, QList > es) +{ + GLfloat* linesColsArray = new GLfloat[nVerts * 2]; + + for(int i = 0; i < nVerts; i = i + 3) + { + int j = 2 * i; + linesColsArray[j] = colors[i] / 255.0; + linesColsArray[j+1] = colors[i+1] / 255.0; + linesColsArray[j+2] = colors[i+2] / 255.0; + + linesColsArray[j+3] = verts[i]; + linesColsArray[j+4] = verts[i+1]; + linesColsArray[j+5] = verts[i+2]; + } + + glGenBuffers( 2, LinesDataBuffers ); + + + glBindBuffer(GL_ARRAY_BUFFER, LinesDataBuffers[0]); + glBufferData(GL_ARRAY_BUFFER, nVerts * 2 * sizeof(GLfloat), linesColsArray, GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, LinesDataBuffers[1]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, nLines * sizeof(GLuint), lines, GL_STATIC_DRAW); + + linesToDraw = nLines; + + edgeSizes = es; + + delete[] linesColsArray; + + updateGL(); +} + +void MeshViewerWidget::loadPoints(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* points, int nPoints, QList > vs) +{ + GLfloat* pointsColsArray = new GLfloat[nVerts * 2]; + + for(int i = 0; i < nVerts; i = i + 3) + { + int j = 2 * i; + pointsColsArray[j] = colors[i] / 255.0; + pointsColsArray[j+1] = colors[i+1] / 255.0; + pointsColsArray[j+2] = colors[i+2] / 255.0; + + pointsColsArray[j+3] = verts[i]; + pointsColsArray[j+4] = verts[i+1]; + pointsColsArray[j+5] = verts[i+2]; + } + + glGenBuffers( 2, PointsDataBuffers ); + + + glBindBuffer(GL_ARRAY_BUFFER, PointsDataBuffers[0]); + glBufferData(GL_ARRAY_BUFFER, nVerts * 2 * sizeof(GLfloat), pointsColsArray, GL_STATIC_DRAW); + + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, PointsDataBuffers[1]); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, nPoints * sizeof(GLuint), points, GL_STATIC_DRAW); + + pointsToDraw = nPoints; + + vertsSizes = vs; + + delete[] pointsColsArray; + + updateGL(); +} + + +void MeshViewerWidget::paintGL() +{ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + glMatrixMode( GL_PROJECTION ); + glLoadMatrixd( projection_matrix_ ); + glMatrixMode( GL_MODELVIEW ); + glLoadMatrixd( modelview_matrix_ ); + + if(triToDraw != 0) + { + glPolygonOffset(1.0, 2); + + // on charge le buffer 0 : une liste de vertex [r, g, b, x, y, z] (6 float) + glBindBuffer(GL_ARRAY_BUFFER, TriDataBuffers[0]); + + // on charge la partie [r, g, b] + glColorPointer( 3, GL_FLOAT, 6 * sizeof(float), 0 ); + // on charge la partie [x, y, z] + glVertexPointer( 3, GL_FLOAT, 6 * sizeof(float), ((float*)NULL + (3)) ); + + + // on charge le buffer 1 : une liste d'ID [v0, v1, v2] (3 int) + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, TriDataBuffers[1]); + + glEnableClientState( GL_VERTEX_ARRAY ); + + // affiche les faces en GL_COLOR_ARRAY + glEnableClientState( GL_COLOR_ARRAY ); + glPolygonMode( GL_FRONT_AND_BACK, GL_FILL ); + + glEnable(GL_POLYGON_OFFSET_FILL); + glDrawElements(GL_TRIANGLES, triToDraw, GL_UNSIGNED_INT, 0); + glDisable(GL_POLYGON_OFFSET_FILL); + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + } + + + if(linesToDraw != 0) + { + // on charge le buffer 0 : une liste de vertex [r, g, b, x, y, z] (6 float) + glBindBuffer(GL_ARRAY_BUFFER, LinesDataBuffers[0]); + + // on charge la partie [r, g, b] + glColorPointer( 3, GL_FLOAT, 6 * sizeof(float), 0 ); + // on charge la partie [x, y, z] + glVertexPointer( 3, GL_FLOAT, 6 * sizeof(float), ((float*)NULL + (3)) ); + + // on charge le buffer 1 : une liste d'ID [v0, v1] (2 int) + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, LinesDataBuffers[1]); + + glEnableClientState( GL_VERTEX_ARRAY ); + glEnableClientState( GL_COLOR_ARRAY ); + + int cur = 0; + for(int i = 0; i < edgeSizes.count(); i++) + { + glLineWidth(edgeSizes.at(i).first); + glDrawElements(GL_LINES, edgeSizes.at(i).second*2, GL_UNSIGNED_INT, (GLvoid*)(sizeof(GLfloat) * cur)); + cur = cur + edgeSizes.at(i).second*2; + } + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + } + + if(pointsToDraw != 0) + { + // on charge le buffer 0 : une liste de vertex [r, g, b, x, y, z] (6 float) + glBindBuffer(GL_ARRAY_BUFFER, PointsDataBuffers[0]); + + // on charge la partie [r, g, b] + glColorPointer( 3, GL_FLOAT, 6 * sizeof(float), 0 ); + // on charge la partie [x, y, z] + glVertexPointer( 3, GL_FLOAT, 6 * sizeof(float), ((float*)NULL + (3)) ); + + // on charge le buffer 1 : une liste d'ID [v0] (1 int) + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, PointsDataBuffers[1]); + + glEnableClientState( GL_VERTEX_ARRAY ); + glEnableClientState( GL_COLOR_ARRAY ); + + int cur = 0; + for(int i = 0; i < vertsSizes.count(); i++) + { + glPointSize(vertsSizes.at(i).first); + glDrawElements(GL_POINTS, vertsSizes.at(i).second, GL_UNSIGNED_INT, (GLvoid*)(sizeof(GLfloat) * cur)); + cur = cur + vertsSizes.at(i).second; + } + + glDisableClientState( GL_COLOR_ARRAY ); + glDisableClientState( GL_VERTEX_ARRAY ); + } +} + + +void MeshViewerWidget::set_scene_pos( const OpenMesh::Vec3f& _cog, float _radius ) +{ + center_ = _cog; + radius_ = _radius; + update_projection_matrix(); + view_all(); +} + +void MeshViewerWidget::update_projection_matrix() +{ + glMatrixMode( GL_PROJECTION ); + glLoadIdentity(); + gluPerspective(45.0, (GLfloat) width() / (GLfloat) height(), 0.01*radius_, 100.0*radius_); + glGetDoublev( GL_PROJECTION_MATRIX, projection_matrix_); + glMatrixMode( GL_MODELVIEW ); +} + +void MeshViewerWidget::view_all() +{ + translate( Vec3f( -(modelview_matrix_[0]*center_[0] + modelview_matrix_[4]*center_[1] + modelview_matrix_[8]*center_[2] + modelview_matrix_[12]), -(modelview_matrix_[1]*center_[0] + modelview_matrix_[5]*center_[1] + modelview_matrix_[9]*center_[2] + modelview_matrix_[13]), -(modelview_matrix_[2]*center_[0] + modelview_matrix_[6]*center_[1] + modelview_matrix_[10]*center_[2] + modelview_matrix_[14] + 3.0*radius_) ) ); +} + +void MeshViewerWidget::mousePressEvent( QMouseEvent* _event ) +{ + last_point_ok_ = map_to_sphere( last_point_2D_=_event->pos(), last_point_3D_ ); +} + +void MeshViewerWidget::mouseMoveEvent( QMouseEvent* _event ) +{ + QPoint newPoint2D = _event->pos(); + + Vec3f newPoint3D; + bool newPoint_hitSphere = map_to_sphere( newPoint2D, newPoint3D ); + + float dx = newPoint2D.x() - last_point_2D_.x(); + float dy = newPoint2D.y() - last_point_2D_.y(); + + float w = width(); + float h = height(); + + if ( (_event->buttons() == (Qt::LeftButton+Qt::MidButton)) || (_event->buttons() == Qt::LeftButton && _event->modifiers() == Qt::ControlModifier)) + { + float value_y = radius_ * dy * 3.0 / h; + translate(Vec3f(0.0, 0.0, value_y)); + } + else if ( (_event->buttons() == Qt::MidButton) || (_event->buttons() == Qt::LeftButton && _event->modifiers() == Qt::AltModifier) ) + { + float z = - (modelview_matrix_[ 2]*center_[0] + modelview_matrix_[ 6]*center_[1] + modelview_matrix_[10]*center_[2] + modelview_matrix_[14]) / (modelview_matrix_[ 3]*center_[0] + modelview_matrix_[ 7]*center_[1] + modelview_matrix_[11]*center_[2] + modelview_matrix_[15]); + float aspect = w / h; + float near_plane = 0.01 * radius_; + float top = tan(45.0f/2.0f*M_PI/180.0f) * near_plane; + float right = aspect*top; + translate(Vec3f( 2.0*dx/w*right/near_plane*z, -2.0*dy/h*top/near_plane*z, 0.0f)); + } + else if (_event->buttons() == Qt::LeftButton) + { + if (last_point_ok_) + { + if ((newPoint_hitSphere = map_to_sphere(newPoint2D, newPoint3D))) + { + Vec3f axis = last_point_3D_ % newPoint3D; + if (axis.sqrnorm() < 1e-7) + axis = Vec3f(1, 0, 0); + else + axis.normalize(); + Vec3f d = last_point_3D_ - newPoint3D; + float t = 0.5 * d.norm() / TRACKBALL_RADIUS; + if (t < -1.0) + t = -1.0; + else if (t > 1.0) + t = 1.0; + float phi = 2.0 * asin(t); + float angle = phi * 180.0 / M_PI; + rotate(axis, angle); + } + } + + } + last_point_2D_ = newPoint2D; + last_point_3D_ = newPoint3D; + last_point_ok_ = newPoint_hitSphere; + updateGL(); +} + +void MeshViewerWidget::mouseReleaseEvent( QMouseEvent* /* _event */ ) +{ + last_point_ok_ = false; +} + +void MeshViewerWidget::wheelEvent(QWheelEvent* _event) +{ + float d = -(float)_event->delta() / 120.0 * 0.2 * radius_; + translate(Vec3f(0.0, 0.0, d)); + updateGL(); + _event->accept(); +} + +bool MeshViewerWidget::map_to_sphere( const QPoint& _v2D, OpenMesh::Vec3f& _v3D ) +{ + double x = (2.0*_v2D.x() - width())/width(); + double y = -(2.0*_v2D.y() - height())/height(); + double xval = x; + double yval = y; + double x2y2 = xval*xval + yval*yval; + + const double rsqr = TRACKBALL_RADIUS*TRACKBALL_RADIUS; + _v3D[0] = xval; + _v3D[1] = yval; + if (x2y2 < 0.5*rsqr) + _v3D[2] = sqrt(rsqr - x2y2); + else + _v3D[2] = 0.5*rsqr/sqrt(x2y2); + + return true; +} + +void MeshViewerWidget::rotate( const OpenMesh::Vec3f& _axis, float _angle ) +{ + Vec3f t( modelview_matrix_[0]*center_[0] + modelview_matrix_[4]*center_[1] + modelview_matrix_[8]*center_[2] + modelview_matrix_[12], modelview_matrix_[1]*center_[0] + modelview_matrix_[5]*center_[1] + modelview_matrix_[9]*center_[2] + modelview_matrix_[13], modelview_matrix_[2]*center_[0] + modelview_matrix_[6]*center_[1] + modelview_matrix_[10]*center_[2] + modelview_matrix_[14] ); + glLoadIdentity(); + glTranslatef(t[0], t[1], t[2]); + glRotated( _angle, _axis[0], _axis[1], _axis[2]); + glTranslatef(-t[0], -t[1], -t[2]); + glMultMatrixd(modelview_matrix_); + glGetDoublev(GL_MODELVIEW_MATRIX, modelview_matrix_); +} diff --git a/meshviewerwidget.h b/meshviewerwidget.h new file mode 100644 index 0000000..9552c03 --- /dev/null +++ b/meshviewerwidget.h @@ -0,0 +1,87 @@ +#ifndef MESHVIEWERWIDGET_H +#define MESHVIEWERWIDGET_H + +#define GL_GLEXT_PROTOTYPES +#include +#include +#include "QMouseEvent" +#include + +#ifdef __APPLE__ + #include + #include + #include +#else + #include + #include + #include + #include + #include +#endif + + + +using namespace OpenMesh; + +const double TRACKBALL_RADIUS = 0.6; + +class MeshViewerWidget : public QGLWidget +{ + Q_OBJECT +public: + MeshViewerWidget(QWidget* _parent=0); + MeshViewerWidget(QGLFormat& _fmt, QWidget* _parent ); + + // events GL + void initializeGL(); + void resizeGL(int _w, int _h); + void paintGL(); + + // gestion de la vue et de la trackball + void update_projection_matrix(); + void view_all(); + void set_scene_pos( const OpenMesh::Vec3f& _cog, float _radius ); + bool map_to_sphere(const QPoint& _point, OpenMesh::Vec3f& _result); + void translate( const OpenMesh::Vec3f& _trans ); + void rotate( const OpenMesh::Vec3f& _axis, float _angle ); + + void reloadPOV(); + void loadMesh(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* triangles, int nTriangles); + void loadLines(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* lines, int nLines, QList > es); + void loadPoints(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* points, int nPoints, QList > vs); + + // buffer pour les VBO + GLuint TriDataBuffers[2]; + // Nombre de triangles du mesh (pour le call du draw) + int triToDraw; + + GLuint LinesDataBuffers[2]; + int linesToDraw; + QList > edgeSizes; + + GLuint PointsDataBuffers[2]; + int pointsToDraw; + QList > vertsSizes; + + // pour savoir si les buffer sont init + bool init; + + // variables de gestion de la vue et de la trackball + OpenMesh::Vec3f center_; + float radius_; + + GLdouble projection_matrix_[16], modelview_matrix_[16]; + + QPoint last_point_2D_; + OpenMesh::Vec3f last_point_3D_; + bool last_point_ok_; +protected: + + // Qt mouse events + virtual void mousePressEvent( QMouseEvent* ); + virtual void mouseReleaseEvent( QMouseEvent* ); + virtual void mouseMoveEvent( QMouseEvent* ); + virtual void wheelEvent( QWheelEvent* ); +}; + +#endif // MESHVIEWERWIDGET_H diff --git a/starterLight.pro b/starterLight.pro new file mode 100644 index 0000000..9c60b29 --- /dev/null +++ b/starterLight.pro @@ -0,0 +1,53 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-10-02T16:25:45 +# +#------------------------------------------------- + +QT += core gui +QT += opengl + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = starterLight +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which has been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + + +unix:!macx { + LIBS += -lglut -lGLU + LIBS += -L$$PWD/../OpenMesh/liblinux/ -lOpenMeshCore + + INCLUDEPATH += $$PWD/../OpenMesh/inc/ + DEPENDPATH += $$PWD/../OpenMesh/inc/ + DEPENDPATH += $$PWD/../OpenMesh/liblinux/ +} + +macx: { + INCLUDEPATH += $$PWD/../OpenMesh/inc/ + LIBS += -L$$PWD/../OpenMesh/libosx/ -lOpenMeshCore -lOpenMeshTools +} + +SOURCES += \ + main.cpp \ + mainwindow.cpp \ + meshviewerwidget.cpp + +HEADERS += \ + mainwindow.h \ + meshviewerwidget.h + +FORMS += \ + mainwindow.ui + +