archivage initial

This commit is contained in:
papush! 2020-03-04 10:41:03 +01:00
commit 06adb5e51e
8 changed files with 2390 additions and 0 deletions

766
Makefile Normal file
View File

@ -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:

11
main.cpp Normal file
View File

@ -0,0 +1,11 @@
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}

496
mainwindow.cpp Normal file
View File

@ -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<float> 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<float, QList<int> > 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<int>();
edgesIDbyThickness[t].append((*eit).idx());
}
}
QHashIterator<float, QList<int> > it(edgesIDbyThickness);
QList<QPair<float, int> > 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<float, QList<int> > 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<int>();
vertsIDbyThickness[t].append((*vit).idx());
}
}
QHashIterator<float, QList<int> > vitt(vertsIDbyThickness);
QList<QPair<float, int> > 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;
}

79
mainwindow.h Normal file
View File

@ -0,0 +1,79 @@
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QFileDialog>
#include <QMainWindow>
#include <OpenMesh/Core/IO/MeshIO.hh>
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
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<MyTraits> 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

515
mainwindow.ui Normal file
View File

@ -0,0 +1,515 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>632</width>
<height>408</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QWidget" name="widget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>150</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>150</width>
<height>0</height>
</size>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>4</number>
</property>
<property name="leftMargin">
<number>3</number>
</property>
<property name="topMargin">
<number>3</number>
</property>
<property name="rightMargin">
<number>3</number>
</property>
<property name="bottomMargin">
<number>3</number>
</property>
<item>
<widget class="QPushButton" name="pushButton_chargement">
<property name="minimumSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Charger OBJ</string>
</property>
</widget>
</item>
<item>
<widget class="QFrame" name="frame">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Sélections courantes :</string>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_4" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>v : </string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_vertexMoins">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelVertex">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_vertexPlus">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>+</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_3" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QLabel" name="label_5">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>e : </string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_edgeMoins">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelEdge">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_edgePlus">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>10</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>+</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>2</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>f : </string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_faceMoins">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="labelFace">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>-1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_facePlus">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>+</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_voisinage">
<property name="text">
<string>Passer en mode voisinage</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_3">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QPushButton" name="pushButton_bordure">
<property name="text">
<string>Afficher la bordure</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QFrame" name="frame_2">
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>2</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>2</number>
</property>
<property name="rightMargin">
<number>2</number>
</property>
<property name="bottomMargin">
<number>2</number>
</property>
<item>
<widget class="QWidget" name="widget_5" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_5">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>1</number>
</property>
<property name="topMargin">
<number>1</number>
</property>
<property name="rightMargin">
<number>1</number>
</property>
<property name="bottomMargin">
<number>1</number>
</property>
<item>
<widget class="QLabel" name="label_v1_chemin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string> v1 : </string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_v1_chemin"/>
</item>
<item>
<widget class="QLabel" name="label_v2_chemin">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string> v2 : </string>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="spinBox_v2_chemin"/>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QPushButton" name="pushButton_afficherChemin">
<property name="text">
<string>Afficher le chemin</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="MeshViewerWidget" name="displayWidget" native="true"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>632</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
<class>MeshViewerWidget</class>
<extends>QWidget</extends>
<header location="global">meshviewerwidget.h</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>

383
meshviewerwidget.cpp Normal file
View File

@ -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<QPair<float, int> > 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<QPair<float, int> > 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_);
}

87
meshviewerwidget.h Normal file
View File

@ -0,0 +1,87 @@
#ifndef MESHVIEWERWIDGET_H
#define MESHVIEWERWIDGET_H
#define GL_GLEXT_PROTOTYPES
#include <QDebug>
#include <QGLWidget>
#include "QMouseEvent"
#include <OpenMesh/Core/Geometry/VectorT.hh>
#ifdef __APPLE__
#include <gl.h>
#include <glu.h>
#include <glext.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glx.h>
#include <GL/glext.h>
#include <GL/glut.h>
#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<QPair<float, int> > es);
void loadPoints(GLfloat* verts, GLfloat* colors, int nVerts, GLuint* points, int nPoints, QList<QPair<float, int> > 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<QPair<float, int> > edgeSizes;
GLuint PointsDataBuffers[2];
int pointsToDraw;
QList<QPair<float, int> > 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

53
starterLight.pro Normal file
View File

@ -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