diff --git a/src/OpenMesh/Examples/Examples.pro b/src/OpenMesh/Examples/Examples.pro new file mode 100644 index 00000000..556c16f6 --- /dev/null +++ b/src/OpenMesh/Examples/Examples.pro @@ -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 ) diff --git a/src/OpenMesh/Examples/Makefile b/src/OpenMesh/Examples/Makefile new file mode 100644 index 00000000..f214474f --- /dev/null +++ b/src/OpenMesh/Examples/Makefile @@ -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: + diff --git a/src/OpenMesh/Examples/Tutorial01/Tutorial01.pro b/src/OpenMesh/Examples/Tutorial01/Tutorial01.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial01/Tutorial01.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial01/cube.cc b/src/OpenMesh/Examples/Tutorial01/cube.cc new file mode 100644 index 00000000..143371a6 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial01/cube.cc @@ -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 +// -------------------- OpenMesh +#include +#include + + +// ---------------------------------------------------------------------------- + +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 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; +} diff --git a/src/OpenMesh/Examples/Tutorial02/Tutorial02.pro b/src/OpenMesh/Examples/Tutorial02/Tutorial02.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial02/Tutorial02.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial02/smooth.cc b/src/OpenMesh/Examples/Tutorial02/smooth.cc new file mode 100644 index 00000000..ad8273b3 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial02/smooth.cc @@ -0,0 +1,76 @@ +#include +#include +// -------------------- OpenMesh +#include +#include + +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 cogs; + std::vector::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; +} diff --git a/src/OpenMesh/Examples/Tutorial03/Tutorial03.pro b/src/OpenMesh/Examples/Tutorial03/Tutorial03.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial03/Tutorial03.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial03/smooth.cc b/src/OpenMesh/Examples/Tutorial03/smooth.cc new file mode 100644 index 00000000..207a619b --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial03/smooth.cc @@ -0,0 +1,74 @@ +#include +#include +// -------------------- +#include +#include + +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 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; +} diff --git a/src/OpenMesh/Examples/Tutorial04/Tutorial04.pro b/src/OpenMesh/Examples/Tutorial04/Tutorial04.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial04/Tutorial04.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial04/smooth.cc b/src/OpenMesh/Examples/Tutorial04/smooth.cc new file mode 100644 index 00000000..3bb7f5aa --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial04/smooth.cc @@ -0,0 +1,59 @@ +#include +#include +// -------------------- OpenMesh +#include +#include +// -------------------- +#include "smooth_algo.hh" + + +// ---------------------------------------------------------------------------- + +#ifndef DOXY_IGNORE_THIS + +struct MyTraits : public OpenMesh::DefaultTraits +{ + HalfedgeAttributes(OpenMesh::Attributes::PrevHalfedge); +}; + +#endif + +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; + } + + + // smoothing mesh argv[1] times + SmootherT 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; +} diff --git a/src/OpenMesh/Examples/Tutorial04/smooth_algo.hh b/src/OpenMesh/Examples/Tutorial04/smooth_algo.hh new file mode 100644 index 00000000..9c564427 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial04/smooth_algo.hh @@ -0,0 +1,106 @@ +#include +#include + +#ifndef DOXY_IGNORE_THIS + +template 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 diff --git a/src/OpenMesh/Examples/Tutorial05/Tutorial05.pro b/src/OpenMesh/Examples/Tutorial05/Tutorial05.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial05/Tutorial05.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial05/properties.cc b/src/OpenMesh/Examples/Tutorial05/properties.cc new file mode 100644 index 00000000..7fc05288 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial05/properties.cc @@ -0,0 +1,71 @@ +#include +// -------------------- +#include +#include + + +typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh; + + +int main(int argc, char **argv) +{ + MyMesh mesh; + + if (argc!=2) + { + std::cerr << "Usage: " << argv[0] << " \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; +} diff --git a/src/OpenMesh/Examples/Tutorial06/Tutorial06.pro b/src/OpenMesh/Examples/Tutorial06/Tutorial06.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial06/Tutorial06.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial06/attributes.cc b/src/OpenMesh/Examples/Tutorial06/attributes.cc new file mode 100644 index 00000000..8d446f72 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial06/attributes.cc @@ -0,0 +1,94 @@ +#include +#include +// -------------------- +#include + +#include +#include + +#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 MyMesh; + +// ------------------------------------------------------------------ main ---- + +int main(int argc, char **argv) +{ + MyMesh mesh; + + if (argc!=2) + { + std::cerr << "Usage: " << argv[0] << " \n"; + return 1; + } + + // Just make sure that point element type is double + if ( typeid( OpenMesh::vector_traits::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::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; +} diff --git a/src/OpenMesh/Examples/Tutorial07/Tutorial07.pro b/src/OpenMesh/Examples/Tutorial07/Tutorial07.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial07/Tutorial07.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial07/smooth.cc b/src/OpenMesh/Examples/Tutorial07/smooth.cc new file mode 100644 index 00000000..47d9480d --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial07/smooth.cc @@ -0,0 +1,127 @@ +#include +#include +// -------------------- OpenMesh +#include +#include +#include + +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 MyMesh; +typedef OpenMesh::TriMesh_ArrayKernelT<> MyMesh2; + +// --------------------------------------------------------------------------- +#define SIZEOF( entity,b ) \ + std::cout << _prefix << "size of " << #entity << ": " \ + << sizeof( entity ) << std::endl; \ + b += sizeof( entity ) + +template +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(" "); + + std::cout << "Default mesh size statistics\n"; + print_size(" "); + } + // 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; +} diff --git a/src/OpenMesh/Examples/Tutorial08/Tutorial08.pro b/src/OpenMesh/Examples/Tutorial08/Tutorial08.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial08/Tutorial08.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial08/delete_geometry.cc b/src/OpenMesh/Examples/Tutorial08/delete_geometry.cc new file mode 100644 index 00000000..c19fa7da --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial08/delete_geometry.cc @@ -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 +// -------------------- OpenMesh +#include +#include +#include +#include + +// ---------------------------------------------------------------------------- + +struct MyTraits : public OpenMesh::DefaultTraits +{ + VertexAttributes(OpenMesh::Attributes::Status); + FaceAttributes(OpenMesh::Attributes::Status); + EdgeAttributes(OpenMesh::Attributes::Status); +}; + + +typedef OpenMesh::PolyMesh_ArrayKernelT 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 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; +} diff --git a/src/OpenMesh/Examples/Tutorial09/Tutorial09.pro b/src/OpenMesh/Examples/Tutorial09/Tutorial09.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial09/Tutorial09.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial09/io_options.cc b/src/OpenMesh/Examples/Tutorial09/io_options.cc new file mode 100644 index 00000000..b57b1725 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial09/io_options.cc @@ -0,0 +1,297 @@ +#include +#include +// -------------------- OpenMesh +#include +#include +#include + +// ---------------------------------------------------------------------------- + +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] \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 +// ============================================================================ diff --git a/src/OpenMesh/Examples/Tutorial10/Tutorial10.pro b/src/OpenMesh/Examples/Tutorial10/Tutorial10.pro new file mode 100644 index 00000000..5d626522 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/Tutorial10.pro @@ -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) + +################################################################################ diff --git a/src/OpenMesh/Examples/Tutorial10/fill_props.hh b/src/OpenMesh/Examples/Tutorial10/fill_props.hh new file mode 100644 index 00000000..22c7bc5c --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/fill_props.hh @@ -0,0 +1,123 @@ +#ifndef FILL_PROPS_HH +#define FILL_PROPS_HH + +#include +#include "int2roman.hh" + + +template +bool +fill_props( Mesh& _m, OpenMesh::VPropHandleT _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 +bool +fill_props( Mesh& _m, OpenMesh::EPropHandleT _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 +bool +fill_props(Mesh& _m, OpenMesh::FPropHandleT _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 +bool +fill_props( Mesh& _m, OpenMesh::HPropHandleT _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 +bool +fill_props( Mesh& _m, OpenMesh::MPropHandleT _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 diff --git a/src/OpenMesh/Examples/Tutorial10/generate_cube.hh b/src/OpenMesh/Examples/Tutorial10/generate_cube.hh new file mode 100644 index 00000000..99f68ebb --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/generate_cube.hh @@ -0,0 +1,70 @@ +#ifndef GENERATE_CUBE_HH +#define GENERATE_CUBE_HH + +template +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 diff --git a/src/OpenMesh/Examples/Tutorial10/int2roman.cc b/src/OpenMesh/Examples/Tutorial10/int2roman.cc new file mode 100644 index 00000000..b0cb5a19 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/int2roman.cc @@ -0,0 +1,45 @@ +#include +#if defined(OM_CC_MIPS) +# include +#else +# include +#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; +} diff --git a/src/OpenMesh/Examples/Tutorial10/int2roman.hh b/src/OpenMesh/Examples/Tutorial10/int2roman.hh new file mode 100644 index 00000000..4d14a265 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/int2roman.hh @@ -0,0 +1,8 @@ +#ifndef INT2ROMAN_HH +#define INT2ROMAN_HH + +#include + +std::string int2roman( size_t decimal, size_t length=30 ); + +#endif diff --git a/src/OpenMesh/Examples/Tutorial10/persistence.cc b/src/OpenMesh/Examples/Tutorial10/persistence.cc new file mode 100644 index 00000000..54b25ff1 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/persistence.cc @@ -0,0 +1,347 @@ +#include +#include +#include +// -------------------- OpenMesh +#include +#include +#include +// -------------------- 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 + { + 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(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 vprop_float; + OpenMesh::EPropHandleT eprop_bool; + OpenMesh::FPropHandleT fprop_string; + OpenMesh::HPropHandleT hprop_mydata; + OpenMesh::MPropHandleT 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 +// ============================================================================ diff --git a/src/OpenMesh/Examples/Tutorial10/stats.hh b/src/OpenMesh/Examples/Tutorial10/stats.hh new file mode 100644 index 00000000..4ba082d2 --- /dev/null +++ b/src/OpenMesh/Examples/Tutorial10/stats.hh @@ -0,0 +1,20 @@ +#ifndef STATS_HH +#define STATS_HH + +template +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 +void mesh_property_stats(Mesh& _m) +{ + std::cout << "Current set of properties:\n"; + _m.property_stats(std::cout); +} + +#endif