Commits

ewaller  committed f9b4d4a

Initial release

  • Participants

Comments (0)

Files changed (32)

+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>3dmaze_qt</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>com.trolltech.qtcppproject.QtMakefileGenerator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.make.core.makeBuilder</name>
+			<triggers>clean,full,incremental,</triggers>
+			<arguments>
+				<dictionary>
+					<key>org.eclipse.cdt.core.errorOutputParser</key>
+					<value>org.eclipse.cdt.core.GASErrorParser;org.eclipse.cdt.core.GCCErrorParser;org.eclipse.cdt.core.GLDErrorParser;org.eclipse.cdt.core.GmakeErrorParser;org.eclipse.cdt.core.VCErrorParser;org.eclipse.cdt.core.CWDLocator;org.eclipse.cdt.errorparsers.xlc.XlcErrorParser;org.eclipse.cdt.core.MakeErrorParser;org.eclipse.cdt.core.tests.RegexErrorParserId;</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.append_environment</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.arguments</key>
+					<value></value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.command</key>
+					<value>make</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.auto</key>
+					<value>debug</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.clean</key>
+					<value>clean</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.build.target.inc</key>
+					<value>debug</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.enabledIncrementalBuild</key>
+					<value>true</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.environment</key>
+					<value>PATH=/usr/bin:${env_var:PATH}:${env_var:PATH}|</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.stopOnError</key>
+					<value>false</value>
+				</dictionary>
+				<dictionary>
+					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+					<value>false</value>
+				</dictionary>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.cdt.make.core.ScannerConfigBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.cdt.core.cnature</nature>
+		<nature>org.eclipse.cdt.core.ccnature</nature>
+		<nature>org.eclipse.cdt.make.core.makeNature</nature>
+		<nature>org.eclipse.cdt.make.core.ScannerConfigNature</nature>
+		<nature>com.trolltech.qtcppproject.QtNature</nature>
+	</natures>
+</projectDescription>

File 3dMazeResources.qrc

+<RCC>
+    <qresource prefix="/images" >
+        <file>images/MazeSample.png</file>
+        <file>images/stop</file>
+        <file>images/amaze.png</file>
+        <file>images/3d.png</file>
+        <file>images/print</file>
+        <file>images/setSize.png</file>
+        <file>images/showSolution.png</file>
+        <file>images/texture.jpg</file>
+        <file>images/floor.jpg</file>
+    </qresource>
+</RCC>
+######################################################################
+# Automatically generated by qmake (2.01a) Tue Oct 2 22:01:46 2012
+######################################################################
+
+TEMPLATE = app
+TARGET = 
+DEPENDPATH += .
+INCLUDEPATH += .
+QT += core \
+    gui \
+    opengl
+
+# Input
+HEADERS += mainwindow.h \
+           mazeengine.h \
+           mazewidget.h \
+           renderdialog.h \
+           renderwidget.h \
+           sizedialog.h
+FORMS += about.ui mainwindow.ui render.ui sizedialog.ui
+SOURCES += main.cpp \
+           mainwindow.cpp \
+           mazeengine.cpp \
+           mazewidget.cpp \
+           renderdialog.cpp \
+           renderwidget.cpp \
+           sizedialog.cpp
+RESOURCES += 3dMazeResources.qrc

File 3dmaze.pro.user

+<!DOCTYPE QtCreatorProject>
+<qtcreator>
+ <data>
+  <variable>ProjectExplorer.Project.ActiveTarget</variable>
+  <value type="int">0</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.EditorSettings</variable>
+  <valuemap type="QVariantMap">
+   <value key="EditorConfiguration.Codec" type="QByteArray">System</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Target.0</variable>
+  <valuemap type="QVariantMap">
+   <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Desktop</value>
+   <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Target.DesktopTarget</value>
+   <value key="ProjectExplorer.Target.ActiveBuildConfiguration" type="int">0</value>
+   <value key="ProjectExplorer.Target.ActiveRunConfiguration" type="int">0</value>
+   <valuemap key="ProjectExplorer.Target.BuildConfiguration.0" type="QVariantMap">
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">qmake</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value>
+     <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/>
+    </valuemap>
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.1" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Make</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+      <value type="QString">debug</value>
+     </valuelist>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">2</value>
+    <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Make</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+      <value type="QString">clean</value>
+     </valuelist>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.CleanStepsCount" type="int">1</value>
+    <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value>
+    <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Debug</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">10</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/ewaller/devel/QtProjects/3dmaze</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">2</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">false</value>
+   </valuemap>
+   <valuemap key="ProjectExplorer.Target.BuildConfiguration.1" type="QVariantMap">
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">qmake</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">QtProjectManager.QMakeBuildStep</value>
+     <valuelist key="QtProjectManager.QMakeBuildStep.QMakeArguments" type="QVariantList"/>
+    </valuemap>
+    <valuemap key="ProjectExplorer.BuildConfiguration.BuildStep.1" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Make</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">false</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+      <value type="QString">release</value>
+     </valuelist>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.BuildStepsCount" type="int">2</value>
+    <valuemap key="ProjectExplorer.BuildConfiguration.CleanStep.0" type="QVariantMap">
+     <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Make</value>
+     <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.MakeStep</value>
+     <value key="Qt4ProjectManager.MakeStep.Clean" type="bool">true</value>
+     <valuelist key="Qt4ProjectManager.MakeStep.MakeArguments" type="QVariantList">
+      <value type="QString">clean</value>
+     </valuelist>
+     <value key="Qt4ProjectManager.MakeStep.MakeCommand" type="QString"></value>
+    </valuemap>
+    <value key="ProjectExplorer.BuildConfiguration.CleanStepsCount" type="int">1</value>
+    <value key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment" type="bool">false</value>
+    <valuelist key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">Release</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4BuildConfiguration</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration" type="int">8</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.BuildDirectory" type="QString">/home/ewaller/devel/QtProjects/3dmaze</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.QtVersionId" type="int">2</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.ToolChain" type="int">0</value>
+    <value key="Qt4ProjectManager.Qt4BuildConfiguration.UseShadowBuild" type="bool">false</value>
+   </valuemap>
+   <value key="ProjectExplorer.Target.BuildConfigurationCount" type="int">2</value>
+   <valuemap key="ProjectExplorer.Target.RunConfiguration.0" type="QVariantMap">
+    <value key="ProjectExplorer.ProjectConfiguration.DisplayName" type="QString">3dmaze</value>
+    <value key="ProjectExplorer.ProjectConfiguration.Id" type="QString">Qt4ProjectManager.Qt4RunConfiguration</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.BaseEnvironmentBase" type="int">2</value>
+    <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.CommandLineArguments" type="QVariantList"/>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.ProFile" type="QString">3dmaze.pro</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UseDyldImageSuffix" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UseTerminal" type="bool">false</value>
+    <valuelist key="Qt4ProjectManager.Qt4RunConfiguration.UserEnvironmentChanges" type="QVariantList"/>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetName" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserSetWorkingDirectory" type="bool">false</value>
+    <value key="Qt4ProjectManager.Qt4RunConfiguration.UserWorkingDirectory" type="QString"></value>
+   </valuemap>
+   <value key="ProjectExplorer.Target.RunConfigurationCount" type="int">1</value>
+  </valuemap>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.TargetCount</variable>
+  <value type="int">1</value>
+ </data>
+ <data>
+  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
+  <value type="int">4</value>
+ </data>
+</qtcreator>
+#############################################################################
+# Makefile for building: 3dmaze
+# Generated by qmake (2.01a) (Qt 4.8.3) on: Sun Oct 7 20:28:35 2012
+# Project:  3dmaze.pro
+# Template: app
+# Command: /usr/bin/qmake -o Makefile 3dmaze.pro
+#############################################################################
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_NO_DEBUG -DQT_OPENGL_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED
+CFLAGS        = -m64 -pipe -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -Wall -W -D_REENTRANT $(DEFINES)
+CXXFLAGS      = -m64 -pipe -march=x86-64 -mtune=generic -O2 -pipe -fstack-protector --param=ssp-buffer-size=4 -D_FORTIFY_SOURCE=2 -Wall -W -D_REENTRANT $(DEFINES)
+INCPATH       = -I/usr/share/qt/mkspecs/linux-g++-64 -I. -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include/QtOpenGL -I/usr/include -I. -I/usr/X11R6/include -I. -I.
+LINK          = g++
+LFLAGS        = -m64 -Wl,-O1,--sort-common,--as-needed,-z,relro -Wl,-O1
+LIBS          = $(SUBLIBS)  -L/usr/lib -L/usr/X11R6/lib64 -lQtOpenGL -lQtGui -lQtCore -lGL -lpthread 
+AR            = ar cqs
+RANLIB        = 
+QMAKE         = /usr/bin/qmake
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+COPY          = cp -f
+SED           = sed
+COPY_FILE     = $(COPY)
+COPY_DIR      = $(COPY) -r
+STRIP         = strip
+INSTALL_FILE  = install -m 644 -p
+INSTALL_DIR   = $(COPY_DIR)
+INSTALL_PROGRAM = install -m 755 -p
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = main.cpp \
+		mainwindow.cpp \
+		mazeengine.cpp \
+		mazewidget.cpp \
+		renderdialog.cpp \
+		renderwidget.cpp \
+		sizedialog.cpp moc_mainwindow.cpp \
+		moc_renderdialog.cpp \
+		moc_renderwidget.cpp \
+		moc_sizedialog.cpp \
+		qrc_3dMazeResources.cpp
+OBJECTS       = main.o \
+		mainwindow.o \
+		mazeengine.o \
+		mazewidget.o \
+		renderdialog.o \
+		renderwidget.o \
+		sizedialog.o \
+		moc_mainwindow.o \
+		moc_renderdialog.o \
+		moc_renderwidget.o \
+		moc_sizedialog.o \
+		qrc_3dMazeResources.o
+DIST          = /usr/share/qt/mkspecs/common/unix.conf \
+		/usr/share/qt/mkspecs/common/linux.conf \
+		/usr/share/qt/mkspecs/common/gcc-base.conf \
+		/usr/share/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/share/qt/mkspecs/common/g++-base.conf \
+		/usr/share/qt/mkspecs/common/g++-unix.conf \
+		/usr/share/qt/mkspecs/qconfig.pri \
+		/usr/share/qt/mkspecs/modules/qt_phonon.pri \
+		/usr/share/qt/mkspecs/modules/qt_webkit_version.pri \
+		/usr/share/qt/mkspecs/features/qt_functions.prf \
+		/usr/share/qt/mkspecs/features/qt_config.prf \
+		/usr/share/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/share/qt/mkspecs/features/default_pre.prf \
+		/usr/share/qt/mkspecs/features/release.prf \
+		/usr/share/qt/mkspecs/features/default_post.prf \
+		/usr/share/qt/mkspecs/features/unix/gdb_dwarf_index.prf \
+		/usr/share/qt/mkspecs/features/warn_on.prf \
+		/usr/share/qt/mkspecs/features/qt.prf \
+		/usr/share/qt/mkspecs/features/unix/opengl.prf \
+		/usr/share/qt/mkspecs/features/unix/thread.prf \
+		/usr/share/qt/mkspecs/features/moc.prf \
+		/usr/share/qt/mkspecs/features/resources.prf \
+		/usr/share/qt/mkspecs/features/uic.prf \
+		/usr/share/qt/mkspecs/features/yacc.prf \
+		/usr/share/qt/mkspecs/features/lex.prf \
+		/usr/share/qt/mkspecs/features/include_source_dir.prf \
+		3dmaze.pro
+QMAKE_TARGET  = 3dmaze
+DESTDIR       = 
+TARGET        = 3dmaze
+
+first: all
+####### Implicit rules
+
+.SUFFIXES: .o .c .cpp .cc .cxx .C
+
+.cpp.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cc.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.cxx.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.C.o:
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o "$@" "$<"
+
+.c.o:
+	$(CC) -c $(CFLAGS) $(INCPATH) -o "$@" "$<"
+
+####### Build rules
+
+all: Makefile $(TARGET)
+
+$(TARGET): ui_about.h ui_mainwindow.h ui_render.h ui_sizedialog.h $(OBJECTS)  
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: 3dmaze.pro  /usr/share/qt/mkspecs/linux-g++-64/qmake.conf /usr/share/qt/mkspecs/common/unix.conf \
+		/usr/share/qt/mkspecs/common/linux.conf \
+		/usr/share/qt/mkspecs/common/gcc-base.conf \
+		/usr/share/qt/mkspecs/common/gcc-base-unix.conf \
+		/usr/share/qt/mkspecs/common/g++-base.conf \
+		/usr/share/qt/mkspecs/common/g++-unix.conf \
+		/usr/share/qt/mkspecs/qconfig.pri \
+		/usr/share/qt/mkspecs/modules/qt_phonon.pri \
+		/usr/share/qt/mkspecs/modules/qt_webkit_version.pri \
+		/usr/share/qt/mkspecs/features/qt_functions.prf \
+		/usr/share/qt/mkspecs/features/qt_config.prf \
+		/usr/share/qt/mkspecs/features/exclusive_builds.prf \
+		/usr/share/qt/mkspecs/features/default_pre.prf \
+		/usr/share/qt/mkspecs/features/release.prf \
+		/usr/share/qt/mkspecs/features/default_post.prf \
+		/usr/share/qt/mkspecs/features/unix/gdb_dwarf_index.prf \
+		/usr/share/qt/mkspecs/features/warn_on.prf \
+		/usr/share/qt/mkspecs/features/qt.prf \
+		/usr/share/qt/mkspecs/features/unix/opengl.prf \
+		/usr/share/qt/mkspecs/features/unix/thread.prf \
+		/usr/share/qt/mkspecs/features/moc.prf \
+		/usr/share/qt/mkspecs/features/resources.prf \
+		/usr/share/qt/mkspecs/features/uic.prf \
+		/usr/share/qt/mkspecs/features/yacc.prf \
+		/usr/share/qt/mkspecs/features/lex.prf \
+		/usr/share/qt/mkspecs/features/include_source_dir.prf \
+		/usr/lib/libQtOpenGL.prl \
+		/usr/lib/libQtGui.prl \
+		/usr/lib/libQtCore.prl
+	$(QMAKE) -o Makefile 3dmaze.pro
+/usr/share/qt/mkspecs/common/unix.conf:
+/usr/share/qt/mkspecs/common/linux.conf:
+/usr/share/qt/mkspecs/common/gcc-base.conf:
+/usr/share/qt/mkspecs/common/gcc-base-unix.conf:
+/usr/share/qt/mkspecs/common/g++-base.conf:
+/usr/share/qt/mkspecs/common/g++-unix.conf:
+/usr/share/qt/mkspecs/qconfig.pri:
+/usr/share/qt/mkspecs/modules/qt_phonon.pri:
+/usr/share/qt/mkspecs/modules/qt_webkit_version.pri:
+/usr/share/qt/mkspecs/features/qt_functions.prf:
+/usr/share/qt/mkspecs/features/qt_config.prf:
+/usr/share/qt/mkspecs/features/exclusive_builds.prf:
+/usr/share/qt/mkspecs/features/default_pre.prf:
+/usr/share/qt/mkspecs/features/release.prf:
+/usr/share/qt/mkspecs/features/default_post.prf:
+/usr/share/qt/mkspecs/features/unix/gdb_dwarf_index.prf:
+/usr/share/qt/mkspecs/features/warn_on.prf:
+/usr/share/qt/mkspecs/features/qt.prf:
+/usr/share/qt/mkspecs/features/unix/opengl.prf:
+/usr/share/qt/mkspecs/features/unix/thread.prf:
+/usr/share/qt/mkspecs/features/moc.prf:
+/usr/share/qt/mkspecs/features/resources.prf:
+/usr/share/qt/mkspecs/features/uic.prf:
+/usr/share/qt/mkspecs/features/yacc.prf:
+/usr/share/qt/mkspecs/features/lex.prf:
+/usr/share/qt/mkspecs/features/include_source_dir.prf:
+/usr/lib/libQtOpenGL.prl:
+/usr/lib/libQtGui.prl:
+/usr/lib/libQtCore.prl:
+qmake:  FORCE
+	@$(QMAKE) -o Makefile 3dmaze.pro
+
+dist: 
+	@$(CHK_DIR_EXISTS) .tmp/3dmaze1.0.0 || $(MKDIR) .tmp/3dmaze1.0.0 
+	$(COPY_FILE) --parents $(SOURCES) $(DIST) .tmp/3dmaze1.0.0/ && $(COPY_FILE) --parents mainwindow.h mazeengine.h mazewidget.h renderdialog.h renderwidget.h sizedialog.h .tmp/3dmaze1.0.0/ && $(COPY_FILE) --parents 3dMazeResources.qrc .tmp/3dmaze1.0.0/ && $(COPY_FILE) --parents main.cpp mainwindow.cpp mazeengine.cpp mazewidget.cpp renderdialog.cpp renderwidget.cpp sizedialog.cpp .tmp/3dmaze1.0.0/ && $(COPY_FILE) --parents about.ui mainwindow.ui render.ui sizedialog.ui .tmp/3dmaze1.0.0/ && (cd `dirname .tmp/3dmaze1.0.0` && $(TAR) 3dmaze1.0.0.tar 3dmaze1.0.0 && $(COMPRESS) 3dmaze1.0.0.tar) && $(MOVE) `dirname .tmp/3dmaze1.0.0`/3dmaze1.0.0.tar.gz . && $(DEL_FILE) -r .tmp/3dmaze1.0.0
+
+
+clean:compiler_clean 
+	-$(DEL_FILE) $(OBJECTS)
+	-$(DEL_FILE) *~ core *.core
+
+
+####### Sub-libraries
+
+distclean: clean
+	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) Makefile
+
+
+check: first
+
+mocclean: compiler_moc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_source_make_all
+
+compiler_moc_header_make_all: moc_mainwindow.cpp moc_renderdialog.cpp moc_renderwidget.cpp moc_sizedialog.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_mainwindow.cpp moc_renderdialog.cpp moc_renderwidget.cpp moc_sizedialog.cpp
+moc_mainwindow.cpp: mazewidget.h \
+		mazeengine.h \
+		renderdialog.h \
+		ui_render.h \
+		renderwidget.h \
+		mainwindow.h
+	/usr/bin/moc $(DEFINES) $(INCPATH) mainwindow.h -o moc_mainwindow.cpp
+
+moc_renderdialog.cpp: ui_render.h \
+		renderwidget.h \
+		mazeengine.h \
+		renderdialog.h
+	/usr/bin/moc $(DEFINES) $(INCPATH) renderdialog.h -o moc_renderdialog.cpp
+
+moc_renderwidget.cpp: mazeengine.h \
+		renderwidget.h
+	/usr/bin/moc $(DEFINES) $(INCPATH) renderwidget.h -o moc_renderwidget.cpp
+
+moc_sizedialog.cpp: sizedialog.h
+	/usr/bin/moc $(DEFINES) $(INCPATH) sizedialog.h -o moc_sizedialog.cpp
+
+compiler_rcc_make_all: qrc_3dMazeResources.cpp
+compiler_rcc_clean:
+	-$(DEL_FILE) qrc_3dMazeResources.cpp
+qrc_3dMazeResources.cpp: 3dMazeResources.qrc \
+		images/MazeSample.png \
+		images/stop \
+		images/texture.jpg \
+		images/amaze.png \
+		images/3d.png \
+		images/print \
+		images/setSize.png \
+		images/showSolution.png \
+		images/floor.jpg
+	/usr/bin/rcc -name 3dMazeResources 3dMazeResources.qrc -o qrc_3dMazeResources.cpp
+
+compiler_image_collection_make_all: qmake_image_collection.cpp
+compiler_image_collection_clean:
+	-$(DEL_FILE) qmake_image_collection.cpp
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all: ui_about.h ui_mainwindow.h ui_render.h ui_sizedialog.h
+compiler_uic_clean:
+	-$(DEL_FILE) ui_about.h ui_mainwindow.h ui_render.h ui_sizedialog.h
+ui_about.h: about.ui
+	/usr/bin/uic about.ui -o ui_about.h
+
+ui_mainwindow.h: mainwindow.ui \
+		mazewidget.h \
+		mazeengine.h
+	/usr/bin/uic mainwindow.ui -o ui_mainwindow.h
+
+ui_render.h: render.ui \
+		renderwidget.h \
+		mazeengine.h
+	/usr/bin/uic render.ui -o ui_render.h
+
+ui_sizedialog.h: sizedialog.ui
+	/usr/bin/uic sizedialog.ui -o ui_sizedialog.h
+
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_header_clean compiler_rcc_clean compiler_uic_clean 
+
+####### Compile
+
+main.o: main.cpp mainwindow.h \
+		mazewidget.h \
+		mazeengine.h \
+		renderdialog.h \
+		ui_render.h \
+		renderwidget.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
+
+mainwindow.o: mainwindow.cpp mainwindow.h \
+		mazewidget.h \
+		mazeengine.h \
+		renderdialog.h \
+		ui_render.h \
+		renderwidget.h \
+		ui_mainwindow.h \
+		sizedialog.h \
+		ui_about.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mainwindow.o mainwindow.cpp
+
+mazeengine.o: mazeengine.cpp mazeengine.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mazeengine.o mazeengine.cpp
+
+mazewidget.o: mazewidget.cpp mazewidget.h \
+		mazeengine.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o mazewidget.o mazewidget.cpp
+
+renderdialog.o: renderdialog.cpp renderdialog.h \
+		ui_render.h \
+		renderwidget.h \
+		mazeengine.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o renderdialog.o renderdialog.cpp
+
+renderwidget.o: renderwidget.cpp renderwidget.h \
+		mazeengine.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o renderwidget.o renderwidget.cpp
+
+sizedialog.o: sizedialog.cpp sizedialog.h \
+		ui_sizedialog.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o sizedialog.o sizedialog.cpp
+
+moc_mainwindow.o: moc_mainwindow.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_mainwindow.o moc_mainwindow.cpp
+
+moc_renderdialog.o: moc_renderdialog.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_renderdialog.o moc_renderdialog.cpp
+
+moc_renderwidget.o: moc_renderwidget.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_renderwidget.o moc_renderwidget.cpp
+
+moc_sizedialog.o: moc_sizedialog.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_sizedialog.o moc_sizedialog.cpp
+
+qrc_3dMazeResources.o: qrc_3dMazeResources.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_3dMazeResources.o qrc_3dMazeResources.cpp
+
+####### Install
+
+install:   FORCE
+
+uninstall:   FORCE
+
+FORCE:
+
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AboutDialog</class>
+ <widget class="QDialog" name="AboutDialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>435</width>
+    <height>385</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>About...</string>
+  </property>
+  <widget class="QDialogButtonBox" name="buttonBox">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>350</y>
+     <width>341</width>
+     <height>32</height>
+    </rect>
+   </property>
+   <property name="orientation">
+    <enum>Qt::Horizontal</enum>
+   </property>
+   <property name="standardButtons">
+    <set>QDialogButtonBox::Ok</set>
+   </property>
+   <property name="centerButtons">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QTabWidget" name="tabWidget">
+   <property name="geometry">
+    <rect>
+     <x>110</x>
+     <y>10</y>
+     <width>321</width>
+     <height>301</height>
+    </rect>
+   </property>
+   <property name="currentIndex">
+    <number>0</number>
+   </property>
+   <widget class="QWidget" name="AboutTab">
+    <attribute name="title">
+     <string>About</string>
+    </attribute>
+    <widget class="QTextEdit" name="textEdit_2">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>291</width>
+       <height>251</height>
+      </rect>
+     </property>
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:14px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:large; font-weight:600;&quot;&gt;A Maze&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This program generates a simple maze and optionally shows the solution to the maze.&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt; This program was written as an exercise in learning Qt and openGL. I often rewite this program when studying a new langauge in that it is fairly simple, but non-trivial &lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;This program uses an algorythm I first encounted in 1976 on a Microdata minicomputer running BASIC. That machine took several minutes to generate a maze, and then printed that maze on an ASR-33 Teletype at 110 Baud (~10 characters / sec)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QWidget" name="tab_2">
+    <attribute name="title">
+     <string>Credits</string>
+    </attribute>
+    <widget class="QTextEdit" name="textEdit_3">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>291</width>
+       <height>251</height>
+      </rect>
+     </property>
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:600;&quot;&gt;A Maze&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:496;&quot;&gt;Author&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Eric W Waller&lt;br /&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;ewwaller@gmail.com&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QWidget" name="tab">
+    <attribute name="title">
+     <string>Licence</string>
+    </attribute>
+    <widget class="QTextEdit" name="textEdit">
+     <property name="geometry">
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>291</width>
+       <height>251</height>
+      </rect>
+     </property>
+     <property name="horizontalScrollBarPolicy">
+      <enum>Qt::ScrollBarAlwaysOff</enum>
+     </property>
+     <property name="lineWrapMode">
+      <enum>QTextEdit::WidgetWidth</enum>
+     </property>
+     <property name="lineWrapColumnOrWidth">
+      <number>200</number>
+     </property>
+     <property name="readOnly">
+      <bool>true</bool>
+     </property>
+     <property name="html">
+      <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;title&gt;GNU General Public License - GNU Project - Free Software Foundation (FSF)&lt;/title&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot; bgcolor=&quot;#ffffff&quot;&gt;
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:medium; font-weight:600;&quot;&gt;A Maze -- A Maze Generator&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-style:italic;&quot;&gt;Copyright (C) 2009  Eric Waller&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;This program is free software; you  can redistribute it and/ormodify it under the terms of  the GNU General Public Licenseas published by the  Free Software Foundation; either version 2 of the  License, or (at your option) any later version.&lt;br /&gt;&lt;br /&gt;This  program 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 General Public  License for more details.&lt;br /&gt;&lt;br /&gt;You should have received a  copy of the GNU General Public Licensealong with this  program; if not, write to the Free Software Foundation,  Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+     </property>
+    </widget>
+   </widget>
+  </widget>
+  <widget class="QLabel" name="label">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>10</y>
+     <width>91</width>
+     <height>31</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <family>Comic Sans MS</family>
+     <pointsize>17</pointsize>
+    </font>
+   </property>
+   <property name="text">
+    <string>Amaze</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_2">
+   <property name="geometry">
+    <rect>
+     <x>10</x>
+     <y>40</y>
+     <width>81</width>
+     <height>221</height>
+    </rect>
+   </property>
+   <property name="autoFillBackground">
+    <bool>true</bool>
+   </property>
+   <property name="pixmap">
+    <pixmap>:/images/images/MazeSample.png</pixmap>
+   </property>
+   <property name="openExternalLinks">
+    <bool>true</bool>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_3">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>240</y>
+     <width>101</width>
+     <height>91</height>
+    </rect>
+   </property>
+   <property name="font">
+    <font>
+     <family>Comic Sans MS</family>
+     <pointsize>10</pointsize>
+    </font>
+   </property>
+   <property name="text">
+    <string>A Simple Maze Generator</string>
+   </property>
+   <property name="alignment">
+    <set>Qt::AlignCenter</set>
+   </property>
+   <property name="wordWrap">
+    <bool>true</bool>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>AboutDialog</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>AboutDialog</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>

File images/3d.png

Added
New image

File images/MazeSample.png

Added
New image

File images/amaze.png

Added
New image

File images/floor.jpg

Added
New image

File images/muv012.jpg

Added
New image

File images/print

Binary file added.

File images/setSize.png

Added
New image

File images/showSolution.png

Added
New image

File images/stop

Binary file added.

File images/texture.jpg

Added
New image
+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#include <QtGui/QApplication>
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+  QApplication::setGraphicsSystem (QString("raster")  );
+  QApplication a(argc, argv);
+  MainWindow w;
+  w.show();
+  return a.exec();
+}

File mainwindow.cpp

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "sizedialog.h"
+#include <QtCore/QSize>
+#include <QMessageBox>
+#include "ui_about.h"
+#include "ui_render.h"
+
+MainWindow::MainWindow(QWidget *parent)
+  : QMainWindow(parent), ui(new Ui::MainWindow)
+{
+  ui->setupUi(this);
+  connect (ui->actionSet_Size,SIGNAL(triggered()), this, SLOT(SetMazeSize()));
+  connect (ui->actionAbout, SIGNAL(triggered()), this, SLOT(About()));
+  connect (ui->actionAbout_Qt, SIGNAL(triggered()),this,SLOT(AboutQt()));
+  connect (ui->actionCopy, SIGNAL(triggered()),this,SLOT(Copy()));
+  connect (ui->actionNew_Maze, SIGNAL(triggered()),this,SLOT(NewMaze()));
+  connect (ui->actionPrint, SIGNAL(triggered()),this,SLOT(Print()));
+  connect (ui->actionShow_3d_Maze,SIGNAL(toggled(bool)),this,SLOT(Show3DMazeChanged(bool)));
+  connect (ui->actionShow_Solution,SIGNAL(toggled(bool)),this,SLOT(ShowSolutionChanged(bool)));
+  xSize=11; ySize=11;
+  xSize=21; ySize=21;
+  theRenderDialog = 0;
+  NewMaze();
+}
+
+MainWindow::~MainWindow()
+{
+  delete ui;
+}
+
+void MainWindow::SetMazeSize()
+{
+  SizeDialog theDialog;
+  theDialog.SetSize(xSize,ySize);
+  if (theDialog.exec() == QDialog::Accepted)
+    {
+      theDialog.GetSize(&xSize,&ySize);
+      xSize |= 1; ySize |=1;
+    }
+  NewMaze();
+}
+
+void MainWindow::NewMaze()
+{
+  ui->theMaze->CreateMaze(xSize,ySize);
+  if (theRenderDialog)
+    theRenderDialog->SetMazeEngine(ui->theMaze->GetMazeEngine(),ui->actionShow_Solution->isChecked());
+}
+
+void MainWindow::About()
+{
+  Ui_AboutDialog theAboutDialogSettings;
+  QDialog theAboutDialog;
+  theAboutDialogSettings.setupUi(&theAboutDialog);
+  theAboutDialog.exec();
+}
+
+void MainWindow::AboutQt()
+{
+  QMessageBox::aboutQt(this,"About QT");
+}
+
+void MainWindow::Print()
+{
+  ui->theMaze->printIt();
+}
+
+void MainWindow::Copy()
+{
+    ui->theMaze->Copy();
+}
+
+void MainWindow::ShowSolutionChanged(bool theNewState)
+{
+  ui->theMaze->setShowSolution(theNewState);
+  if (theRenderDialog)
+    theRenderDialog->SetMazeEngine(ui->theMaze->GetMazeEngine(),theNewState);
+}
+
+void MainWindow::Show3DMazeChanged(bool theNewState)
+{
+  if (theNewState)
+    {
+      if (! theRenderDialog)
+        theRenderDialog = new RenderDialog;
+      theRenderDialog->show();
+      connect (theRenderDialog,SIGNAL(ClosingRenderDialog()),this,SLOT(CloseRenderDialog()));
+      theRenderDialog->SetMazeEngine(ui->theMaze->GetMazeEngine(),ui->actionShow_Solution->isChecked()); 
+    }
+  else if (theRenderDialog)
+    theRenderDialog->close();
+}
+
+void MainWindow::CloseRenderDialog()
+{
+  ui->actionShow_3d_Maze->setChecked(false);
+  delete theRenderDialog;
+  theRenderDialog=0;
+}

File mainwindow.h

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QtGui/QMainWindow>
+#include <QtGui/QScrollArea>
+#include "mazewidget.h"
+#include "renderdialog.h"
+
+namespace Ui
+{
+  class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+  Q_OBJECT
+    
+    public:
+  MainWindow(QWidget *parent = 0);
+  ~MainWindow();
+  
+  public slots:
+  void SetMazeSize();
+  void About();
+  void AboutQt();
+  void Print();
+  void Copy();
+  void ShowSolutionChanged(bool theNewState);
+  void Show3DMazeChanged(bool theNewState);
+  void NewMaze();
+  void CloseRenderDialog();
+  
+ private:
+  Ui::MainWindow *ui;
+  unsigned int xSize,ySize;
+  QScrollArea *scrollArea;
+  MazeWidget *theMaze;
+  RenderDialog *theRenderDialog;
+};
+
+#endif // MAINWINDOW_H

File mainwindow.ui

+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>269</width>
+    <height>291</height>
+   </rect>
+  </property>
+  <property name="sizePolicy">
+   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+    <horstretch>0</horstretch>
+    <verstretch>0</verstretch>
+   </sizepolicy>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="CentralWidget">
+   <layout class="QGridLayout" name="gridLayout">
+    <item row="0" column="0">
+     <widget class="QScrollArea" name="scrollArea">
+      <property name="widgetResizable">
+       <bool>false</bool>
+      </property>
+      <widget class="MazeWidget" name="theMaze">
+       <property name="geometry">
+        <rect>
+         <x>0</x>
+         <y>0</y>
+         <width>249</width>
+         <height>186</height>
+        </rect>
+       </property>
+      </widget>
+     </widget>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menuBar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>269</width>
+     <height>23</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile">
+    <property name="title">
+     <string>File</string>
+    </property>
+    <addaction name="actionNew_Maze"/>
+    <addaction name="actionPrint"/>
+    <addaction name="separator"/>
+    <addaction name="actionQuit"/>
+   </widget>
+   <widget class="QMenu" name="menuEdit">
+    <property name="title">
+     <string>Edit</string>
+    </property>
+    <addaction name="actionCopy"/>
+   </widget>
+   <widget class="QMenu" name="menuMaze">
+    <property name="title">
+     <string>Maze</string>
+    </property>
+    <addaction name="actionSet_Size"/>
+    <addaction name="actionShow_Solution"/>
+    <addaction name="actionShow_3d_Maze"/>
+   </widget>
+   <widget class="QMenu" name="menuHelp">
+    <property name="title">
+     <string>Help</string>
+    </property>
+    <addaction name="actionAbout"/>
+    <addaction name="actionAbout_Qt"/>
+   </widget>
+   <addaction name="menuFile"/>
+   <addaction name="menuEdit"/>
+   <addaction name="menuMaze"/>
+   <addaction name="menuHelp"/>
+  </widget>
+  <widget class="QToolBar" name="mainToolBar">
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+  </widget>
+  <widget class="QStatusBar" name="statusBar"/>
+  <widget class="QToolBar" name="toolBar">
+   <property name="windowTitle">
+    <string>toolBar</string>
+   </property>
+   <attribute name="toolBarArea">
+    <enum>TopToolBarArea</enum>
+   </attribute>
+   <attribute name="toolBarBreak">
+    <bool>false</bool>
+   </attribute>
+   <addaction name="actionNew_Maze"/>
+   <addaction name="actionSet_Size"/>
+   <addaction name="actionShow_Solution"/>
+   <addaction name="actionShow_3d_Maze"/>
+  </widget>
+  <action name="actionNew_Maze">
+   <property name="checkable">
+    <bool>false</bool>
+   </property>
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/amaze.png</normaloff>:/images/images/amaze.png</iconset>
+   </property>
+   <property name="text">
+    <string>New Maze</string>
+   </property>
+  </action>
+  <action name="actionPrint">
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/print</normaloff>:/images/images/print</iconset>
+   </property>
+   <property name="text">
+    <string>Print...</string>
+   </property>
+  </action>
+  <action name="actionQuit">
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/stop</normaloff>:/images/images/stop</iconset>
+   </property>
+   <property name="text">
+    <string>Quit</string>
+   </property>
+  </action>
+  <action name="actionSet_Size">
+   <property name="checkable">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/setSize.png</normaloff>:/images/images/setSize.png</iconset>
+   </property>
+   <property name="text">
+    <string>Set Size...</string>
+   </property>
+  </action>
+  <action name="actionShow_Solution">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/showSolution.png</normaloff>:/images/images/showSolution.png</iconset>
+   </property>
+   <property name="text">
+    <string>Show Solution</string>
+   </property>
+  </action>
+  <action name="actionShow_3d_Maze">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="checked">
+    <bool>false</bool>
+   </property>
+   <property name="icon">
+    <iconset resource="3dMazeResources.qrc">
+     <normaloff>:/images/images/3d.png</normaloff>:/images/images/3d.png</iconset>
+   </property>
+   <property name="text">
+    <string>Show 3d Maze</string>
+   </property>
+  </action>
+  <action name="actionAbout">
+   <property name="text">
+    <string>About...</string>
+   </property>
+  </action>
+  <action name="actionAbout_Qt">
+   <property name="text">
+    <string>About Qt...</string>
+   </property>
+  </action>
+  <action name="actionCopy">
+   <property name="text">
+    <string>Copy</string>
+   </property>
+  </action>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <customwidgets>
+  <customwidget>
+   <class>MazeWidget</class>
+   <extends>QWidget</extends>
+   <header>mazewidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="3dMazeResources.qrc"/>
+ </resources>
+ <connections>
+  <connection>
+   <sender>actionQuit</sender>
+   <signal>activated()</signal>
+   <receiver>MainWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>131</x>
+     <y>134</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>

File mazeengine.cpp

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#include "mazeengine.h"
+
+MazeEngine::MazeEngine()
+{
+}
+
+MazeEngine::~MazeEngine()
+{
+}
+
+
+bool MazeEngine::IsMoveLegal (int x, int y)
+{
+  if (x < 1) return FALSE;			// Check for out of bounds on left
+  if (y < 1) return FALSE;			// on top
+  if (x > xSize - 1 ) return FALSE;		// on right
+  if (y > ySize -1) return FALSE;			// and on the bottom
+  return (!theMap[x + y * xSize]); 		// We are in bounds, if it is a Wall (0) it is legal
+}
+
+void MazeEngine::CreateMaze(int newXSize,int newYSize)
+{
+  xSize=newXSize;
+  ySize=newYSize;
+  // initialize the stack, when it is empty, we are done
+  QVector<Coordinate> theStack;
+  
+  // The map starts out as all walls. Size the map and fill it with walls
+  
+  theMap.fill(WALL,xSize * ySize);
+  
+  // Let's start in the upper left corner for now
+  
+  Coordinate theLocation;
+  theLocation.x = 1;
+  theLocation.y = 1;
+
+  // This is main loop.  It repeats until we have been
+  // to all coordinates where x and y are both odd
+  
+  do
+    {
+      // We are here, turn here into a path,  define storage for valid directions
+      
+      theMap[theLocation.x + xSize * theLocation.y] = PATH;
+      QVector<int> validDirections;
+      
+      // Check for valid directions, and store them in validDirection
+      for (int dir = NORTH  ; dir <= WEST  ; dir=dir+1)
+        if (IsMoveLegal (theLocation.x + 2 * dx[dir],
+                         theLocation.y + 2 * dy[dir]))
+          // A move is valid if the location two steps away has not been visted yet
+          // and if it is inbounds
+          validDirections.push_back(dir);
+
+      // If there are valid directions, then we are good to go forward
+
+      if (! validDirections.empty())
+        {
+          // If we have more than 1 choice,
+          // remember this locale so we can come back here later
+          
+          if (validDirections.size() > 1)
+            theStack.push_back(theLocation);
+          
+          // Pick a valid direction, Move one square in the chosen direction.
+          // stored in validDirections.  The offsets are the calculated from
+          //  dx[] and dy[].
+          
+          int dirindex = rand() % validDirections.size();
+          
+          // dirindex selects one of the known good directions which are
+          
+          theLocation.x +=dx[validDirections[dirindex]];
+          theLocation.y +=dy[validDirections[dirindex]];
+          
+          //Now, one of the coordinates is odd and the other
+          // is even.  Turn this intermediate spot into a path.
+          
+          theMap[theLocation.x + xSize * theLocation.y] = PATH;
+          
+          // Move another space in the chosen direction.  both coordinates will be again odd.
+          
+          theLocation.x +=dx[validDirections[dirindex]];
+          theLocation.y +=dy[validDirections[dirindex]];
+          
+        }
+
+      else
+        // no valid directions, we are stuck, so back up to the last place we had a choice.
+        {
+          // get the most recent location we have been where there was a choice.
+          // go there, and pop that location off the stack.
+          
+          theLocation = theStack.back();
+          theStack.pop_back();			
+        }
+    }while ( ! theStack.empty() );
+  
+  // If we have reached this point, the return coordinate stack is empty, We have been everywhere once.
+  // Stick a fork in us, we are done. (almost).  We still need an exit and an enterance
+  
+  // Allocate storage for the exit point. Exit is in the right side
+  // pick an odd location along the right edge. Knock a hole for the exit
+  
+  Coordinate endPoint;
+  endPoint.x = xSize-1;
+  endPoint.y = (rand() % (ySize - 2)) | 1	;
+  theMap[endPoint.x + xSize * endPoint.y]= PATH;
+  
+  // The entrance is on the left Pick an odd location along the left edge.
+  // Turn the entrance into a path.
+  
+  theLocation.x=0;
+  theLocation.y=(rand() % (ySize - 2)) | 1;		//
+  theMap[theLocation.x + xSize * theLocation.y] = PATH;
+  
+  // Now find the solution.  To do this, we will find the right hand solution
+  
+  // We know the entrance is on the left, so we must start at the enterance going east
+  
+  int dir = EAST;
+  Coordinate oldLocation;
+  
+  // Wander around until we find the exit
+  
+  while ((theLocation.x != endPoint.x ) || (theLocation.y != endPoint.y ))
+    {
+      // Turn the path into the solution. (drop a bread crumb)
+      
+      theMap[theLocation.x + xSize * theLocation.y] = SOLUTION ;
+      
+      // Remember where we were, then move in our current direction.
+      
+      oldLocation = theLocation;
+      theLocation.x += dx[dir];
+      theLocation.y += dy[dir];
+      
+      // See if we have been here already.  If so, from whence we came is not part of the
+      //  solution (Pick up the bread crumb)
+      if (theMap[theLocation.x + xSize * theLocation.y] == SOLUTION)
+        theMap[oldLocation.x + xSize * oldLocation.y] = PATH ;
+      
+      //  Turn right.
+      
+      if (++dir > WEST)
+        dir = NORTH;
+      
+      // If there is a wall in front of us, turn left until we have a clear path
+      // there are only four directions.  One of them has to work since we are here
+      while (theMap[theLocation.x+dx[dir] +
+                    xSize * (theLocation.y + dy[dir])] == WALL)
+        if (--dir  < NORTH)
+          dir = WEST; 					//
+        }
+
+  // We are at the exit.  It too is part of the solution
+  
+  theMap[theLocation.x + xSize * theLocation.y] = SOLUTION ;
+}
+

File mazeengine.h

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#ifndef MAZEENGINE_H
+#define MAZEENGINE_H
+#include <QtCore>
+static const int dx[] = {0,1,0,-1};
+static const int dy[] = {-1,0,1,0};
+
+class MazeEngine
+{
+ public:
+  MazeEngine();
+  ~MazeEngine();
+  void CreateMaze(int newXSize, int newYSize);
+  int GetXSize(void) {return xSize;}
+  int GetYSize(void) {return ySize;}
+  enum MapLegend { WALL , PATH , SOLUTION };
+  unsigned int GetMapData(int x,int y) { return theMap[x + xSize * y];}
+ private:
+  struct Coordinate {int x ; int y;};
+  enum CompassDirection {NORTH,EAST,SOUTH,WEST};
+  
+  QVector<int> theMap;
+  int xSize;   		// The width of the maze
+  int ySize;   		// The Height of the maze
+  bool IsMoveLegal(int x, int y);
+};
+
+#endif // MAZEENGINE_H

File mazewidget.cpp

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#include "mazewidget.h"
+#include <QtGui>
+
+//MazeWidget::MazeWidget(QWidget *parent):
+//        QWidget(parent)
+MazeWidget::MazeWidget(QWidget *parent):
+  QWidget(parent)
+{
+  scale = 5;
+  theMaze.CreateMaze(5,5);
+  ShowSolution=false;
+}
+
+MazeWidget::~MazeWidget()
+{
+  
+}
+
+MazeEngine* MazeWidget::GetMazeEngine()
+{
+  return &theMaze;    
+}
+
+void MazeWidget::setShowSolution(bool theSolution)
+{
+  ShowSolution = theSolution;	//Change the state of showing the solution to the maze
+  repaint();
+}
+
+void MazeWidget::DrawIt(QPainter* paint)
+{
+  // We have been directed by some event to draw the maze
+  for ( int x =0; x < theMaze.GetXSize() ; x++)
+    for ( int y=0 ; y < theMaze.GetYSize() ; y++)
+      {
+        
+        // Check if we are drawing walls
+        
+        if ( theMaze.GetMapData(x,theMaze.GetYSize()-1-y) == theMaze.WALL )
+          {
+            // We are drawing walls Most of the area around walls are white (the walls are thin)
+            paint->fillRect(x*scale , y*scale,scale,scale,Qt::white);
+            // Check all four directions to see in which directions the wall extends
+            for (int i=0 ; i<4 ; i++)
+              {
+                int  xLook=x+dx[i];
+                int  yLook=y+dy[i];
+                // Do not go out of bounds!
+                if (!(xLook < 0 || xLook>theMaze.GetXSize()-1 || (theMaze.GetYSize()-1-yLook) <0 
+                      || (theMaze.GetYSize()-1-yLook) > theMaze.GetYSize()-1))
+                  if (theMaze.GetMapData(xLook, theMaze.GetYSize()-1-yLook) == theMaze.WALL)
+                    {
+                      // Is it a wall in that direction ? If so draw a wall
+                      // from here to there
+                      paint->setPen(Qt::black);
+                      paint->drawLine (x*scale + scale/2, y*scale +scale/2,
+                                       x*scale+(scale + dx[i]*scale)/2 ,
+                                       y*scale+(scale+dy[i]*scale)/2);
+                    }
+              }
+          }
+        else
+          {
+            // Paths are white Unless the path is the solution and
+            // the user wants to see it.
+            
+            QColor theColor=Qt::white;
+            if (ShowSolution && theMaze.GetMapData(x,theMaze.GetYSize()-1-y)== theMaze.SOLUTION)
+              theColor=Qt::red;
+            paint->fillRect (x * scale, y * scale, scale, scale,theColor);
+          }
+      }
+}
+void MazeWidget::paintEvent( QPaintEvent * )
+{
+  QPainter paint( this );
+  DrawIt( &paint );
+}
+
+void MazeWidget::printIt()
+{
+  QPrinter printer;
+  QPrintDialog printDialog(&printer, this);
+  
+  if (printDialog.exec() == QDialog::Accepted)
+    {
+      QPainter paint;
+      if( !paint.begin(&printer ) )
+        return;
+      DrawIt( &paint );
+    }
+}
+void MazeWidget::Copy()
+{
+}
+
+void MazeWidget::CreateMaze(int newXSize, int newYSize)
+{
+  resize(newXSize*scale,newYSize*scale);
+  theMaze.CreateMaze(newXSize,newYSize);
+  repaint();
+  
+}

File mazewidget.h

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#ifndef MAZEWIDGET_H
+#define MAZEWIDGET_H
+
+#include <QScrollArea>
+#include "mazeengine.h"
+
+class MazeWidget : public QWidget
+{
+ public:
+  MazeWidget(QWidget *parent=0);
+  ~MazeWidget();
+  void paintEvent( QPaintEvent * );
+  void printIt(void);
+  void Copy(void);
+  void CreateMaze(int newXSize, int newYSize);
+  void setShowSolution(bool theSolution);
+  MazeEngine* GetMazeEngine();
+ private:
+  MazeEngine theMaze;
+  void DrawIt(QPainter* paint);
+  bool ShowSolution;
+  unsigned int scale;
+};
+
+#endif // MAZEWIDGET_H
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>threeDdialog</class>
+ <widget class="QDialog" name="threeDdialog">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>760</width>
+    <height>636</height>
+   </rect>
+  </property>
+  <property name="minimumSize">
+   <size>
+    <width>0</width>
+    <height>0</height>
+   </size>
+  </property>
+  <property name="windowTitle">
+   <string>3D Map</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="1" column="0">
+    <widget class="RenderWidget" name="renderWidget" native="true">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox">
+     <property name="sizePolicy">
+      <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+       <horstretch>0</horstretch>
+       <verstretch>0</verstretch>
+      </sizepolicy>
+     </property>
+     <property name="minimumSize">
+      <size>
+       <width>0</width>
+       <height>111</height>
+      </size>
+     </property>
+     <property name="autoFillBackground">
+      <bool>true</bool>
+     </property>
+     <property name="title">
+      <string>Controls</string>
+     </property>
+     <property name="flat">
+      <bool>false</bool>
+     </property>
+     <widget class="QLabel" name="label_5">
+      <property name="geometry">
+       <rect>
+        <x>230</x>
+        <y>90</y>
+        <width>81</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Heading</string>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignCenter</set>
+      </property>
+     </widget>
+     <widget class="QDial" name="rotZ">
+      <property name="geometry">
+       <rect>
+        <x>240</x>
+        <y>30</y>
+        <width>61</width>
+        <height>61</height>
+       </rect>
+      </property>
+      <property name="maximum">
+       <number>5759</number>
+      </property>
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="wrapping">
+       <bool>true</bool>
+      </property>
+      <property name="notchTarget">
+       <double>64.000000000000000</double>
+      </property>
+      <property name="notchesVisible">
+       <bool>true</bool>
+      </property>
+     </widget>
+     <widget class="QDial" name="rotX">
+      <property name="geometry">
+       <rect>
+        <x>170</x>
+        <y>30</y>
+        <width>61</width>
+        <height>61</height>
+       </rect>
+      </property>
+      <property name="maximum">
+       <number>5759</number>
+      </property>
+      <property name="value">
+       <number>5000</number>
+      </property>
+      <property name="orientation">
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="wrapping">
+       <bool>true</bool>
+      </property>
+      <property name="notchTarget">
+       <double>64.000000000000000</double>
+      </property>
+      <property name="notchesVisible">
+       <bool>true</bool>
+      </property>
+     </widget>
+     <widget class="QLabel" name="label_4">
+      <property name="geometry">
+       <rect>
+        <x>170</x>
+        <y>90</y>
+        <width>61</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Pitch</string>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignCenter</set>
+      </property>
+     </widget>
+     <widget class="QDoubleSpinBox" name="eyeZ">
+      <property name="geometry">
+       <rect>
+        <x>50</x>
+        <y>80</y>
+        <width>81</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="decimals">
+       <number>4</number>
+      </property>
+      <property name="minimum">
+       <double>-20.000000000000000</double>
+      </property>
+      <property name="maximum">
+       <double>20.000000000000000</double>
+      </property>
+      <property name="singleStep">
+       <double>0.010000000000000</double>
+      </property>
+      <property name="value">
+       <double>-0.100000000000000</double>
+      </property>
+     </widget>
+     <widget class="QLabel" name="label_3">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>90</y>
+        <width>21</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Z</string>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+      </property>
+     </widget>
+     <widget class="QDoubleSpinBox" name="eyeY">
+      <property name="geometry">
+       <rect>
+        <x>50</x>
+        <y>50</y>
+        <width>81</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="decimals">
+       <number>4</number>
+      </property>
+      <property name="minimum">
+       <double>-20.000000000000000</double>
+      </property>
+      <property name="maximum">
+       <double>20.000000000000000</double>
+      </property>
+      <property name="singleStep">
+       <double>0.010000000000000</double>
+      </property>
+     </widget>
+     <widget class="QLabel" name="label_2">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>60</y>
+        <width>20</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>Y</string>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+      </property>
+     </widget>
+     <widget class="QDoubleSpinBox" name="eyeX">
+      <property name="geometry">
+       <rect>
+        <x>50</x>
+        <y>20</y>
+        <width>81</width>
+        <height>31</height>
+       </rect>
+      </property>
+      <property name="decimals">
+       <number>4</number>
+      </property>
+      <property name="minimum">
+       <double>-20.000000000000000</double>
+      </property>
+      <property name="maximum">
+       <double>20.000000000000000</double>
+      </property>
+      <property name="singleStep">
+       <double>0.010000000000000</double>
+      </property>
+     </widget>
+     <widget class="QLabel" name="label">
+      <property name="geometry">
+       <rect>
+        <x>20</x>
+        <y>30</y>
+        <width>20</width>
+        <height>20</height>
+       </rect>
+      </property>
+      <property name="text">
+       <string>X</string>
+      </property>
+      <property name="alignment">
+       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+      </property>
+     </widget>
+     <widget class="QTextEdit" name="statusEdit">
+      <property name="geometry">
+       <rect>
+        <x>313</x>
+        <y>30</y>
+        <width>161</width>
+        <height>66</height>
+       </rect>
+      </property>
+     </widget>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>RenderWidget</class>
+   <extends>QWidget</extends>
+   <header>renderwidget.h</header>
+   <container>1</container>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>

File renderdialog.cpp

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#include "renderdialog.h"
+#include "ui_render.h"
+
+RenderDialog::RenderDialog(QDialog * parent):QDialog(parent)
+{
+  ui = new Ui_threeDdialog;
+  ui->setupUi(this);
+  connect (ui->eyeX,SIGNAL(valueChanged(double)),ui->renderWidget,SLOT(setX(double)));
+  connect (ui->eyeY,SIGNAL(valueChanged(double)),ui->renderWidget,SLOT(setY(double)));
+  connect (ui->eyeZ,SIGNAL(valueChanged(double)),ui->renderWidget,SLOT(setZ(double)));
+  connect (ui->rotX,SIGNAL(valueChanged(int)),ui->renderWidget,SLOT(setXRotation(int)));
+  //connect (ui->rotY,SIGNAL(valueChanged(int)),ui->renderWidget,SLOT(setYRotation(int)));
+  connect (ui->rotZ,SIGNAL(valueChanged(int)),ui->renderWidget,SLOT(setZRotation(int)));
+  connect (ui->renderWidget,SIGNAL(xRotationChanged(int)),ui->rotX,SLOT(setValue(int)));
+  //connect (ui->renderWidget,SIGNAL(yRotationChanged(int)),ui->rotY,SLOT(setValue(int)));
+  connect (ui->renderWidget,SIGNAL(zRotationChanged(int)),ui->rotZ,SLOT(setValue(int)));
+  connect (ui->renderWidget,SIGNAL(xChanged(double)),ui->eyeX,SLOT(setValue(double)));
+  connect (ui->renderWidget,SIGNAL(yChanged(double)),ui->eyeY,SLOT(setValue(double)));
+  connect (ui->renderWidget,SIGNAL(zChanged(double)),ui->eyeZ,SLOT(setValue(double)));
+  connect (ui->renderWidget,SIGNAL(telemetry(QString)),ui->statusEdit,SLOT(setText(QString)));
+}
+
+RenderDialog::~RenderDialog()
+{
+  delete ui;
+}
+
+void RenderDialog::closeEvent(QCloseEvent *event)
+{
+  emit(this->ClosingRenderDialog());
+  event->accept();
+}
+
+void RenderDialog::SetMazeEngine(MazeEngine* theNewMaze, bool newShowSolution)
+{
+  ui->renderWidget->SetMazeEngine(theNewMaze, newShowSolution);
+}

File renderdialog.h

+/* Copyright (C) 2010 by Eric Waller 
+  
+   Build and display a maze in either 2-D or 3-D
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+   
+   This program 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 General Public License for more details.
+   
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+   ewwaller@gmail.com
+
+   Revision History
+
+   Date        Author      Description
+   ---------   ----------  -----------
+   2010.7.20   E Waller    Initial Release
+*/
+
+#ifndef RENDERDIALOG_H
+#define RENDERDIALOG_H
+
+#include <QDialog>
+#include <QCloseEvent>
+#include "ui_render.h"
+
+class RenderDialog : public QDialog
+{
+  Q_OBJECT
+    
+    private:
+  Ui_threeDdialog *ui;