Added example source code of tutorials to src folder.
git-svn-id: http://www.openmesh.org/svnrepo/OpenMesh/trunk@208 fdac6126-5c0c-442c-9429-916003d36597
This commit is contained in:
12
src/OpenMesh/Examples/Examples.pro
Normal file
12
src/OpenMesh/Examples/Examples.pro
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
Subdirs()
|
||||||
|
|
||||||
|
addSubdirs( Tutorial01 )
|
||||||
|
addSubdirs( Tutorial02 )
|
||||||
|
addSubdirs( Tutorial03 )
|
||||||
|
addSubdirs( Tutorial04 )
|
||||||
|
addSubdirs( Tutorial05 )
|
||||||
|
addSubdirs( Tutorial06 )
|
||||||
|
addSubdirs( Tutorial07 )
|
||||||
|
addSubdirs( Tutorial08 )
|
||||||
|
addSubdirs( Tutorial09 )
|
||||||
|
addSubdirs( Tutorial10 )
|
||||||
550
src/OpenMesh/Examples/Makefile
Normal file
550
src/OpenMesh/Examples/Makefile
Normal file
@@ -0,0 +1,550 @@
|
|||||||
|
#############################################################################
|
||||||
|
# Makefile for building: Examples
|
||||||
|
# Generated by qmake (2.01a) (Qt 4.5.1) on: Mon Sep 28 11:50:33 2009
|
||||||
|
# Project: Examples.pro
|
||||||
|
# Template: subdirs
|
||||||
|
# Command: /usr/bin/qmake-qt4 -unix -o Makefile Examples.pro
|
||||||
|
#############################################################################
|
||||||
|
|
||||||
|
first: make_default
|
||||||
|
MAKEFILE = Makefile
|
||||||
|
QMAKE = /usr/bin/qmake-qt4
|
||||||
|
DEL_FILE = rm -f
|
||||||
|
CHK_DIR_EXISTS= test -d
|
||||||
|
MKDIR = mkdir -p
|
||||||
|
COPY = cp -f
|
||||||
|
COPY_FILE = $(COPY)
|
||||||
|
COPY_DIR = $(COPY) -r
|
||||||
|
INSTALL_FILE = install -m 644 -p
|
||||||
|
INSTALL_PROGRAM = install -m 755 -p
|
||||||
|
INSTALL_DIR = $(COPY_DIR)
|
||||||
|
DEL_FILE = rm -f
|
||||||
|
SYMLINK = ln -sf
|
||||||
|
DEL_DIR = rmdir
|
||||||
|
MOVE = mv -f
|
||||||
|
CHK_DIR_EXISTS= test -d
|
||||||
|
MKDIR = mkdir -p
|
||||||
|
SUBTARGETS = \
|
||||||
|
sub-Tutorial01 \
|
||||||
|
sub-Tutorial02 \
|
||||||
|
sub-Tutorial03 \
|
||||||
|
sub-Tutorial04 \
|
||||||
|
sub-Tutorial05 \
|
||||||
|
sub-Tutorial06 \
|
||||||
|
sub-Tutorial07 \
|
||||||
|
sub-Tutorial08 \
|
||||||
|
sub-Tutorial09 \
|
||||||
|
sub-Tutorial10
|
||||||
|
|
||||||
|
Tutorial01//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial01/ || $(MKDIR) Tutorial01/
|
||||||
|
cd Tutorial01/ && $(QMAKE) Tutorial01.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial01-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial01/ || $(MKDIR) Tutorial01/
|
||||||
|
cd Tutorial01/ && $(QMAKE) Tutorial01.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial01: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial01-make_default-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial01-make_default: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial01-make_first-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial01-make_first: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial01-all-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial01-all: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial01-clean-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial01-clean: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial01-distclean-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial01-distclean: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial01-install_subtargets-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial01-install_subtargets: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial01-uninstall_subtargets-ordered: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial01-uninstall_subtargets: Tutorial01//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial01/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial02//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial02/ || $(MKDIR) Tutorial02/
|
||||||
|
cd Tutorial02/ && $(QMAKE) Tutorial02.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial02-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial02/ || $(MKDIR) Tutorial02/
|
||||||
|
cd Tutorial02/ && $(QMAKE) Tutorial02.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial02: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial02-make_default-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-make_default-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial02-make_default: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial02-make_first-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-make_first-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial02-make_first: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial02-all-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-all-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial02-all: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial02-clean-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-clean-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial02-clean: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial02-distclean-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-distclean-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial02-distclean: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial02-install_subtargets-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial02-install_subtargets: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial02-uninstall_subtargets-ordered: Tutorial02//$(MAKEFILE) sub-Tutorial01-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial02-uninstall_subtargets: Tutorial02//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial02/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial03//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial03/ || $(MKDIR) Tutorial03/
|
||||||
|
cd Tutorial03/ && $(QMAKE) Tutorial03.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial03-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial03/ || $(MKDIR) Tutorial03/
|
||||||
|
cd Tutorial03/ && $(QMAKE) Tutorial03.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial03: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial03-make_default-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-make_default-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial03-make_default: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial03-make_first-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-make_first-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial03-make_first: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial03-all-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-all-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial03-all: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial03-clean-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-clean-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial03-clean: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial03-distclean-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-distclean-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial03-distclean: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial03-install_subtargets-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial03-install_subtargets: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial03-uninstall_subtargets-ordered: Tutorial03//$(MAKEFILE) sub-Tutorial02-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial03-uninstall_subtargets: Tutorial03//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial03/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial04//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial04/ || $(MKDIR) Tutorial04/
|
||||||
|
cd Tutorial04/ && $(QMAKE) Tutorial04.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial04-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial04/ || $(MKDIR) Tutorial04/
|
||||||
|
cd Tutorial04/ && $(QMAKE) Tutorial04.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial04: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial04-make_default-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-make_default-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial04-make_default: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial04-make_first-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-make_first-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial04-make_first: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial04-all-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-all-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial04-all: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial04-clean-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-clean-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial04-clean: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial04-distclean-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-distclean-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial04-distclean: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial04-install_subtargets-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial04-install_subtargets: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial04-uninstall_subtargets-ordered: Tutorial04//$(MAKEFILE) sub-Tutorial03-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial04-uninstall_subtargets: Tutorial04//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial04/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial05//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial05/ || $(MKDIR) Tutorial05/
|
||||||
|
cd Tutorial05/ && $(QMAKE) Tutorial05.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial05-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial05/ || $(MKDIR) Tutorial05/
|
||||||
|
cd Tutorial05/ && $(QMAKE) Tutorial05.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial05: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial05-make_default-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-make_default-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial05-make_default: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial05-make_first-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-make_first-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial05-make_first: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial05-all-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-all-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial05-all: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial05-clean-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-clean-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial05-clean: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial05-distclean-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-distclean-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial05-distclean: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial05-install_subtargets-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial05-install_subtargets: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial05-uninstall_subtargets-ordered: Tutorial05//$(MAKEFILE) sub-Tutorial04-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial05-uninstall_subtargets: Tutorial05//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial05/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial06//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial06/ || $(MKDIR) Tutorial06/
|
||||||
|
cd Tutorial06/ && $(QMAKE) Tutorial06.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial06-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial06/ || $(MKDIR) Tutorial06/
|
||||||
|
cd Tutorial06/ && $(QMAKE) Tutorial06.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial06: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial06-make_default-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-make_default-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial06-make_default: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial06-make_first-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-make_first-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial06-make_first: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial06-all-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-all-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial06-all: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial06-clean-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-clean-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial06-clean: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial06-distclean-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-distclean-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial06-distclean: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial06-install_subtargets-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial06-install_subtargets: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial06-uninstall_subtargets-ordered: Tutorial06//$(MAKEFILE) sub-Tutorial05-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial06-uninstall_subtargets: Tutorial06//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial06/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial07//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial07/ || $(MKDIR) Tutorial07/
|
||||||
|
cd Tutorial07/ && $(QMAKE) Tutorial07.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial07-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial07/ || $(MKDIR) Tutorial07/
|
||||||
|
cd Tutorial07/ && $(QMAKE) Tutorial07.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial07: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial07-make_default-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-make_default-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial07-make_default: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial07-make_first-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-make_first-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial07-make_first: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial07-all-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-all-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial07-all: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial07-clean-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-clean-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial07-clean: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial07-distclean-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-distclean-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial07-distclean: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial07-install_subtargets-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial07-install_subtargets: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial07-uninstall_subtargets-ordered: Tutorial07//$(MAKEFILE) sub-Tutorial06-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial07-uninstall_subtargets: Tutorial07//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial07/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial08//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial08/ || $(MKDIR) Tutorial08/
|
||||||
|
cd Tutorial08/ && $(QMAKE) Tutorial08.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial08-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial08/ || $(MKDIR) Tutorial08/
|
||||||
|
cd Tutorial08/ && $(QMAKE) Tutorial08.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial08: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial08-make_default-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-make_default-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial08-make_default: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial08-make_first-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-make_first-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial08-make_first: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial08-all-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-all-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial08-all: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial08-clean-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-clean-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial08-clean: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial08-distclean-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-distclean-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial08-distclean: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial08-install_subtargets-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial08-install_subtargets: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial08-uninstall_subtargets-ordered: Tutorial08//$(MAKEFILE) sub-Tutorial07-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial08-uninstall_subtargets: Tutorial08//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial08/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial09//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial09/ || $(MKDIR) Tutorial09/
|
||||||
|
cd Tutorial09/ && $(QMAKE) Tutorial09.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial09-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial09/ || $(MKDIR) Tutorial09/
|
||||||
|
cd Tutorial09/ && $(QMAKE) Tutorial09.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial09: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial09-make_default-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-make_default-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial09-make_default: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial09-make_first-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-make_first-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial09-make_first: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial09-all-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-all-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial09-all: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial09-clean-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-clean-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial09-clean: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial09-distclean-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-distclean-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial09-distclean: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial09-install_subtargets-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial09-install_subtargets: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial09-uninstall_subtargets-ordered: Tutorial09//$(MAKEFILE) sub-Tutorial08-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial09-uninstall_subtargets: Tutorial09//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial09/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
Tutorial10//$(MAKEFILE):
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial10/ || $(MKDIR) Tutorial10/
|
||||||
|
cd Tutorial10/ && $(QMAKE) Tutorial10.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial10-qmake_all: FORCE
|
||||||
|
@$(CHK_DIR_EXISTS) Tutorial10/ || $(MKDIR) Tutorial10/
|
||||||
|
cd Tutorial10/ && $(QMAKE) Tutorial10.pro -unix -o $(MAKEFILE)
|
||||||
|
sub-Tutorial10: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial10-make_default-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-make_default-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial10-make_default: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE)
|
||||||
|
sub-Tutorial10-make_first-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-make_first-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial10-make_first: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) first
|
||||||
|
sub-Tutorial10-all-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-all-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial10-all: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) all
|
||||||
|
sub-Tutorial10-clean-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-clean-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial10-clean: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) clean
|
||||||
|
sub-Tutorial10-distclean-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-distclean-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial10-distclean: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) distclean
|
||||||
|
sub-Tutorial10-install_subtargets-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-install_subtargets-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial10-install_subtargets: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) install
|
||||||
|
sub-Tutorial10-uninstall_subtargets-ordered: Tutorial10//$(MAKEFILE) sub-Tutorial09-uninstall_subtargets-ordered FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
sub-Tutorial10-uninstall_subtargets: Tutorial10//$(MAKEFILE) FORCE
|
||||||
|
cd Tutorial10/ && $(MAKE) -f $(MAKEFILE) uninstall
|
||||||
|
|
||||||
|
Makefile: Examples.pro ../../../.qmake.cache /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/g++.conf \
|
||||||
|
/usr/share/qt4/mkspecs/common/unix.conf \
|
||||||
|
/usr/share/qt4/mkspecs/common/linux.conf \
|
||||||
|
/usr/share/qt4/mkspecs/features/exclusive_builds.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/default_pre.prf \
|
||||||
|
../../../qmake/architecture.include \
|
||||||
|
../../../qmake/functions.include \
|
||||||
|
../../../qmake/compiler.include \
|
||||||
|
../../../qmake/targets.include \
|
||||||
|
../../../qmake/packages/packages.Linux \
|
||||||
|
../../../qmake/all.include \
|
||||||
|
../../../.qmake.cache \
|
||||||
|
/usr/share/qt4/mkspecs/qconfig.pri \
|
||||||
|
/usr/share/qt4/mkspecs/features/qt_functions.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/qt_config.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/release.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/debug_and_release.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/default_post.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/unix/thread.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/unix/opengl.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/qt.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/uitools.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/moc.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/warn_on.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/resources.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/uic.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/yacc.prf \
|
||||||
|
/usr/share/qt4/mkspecs/features/lex.prf
|
||||||
|
$(QMAKE) -unix -o Makefile Examples.pro
|
||||||
|
/usr/share/qt4/mkspecs/common/g++.conf:
|
||||||
|
/usr/share/qt4/mkspecs/common/unix.conf:
|
||||||
|
/usr/share/qt4/mkspecs/common/linux.conf:
|
||||||
|
/usr/share/qt4/mkspecs/features/exclusive_builds.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/default_pre.prf:
|
||||||
|
../../../qmake/architecture.include:
|
||||||
|
../../../qmake/functions.include:
|
||||||
|
../../../qmake/compiler.include:
|
||||||
|
../../../qmake/targets.include:
|
||||||
|
../../../qmake/packages/packages.Linux:
|
||||||
|
../../../qmake/all.include:
|
||||||
|
../../../.qmake.cache:
|
||||||
|
/usr/share/qt4/mkspecs/qconfig.pri:
|
||||||
|
/usr/share/qt4/mkspecs/features/qt_functions.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/qt_config.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/release.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/debug_and_release.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/default_post.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/unix/thread.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/unix/opengl.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/qt.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/uitools.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/moc.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/warn_on.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/resources.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/uic.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/yacc.prf:
|
||||||
|
/usr/share/qt4/mkspecs/features/lex.prf:
|
||||||
|
qmake: qmake_all FORCE
|
||||||
|
@$(QMAKE) -unix -o Makefile Examples.pro
|
||||||
|
|
||||||
|
qmake_all: sub-Tutorial01-qmake_all sub-Tutorial02-qmake_all sub-Tutorial03-qmake_all sub-Tutorial04-qmake_all sub-Tutorial05-qmake_all sub-Tutorial06-qmake_all sub-Tutorial07-qmake_all sub-Tutorial08-qmake_all sub-Tutorial09-qmake_all sub-Tutorial10-qmake_all FORCE
|
||||||
|
|
||||||
|
make_default: sub-Tutorial01-make_default-ordered sub-Tutorial02-make_default-ordered sub-Tutorial03-make_default-ordered sub-Tutorial04-make_default-ordered sub-Tutorial05-make_default-ordered sub-Tutorial06-make_default-ordered sub-Tutorial07-make_default-ordered sub-Tutorial08-make_default-ordered sub-Tutorial09-make_default-ordered sub-Tutorial10-make_default-ordered FORCE
|
||||||
|
make_first: sub-Tutorial01-make_first-ordered sub-Tutorial02-make_first-ordered sub-Tutorial03-make_first-ordered sub-Tutorial04-make_first-ordered sub-Tutorial05-make_first-ordered sub-Tutorial06-make_first-ordered sub-Tutorial07-make_first-ordered sub-Tutorial08-make_first-ordered sub-Tutorial09-make_first-ordered sub-Tutorial10-make_first-ordered FORCE
|
||||||
|
all: sub-Tutorial01-all-ordered sub-Tutorial02-all-ordered sub-Tutorial03-all-ordered sub-Tutorial04-all-ordered sub-Tutorial05-all-ordered sub-Tutorial06-all-ordered sub-Tutorial07-all-ordered sub-Tutorial08-all-ordered sub-Tutorial09-all-ordered sub-Tutorial10-all-ordered FORCE
|
||||||
|
clean: sub-Tutorial01-clean-ordered sub-Tutorial02-clean-ordered sub-Tutorial03-clean-ordered sub-Tutorial04-clean-ordered sub-Tutorial05-clean-ordered sub-Tutorial06-clean-ordered sub-Tutorial07-clean-ordered sub-Tutorial08-clean-ordered sub-Tutorial09-clean-ordered sub-Tutorial10-clean-ordered FORCE
|
||||||
|
distclean: sub-Tutorial01-distclean-ordered sub-Tutorial02-distclean-ordered sub-Tutorial03-distclean-ordered sub-Tutorial04-distclean-ordered sub-Tutorial05-distclean-ordered sub-Tutorial06-distclean-ordered sub-Tutorial07-distclean-ordered sub-Tutorial08-distclean-ordered sub-Tutorial09-distclean-ordered sub-Tutorial10-distclean-ordered FORCE
|
||||||
|
-$(DEL_FILE) Makefile
|
||||||
|
install_subtargets: sub-Tutorial01-install_subtargets-ordered sub-Tutorial02-install_subtargets-ordered sub-Tutorial03-install_subtargets-ordered sub-Tutorial04-install_subtargets-ordered sub-Tutorial05-install_subtargets-ordered sub-Tutorial06-install_subtargets-ordered sub-Tutorial07-install_subtargets-ordered sub-Tutorial08-install_subtargets-ordered sub-Tutorial09-install_subtargets-ordered sub-Tutorial10-install_subtargets-ordered FORCE
|
||||||
|
uninstall_subtargets: sub-Tutorial01-uninstall_subtargets-ordered sub-Tutorial02-uninstall_subtargets-ordered sub-Tutorial03-uninstall_subtargets-ordered sub-Tutorial04-uninstall_subtargets-ordered sub-Tutorial05-uninstall_subtargets-ordered sub-Tutorial06-uninstall_subtargets-ordered sub-Tutorial07-uninstall_subtargets-ordered sub-Tutorial08-uninstall_subtargets-ordered sub-Tutorial09-uninstall_subtargets-ordered sub-Tutorial10-uninstall_subtargets-ordered FORCE
|
||||||
|
|
||||||
|
cleanDirs:
|
||||||
|
rm -rf tmp
|
||||||
|
|
||||||
|
subAllclean: clean cleanDirs distclean
|
||||||
|
|
||||||
|
sub-Tutorial01-allclean_ordered: Tutorial01/$(MAKEFILE)
|
||||||
|
cd Tutorial01/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial02-allclean_ordered: Tutorial02/$(MAKEFILE) sub-Tutorial01-allclean_ordered
|
||||||
|
cd Tutorial02/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial03-allclean_ordered: Tutorial03/$(MAKEFILE) sub-Tutorial02-allclean_ordered
|
||||||
|
cd Tutorial03/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial04-allclean_ordered: Tutorial04/$(MAKEFILE) sub-Tutorial03-allclean_ordered
|
||||||
|
cd Tutorial04/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial05-allclean_ordered: Tutorial05/$(MAKEFILE) sub-Tutorial04-allclean_ordered
|
||||||
|
cd Tutorial05/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial06-allclean_ordered: Tutorial06/$(MAKEFILE) sub-Tutorial05-allclean_ordered
|
||||||
|
cd Tutorial06/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial07-allclean_ordered: Tutorial07/$(MAKEFILE) sub-Tutorial06-allclean_ordered
|
||||||
|
cd Tutorial07/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial08-allclean_ordered: Tutorial08/$(MAKEFILE) sub-Tutorial07-allclean_ordered
|
||||||
|
cd Tutorial08/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial09-allclean_ordered: Tutorial09/$(MAKEFILE) sub-Tutorial08-allclean_ordered
|
||||||
|
cd Tutorial09/ && $(MAKE) subAllclean
|
||||||
|
sub-Tutorial10-allclean_ordered: Tutorial10/$(MAKEFILE) sub-Tutorial09-allclean_ordered
|
||||||
|
cd Tutorial10/ && $(MAKE) subAllclean
|
||||||
|
allclean: sub-Tutorial01-allclean_ordered sub-Tutorial02-allclean_ordered sub-Tutorial03-allclean_ordered sub-Tutorial04-allclean_ordered sub-Tutorial05-allclean_ordered sub-Tutorial06-allclean_ordered sub-Tutorial07-allclean_ordered sub-Tutorial08-allclean_ordered sub-Tutorial09-allclean_ordered sub-Tutorial10-allclean_ordered
|
||||||
|
|
||||||
|
sub-Tutorial01-sub_Debug_ordered: Tutorial01/$(MAKEFILE)
|
||||||
|
cd Tutorial01/ && $(MAKE) debug
|
||||||
|
sub-Tutorial02-sub_Debug_ordered: Tutorial02/$(MAKEFILE) sub-Tutorial01-sub_Debug_ordered
|
||||||
|
cd Tutorial02/ && $(MAKE) debug
|
||||||
|
sub-Tutorial03-sub_Debug_ordered: Tutorial03/$(MAKEFILE) sub-Tutorial02-sub_Debug_ordered
|
||||||
|
cd Tutorial03/ && $(MAKE) debug
|
||||||
|
sub-Tutorial04-sub_Debug_ordered: Tutorial04/$(MAKEFILE) sub-Tutorial03-sub_Debug_ordered
|
||||||
|
cd Tutorial04/ && $(MAKE) debug
|
||||||
|
sub-Tutorial05-sub_Debug_ordered: Tutorial05/$(MAKEFILE) sub-Tutorial04-sub_Debug_ordered
|
||||||
|
cd Tutorial05/ && $(MAKE) debug
|
||||||
|
sub-Tutorial06-sub_Debug_ordered: Tutorial06/$(MAKEFILE) sub-Tutorial05-sub_Debug_ordered
|
||||||
|
cd Tutorial06/ && $(MAKE) debug
|
||||||
|
sub-Tutorial07-sub_Debug_ordered: Tutorial07/$(MAKEFILE) sub-Tutorial06-sub_Debug_ordered
|
||||||
|
cd Tutorial07/ && $(MAKE) debug
|
||||||
|
sub-Tutorial08-sub_Debug_ordered: Tutorial08/$(MAKEFILE) sub-Tutorial07-sub_Debug_ordered
|
||||||
|
cd Tutorial08/ && $(MAKE) debug
|
||||||
|
sub-Tutorial09-sub_Debug_ordered: Tutorial09/$(MAKEFILE) sub-Tutorial08-sub_Debug_ordered
|
||||||
|
cd Tutorial09/ && $(MAKE) debug
|
||||||
|
sub-Tutorial10-sub_Debug_ordered: Tutorial10/$(MAKEFILE) sub-Tutorial09-sub_Debug_ordered
|
||||||
|
cd Tutorial10/ && $(MAKE) debug
|
||||||
|
debug: sub-Tutorial01-sub_Debug_ordered sub-Tutorial02-sub_Debug_ordered sub-Tutorial03-sub_Debug_ordered sub-Tutorial04-sub_Debug_ordered sub-Tutorial05-sub_Debug_ordered sub-Tutorial06-sub_Debug_ordered sub-Tutorial07-sub_Debug_ordered sub-Tutorial08-sub_Debug_ordered sub-Tutorial09-sub_Debug_ordered sub-Tutorial10-sub_Debug_ordered
|
||||||
|
|
||||||
|
sub-Tutorial01-sub_Release_ordered: Tutorial01/$(MAKEFILE)
|
||||||
|
cd Tutorial01/ && $(MAKE) release
|
||||||
|
sub-Tutorial02-sub_Release_ordered: Tutorial02/$(MAKEFILE) sub-Tutorial01-sub_Release_ordered
|
||||||
|
cd Tutorial02/ && $(MAKE) release
|
||||||
|
sub-Tutorial03-sub_Release_ordered: Tutorial03/$(MAKEFILE) sub-Tutorial02-sub_Release_ordered
|
||||||
|
cd Tutorial03/ && $(MAKE) release
|
||||||
|
sub-Tutorial04-sub_Release_ordered: Tutorial04/$(MAKEFILE) sub-Tutorial03-sub_Release_ordered
|
||||||
|
cd Tutorial04/ && $(MAKE) release
|
||||||
|
sub-Tutorial05-sub_Release_ordered: Tutorial05/$(MAKEFILE) sub-Tutorial04-sub_Release_ordered
|
||||||
|
cd Tutorial05/ && $(MAKE) release
|
||||||
|
sub-Tutorial06-sub_Release_ordered: Tutorial06/$(MAKEFILE) sub-Tutorial05-sub_Release_ordered
|
||||||
|
cd Tutorial06/ && $(MAKE) release
|
||||||
|
sub-Tutorial07-sub_Release_ordered: Tutorial07/$(MAKEFILE) sub-Tutorial06-sub_Release_ordered
|
||||||
|
cd Tutorial07/ && $(MAKE) release
|
||||||
|
sub-Tutorial08-sub_Release_ordered: Tutorial08/$(MAKEFILE) sub-Tutorial07-sub_Release_ordered
|
||||||
|
cd Tutorial08/ && $(MAKE) release
|
||||||
|
sub-Tutorial09-sub_Release_ordered: Tutorial09/$(MAKEFILE) sub-Tutorial08-sub_Release_ordered
|
||||||
|
cd Tutorial09/ && $(MAKE) release
|
||||||
|
sub-Tutorial10-sub_Release_ordered: Tutorial10/$(MAKEFILE) sub-Tutorial09-sub_Release_ordered
|
||||||
|
cd Tutorial10/ && $(MAKE) release
|
||||||
|
release: sub-Tutorial01-sub_Release_ordered sub-Tutorial02-sub_Release_ordered sub-Tutorial03-sub_Release_ordered sub-Tutorial04-sub_Release_ordered sub-Tutorial05-sub_Release_ordered sub-Tutorial06-sub_Release_ordered sub-Tutorial07-sub_Release_ordered sub-Tutorial08-sub_Release_ordered sub-Tutorial09-sub_Release_ordered sub-Tutorial10-sub_Release_ordered
|
||||||
|
|
||||||
|
mocclean: compiler_moc_header_clean compiler_moc_source_clean
|
||||||
|
|
||||||
|
mocables: compiler_moc_header_make_all compiler_moc_source_make_all
|
||||||
|
install: install_subtargets FORCE
|
||||||
|
|
||||||
|
uninstall: uninstall_subtargets FORCE
|
||||||
|
|
||||||
|
FORCE:
|
||||||
|
|
||||||
19
src/OpenMesh/Examples/Tutorial01/Tutorial01.pro
Normal file
19
src/OpenMesh/Examples/Tutorial01/Tutorial01.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
127
src/OpenMesh/Examples/Tutorial01/cube.cc
Normal file
127
src/OpenMesh/Examples/Tutorial01/cube.cc
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
// OpenMesh
|
||||||
|
// Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen
|
||||||
|
// www.openmesh.org
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// License
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or modify it
|
||||||
|
// under the terms of the GNU Library General Public License as published
|
||||||
|
// by the Free Software Foundation, version 2.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful, but
|
||||||
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Library General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Library General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// $Revision: 83 $
|
||||||
|
// $Date: 2009-02-27 17:31:45 +0100 (Fri, 27 Feb 2009) $
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef OpenMesh::PolyMesh_ArrayKernelT<> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Build a simple cube and write it to std::cout
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
// generate vertices
|
||||||
|
|
||||||
|
MyMesh::VertexHandle vhandle[8];
|
||||||
|
|
||||||
|
vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1));
|
||||||
|
vhandle[1] = mesh.add_vertex(MyMesh::Point( 1, -1, 1));
|
||||||
|
vhandle[2] = mesh.add_vertex(MyMesh::Point( 1, 1, 1));
|
||||||
|
vhandle[3] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
|
||||||
|
vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
|
||||||
|
vhandle[5] = mesh.add_vertex(MyMesh::Point( 1, -1, -1));
|
||||||
|
vhandle[6] = mesh.add_vertex(MyMesh::Point( 1, 1, -1));
|
||||||
|
vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
|
||||||
|
|
||||||
|
|
||||||
|
// generate (quadrilateral) faces
|
||||||
|
|
||||||
|
std::vector<MyMesh::VertexHandle> face_vhandles;
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
|
||||||
|
// write mesh to output.obj
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if ( !OpenMesh::IO::write_mesh(mesh, "output.off") )
|
||||||
|
{
|
||||||
|
std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( std::exception& x )
|
||||||
|
{
|
||||||
|
std::cerr << x.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial02/Tutorial02.pro
Normal file
19
src/OpenMesh/Examples/Tutorial02/Tutorial02.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
76
src/OpenMesh/Examples/Tutorial02/smooth.cc
Normal file
76
src/OpenMesh/Examples/Tutorial02/smooth.cc
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
|
||||||
|
// check command line options
|
||||||
|
if (argc != 4)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " #iterations infile outfile\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// read mesh from stdin
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh, argv[2]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Cannot read mesh from " << argv[2] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// this vector stores the computed centers of gravity
|
||||||
|
std::vector<MyMesh::Point> cogs;
|
||||||
|
std::vector<MyMesh::Point>::iterator cog_it;
|
||||||
|
cogs.reserve(mesh.n_vertices());
|
||||||
|
|
||||||
|
|
||||||
|
// smoothing mesh argv[1] times
|
||||||
|
MyMesh::VertexIter v_it, v_end(mesh.vertices_end());
|
||||||
|
MyMesh::VertexVertexIter vv_it;
|
||||||
|
MyMesh::Point cog;
|
||||||
|
MyMesh::Scalar valence;
|
||||||
|
unsigned int i, N(atoi(argv[1]));
|
||||||
|
|
||||||
|
|
||||||
|
for (i=0; i < N; ++i)
|
||||||
|
{
|
||||||
|
cogs.clear();
|
||||||
|
for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it)
|
||||||
|
{
|
||||||
|
cog[0] = cog[1] = cog[2] = valence = 0.0;
|
||||||
|
|
||||||
|
for (vv_it=mesh.vv_iter( v_it ); vv_it; ++vv_it)
|
||||||
|
{
|
||||||
|
cog += mesh.point( vv_it );
|
||||||
|
++valence;
|
||||||
|
}
|
||||||
|
|
||||||
|
cogs.push_back(cog / valence);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (v_it=mesh.vertices_begin(), cog_it=cogs.begin();
|
||||||
|
v_it!=v_end; ++v_it, ++cog_it)
|
||||||
|
if ( !mesh.is_boundary( v_it ) )
|
||||||
|
mesh.set_point( v_it, *cog_it );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// write mesh to stdout
|
||||||
|
if ( ! OpenMesh::IO::write_mesh(mesh, argv[3]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: cannot write mesh to " << argv[3] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial03/Tutorial03.pro
Normal file
19
src/OpenMesh/Examples/Tutorial03/Tutorial03.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
74
src/OpenMesh/Examples/Tutorial03/smooth.cc
Normal file
74
src/OpenMesh/Examples/Tutorial03/smooth.cc
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
// --------------------
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
|
||||||
|
// check command line options
|
||||||
|
if (argc != 4)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " #iterations infile outfile\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// read mesh from stdin
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh, argv[2]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Cannot read mesh from " << argv[2] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// this vertex property stores the computed centers of gravity
|
||||||
|
OpenMesh::VPropHandleT<MyMesh::Point> cogs;
|
||||||
|
mesh.add_property(cogs);
|
||||||
|
|
||||||
|
// smoothing mesh argv[1] times
|
||||||
|
MyMesh::VertexIter v_it, v_end(mesh.vertices_end());
|
||||||
|
MyMesh::VertexVertexIter vv_it;
|
||||||
|
MyMesh::Point cog;
|
||||||
|
MyMesh::Scalar valence;
|
||||||
|
unsigned int i, N(atoi(argv[1]));
|
||||||
|
|
||||||
|
|
||||||
|
for (i=0; i < N; ++i)
|
||||||
|
{
|
||||||
|
for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it)
|
||||||
|
{
|
||||||
|
mesh.property(cogs,v_it).vectorize(0.0f);
|
||||||
|
valence = 0;
|
||||||
|
|
||||||
|
for (vv_it=mesh.vv_iter( v_it ); vv_it; ++vv_it)
|
||||||
|
{
|
||||||
|
mesh.property(cogs,v_it) += mesh.point( vv_it );
|
||||||
|
++valence;
|
||||||
|
}
|
||||||
|
mesh.property(cogs,v_it) /= valence;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it)
|
||||||
|
if ( !mesh.is_boundary( v_it ) )
|
||||||
|
mesh.set_point( v_it, mesh.property(cogs,v_it) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// write mesh to stdout
|
||||||
|
if ( ! OpenMesh::IO::write_mesh(mesh, argv[3]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: cannot write mesh to " << argv[3] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial04/Tutorial04.pro
Normal file
19
src/OpenMesh/Examples/Tutorial04/Tutorial04.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
59
src/OpenMesh/Examples/Tutorial04/smooth.cc
Normal file
59
src/OpenMesh/Examples/Tutorial04/smooth.cc
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
// --------------------
|
||||||
|
#include "smooth_algo.hh"
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef DOXY_IGNORE_THIS
|
||||||
|
|
||||||
|
struct MyTraits : public OpenMesh::DefaultTraits
|
||||||
|
{
|
||||||
|
HalfedgeAttributes(OpenMesh::Attributes::PrevHalfedge);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<MyTraits> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
|
||||||
|
// check command line options
|
||||||
|
if (argc != 4)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " #iterations infile outfile\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// read mesh from stdin
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh, argv[2]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Cannot read mesh from " << argv[2] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// smoothing mesh argv[1] times
|
||||||
|
SmootherT<MyMesh> smoother(mesh);
|
||||||
|
smoother.smooth(atoi(argv[1]));
|
||||||
|
|
||||||
|
|
||||||
|
// write mesh to stdout
|
||||||
|
if ( ! OpenMesh::IO::write_mesh(mesh, argv[3]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: cannot write mesh to " << argv[3] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
106
src/OpenMesh/Examples/Tutorial04/smooth_algo.hh
Normal file
106
src/OpenMesh/Examples/Tutorial04/smooth_algo.hh
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
#include <algorithm>
|
||||||
|
#include <OpenMesh/Core/Utils/Property.hh>
|
||||||
|
|
||||||
|
#ifndef DOXY_IGNORE_THIS
|
||||||
|
|
||||||
|
template <class Mesh> class SmootherT
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef typename Mesh::Point cog_t;
|
||||||
|
typedef OpenMesh::VPropHandleT< cog_t > Property_cog;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
// construct with a given mesh
|
||||||
|
SmootherT(Mesh& _mesh)
|
||||||
|
: mesh_(_mesh)
|
||||||
|
{
|
||||||
|
mesh_.add_property( cog_ );
|
||||||
|
}
|
||||||
|
|
||||||
|
~SmootherT()
|
||||||
|
{
|
||||||
|
mesh_.remove_property( cog_ );
|
||||||
|
}
|
||||||
|
|
||||||
|
// smooth mesh _iterations times
|
||||||
|
void smooth(unsigned int _iterations)
|
||||||
|
{
|
||||||
|
for (unsigned int i=0; i < _iterations; ++i)
|
||||||
|
{
|
||||||
|
std::for_each(mesh_.vertices_begin(),
|
||||||
|
mesh_.vertices_end(),
|
||||||
|
ComputeCOG(mesh_, cog_));
|
||||||
|
|
||||||
|
std::for_each(mesh_.vertices_begin(),
|
||||||
|
mesh_.vertices_end(),
|
||||||
|
SetCOG(mesh_, cog_));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
//--- private classes ---
|
||||||
|
|
||||||
|
class ComputeCOG
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ComputeCOG(Mesh& _mesh, Property_cog& _cog)
|
||||||
|
: mesh_(_mesh), cog_(_cog)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void operator()(typename Mesh::Vertex& _v)
|
||||||
|
{
|
||||||
|
typename Mesh::VertexHandle vh( mesh_.handle(_v) );
|
||||||
|
typename Mesh::VertexVertexIter vv_it;
|
||||||
|
typename Mesh::Scalar valence(0.0);
|
||||||
|
|
||||||
|
mesh_.property(cog_, vh) = typename Mesh::Point(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
for (vv_it=mesh_.vv_iter(vh); vv_it; ++vv_it)
|
||||||
|
{
|
||||||
|
mesh_.property(cog_, vh) += mesh_.point( vv_it );
|
||||||
|
++valence;
|
||||||
|
}
|
||||||
|
|
||||||
|
mesh_.property(cog_, mesh_.handle(_v) ) /= valence;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Mesh& mesh_;
|
||||||
|
Property_cog& cog_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class SetCOG
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SetCOG(Mesh& _mesh, Property_cog& _cog)
|
||||||
|
: mesh_(_mesh), cog_(_cog)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void operator()(typename Mesh::Vertex& _v)
|
||||||
|
{
|
||||||
|
typename Mesh::VertexHandle vh(mesh_.handle(_v));
|
||||||
|
|
||||||
|
if (!mesh_.is_boundary(vh))
|
||||||
|
mesh_.set_point( vh, mesh_.property(cog_, vh) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
Mesh& mesh_;
|
||||||
|
Property_cog& cog_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
//--- private elements ---
|
||||||
|
|
||||||
|
Mesh& mesh_;
|
||||||
|
Property_cog cog_;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
19
src/OpenMesh/Examples/Tutorial05/Tutorial05.pro
Normal file
19
src/OpenMesh/Examples/Tutorial05/Tutorial05.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
71
src/OpenMesh/Examples/Tutorial05/properties.cc
Normal file
71
src/OpenMesh/Examples/Tutorial05/properties.cc
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#include <iostream>
|
||||||
|
// --------------------
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
|
||||||
|
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
if (argc!=2)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " <input>\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// request vertex normals, so the mesh reader can use normal information
|
||||||
|
// if available
|
||||||
|
mesh.request_vertex_normals();
|
||||||
|
|
||||||
|
// assure we have vertex normals
|
||||||
|
if (!mesh.has_vertex_normals())
|
||||||
|
{
|
||||||
|
std::cerr << "ERROR: Standard vertex property 'Normals' not available!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
OpenMesh::IO::Options opt;
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh,argv[1], opt))
|
||||||
|
{
|
||||||
|
std::cerr << "Error loading mesh from file " << argv[1] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the file did not provide vertex normals, then calculate them
|
||||||
|
if ( !opt.check( OpenMesh::IO::Options::VertexNormal ) )
|
||||||
|
{
|
||||||
|
// we need face normals to update the vertex normals
|
||||||
|
mesh.request_face_normals();
|
||||||
|
|
||||||
|
// let the mesh update the normals
|
||||||
|
mesh.update_normals();
|
||||||
|
|
||||||
|
// dispose the face normals, as we don't need them anymore
|
||||||
|
mesh.release_face_normals();
|
||||||
|
}
|
||||||
|
|
||||||
|
// move all vertices one unit length along it's normal direction
|
||||||
|
for (MyMesh::VertexIter v_it = mesh.vertices_begin();
|
||||||
|
v_it != mesh.vertices_end(); ++v_it)
|
||||||
|
{
|
||||||
|
std::cout << "Vertex #" << v_it << ": " << mesh.point( v_it );
|
||||||
|
mesh.set_point( v_it, mesh.point(v_it)+mesh.normal(v_it) );
|
||||||
|
std::cout << " moved to " << mesh.point( v_it ) << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// don't need the normals anymore? Remove them!
|
||||||
|
mesh.release_vertex_normals();
|
||||||
|
|
||||||
|
// just check if it really works
|
||||||
|
if (mesh.has_vertex_normals())
|
||||||
|
{
|
||||||
|
std::cerr << "Ouch! ERROR! Shouldn't have any vertex normals anymore!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial06/Tutorial06.pro
Normal file
19
src/OpenMesh/Examples/Tutorial06/Tutorial06.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
94
src/OpenMesh/Examples/Tutorial06/attributes.cc
Normal file
94
src/OpenMesh/Examples/Tutorial06/attributes.cc
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <typeinfo>
|
||||||
|
// --------------------
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Core/Geometry/VectorT.hh>
|
||||||
|
|
||||||
|
#ifndef DOXY_IGNORE_THIS
|
||||||
|
|
||||||
|
// Define my personal traits
|
||||||
|
struct MyTraits : OpenMesh::DefaultTraits
|
||||||
|
{
|
||||||
|
// Let Point and Normal be a vector of doubles
|
||||||
|
typedef OpenMesh::Vec3d Point;
|
||||||
|
typedef OpenMesh::Vec3d Normal;
|
||||||
|
|
||||||
|
// Already defined in OpenMesh::DefaultTraits
|
||||||
|
// HalfedgeAttributes( OpenMesh::Attributes::PrevHalfedge );
|
||||||
|
|
||||||
|
// Uncomment next line to disable attribute PrevHalfedge
|
||||||
|
// HalfedgeAttributes( OpenMesh::Attributes::None );
|
||||||
|
//
|
||||||
|
// or
|
||||||
|
//
|
||||||
|
// HalfedgeAttributes( 0 );
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Define my mesh with the new traits!
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<MyTraits> MyMesh;
|
||||||
|
|
||||||
|
// ------------------------------------------------------------------ main ----
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
if (argc!=2)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " <input>\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Just make sure that point element type is double
|
||||||
|
if ( typeid( OpenMesh::vector_traits<MyMesh::Point>::value_type )
|
||||||
|
!= typeid(double) )
|
||||||
|
{
|
||||||
|
std::cerr << "Ouch! ERROR! Data type is wrong!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure that normal element type is double
|
||||||
|
if ( typeid( OpenMesh::vector_traits<MyMesh::Normal>::value_type )
|
||||||
|
!= typeid(double) )
|
||||||
|
{
|
||||||
|
std::cerr << "Ouch! ERROR! Data type is wrong!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add vertex normals as default property (ref. previous tutorial)
|
||||||
|
mesh.request_vertex_normals();
|
||||||
|
|
||||||
|
// Add face normals as default property
|
||||||
|
mesh.request_face_normals();
|
||||||
|
|
||||||
|
// load a mesh
|
||||||
|
OpenMesh::IO::Options opt;
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh,argv[1], opt))
|
||||||
|
{
|
||||||
|
std::cerr << "Error loading mesh from file " << argv[1] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the file did not provide vertex normals, then calculate them
|
||||||
|
if ( !opt.check( OpenMesh::IO::Options::VertexNormal ) &&
|
||||||
|
mesh.has_face_normals() && mesh.has_vertex_normals() )
|
||||||
|
{
|
||||||
|
// let the mesh update the normals
|
||||||
|
mesh.update_normals();
|
||||||
|
}
|
||||||
|
|
||||||
|
// move all vertices one unit length along it's normal direction
|
||||||
|
for (MyMesh::VertexIter v_it = mesh.vertices_begin();
|
||||||
|
v_it != mesh.vertices_end(); ++v_it)
|
||||||
|
{
|
||||||
|
std::cout << "Vertex #" << v_it << ": " << mesh.point( v_it );
|
||||||
|
mesh.set_point( v_it, mesh.point(v_it)+mesh.normal(v_it) );
|
||||||
|
std::cout << " moved to " << mesh.point( v_it ) << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial07/Tutorial07.pro
Normal file
19
src/OpenMesh/Examples/Tutorial07/Tutorial07.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
127
src/OpenMesh/Examples/Tutorial07/smooth.cc
Normal file
127
src/OpenMesh/Examples/Tutorial07/smooth.cc
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/Traits.hh>
|
||||||
|
|
||||||
|
struct MyTraits : public OpenMesh::DefaultTraits
|
||||||
|
{
|
||||||
|
// store barycenter of neighbors in this member
|
||||||
|
VertexTraits
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
Point cog_;
|
||||||
|
public:
|
||||||
|
|
||||||
|
VertexT() : cog_( Point(0.0f, 0.0f, 0.0f ) ) { }
|
||||||
|
|
||||||
|
const Point& cog() const { return cog_; }
|
||||||
|
void set_cog(const Point& _p) { cog_ = _p; }
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<MyTraits> MyMesh;
|
||||||
|
typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh2;
|
||||||
|
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
#define SIZEOF( entity,b ) \
|
||||||
|
std::cout << _prefix << "size of " << #entity << ": " \
|
||||||
|
<< sizeof( entity ) << std::endl; \
|
||||||
|
b += sizeof( entity )
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
void print_size(const std::string& _prefix = "")
|
||||||
|
{
|
||||||
|
size_t total=0;
|
||||||
|
SIZEOF(typename Mesh::Vertex, total);
|
||||||
|
SIZEOF(typename Mesh::Halfedge, total);
|
||||||
|
SIZEOF(typename Mesh::Edge, total);
|
||||||
|
SIZEOF(typename Mesh::Face, total);
|
||||||
|
std::cout << _prefix << "total: " << total << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef SIZEOF
|
||||||
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
// check command line options
|
||||||
|
if (argc < 4 || argc > 5)
|
||||||
|
{
|
||||||
|
std::cerr << "Usage: " << argv[0] << " [-s] #iterations infile outfile\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int idx=2;
|
||||||
|
|
||||||
|
// display size of entities of the enhanced and the default mesh type
|
||||||
|
// when commandline option '-s' has been used.
|
||||||
|
if (argc == 5)
|
||||||
|
{
|
||||||
|
if (std::string("-s")==argv[idx-1])
|
||||||
|
{
|
||||||
|
std::cout << "Enhanced mesh size statistics\n";
|
||||||
|
print_size<MyMesh>(" ");
|
||||||
|
|
||||||
|
std::cout << "Default mesh size statistics\n";
|
||||||
|
print_size<MyMesh2>(" ");
|
||||||
|
}
|
||||||
|
// else ignore!
|
||||||
|
++idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// read mesh from stdin
|
||||||
|
std::cout<< " Input mesh: " << argv[idx] << std::endl;
|
||||||
|
if ( ! OpenMesh::IO::read_mesh(mesh, argv[idx]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: Cannot read mesh from " << argv[idx] << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// smoothing mesh argv[1] times
|
||||||
|
MyMesh::VertexIter v_it, v_end(mesh.vertices_end());
|
||||||
|
MyMesh::VertexVertexIter vv_it;
|
||||||
|
MyMesh::Point cog;
|
||||||
|
MyMesh::Scalar valence;
|
||||||
|
unsigned int i, N(atoi(argv[idx-1]));
|
||||||
|
|
||||||
|
std::cout<< "Smooth mesh " << N << " times\n";
|
||||||
|
|
||||||
|
for (i=0; i < N; ++i)
|
||||||
|
{
|
||||||
|
for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it)
|
||||||
|
{
|
||||||
|
cog[0] = cog[1] = cog[2] = valence = 0.0;
|
||||||
|
|
||||||
|
for (vv_it=mesh.vv_iter(v_it.handle()); vv_it; ++vv_it)
|
||||||
|
{
|
||||||
|
cog += mesh.point( vv_it.handle() );
|
||||||
|
++valence;
|
||||||
|
}
|
||||||
|
|
||||||
|
mesh.data(v_it).set_cog(cog / valence);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (v_it=mesh.vertices_begin(); v_it!=v_end; ++v_it)
|
||||||
|
if (!mesh.is_boundary(v_it.handle()))
|
||||||
|
mesh.set_point( v_it.handle(), mesh.data(v_it).cog());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// write mesh to stdout
|
||||||
|
std::cout<< "Output mesh: " << argv[idx+1] << std::endl;
|
||||||
|
|
||||||
|
if ( ! OpenMesh::IO::write_mesh(mesh, argv[idx+1]) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error: cannot write mesh to " << argv[idx+1] << std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial08/Tutorial08.pro
Normal file
19
src/OpenMesh/Examples/Tutorial08/Tutorial08.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
169
src/OpenMesh/Examples/Tutorial08/delete_geometry.cc
Normal file
169
src/OpenMesh/Examples/Tutorial08/delete_geometry.cc
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
//=============================================================================
|
||||||
|
//
|
||||||
|
// OpenMesh
|
||||||
|
// Copyright (C) 2001-2005 by Computer Graphics Group, RWTH Aachen
|
||||||
|
// www.openmesh.org
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// License
|
||||||
|
//
|
||||||
|
// This library is free software; you can redistribute it and/or modify it
|
||||||
|
// under the terms of the GNU Library General Public License as published
|
||||||
|
// by the Free Software Foundation, version 2.
|
||||||
|
//
|
||||||
|
// This library is distributed in the hope that it will be useful, but
|
||||||
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
// Library General Public License for more details.
|
||||||
|
//
|
||||||
|
// You should have received a copy of the GNU Library General Public
|
||||||
|
// License along with this library; if not, write to the Free Software
|
||||||
|
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
//
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
//
|
||||||
|
// $Revision: 83 $
|
||||||
|
// $Date: 2009-02-27 17:31:45 +0100 (Fri, 27 Feb 2009) $
|
||||||
|
//
|
||||||
|
//=============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Core/System/config.h>
|
||||||
|
#include <OpenMesh/Core/Mesh/Status.hh>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
struct MyTraits : public OpenMesh::DefaultTraits
|
||||||
|
{
|
||||||
|
VertexAttributes(OpenMesh::Attributes::Status);
|
||||||
|
FaceAttributes(OpenMesh::Attributes::Status);
|
||||||
|
EdgeAttributes(OpenMesh::Attributes::Status);
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
typedef OpenMesh::PolyMesh_ArrayKernelT<MyTraits> MyMesh;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Build a simple cube and delete it except one face
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
|
||||||
|
// generate vertices
|
||||||
|
|
||||||
|
MyMesh::VertexHandle vhandle[8];
|
||||||
|
MyMesh::FaceHandle fhandle[6];
|
||||||
|
|
||||||
|
vhandle[0] = mesh.add_vertex(MyMesh::Point(-1, -1, 1));
|
||||||
|
vhandle[1] = mesh.add_vertex(MyMesh::Point( 1, -1, 1));
|
||||||
|
vhandle[2] = mesh.add_vertex(MyMesh::Point( 1, 1, 1));
|
||||||
|
vhandle[3] = mesh.add_vertex(MyMesh::Point(-1, 1, 1));
|
||||||
|
vhandle[4] = mesh.add_vertex(MyMesh::Point(-1, -1, -1));
|
||||||
|
vhandle[5] = mesh.add_vertex(MyMesh::Point( 1, -1, -1));
|
||||||
|
vhandle[6] = mesh.add_vertex(MyMesh::Point( 1, 1, -1));
|
||||||
|
vhandle[7] = mesh.add_vertex(MyMesh::Point(-1, 1, -1));
|
||||||
|
|
||||||
|
|
||||||
|
// generate (quadrilateral) faces
|
||||||
|
|
||||||
|
std::vector<MyMesh::VertexHandle> tmp_face_vhandles;
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[0]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[1]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[2]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[3]);
|
||||||
|
fhandle[0] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[7]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[6]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[5]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[4]);
|
||||||
|
fhandle[1] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[1]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[0]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[4]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[5]);
|
||||||
|
fhandle[2] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[2]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[1]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[5]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[6]);
|
||||||
|
fhandle[3] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[3]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[2]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[6]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[7]);
|
||||||
|
fhandle[4] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
|
||||||
|
tmp_face_vhandles.clear();
|
||||||
|
tmp_face_vhandles.push_back(vhandle[0]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[3]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[7]);
|
||||||
|
tmp_face_vhandles.push_back(vhandle[4]);
|
||||||
|
fhandle[5] = mesh.add_face(tmp_face_vhandles);
|
||||||
|
|
||||||
|
// And now delete all faces and vertices
|
||||||
|
// except face (vh[7], vh[6], vh[5], vh[4])
|
||||||
|
// whose handle resides in fhandle[1]
|
||||||
|
|
||||||
|
|
||||||
|
// Delete face 0
|
||||||
|
mesh.delete_face(fhandle[0], false);
|
||||||
|
// ... face 2
|
||||||
|
mesh.delete_face(fhandle[2], false);
|
||||||
|
// ... face 3
|
||||||
|
mesh.delete_face(fhandle[3], false);
|
||||||
|
// ... face 4
|
||||||
|
mesh.delete_face(fhandle[4], false);
|
||||||
|
// ... face 5
|
||||||
|
mesh.delete_face(fhandle[5], false);
|
||||||
|
|
||||||
|
|
||||||
|
// If isolated vertices result in a face deletion
|
||||||
|
// they have to be deleted manually. If you want this
|
||||||
|
// to happen automatically, change the second parameter
|
||||||
|
// to true.
|
||||||
|
|
||||||
|
// Now delete the isolated vertices 0, 1, 2 and 3
|
||||||
|
mesh.delete_vertex(vhandle[0], false);
|
||||||
|
mesh.delete_vertex(vhandle[1], false);
|
||||||
|
mesh.delete_vertex(vhandle[2], false);
|
||||||
|
mesh.delete_vertex(vhandle[3], false);
|
||||||
|
|
||||||
|
// Delete all elements that are marked as deleted
|
||||||
|
// from memory.
|
||||||
|
mesh.garbage_collection();
|
||||||
|
|
||||||
|
// write mesh to output.obj
|
||||||
|
try {
|
||||||
|
if ( !OpenMesh::IO::write_mesh(mesh, "output.off") ) {
|
||||||
|
std::cerr << "Cannot write mesh to file 'output.off'" << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( std::exception& x )
|
||||||
|
{
|
||||||
|
std::cerr << x.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
19
src/OpenMesh/Examples/Tutorial09/Tutorial09.pro
Normal file
19
src/OpenMesh/Examples/Tutorial09/Tutorial09.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
297
src/OpenMesh/Examples/Tutorial09/io_options.cc
Normal file
297
src/OpenMesh/Examples/Tutorial09/io_options.cc
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <iterator>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Tools/Utils/getopt.h>
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using namespace OpenMesh;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef TriMesh_ArrayKernelT<> MyMesh;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define CHKROPT( Option ) \
|
||||||
|
std::cout << " provides " << #Option \
|
||||||
|
<< (ropt.check(IO::Options:: Option)?": yes\n":": no\n")
|
||||||
|
|
||||||
|
#define CHKWOPT( Option ) \
|
||||||
|
std::cout << " write " << #Option \
|
||||||
|
<< (wopt.check(IO::Options:: Option)?": yes\n":": no\n")
|
||||||
|
|
||||||
|
#define MESHOPT( msg, tf ) \
|
||||||
|
std::cout << " " << msg << ": " << ((tf)?"yes\n":"no\n")
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void parse_commandline( int _argc, char **_argv, MyMesh& _mesh,
|
||||||
|
IO::Options &ropt, IO::Options &wopt );
|
||||||
|
|
||||||
|
void usage_and_exit(int xcode);
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int main(int argc, char **argv)
|
||||||
|
{
|
||||||
|
MyMesh mesh;
|
||||||
|
IO::Options ropt, wopt;
|
||||||
|
|
||||||
|
// -------------------- evaluate commandline
|
||||||
|
|
||||||
|
parse_commandline( argc, argv, mesh, ropt, wopt );
|
||||||
|
|
||||||
|
// -------------------- read mesh
|
||||||
|
|
||||||
|
if ( ! IO::read_mesh(mesh,argv[optind], ropt))
|
||||||
|
{
|
||||||
|
std::cerr << "Error loading mesh from file " << argv[optind] << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- show options
|
||||||
|
|
||||||
|
std::cout << "File " << argv[optind] << std::endl;
|
||||||
|
|
||||||
|
std::cout << " is binary: "
|
||||||
|
<< (ropt.check(IO::Options::Binary) ? " yes\n" : " no\n");
|
||||||
|
|
||||||
|
std::cout << " byte order: ";
|
||||||
|
if (ropt.check(IO::Options::Swap))
|
||||||
|
std::cout << "swapped\n";
|
||||||
|
else if (ropt.check(IO::Options::LSB))
|
||||||
|
std::cout << "little endian\n";
|
||||||
|
else if (ropt.check(IO::Options::MSB))
|
||||||
|
std::cout << "big endian\n";
|
||||||
|
else
|
||||||
|
std::cout << "don't care\n";
|
||||||
|
|
||||||
|
std::cout << " provides VertexNormal"
|
||||||
|
<< ( // strange layout for doxygen
|
||||||
|
ropt.check(IO::Options::VertexNormal)
|
||||||
|
? ": yes\n":": no\n");
|
||||||
|
CHKROPT( VertexColor );
|
||||||
|
CHKROPT( VertexTexCoord );
|
||||||
|
CHKROPT( FaceNormal );
|
||||||
|
CHKROPT( FaceColor );
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------- mesh stats
|
||||||
|
|
||||||
|
std::cout << "# Vertices: " << mesh.n_vertices() << std::endl;
|
||||||
|
std::cout << "# Edges : " << mesh.n_faces() << std::endl;
|
||||||
|
std::cout << "# Faces : " << mesh.n_faces() << std::endl;
|
||||||
|
|
||||||
|
|
||||||
|
// -------------------- show write options
|
||||||
|
|
||||||
|
std::cout << "Selected write options:\n";
|
||||||
|
std::cout << " use binary: "
|
||||||
|
<< (wopt.check(IO::Options::Binary) ? " yes\n" : " no\n");
|
||||||
|
|
||||||
|
std::cout << " byte order: ";
|
||||||
|
if (wopt.check(IO::Options::Swap))
|
||||||
|
std::cout << "swapped\n";
|
||||||
|
else if (wopt.check(IO::Options::LSB))
|
||||||
|
std::cout << "little endian\n";
|
||||||
|
else if (wopt.check(IO::Options::MSB))
|
||||||
|
std::cout << "big endian\n";
|
||||||
|
else
|
||||||
|
std::cout << "don't care\n";
|
||||||
|
|
||||||
|
std::cout << " write VertexNormal"
|
||||||
|
<< (wopt.check(IO::Options::VertexNormal) ? ": yes\n":": no\n");
|
||||||
|
CHKWOPT( VertexColor );
|
||||||
|
CHKWOPT( VertexTexCoord );
|
||||||
|
CHKWOPT( FaceNormal );
|
||||||
|
CHKWOPT( FaceColor );
|
||||||
|
|
||||||
|
// -------------------- show mesh capabilities
|
||||||
|
|
||||||
|
std::cout << "Mesh supports\n";
|
||||||
|
MESHOPT("vertex normals", mesh.has_vertex_normals());
|
||||||
|
MESHOPT("vertex colors", mesh.has_vertex_colors());
|
||||||
|
MESHOPT("texcoords", mesh.has_vertex_texcoords2D());
|
||||||
|
MESHOPT("face normals", mesh.has_face_normals());
|
||||||
|
MESHOPT("face colors", mesh.has_face_colors());
|
||||||
|
|
||||||
|
// -------------------- write mesh
|
||||||
|
|
||||||
|
std::cout << "Write mesh to " << argv[optind+1] << "..";
|
||||||
|
if ( !IO::write_mesh( mesh, argv[optind+1], wopt ) )
|
||||||
|
{
|
||||||
|
std::cerr << "Error" << std::endl;
|
||||||
|
std::cerr << "Possible reasons:\n";
|
||||||
|
std::cerr << "1. Chosen format cannot handle an option!\n";
|
||||||
|
std::cerr << "2. Mesh does not provide necessary information!\n";
|
||||||
|
std::cerr << "3. Or simply cannot open file for writing!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
std::cout << "Ok.\n";
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void parse_commandline( int _argc, char **_argv, MyMesh& _mesh,
|
||||||
|
IO::Options &ropt, IO::Options &wopt )
|
||||||
|
{
|
||||||
|
int c;
|
||||||
|
while ((c=getopt(_argc, _argv, "bhsBF:LMSV:X:"))!=-1)
|
||||||
|
{
|
||||||
|
switch(c)
|
||||||
|
{
|
||||||
|
// -------------------- read options
|
||||||
|
|
||||||
|
// force binary input
|
||||||
|
case 'b':
|
||||||
|
ropt += IO::Options::Binary;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// force swapping the byte order, when reading a binary file
|
||||||
|
case 's':
|
||||||
|
ropt += IO::Options::Swap;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// -------------------- write options
|
||||||
|
|
||||||
|
// Write binary variant of format if possible
|
||||||
|
case 'B':
|
||||||
|
wopt += IO::Options::Binary;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case 'F':
|
||||||
|
for(size_t i=0; optarg[i]; ++i)
|
||||||
|
switch(optarg[i]) {
|
||||||
|
case 'n' : wopt += IO::Options::FaceNormal; break;
|
||||||
|
case 'c' : wopt += IO::Options::FaceColor; break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Use little endian when writing binary data
|
||||||
|
case 'L':
|
||||||
|
wopt += IO::Options::LSB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Use big endian when writing binary data
|
||||||
|
case 'M':
|
||||||
|
wopt += IO::Options::MSB;
|
||||||
|
break;
|
||||||
|
|
||||||
|
// Swap byte order when writing binary data
|
||||||
|
case 'S':
|
||||||
|
wopt += IO::Options::Swap;
|
||||||
|
break;
|
||||||
|
|
||||||
|
//
|
||||||
|
case 'V':
|
||||||
|
{
|
||||||
|
for(size_t i=0; optarg[i]; ++i)
|
||||||
|
switch(optarg[i]) {
|
||||||
|
case 'n' : // dont't change layout!!
|
||||||
|
wopt += IO::Options::VertexNormal;
|
||||||
|
break;
|
||||||
|
case 't' : wopt += IO::Options::VertexTexCoord; break;
|
||||||
|
case 'c' : wopt += IO::Options::VertexColor; break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- request mesh' standard properties
|
||||||
|
case 'X':
|
||||||
|
{
|
||||||
|
char entity='\0';
|
||||||
|
for(size_t i=0; optarg[i]; ++i)
|
||||||
|
switch(optarg[i]) {
|
||||||
|
case 'v':
|
||||||
|
case 'f': entity = optarg[i]; break;
|
||||||
|
case 'n':
|
||||||
|
switch(entity) {
|
||||||
|
case 'v': _mesh.request_vertex_normals(); break;
|
||||||
|
case 'f': _mesh.request_face_normals(); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 'c':
|
||||||
|
switch(entity) {
|
||||||
|
case 'v': _mesh.request_vertex_colors(); break;
|
||||||
|
case 'f': _mesh.request_face_colors(); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
switch(entity) {
|
||||||
|
case 'v': _mesh.request_vertex_texcoords2D(); break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// -------------------- help
|
||||||
|
case 'h':
|
||||||
|
usage_and_exit(0);
|
||||||
|
default:
|
||||||
|
usage_and_exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( _argc-optind != 2)
|
||||||
|
usage_and_exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void usage_and_exit(int xcode)
|
||||||
|
{
|
||||||
|
std::ostream &os = xcode ? std::cerr : std::cout;
|
||||||
|
|
||||||
|
os << "Usage: io_options [Options] <input> <output>\n"
|
||||||
|
<< std::endl;
|
||||||
|
os << " Read and write a mesh, using OpenMesh::IO::Options\n"
|
||||||
|
<< std::endl;
|
||||||
|
os << "Options:\n"
|
||||||
|
<< std::endl;
|
||||||
|
os << "a) read options\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -b\n"
|
||||||
|
<< "\tAssume input file is a binary file\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -s\n"
|
||||||
|
<< "\tSwap byte order when reading a binary file!\n"
|
||||||
|
<< std::endl;
|
||||||
|
os << "b) write options\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -B\n"
|
||||||
|
<< "\tWrite binary data\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -S\n"
|
||||||
|
<< "\tSwap byte order, when writing binary data\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -M/-L\n"
|
||||||
|
<< "\tUse MSB/LSB byte ordering, when writing binary data\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -V{n|t|c}\n"
|
||||||
|
<< "\tWrite vertex normals, texcoords, and/or colors\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -F{n|c}\n"
|
||||||
|
<< "\tWrite face normals, and/or colors\n"
|
||||||
|
<< std::endl;
|
||||||
|
os << "c) Mesh properties\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -Xv{n|c|t}\n"
|
||||||
|
<< "\tRequest vertex property normals|colors|texcoords\n"
|
||||||
|
<< std::endl
|
||||||
|
<< " -Xf{n|c}\n"
|
||||||
|
<< "\tRequest face property normals|colors\n"
|
||||||
|
<< std::endl;
|
||||||
|
exit(xcode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// end of file
|
||||||
|
// ============================================================================
|
||||||
19
src/OpenMesh/Examples/Tutorial10/Tutorial10.pro
Normal file
19
src/OpenMesh/Examples/Tutorial10/Tutorial10.pro
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
include( $$TOPDIR/qmake/all.include )
|
||||||
|
|
||||||
|
INCLUDEPATH += ../../..
|
||||||
|
|
||||||
|
Application()
|
||||||
|
openmesh()
|
||||||
|
|
||||||
|
DIRECTORIES = .
|
||||||
|
|
||||||
|
# Input
|
||||||
|
HEADERS += $$getFilesFromDir($$DIRECTORIES,*.hh)
|
||||||
|
SOURCES += $$getFilesFromDir($$DIRECTORIES,*.cc)
|
||||||
|
FORMS += $$getFilesFromDir($$DIRECTORIES,*.ui)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
123
src/OpenMesh/Examples/Tutorial10/fill_props.hh
Normal file
123
src/OpenMesh/Examples/Tutorial10/fill_props.hh
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
#ifndef FILL_PROPS_HH
|
||||||
|
#define FILL_PROPS_HH
|
||||||
|
|
||||||
|
#include <OpenMesh/Core/Utils/Property.hh>
|
||||||
|
#include "int2roman.hh"
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
bool
|
||||||
|
fill_props( Mesh& _m, OpenMesh::VPropHandleT<float> _ph, bool _check=false)
|
||||||
|
{
|
||||||
|
float v;
|
||||||
|
static float a[9] = { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f };
|
||||||
|
|
||||||
|
for(typename Mesh::VertexIter it=_m.vertices_begin();
|
||||||
|
it != _m.vertices_end(); ++it)
|
||||||
|
{
|
||||||
|
v = a[it.handle().idx()%9];
|
||||||
|
if ( _check && !(_m.property( _ph, it ) == v) )
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
_m.property( _ph, it ) = v;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
bool
|
||||||
|
fill_props( Mesh& _m, OpenMesh::EPropHandleT<bool> _ph, bool _check=false )
|
||||||
|
{
|
||||||
|
size_t n;
|
||||||
|
bool v;
|
||||||
|
for( typename Mesh::EdgeIter it=_m.edges_begin();
|
||||||
|
it != _m.edges_end(); ++it)
|
||||||
|
{
|
||||||
|
n = it.handle().idx();
|
||||||
|
v = ((n&(n-1))==0); // true for 0,1,2,4,8,..
|
||||||
|
|
||||||
|
if (_check && _m.property( _ph, it ) != v)
|
||||||
|
{
|
||||||
|
std::cout << " eprop_bool: " << n << " -> "
|
||||||
|
<< _m.property(_ph, it ) << " != " << v << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_m.property( _ph, it ) = v;
|
||||||
|
std::cout << " eprop_bool: " << n << " -> " << v << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
bool
|
||||||
|
fill_props(Mesh& _m, OpenMesh::FPropHandleT<std::string> _ph, bool _check=false)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
for( typename Mesh::FaceIter it=_m.faces_begin();
|
||||||
|
it != _m.faces_end(); ++it)
|
||||||
|
{
|
||||||
|
n = it.handle().idx();
|
||||||
|
_m.property( _ph, it ) = int2roman(++n);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template <typename Mesh, typename T>
|
||||||
|
bool
|
||||||
|
fill_props( Mesh& _m, OpenMesh::HPropHandleT<T> _ph, bool _check=false)
|
||||||
|
{
|
||||||
|
int n;
|
||||||
|
T v;
|
||||||
|
static float a[9] = { 1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f };
|
||||||
|
static float b[9] = { 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f };
|
||||||
|
static float c[9] = { 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f, 2.2f };
|
||||||
|
static float d[9] = { 4.4f, 5.5f, 6.6f, 7.7f, 8.8f, 9.9f, 1.1f, 2.2f, 3.3f };
|
||||||
|
static double values[9] = { 0.1, 0.02, 0.003, 0.0004, 0.00005, 0.000006,
|
||||||
|
0.0000007, 0.00000008, 0.000000009 };
|
||||||
|
|
||||||
|
for( typename Mesh::HalfedgeIter it=_m.halfedges_begin();
|
||||||
|
it != _m.halfedges_end(); ++it)
|
||||||
|
{
|
||||||
|
n = it.handle().idx();
|
||||||
|
|
||||||
|
v = it.handle().idx()+1; // ival
|
||||||
|
v = values[n%9]; // dval
|
||||||
|
v = ((n&(n-1))==0); // bval
|
||||||
|
v.vec4fval[0] = a[n%9];
|
||||||
|
v.vec4fval[1] = b[n%9];
|
||||||
|
v.vec4fval[2] = c[n%9];
|
||||||
|
v.vec4fval[3] = d[n%9];
|
||||||
|
|
||||||
|
if ( _check && _m.property( _ph, it ) != v )
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
_m.property( _ph, it ) = v;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Mesh, typename T>
|
||||||
|
bool
|
||||||
|
fill_props( Mesh& _m, OpenMesh::MPropHandleT<T> _ph, bool _check=false)
|
||||||
|
{
|
||||||
|
size_t idx;
|
||||||
|
for( typename Mesh::FaceIter it=_m.faces_begin(); it != _m.faces_end(); ++it)
|
||||||
|
{
|
||||||
|
idx = it.handle().idx();
|
||||||
|
if ( _check && _m.property( _ph )[int2roman(idx+1)] != idx )
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
_m.property( _ph )[int2roman(idx+1)] = idx;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
70
src/OpenMesh/Examples/Tutorial10/generate_cube.hh
Normal file
70
src/OpenMesh/Examples/Tutorial10/generate_cube.hh
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
#ifndef GENERATE_CUBE_HH
|
||||||
|
#define GENERATE_CUBE_HH
|
||||||
|
|
||||||
|
template <typename MeshType>
|
||||||
|
size_t generate_cube( MeshType& mesh )
|
||||||
|
{
|
||||||
|
typedef typename MeshType::VertexHandle VertexHandle;
|
||||||
|
typedef typename MeshType::Point Point;
|
||||||
|
|
||||||
|
typename MeshType::VertexHandle vhandle[8];
|
||||||
|
|
||||||
|
vhandle[0] = mesh.add_vertex(Point(-1, -1, 1));
|
||||||
|
vhandle[1] = mesh.add_vertex(Point( 1, -1, 1));
|
||||||
|
vhandle[2] = mesh.add_vertex(Point( 1, 1, 1));
|
||||||
|
vhandle[3] = mesh.add_vertex(Point(-1, 1, 1));
|
||||||
|
vhandle[4] = mesh.add_vertex(Point(-1, -1, -1));
|
||||||
|
vhandle[5] = mesh.add_vertex(Point( 1, -1, -1));
|
||||||
|
vhandle[6] = mesh.add_vertex(Point( 1, 1, -1));
|
||||||
|
vhandle[7] = mesh.add_vertex(Point(-1, 1, -1));
|
||||||
|
|
||||||
|
// generate (quadrilateral) faces
|
||||||
|
|
||||||
|
std::vector< VertexHandle > face_vhandles;
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[1]);
|
||||||
|
face_vhandles.push_back(vhandle[5]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
face_vhandles.push_back(vhandle[2]);
|
||||||
|
face_vhandles.push_back(vhandle[6]);
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
face_vhandles.clear();
|
||||||
|
face_vhandles.push_back(vhandle[0]);
|
||||||
|
face_vhandles.push_back(vhandle[3]);
|
||||||
|
face_vhandles.push_back(vhandle[7]);
|
||||||
|
face_vhandles.push_back(vhandle[4]);
|
||||||
|
mesh.add_face(face_vhandles);
|
||||||
|
|
||||||
|
return mesh.n_vertices();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
45
src/OpenMesh/Examples/Tutorial10/int2roman.cc
Normal file
45
src/OpenMesh/Examples/Tutorial10/int2roman.cc
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#include <OpenMesh/Core/System/config.hh>
|
||||||
|
#if defined(OM_CC_MIPS)
|
||||||
|
# include <assert.h>
|
||||||
|
#else
|
||||||
|
# include <cassert>
|
||||||
|
#endif
|
||||||
|
#include "int2roman.hh"
|
||||||
|
|
||||||
|
|
||||||
|
std::string int2roman( size_t decimal, size_t length )
|
||||||
|
{
|
||||||
|
assert( decimal > 0 && decimal < 1000 );
|
||||||
|
|
||||||
|
const size_t nrows = 4;
|
||||||
|
const size_t ncols = 4;
|
||||||
|
|
||||||
|
static size_t table_arabs[ nrows ][ ncols ] = { { 1000, 1000, 1000, 1000 },
|
||||||
|
{ 900, 500, 400, 100 },
|
||||||
|
{ 90, 50, 40, 10 },
|
||||||
|
{ 9, 5, 4, 1 } };
|
||||||
|
|
||||||
|
static char *table_romans[ nrows ][ ncols ] = { { "M", "M", "M", "M" },
|
||||||
|
{ "CM", "D", "CD", "C" },
|
||||||
|
{ "XC", "L", "XL", "X" },
|
||||||
|
{ "IX", "V", "IV", "I" } };
|
||||||
|
|
||||||
|
size_t power; // power of ten
|
||||||
|
size_t index; // Indexes thru values to subtract
|
||||||
|
|
||||||
|
std::string roman;
|
||||||
|
|
||||||
|
roman.reserve(length);
|
||||||
|
|
||||||
|
roman[ 0 ] = '\0';
|
||||||
|
|
||||||
|
for ( power = 0; power < nrows; power++ )
|
||||||
|
for ( index = 0; index < ncols; index++ )
|
||||||
|
while ( decimal >= table_arabs[ power ][ index ] )
|
||||||
|
{
|
||||||
|
roman += table_romans[ power ][ index ];
|
||||||
|
decimal -= table_arabs[ power ][ index ];
|
||||||
|
}
|
||||||
|
|
||||||
|
return roman;
|
||||||
|
}
|
||||||
8
src/OpenMesh/Examples/Tutorial10/int2roman.hh
Normal file
8
src/OpenMesh/Examples/Tutorial10/int2roman.hh
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef INT2ROMAN_HH
|
||||||
|
#define INT2ROMAN_HH
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
std::string int2roman( size_t decimal, size_t length=30 );
|
||||||
|
|
||||||
|
#endif
|
||||||
347
src/OpenMesh/Examples/Tutorial10/persistence.cc
Normal file
347
src/OpenMesh/Examples/Tutorial10/persistence.cc
Normal file
@@ -0,0 +1,347 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
// -------------------- OpenMesh
|
||||||
|
#include <OpenMesh/Core/IO/MeshIO.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/TriMesh_ArrayKernelT.hh>
|
||||||
|
#include <OpenMesh/Core/Mesh/PolyMesh_ArrayKernelT.hh>
|
||||||
|
// -------------------- little helper
|
||||||
|
#include "generate_cube.hh"
|
||||||
|
#include "stats.hh"
|
||||||
|
#include "fill_props.hh"
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Set to 1 to use an PolyMesh type.
|
||||||
|
#define UsePolyMesh 1
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
using namespace OpenMesh;
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef TriMesh_ArrayKernelT<> TriMesh;
|
||||||
|
typedef PolyMesh_ArrayKernelT<> PolyMesh;
|
||||||
|
|
||||||
|
#if UsePolyMesh
|
||||||
|
typedef PolyMesh Mesh;
|
||||||
|
#else
|
||||||
|
typedef TriMesh Mesh;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef DOXY_IGNORE_THIS
|
||||||
|
|
||||||
|
struct MyData
|
||||||
|
{
|
||||||
|
int ival;
|
||||||
|
double dval;
|
||||||
|
bool bval;
|
||||||
|
OpenMesh::Vec4f vec4fval;
|
||||||
|
|
||||||
|
MyData()
|
||||||
|
: ival(0), dval(0.0), bval(false)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
MyData( const MyData& _cpy )
|
||||||
|
: ival(_cpy.ival), dval(_cpy.dval), bval(_cpy.bval),
|
||||||
|
vec4fval(_cpy.vec4fval)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
|
||||||
|
// ---------- assignment
|
||||||
|
|
||||||
|
MyData& operator = (const MyData& _rhs)
|
||||||
|
{
|
||||||
|
ival = _rhs.ival;
|
||||||
|
dval = _rhs.dval;
|
||||||
|
bval = _rhs.bval;
|
||||||
|
vec4fval = _rhs.vec4fval;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
MyData& operator = (int _rhs) { ival = _rhs; return *this; }
|
||||||
|
MyData& operator = (double _rhs) { dval = _rhs; return *this; }
|
||||||
|
MyData& operator = (bool _rhs) { bval = _rhs; return *this; }
|
||||||
|
MyData& operator = (const OpenMesh::Vec4f& _rhs)
|
||||||
|
{ vec4fval = _rhs; return *this; }
|
||||||
|
|
||||||
|
|
||||||
|
// ---------- comparison
|
||||||
|
|
||||||
|
bool operator == (const MyData& _rhs) const
|
||||||
|
{
|
||||||
|
return ival == _rhs.ival
|
||||||
|
&& dval == _rhs.dval
|
||||||
|
&& bval == _rhs.bval
|
||||||
|
&& vec4fval == _rhs.vec4fval;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator != (const MyData& _rhs) const { return !(*this == _rhs); }
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
typedef std::map< std::string, unsigned int > MyMap;
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifndef DOXY_IGNORE_THIS
|
||||||
|
|
||||||
|
namespace OpenMesh {
|
||||||
|
namespace IO {
|
||||||
|
|
||||||
|
// support persistence for struct MyData
|
||||||
|
|
||||||
|
template <> struct binary<MyData>
|
||||||
|
{
|
||||||
|
typedef MyData value_type;
|
||||||
|
|
||||||
|
static const bool is_streamable = true;
|
||||||
|
|
||||||
|
// return binary size of the value
|
||||||
|
|
||||||
|
static size_t size_of(void)
|
||||||
|
{
|
||||||
|
return sizeof(int)+sizeof(double)+sizeof(bool)+sizeof(OpenMesh::Vec4f);
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t size_of(const value_type&)
|
||||||
|
{
|
||||||
|
return size_of();
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t store(std::ostream& _os, const value_type& _v, bool _swap=false)
|
||||||
|
{
|
||||||
|
size_t bytes;
|
||||||
|
bytes = IO::store( _os, _v.ival, _swap );
|
||||||
|
bytes += IO::store( _os, _v.dval, _swap );
|
||||||
|
bytes += IO::store( _os, _v.bval, _swap );
|
||||||
|
bytes += IO::store( _os, _v.vec4fval, _swap );
|
||||||
|
return _os.good() ? bytes : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t restore( std::istream& _is, value_type& _v, bool _swap=false)
|
||||||
|
{
|
||||||
|
size_t bytes;
|
||||||
|
bytes = IO::restore( _is, _v.ival, _swap );
|
||||||
|
bytes += IO::restore( _is, _v.dval, _swap );
|
||||||
|
bytes += IO::restore( _is, _v.bval, _swap );
|
||||||
|
bytes += IO::restore( _is, _v.vec4fval, _swap );
|
||||||
|
return _is.good() ? bytes : 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
template <> struct binary< MyMap >
|
||||||
|
{
|
||||||
|
typedef MyMap value_type;
|
||||||
|
|
||||||
|
static const bool is_streamable = true;
|
||||||
|
|
||||||
|
// return generic binary size of self, if known
|
||||||
|
static size_t size_of(void) { return UnknownSize; }
|
||||||
|
|
||||||
|
// return binary size of the value
|
||||||
|
static size_t size_of(const value_type& _v)
|
||||||
|
{
|
||||||
|
if (_v.empty())
|
||||||
|
return sizeof(unsigned int);
|
||||||
|
|
||||||
|
value_type::const_iterator it = _v.begin();
|
||||||
|
unsigned int N = _v.size();
|
||||||
|
size_t bytes = IO::size_of(N);
|
||||||
|
|
||||||
|
for(;it!=_v.end(); ++it)
|
||||||
|
{
|
||||||
|
bytes += IO::size_of( it->first );
|
||||||
|
bytes += IO::size_of( it->second );
|
||||||
|
}
|
||||||
|
return bytes;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
size_t store(std::ostream& _os, const value_type& _v, bool _swap=false)
|
||||||
|
{
|
||||||
|
size_t bytes = 0;
|
||||||
|
unsigned int N = _v.size();
|
||||||
|
|
||||||
|
value_type::const_iterator it = _v.begin();
|
||||||
|
|
||||||
|
bytes += IO::store( _os, N, _swap );
|
||||||
|
|
||||||
|
for (; it != _v.end() && _os.good(); ++it)
|
||||||
|
{
|
||||||
|
bytes += IO::store( _os, it->first, _swap );
|
||||||
|
bytes += IO::store( _os, it->second, _swap );
|
||||||
|
}
|
||||||
|
return _os.good() ? bytes : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
size_t restore( std::istream& _is, value_type& _v, bool _swap=false)
|
||||||
|
{
|
||||||
|
size_t bytes = 0;
|
||||||
|
unsigned int N = 0;
|
||||||
|
|
||||||
|
_v.clear();
|
||||||
|
|
||||||
|
bytes += IO::restore( _is, N, _swap );
|
||||||
|
|
||||||
|
value_type::iterator it = _v.begin();
|
||||||
|
std::string key;
|
||||||
|
size_t val;
|
||||||
|
|
||||||
|
for (size_t i=0; i<N && _is.good(); ++i)
|
||||||
|
{
|
||||||
|
bytes += IO::restore( _is, key, _swap );
|
||||||
|
bytes += IO::restore( _is, val, _swap );
|
||||||
|
_v[key] = val;
|
||||||
|
}
|
||||||
|
return _is.good() ? bytes : 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Mesh mesh;
|
||||||
|
|
||||||
|
|
||||||
|
// generate a geometry
|
||||||
|
generate_cube<Mesh>(mesh);
|
||||||
|
|
||||||
|
|
||||||
|
// should display 8 vertices, 18/12 edges, 12/6 faces (Tri/Poly)
|
||||||
|
mesh_stats(mesh);
|
||||||
|
|
||||||
|
|
||||||
|
// print out information about properties
|
||||||
|
mesh_property_stats(mesh);
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Define some custom properties..\n";
|
||||||
|
|
||||||
|
OpenMesh::VPropHandleT<float> vprop_float;
|
||||||
|
OpenMesh::EPropHandleT<bool> eprop_bool;
|
||||||
|
OpenMesh::FPropHandleT<std::string> fprop_string;
|
||||||
|
OpenMesh::HPropHandleT<MyData> hprop_mydata;
|
||||||
|
OpenMesh::MPropHandleT<MyMap> mprop_map;
|
||||||
|
|
||||||
|
std::cout << ".. and registrate them at the mesh object.\n";
|
||||||
|
|
||||||
|
mesh.add_property(vprop_float, "vprop_float");
|
||||||
|
mesh.add_property(eprop_bool, "eprop_bool");
|
||||||
|
mesh.add_property(fprop_string, "fprop_string");
|
||||||
|
mesh.add_property(hprop_mydata, "hprop_mydata");
|
||||||
|
mesh.add_property(mprop_map, "mprop_map");
|
||||||
|
|
||||||
|
|
||||||
|
mesh_property_stats(mesh);
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Now let's fill the props..\n";
|
||||||
|
|
||||||
|
fill_props(mesh, vprop_float);
|
||||||
|
fill_props(mesh, eprop_bool);
|
||||||
|
fill_props(mesh, fprop_string);
|
||||||
|
fill_props(mesh, hprop_mydata);
|
||||||
|
fill_props(mesh, mprop_map);
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Check props..\n";
|
||||||
|
#define CHK_PROP( PH ) \
|
||||||
|
std::cout << " " << #PH << " " \
|
||||||
|
<< (fill_props(mesh, PH, true)?"ok\n":"error\n")
|
||||||
|
|
||||||
|
CHK_PROP(vprop_float);
|
||||||
|
CHK_PROP(eprop_bool);
|
||||||
|
CHK_PROP(fprop_string);
|
||||||
|
CHK_PROP(hprop_mydata);
|
||||||
|
CHK_PROP(mprop_map);
|
||||||
|
#undef CHK_PROP
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Set persistent flag..\n";
|
||||||
|
#define SET_PERS( PH ) \
|
||||||
|
mesh.property(PH).set_persistent(true); \
|
||||||
|
std::cout << " " << #PH << " " \
|
||||||
|
<< (mesh.property(PH).persistent()?"ok\n":"failed!\n")
|
||||||
|
|
||||||
|
mesh.property(vprop_float).set_persistent(true);
|
||||||
|
std::cout << " vprop_float "
|
||||||
|
<< (mesh.property(vprop_float).persistent()?"ok\n":"failed!\n");
|
||||||
|
|
||||||
|
SET_PERS( eprop_bool );
|
||||||
|
SET_PERS( fprop_string );
|
||||||
|
SET_PERS( hprop_mydata );
|
||||||
|
mesh.mproperty(mprop_map).set_persistent(true);
|
||||||
|
std::cout << " mprop_map "
|
||||||
|
<< (mesh.mproperty(mprop_map).persistent()?"ok\n":"failed!\n");
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Write mesh..";
|
||||||
|
if (IO::write_mesh( mesh, "persistence-check.om" ))
|
||||||
|
std::cout << " ok\n";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << " failed\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Clear mesh\n";
|
||||||
|
mesh.clear();
|
||||||
|
mesh_stats(mesh, " ");
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Read back mesh..";
|
||||||
|
try
|
||||||
|
{
|
||||||
|
if (IO::read_mesh( mesh, "persistence-check.om" ))
|
||||||
|
std::cout << " ok\n";
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << " failed!\n";
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
mesh_stats(mesh, " ");
|
||||||
|
}
|
||||||
|
catch( std::exception &x )
|
||||||
|
{
|
||||||
|
std::cerr << x.what() << std::endl;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::cout << "Check props..\n";
|
||||||
|
#define CHK_PROP( PH ) \
|
||||||
|
std::cout << " " << #PH << " " \
|
||||||
|
<< (fill_props(mesh, PH, true)?"ok\n":"error\n")
|
||||||
|
CHK_PROP(vprop_float);
|
||||||
|
CHK_PROP(eprop_bool);
|
||||||
|
CHK_PROP(fprop_string);
|
||||||
|
CHK_PROP(hprop_mydata);
|
||||||
|
CHK_PROP(mprop_map);
|
||||||
|
#undef CHK_PROP
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// end of file
|
||||||
|
// ============================================================================
|
||||||
20
src/OpenMesh/Examples/Tutorial10/stats.hh
Normal file
20
src/OpenMesh/Examples/Tutorial10/stats.hh
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef STATS_HH
|
||||||
|
#define STATS_HH
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
void mesh_stats( Mesh& _m, const std::string& prefix = "" )
|
||||||
|
{
|
||||||
|
std::cout << prefix
|
||||||
|
<< _m.n_vertices() << " vertices, "
|
||||||
|
<< _m.n_edges() << " edges, "
|
||||||
|
<< _m.n_faces() << " faces\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Mesh>
|
||||||
|
void mesh_property_stats(Mesh& _m)
|
||||||
|
{
|
||||||
|
std::cout << "Current set of properties:\n";
|
||||||
|
_m.property_stats(std::cout);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in New Issue
Block a user