From a42277d4d950d32459b16b3ec8ee8287c9c0afab Mon Sep 17 00:00:00 2001 From: Shamus Hammons Date: Fri, 30 Aug 2013 08:22:14 -0500 Subject: [PATCH] Added infrastructure to support mirror tool, cross compile script. --- .gitignore | 8 + Makefile | 605 -------------------------------------- TODO | 2 + architektonas.pro | 4 + cross-compile | 17 ++ res/architektonas-icon.o | Bin 0 -> 33008 bytes src/applicationwindow.cpp | 4 + src/applicationwindow.h | 5 +- src/line.cpp | 51 ++++ src/line.h | 1 + src/mirroraction.cpp | 3 + src/object.cpp | 6 + src/object.h | 1 + 13 files changed, 101 insertions(+), 606 deletions(-) create mode 100644 .gitignore delete mode 100644 Makefile create mode 100755 cross-compile create mode 100644 res/architektonas-icon.o diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..090323f --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +Makefile +obj/* +release/* +*.drawing +res.old/* +*.ui +pix/* +res/*.xcf diff --git a/Makefile b/Makefile deleted file mode 100644 index a4967bb..0000000 --- a/Makefile +++ /dev/null @@ -1,605 +0,0 @@ -############################################################################# -# Makefile for building: architektonas -# Generated by qmake (2.01a) (Qt 4.8.5) on: Thu Aug 29 11:22:55 2013 -# Project: architektonas.pro -# Template: app -# Command: /usr/bin/qmake -o Makefile architektonas.pro -############################################################################# - -####### Compiler, tools and options - -CC = gcc -CXX = g++ -DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) -CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) -INCPATH = -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -Isrc -Iobj -LINK = g++ -LFLAGS = -Wl,-O1 -LIBS = $(SUBLIBS) -L/usr/lib64/qt4 -lQtGui -L/usr/lib64 -L/usr/lib64/qt4 -L/usr/X11R6/lib -lQtCore -lgthread-2.0 -lrt -lglib-2.0 -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 = obj/ - -####### Files - -SOURCES = src/about.cpp \ - src/action.cpp \ - src/applicationwindow.cpp \ - src/arc.cpp \ - src/baseunittab.cpp \ - src/blockitemwidget.cpp \ - src/blockwidget.cpp \ - src/circle.cpp \ - src/connection.cpp \ - src/container.cpp \ - src/dimension.cpp \ - src/drawingview.cpp \ - src/drawarcaction.cpp \ - src/drawcircleaction.cpp \ - src/drawdimensionaction.cpp \ - src/drawlineaction.cpp \ - src/drawtextaction.cpp \ - src/ellipse.cpp \ - src/fileio.cpp \ - src/generaltab.cpp \ - src/layerwidget.cpp \ - src/layeritemwidget.cpp \ - src/line.cpp \ - src/main.cpp \ - src/mirroraction.cpp \ - src/object.cpp \ - src/painter.cpp \ - src/settingsdialog.cpp \ - src/text.cpp \ - src/vector.cpp obj/moc_action.cpp \ - obj/moc_applicationwindow.cpp \ - obj/moc_baseunittab.cpp \ - obj/moc_blockitemwidget.cpp \ - obj/moc_blockwidget.cpp \ - obj/moc_drawingview.cpp \ - obj/moc_generaltab.cpp \ - obj/moc_layerwidget.cpp \ - obj/moc_layeritemwidget.cpp \ - obj/moc_settingsdialog.cpp \ - obj/qrc_architektonas.cpp -OBJECTS = obj/about.o \ - obj/action.o \ - obj/applicationwindow.o \ - obj/arc.o \ - obj/baseunittab.o \ - obj/blockitemwidget.o \ - obj/blockwidget.o \ - obj/circle.o \ - obj/connection.o \ - obj/container.o \ - obj/dimension.o \ - obj/drawingview.o \ - obj/drawarcaction.o \ - obj/drawcircleaction.o \ - obj/drawdimensionaction.o \ - obj/drawlineaction.o \ - obj/drawtextaction.o \ - obj/ellipse.o \ - obj/fileio.o \ - obj/generaltab.o \ - obj/layerwidget.o \ - obj/layeritemwidget.o \ - obj/line.o \ - obj/main.o \ - obj/mirroraction.o \ - obj/object.o \ - obj/painter.o \ - obj/settingsdialog.o \ - obj/text.o \ - obj/vector.o \ - obj/moc_action.o \ - obj/moc_applicationwindow.o \ - obj/moc_baseunittab.o \ - obj/moc_blockitemwidget.o \ - obj/moc_blockwidget.o \ - obj/moc_drawingview.o \ - obj/moc_generaltab.o \ - obj/moc_layerwidget.o \ - obj/moc_layeritemwidget.o \ - obj/moc_settingsdialog.o \ - obj/qrc_architektonas.o -DIST = /usr/share/qt4/mkspecs/common/unix.conf \ - /usr/share/qt4/mkspecs/common/linux.conf \ - /usr/share/qt4/mkspecs/common/gcc-base.conf \ - /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ - /usr/share/qt4/mkspecs/common/g++-base.conf \ - /usr/share/qt4/mkspecs/common/g++-unix.conf \ - /usr/share/qt4/mkspecs/qconfig.pri \ - /usr/share/qt4/mkspecs/modules/qt_phonon.pri \ - /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \ - /usr/share/qt4/mkspecs/features/qt_functions.prf \ - /usr/share/qt4/mkspecs/features/qt_config.prf \ - /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ - /usr/share/qt4/mkspecs/features/default_pre.prf \ - /usr/share/qt4/mkspecs/features/release.prf \ - /usr/share/qt4/mkspecs/features/default_post.prf \ - /usr/share/qt4/mkspecs/features/warn_on.prf \ - /usr/share/qt4/mkspecs/features/qt.prf \ - /usr/share/qt4/mkspecs/features/unix/thread.prf \ - /usr/share/qt4/mkspecs/features/moc.prf \ - /usr/share/qt4/mkspecs/features/shared.prf \ - /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.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 \ - architektonas.pro -QMAKE_TARGET = architektonas -DESTDIR = -TARGET = architektonas - -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): $(OBJECTS) - $(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS) - -Makefile: architektonas.pro /usr/share/qt4/mkspecs/linux-g++/qmake.conf /usr/share/qt4/mkspecs/common/unix.conf \ - /usr/share/qt4/mkspecs/common/linux.conf \ - /usr/share/qt4/mkspecs/common/gcc-base.conf \ - /usr/share/qt4/mkspecs/common/gcc-base-unix.conf \ - /usr/share/qt4/mkspecs/common/g++-base.conf \ - /usr/share/qt4/mkspecs/common/g++-unix.conf \ - /usr/share/qt4/mkspecs/qconfig.pri \ - /usr/share/qt4/mkspecs/modules/qt_phonon.pri \ - /usr/share/qt4/mkspecs/modules/qt_webkit_version.pri \ - /usr/share/qt4/mkspecs/features/qt_functions.prf \ - /usr/share/qt4/mkspecs/features/qt_config.prf \ - /usr/share/qt4/mkspecs/features/exclusive_builds.prf \ - /usr/share/qt4/mkspecs/features/default_pre.prf \ - /usr/share/qt4/mkspecs/features/release.prf \ - /usr/share/qt4/mkspecs/features/default_post.prf \ - /usr/share/qt4/mkspecs/features/warn_on.prf \ - /usr/share/qt4/mkspecs/features/qt.prf \ - /usr/share/qt4/mkspecs/features/unix/thread.prf \ - /usr/share/qt4/mkspecs/features/moc.prf \ - /usr/share/qt4/mkspecs/features/shared.prf \ - /usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.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 \ - /usr/lib64/qt4/libQtGui.prl \ - /usr/lib64/qt4/libQtCore.prl - $(QMAKE) -o Makefile architektonas.pro -/usr/share/qt4/mkspecs/common/unix.conf: -/usr/share/qt4/mkspecs/common/linux.conf: -/usr/share/qt4/mkspecs/common/gcc-base.conf: -/usr/share/qt4/mkspecs/common/gcc-base-unix.conf: -/usr/share/qt4/mkspecs/common/g++-base.conf: -/usr/share/qt4/mkspecs/common/g++-unix.conf: -/usr/share/qt4/mkspecs/qconfig.pri: -/usr/share/qt4/mkspecs/modules/qt_phonon.pri: -/usr/share/qt4/mkspecs/modules/qt_webkit_version.pri: -/usr/share/qt4/mkspecs/features/qt_functions.prf: -/usr/share/qt4/mkspecs/features/qt_config.prf: -/usr/share/qt4/mkspecs/features/exclusive_builds.prf: -/usr/share/qt4/mkspecs/features/default_pre.prf: -/usr/share/qt4/mkspecs/features/release.prf: -/usr/share/qt4/mkspecs/features/default_post.prf: -/usr/share/qt4/mkspecs/features/warn_on.prf: -/usr/share/qt4/mkspecs/features/qt.prf: -/usr/share/qt4/mkspecs/features/unix/thread.prf: -/usr/share/qt4/mkspecs/features/moc.prf: -/usr/share/qt4/mkspecs/features/shared.prf: -/usr/share/qt4/mkspecs/features/unix/gdb_dwarf_index.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: -/usr/lib64/qt4/libQtGui.prl: -/usr/lib64/qt4/libQtCore.prl: -qmake: FORCE - @$(QMAKE) -o Makefile architektonas.pro - -dist: - @$(CHK_DIR_EXISTS) obj/architektonas1.0.0 || $(MKDIR) obj/architektonas1.0.0 - $(COPY_FILE) --parents $(SOURCES) $(DIST) obj/architektonas1.0.0/ && $(COPY_FILE) --parents src/about.h src/action.h src/applicationwindow.h src/arc.h src/baseunittab.h src/blockitemwidget.h src/blockwidget.h src/circle.h src/connection.h src/container.h src/dimension.h src/drawingview.h src/drawarcaction.h src/drawcircleaction.h src/drawdimensionaction.h src/drawlineaction.h src/drawtextaction.h src/ellipse.h src/fileio.h src/generaltab.h src/layerwidget.h src/layeritemwidget.h src/line.h src/main.h src/mirroraction.h src/mathconstants.h src/object.h src/painter.h src/settingsdialog.h src/text.h src/vector.h obj/architektonas1.0.0/ && $(COPY_FILE) --parents res/architektonas.qrc obj/architektonas1.0.0/ && $(COPY_FILE) --parents src/about.cpp src/action.cpp src/applicationwindow.cpp src/arc.cpp src/baseunittab.cpp src/blockitemwidget.cpp src/blockwidget.cpp src/circle.cpp src/connection.cpp src/container.cpp src/dimension.cpp src/drawingview.cpp src/drawarcaction.cpp src/drawcircleaction.cpp src/drawdimensionaction.cpp src/drawlineaction.cpp src/drawtextaction.cpp src/ellipse.cpp src/fileio.cpp src/generaltab.cpp src/layerwidget.cpp src/layeritemwidget.cpp src/line.cpp src/main.cpp src/mirroraction.cpp src/object.cpp src/painter.cpp src/settingsdialog.cpp src/text.cpp src/vector.cpp obj/architektonas1.0.0/ && (cd `dirname obj/architektonas1.0.0` && $(TAR) architektonas1.0.0.tar architektonas1.0.0 && $(COMPRESS) architektonas1.0.0.tar) && $(MOVE) `dirname obj/architektonas1.0.0`/architektonas1.0.0.tar.gz . && $(DEL_FILE) -r obj/architektonas1.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: obj/moc_action.cpp obj/moc_applicationwindow.cpp obj/moc_baseunittab.cpp obj/moc_blockitemwidget.cpp obj/moc_blockwidget.cpp obj/moc_drawingview.cpp obj/moc_generaltab.cpp obj/moc_layerwidget.cpp obj/moc_layeritemwidget.cpp obj/moc_settingsdialog.cpp -compiler_moc_header_clean: - -$(DEL_FILE) obj/moc_action.cpp obj/moc_applicationwindow.cpp obj/moc_baseunittab.cpp obj/moc_blockitemwidget.cpp obj/moc_blockwidget.cpp obj/moc_drawingview.cpp obj/moc_generaltab.cpp obj/moc_layerwidget.cpp obj/moc_layeritemwidget.cpp obj/moc_settingsdialog.cpp -obj/moc_action.cpp: src/vector.h \ - src/action.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/action.h -o obj/moc_action.cpp - -obj/moc_applicationwindow.cpp: src/applicationwindow.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/applicationwindow.h -o obj/moc_applicationwindow.cpp - -obj/moc_baseunittab.cpp: src/baseunittab.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/baseunittab.h -o obj/moc_baseunittab.cpp - -obj/moc_blockitemwidget.cpp: src/blockitemwidget.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/blockitemwidget.h -o obj/moc_blockitemwidget.cpp - -obj/moc_blockwidget.cpp: src/blockwidget.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/blockwidget.h -o obj/moc_blockwidget.cpp - -obj/moc_drawingview.cpp: src/action.h \ - src/vector.h \ - src/container.h \ - src/object.h \ - src/connection.h \ - src/drawingview.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/drawingview.h -o obj/moc_drawingview.cpp - -obj/moc_generaltab.cpp: src/generaltab.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/generaltab.h -o obj/moc_generaltab.cpp - -obj/moc_layerwidget.cpp: src/layerwidget.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/layerwidget.h -o obj/moc_layerwidget.cpp - -obj/moc_layeritemwidget.cpp: src/layeritemwidget.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/layeritemwidget.h -o obj/moc_layeritemwidget.cpp - -obj/moc_settingsdialog.cpp: src/settingsdialog.h - /usr/bin/moc $(DEFINES) $(INCPATH) src/settingsdialog.h -o obj/moc_settingsdialog.cpp - -compiler_rcc_make_all: obj/qrc_architektonas.cpp -compiler_rcc_clean: - -$(DEL_FILE) obj/qrc_architektonas.cpp -obj/qrc_architektonas.cpp: res/architektonas.qrc \ - res/fix-angle.png \ - res/file-new.png \ - res/add-circle-tool.png \ - res/disconnect-tool.png \ - res/delete-tool.png \ - res/eye-closed.png \ - res/file-save.png \ - res/file-save-as.png \ - res/lock-open.png \ - res/splash.png \ - res/snap-to-grid-tool.png \ - res/file-open.png \ - res/add-polygon-tool.png \ - res/settings.png \ - res/add-arc-tool.png \ - res/file-close.png \ - res/connect-tool.png \ - res/mirror-tool.png \ - res/atns-icon.png \ - res/group-tool.png \ - res/about-logo.png \ - res/add-line-tool.png \ - res/rotate-tool.png \ - res/quit.png \ - res/lock-closed.png \ - res/zoom-out.png \ - res/eye-open.png \ - res/fix-length.png \ - res/dimension-tool.png \ - res/generic-tool.png \ - res/zoom-in.png - /usr/bin/rcc -name architektonas res/architektonas.qrc -o obj/qrc_architektonas.cpp - -compiler_image_collection_make_all: obj/qmake_image_collection.cpp -compiler_image_collection_clean: - -$(DEL_FILE) obj/qmake_image_collection.cpp -compiler_moc_source_make_all: -compiler_moc_source_clean: -compiler_uic_make_all: -compiler_uic_clean: -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 - -####### Compile - -obj/about.o: src/about.cpp src/about.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/about.o src/about.cpp - -obj/action.o: src/action.cpp src/action.h \ - src/vector.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/action.o src/action.cpp - -obj/applicationwindow.o: src/applicationwindow.cpp src/applicationwindow.h \ - src/about.h \ - src/blockwidget.h \ - src/drawingview.h \ - src/action.h \ - src/vector.h \ - src/container.h \ - src/object.h \ - src/connection.h \ - src/drawarcaction.h \ - src/drawcircleaction.h \ - src/drawdimensionaction.h \ - src/drawlineaction.h \ - src/fileio.h \ - src/generaltab.h \ - src/layerwidget.h \ - src/mirroraction.h \ - src/painter.h \ - src/settingsdialog.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/applicationwindow.o src/applicationwindow.cpp - -obj/arc.o: src/arc.cpp src/arc.h \ - src/object.h \ - src/vector.h \ - src/connection.h \ - src/mathconstants.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/arc.o src/arc.cpp - -obj/baseunittab.o: src/baseunittab.cpp src/baseunittab.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/baseunittab.o src/baseunittab.cpp - -obj/blockitemwidget.o: src/blockitemwidget.cpp src/blockitemwidget.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/blockitemwidget.o src/blockitemwidget.cpp - -obj/blockwidget.o: src/blockwidget.cpp src/blockwidget.h \ - src/blockitemwidget.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/blockwidget.o src/blockwidget.cpp - -obj/circle.o: src/circle.cpp src/circle.h \ - src/object.h \ - src/vector.h \ - src/connection.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/circle.o src/circle.cpp - -obj/connection.o: src/connection.cpp src/connection.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/connection.o src/connection.cpp - -obj/container.o: src/container.cpp src/container.h \ - src/object.h \ - src/vector.h \ - src/connection.h \ - src/dimension.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/container.o src/container.cpp - -obj/dimension.o: src/dimension.cpp src/dimension.h \ - src/connection.h \ - src/object.h \ - src/vector.h \ - src/mathconstants.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/dimension.o src/dimension.cpp - -obj/drawingview.o: src/drawingview.cpp src/drawingview.h \ - src/action.h \ - src/vector.h \ - src/container.h \ - src/object.h \ - src/connection.h \ - src/mathconstants.h \ - src/arc.h \ - src/circle.h \ - src/dimension.h \ - src/line.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawingview.o src/drawingview.cpp - -obj/drawarcaction.o: src/drawarcaction.cpp src/drawarcaction.h \ - src/action.h \ - src/vector.h \ - src/arc.h \ - src/object.h \ - src/connection.h \ - src/mathconstants.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawarcaction.o src/drawarcaction.cpp - -obj/drawcircleaction.o: src/drawcircleaction.cpp src/drawcircleaction.h \ - src/action.h \ - src/vector.h \ - src/circle.h \ - src/object.h \ - src/connection.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawcircleaction.o src/drawcircleaction.cpp - -obj/drawdimensionaction.o: src/drawdimensionaction.cpp src/drawdimensionaction.h \ - src/action.h \ - src/vector.h \ - src/dimension.h \ - src/connection.h \ - src/object.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawdimensionaction.o src/drawdimensionaction.cpp - -obj/drawlineaction.o: src/drawlineaction.cpp src/drawlineaction.h \ - src/action.h \ - src/vector.h \ - src/line.h \ - src/object.h \ - src/connection.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawlineaction.o src/drawlineaction.cpp - -obj/drawtextaction.o: src/drawtextaction.cpp src/drawtextaction.h \ - src/action.h \ - src/vector.h \ - src/painter.h \ - src/text.h \ - src/object.h \ - src/connection.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/drawtextaction.o src/drawtextaction.cpp - -obj/ellipse.o: src/ellipse.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/ellipse.o src/ellipse.cpp - -obj/fileio.o: src/fileio.cpp src/fileio.h \ - src/arc.h \ - src/object.h \ - src/vector.h \ - src/connection.h \ - src/circle.h \ - src/container.h \ - src/dimension.h \ - src/line.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/fileio.o src/fileio.cpp - -obj/generaltab.o: src/generaltab.cpp src/generaltab.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/generaltab.o src/generaltab.cpp - -obj/layerwidget.o: src/layerwidget.cpp src/layerwidget.h \ - src/layeritemwidget.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/layerwidget.o src/layerwidget.cpp - -obj/layeritemwidget.o: src/layeritemwidget.cpp src/layeritemwidget.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/layeritemwidget.o src/layeritemwidget.cpp - -obj/line.o: src/line.cpp src/line.h \ - src/object.h \ - src/vector.h \ - src/connection.h \ - src/container.h \ - src/dimension.h \ - src/mathconstants.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/line.o src/line.cpp - -obj/main.o: src/main.cpp src/main.h \ - src/applicationwindow.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/main.o src/main.cpp - -obj/mirroraction.o: src/mirroraction.cpp src/mirroraction.h \ - src/action.h \ - src/vector.h \ - src/line.h \ - src/object.h \ - src/connection.h \ - src/mathconstants.h \ - src/painter.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/mirroraction.o src/mirroraction.cpp - -obj/object.o: src/object.cpp src/object.h \ - src/vector.h \ - src/connection.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/object.o src/object.cpp - -obj/painter.o: src/painter.cpp src/painter.h \ - src/vector.h \ - src/mathconstants.h \ - src/object.h \ - src/connection.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/painter.o src/painter.cpp - -obj/settingsdialog.o: src/settingsdialog.cpp src/settingsdialog.h \ - src/baseunittab.h \ - src/generaltab.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/settingsdialog.o src/settingsdialog.cpp - -obj/text.o: src/text.cpp src/text.h \ - src/object.h \ - src/vector.h \ - src/connection.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/text.o src/text.cpp - -obj/vector.o: src/vector.cpp src/vector.h \ - src/mathconstants.h - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/vector.o src/vector.cpp - -obj/moc_action.o: obj/moc_action.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_action.o obj/moc_action.cpp - -obj/moc_applicationwindow.o: obj/moc_applicationwindow.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_applicationwindow.o obj/moc_applicationwindow.cpp - -obj/moc_baseunittab.o: obj/moc_baseunittab.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_baseunittab.o obj/moc_baseunittab.cpp - -obj/moc_blockitemwidget.o: obj/moc_blockitemwidget.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_blockitemwidget.o obj/moc_blockitemwidget.cpp - -obj/moc_blockwidget.o: obj/moc_blockwidget.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_blockwidget.o obj/moc_blockwidget.cpp - -obj/moc_drawingview.o: obj/moc_drawingview.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_drawingview.o obj/moc_drawingview.cpp - -obj/moc_generaltab.o: obj/moc_generaltab.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_generaltab.o obj/moc_generaltab.cpp - -obj/moc_layerwidget.o: obj/moc_layerwidget.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_layerwidget.o obj/moc_layerwidget.cpp - -obj/moc_layeritemwidget.o: obj/moc_layeritemwidget.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_layeritemwidget.o obj/moc_layeritemwidget.cpp - -obj/moc_settingsdialog.o: obj/moc_settingsdialog.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/moc_settingsdialog.o obj/moc_settingsdialog.cpp - -obj/qrc_architektonas.o: obj/qrc_architektonas.cpp - $(CXX) -c $(CXXFLAGS) $(INCPATH) -o obj/qrc_architektonas.o obj/qrc_architektonas.cpp - -####### Install - -install: FORCE - -uninstall: FORCE - -FORCE: - diff --git a/TODO b/TODO index c54924f..355ea29 100644 --- a/TODO +++ b/TODO @@ -26,6 +26,8 @@ Stuff To Be Implemented/Fixed and know what it's supposed to do. - Fix loading and saving code - Add Drawing Properties dialog (separate from Application Settings) + - Trim/Slice tool (to be able to click on a line segment crossing another, and + remove it and it only, or to cut the entity at other entities crossing) Stuff That's Done diff --git a/architektonas.pro b/architektonas.pro index e809911..54e428e 100644 --- a/architektonas.pro +++ b/architektonas.pro @@ -18,6 +18,10 @@ MOC_DIR = obj RCC_DIR = obj UI_DIR = obj +# Icon on Win32, Mac +win32 { LIBS += res/architektonas-icon.o } +macx { ICON = architektonas-icon.icns } + INCLUDEPATH += \ src # fparser \ diff --git a/cross-compile b/cross-compile new file mode 100755 index 0000000..7844851 --- /dev/null +++ b/cross-compile @@ -0,0 +1,17 @@ +#!/bin/bash +# +# Short script to do cross compilation with MXE on Linux +# +# by James Hammons +# (C) 2012 Underground Software +# +TARGET = architectonas +echo "Cross compiling $(TARGET) for Win32..." +export PATH=/opt/mxe/usr/bin:$PATH +rm Makefile +/opt/mxe/usr/i686-pc-mingw32/qt/bin/qmake +make +#make CROSS=i686-pc-mingw32- +#rel=`svn info | grep Revision | cut -f 2 -d ' '` +#rel=`git log -1 --pretty=format:%ci | cut -d ' ' -f 1 | tr -d -` +#cd release && upx -9v $(TARGET).exe && zip -9v $(TARGET)-$rel.zip $(TARGET).exe diff --git a/res/architektonas-icon.o b/res/architektonas-icon.o new file mode 100644 index 0000000000000000000000000000000000000000..7e0ccb944e960689b7e80666a813f45c6158987a GIT binary patch literal 33008 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 E0gU~ndjJ3c literal 0 HcmV?d00001 diff --git a/src/applicationwindow.cpp b/src/applicationwindow.cpp index bf9baf4..445e546 100644 --- a/src/applicationwindow.cpp +++ b/src/applicationwindow.cpp @@ -43,6 +43,10 @@ #include "settingsdialog.h" +// Class variables +DrawingView * ApplicationWindow::drawing; + + ApplicationWindow::ApplicationWindow(): baseUnitInput(new QLineEdit), dimensionSizeInput(new QLineEdit), diff --git a/src/applicationwindow.h b/src/applicationwindow.h index bc65da2..9432d81 100644 --- a/src/applicationwindow.h +++ b/src/applicationwindow.h @@ -60,7 +60,6 @@ class ApplicationWindow: public QMainWindow void ReadSettings(void); void WriteSettings(void); - DrawingView * drawing; AboutWindow * aboutWin; QLabel * zoomIndicator; QString documentName; @@ -93,6 +92,10 @@ class ApplicationWindow: public QMainWindow QAction * connectAct; QAction * disconnectAct; QAction * mirrorAct; + + // Class variables + public: + static DrawingView * drawing; }; #endif // __APPLICATIONWINDOW_H__ diff --git a/src/line.cpp b/src/line.cpp index 7085308..8425e62 100644 --- a/src/line.cpp +++ b/src/line.cpp @@ -575,6 +575,57 @@ same reference number. } +/*virtual*/ Object * Line::Mirror(Vector p1, Vector p2) +{ +#if 0 + return NULL; + +double Vector::Parameter(Vector v1, Vector v2, Vector p) +{ + // Geometric interpretation: + // The parameterized point on the vector lineSegment is where the normal of + // the lineSegment to the point intersects lineSegment. If the pp < 0, then + // the perpendicular lies beyond the 1st endpoint. If pp > 1, then the + // perpendicular lies beyond the 2nd endpoint. + + Vector lineSegment = v2 - v1; + double magnitude = lineSegment.Magnitude(); + Vector pointSegment = p - v1; + double t = lineSegment.Dot(pointSegment) / (magnitude * magnitude); + return t; +} + + +// Return the normal to the linesegment formed by the passed in points. +// (Not sure which is head or tail, or which hand the normal lies) +/*static*/ Vector Vector::Normal(Vector v1, Vector v2) +#endif + + double t1 = Vector::Parameter(p1, p2, position); + double t2 = Vector::Parameter(p1, p2, endpoint); + + Vector unit = Vector(p1, p2).Unit(); + Vector v1 = unit * t1; + Vector v2 = unit * t2; + +// Vector normal = Vector::Normal(p1, p2); + // Get the points normal to position & endpoint to the line passed in + // (these are tails) + Vector v3 = p1 + v1; + Vector v4 = p1 + v2; + + // Make our mirrored vectors + Vector v5 = -(position - v3); + Vector v6 = -(endpoint - v4); + + // Find the points + Vector v7 = v3 + v5; + Vector v8 = v4 + v6; + + return new Line(v7, v8); +} + + void Line::SetDimensionOnLine(Dimension * dimension/*=NULL*/) { // If they don't pass one in, create it for the caller. diff --git a/src/line.h b/src/line.h index a8dc8c8..cc048a8 100644 --- a/src/line.h +++ b/src/line.h @@ -26,6 +26,7 @@ class Line: public Object virtual void Translate(Vector); virtual void Rotate(Vector, double); virtual void Scale(Vector, double); + virtual Object * Mirror(Vector, Vector); void SetDimensionOnLine(Dimension * d = 0); Object * FindAttachedDimension(void); diff --git a/src/mirroraction.cpp b/src/mirroraction.cpp index 61b14ac..998a0e1 100644 --- a/src/mirroraction.cpp +++ b/src/mirroraction.cpp @@ -12,6 +12,7 @@ // #include "mirroraction.h" +#include "applicationwindow.h" #include "line.h" #include "mathconstants.h" #include "painter.h" @@ -78,7 +79,9 @@ MirrorAction::~MirrorAction() if (state == FIRST_POINT) p1 = point; else + { p2 = point; + } } diff --git a/src/object.cpp b/src/object.cpp index 346c19a..dd80007 100644 --- a/src/object.cpp +++ b/src/object.cpp @@ -234,6 +234,12 @@ printf("Object: Destroyed!\n"); } +/*virtual*/ Object * Object::Mirror(Vector, Vector) +{ + return NULL; +} + + ObjectState Object::GetState(void) { return state; diff --git a/src/object.h b/src/object.h index 0a72328..2cdd3d3 100644 --- a/src/object.h +++ b/src/object.h @@ -44,6 +44,7 @@ class Object virtual void Translate(Vector); virtual void Rotate(Vector, double); virtual void Scale(Vector, double); + virtual Object * Mirror(Vector, Vector); ObjectState GetState(void); void Reparent(Object *); // Dimension * GetAttachedDimension(void); -- 2.37.2