From 624f7fe799520786eded32457f1b02f60b83ae64 Mon Sep 17 00:00:00 2001 From: wol101 Date: Tue, 19 May 2020 14:01:01 +0100 Subject: [PATCH] Adding back the license file --- GaitSymQt/DialogOutputSelect.cpp | 58 ++ GaitSymQt/DialogOutputSelect.h | 2 + GaitSymQt/GaitSym2017.pro | 21 +- GaitSymQt/GaitSym2017.pro.user | 568 ---------- GaitSymQt/GaitSym2017Distribution.pro | 1381 +++++++++++++++++++++++++ GaitSymQt/MainWindow.cpp | 23 +- GaitSymQt/MainWindow.ui | 44 +- create_git.sh | 8 - makefile | 48 +- src/Controller.h | 2 + src/DampedSpringMuscle.cpp | 13 + src/DampedSpringMuscle.h | 25 +- src/DataTargetScalar.cpp | 4 +- src/Drivable.h | 4 +- src/Driver.cpp | 16 + src/Driver.h | 8 +- src/Environment.cpp | 9 + src/Geom.cpp | 1 + src/Geom.h | 30 +- src/MovingAverage.cpp | 8 +- src/Muscle.cpp | 1 + src/Muscle.h | 2 +- src/ObjectiveMain.cpp | 1 + src/PIDErrorInController.cpp | 44 +- src/PIDErrorInController.h | 2 + src/PIDMuscleLength.cpp | 89 +- src/PIDMuscleLength.h | 32 +- src/PIDTargetMatch.cpp | 83 +- src/PIDTargetMatch.h | 27 +- src/Simulation.cpp | 141 ++- src/Simulation.h | 2 + src/TegotaeDriver.cpp | 55 +- src/TegotaeDriver.h | 3 + 33 files changed, 1960 insertions(+), 795 deletions(-) delete mode 100644 GaitSymQt/GaitSym2017.pro.user create mode 100644 GaitSymQt/GaitSym2017Distribution.pro delete mode 100644 create_git.sh diff --git a/GaitSymQt/DialogOutputSelect.cpp b/GaitSymQt/DialogOutputSelect.cpp index 2347103..ba6ccc9 100644 --- a/GaitSymQt/DialogOutputSelect.cpp +++ b/GaitSymQt/DialogOutputSelect.cpp @@ -15,6 +15,7 @@ #include "Driver.h" #include "DataTarget.h" #include "Reporter.h" +#include "Controller.h" #include "Warehouse.h" #include "MainWindow.h" #include "Preferences.h" @@ -38,6 +39,7 @@ DialogOutputSelect::DialogOutputSelect(QWidget *parent) : listWidgetJoint = 0; listWidgetMuscle = 0; listWidgetReporter = 0; + listWidgetController = 0; listWidgetWarehouse = 0; gridLayout = new QGridLayout(this); @@ -56,6 +58,7 @@ DialogOutputSelect::DialogOutputSelect(QWidget *parent) : std::map *driverList = simulation->GetDriverList(); std::map *dataTargetList = simulation->GetDataTargetList(); std::map *reporterList = simulation->GetReporterList(); + std::map *controllerList = simulation->GetControllerList(); std::map *warehouseList = simulation->GetWarehouseList(); m_columns = 0; @@ -213,6 +216,28 @@ DialogOutputSelect::DialogOutputSelect(QWidget *parent) : QObject::connect(listWidgetReporter, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(menuRequestReporter(QPoint))); } + if (controllerList->size() > 0) + { + listWidgetController = new QListWidget(this); + listWidgetController->setFont(listWidgetFont); + listWidgetController->setContextMenuPolicy(Qt::CustomContextMenu); + count = 0; + listWidgetController->clear(); + std::map::const_iterator controllerIterator; + for (controllerIterator = controllerList->begin(); controllerIterator != controllerList->end(); controllerIterator++) + { + listWidgetController->addItem(controllerIterator->first.c_str()); + item = listWidgetController->item(count++); + if (controllerIterator->second->GetDump()) item->setCheckState(Qt::Checked); + else item->setCheckState(Qt::Unchecked); + } + gridLayout->addWidget(listWidgetController, 1, m_columns); + label = new QLabel("Controller List", this); + gridLayout->addWidget(label, 0, m_columns); + m_columns++; + QObject::connect(listWidgetController, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(menuRequestController(QPoint))); + } + if (warehouseList->size() > 0) { listWidgetWarehouse = new QListWidget(this); @@ -507,6 +532,39 @@ void DialogOutputSelect::menuRequestReporter(QPoint p) } } +void DialogOutputSelect::menuRequestController(QPoint p) +{ + QMenu menu(this); + menu.addAction(tr("All On")); + menu.addAction(tr("All Off")); + + QPoint gp = listWidgetController->mapToGlobal(p); + + QAction *action = menu.exec(gp); + QListWidgetItem *item; + Qt::CheckState state; + int i; + bool dump; + if (action) + { + if (action->text() == tr("All On")) + { + state = Qt::Checked; + dump = true; + } + else + { + state = Qt::Unchecked; + dump = false; + } + for (i = 0; i < listWidgetController->count(); i++) + { + item = listWidgetController->item(i); + item->setCheckState(state); + } + } +} + void DialogOutputSelect::menuRequestWarehouse(QPoint p) { QMenu menu(this); diff --git a/GaitSymQt/DialogOutputSelect.h b/GaitSymQt/DialogOutputSelect.h index 78df7fb..afe9051 100644 --- a/GaitSymQt/DialogOutputSelect.h +++ b/GaitSymQt/DialogOutputSelect.h @@ -30,6 +30,7 @@ class DialogOutputSelect : public QDialog { QListWidget *listWidgetJoint; QListWidget *listWidgetMuscle; QListWidget *listWidgetReporter; + QListWidget *listWidgetController; QListWidget *listWidgetWarehouse; @@ -44,6 +45,7 @@ public slots: void menuRequestDriver(QPoint); void menuRequestDataTarget(QPoint); void menuRequestReporter(QPoint); + void menuRequestController(QPoint); void menuRequestWarehouse(QPoint); void acceptButtonClicked(); void rejectButtonClicked(); diff --git a/GaitSymQt/GaitSym2017.pro b/GaitSymQt/GaitSym2017.pro index 77c3a49..2e3d85d 100644 --- a/GaitSymQt/GaitSym2017.pro +++ b/GaitSymQt/GaitSym2017.pro @@ -13,11 +13,10 @@ macx { NO_IRR_COMPILE_WITH_PNG_LOADER_ NO_IRR_COMPILE_WITH_PNG_WRITER_ \ NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ NO_IRR_COMPILE_WITH_ZLIB_ NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ NO_IRR_COMPILE_WITH_BZIP2_ NO_IRR_COMPILE_WITH_LZMA_ \ NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ \ - HAVE_ALLOCA_H + HAVE_ALLOCA_H EXPERIMENTAL RAPIDXML_NO_EXCEPTIONS # USE_OPENCL \ # USE_LIBTIFF USE_TIFF_LZW \ -# USE_PCA USE_CBLAS \ - RAPIDXML_NO_EXCEPTIONS +# USE_PCA USE_CBLAS INCLUDEPATH += \ ../ann_1.1.2/include \ ../rapidxml-1.13 \ @@ -51,10 +50,6 @@ macx { CONFIG(debug, debug|release) { message(Debug build) - COMPUTERNAME = $$system(scutil --get ComputerName) - contains(COMPUTERNAME, H14-Mac-Pro) { DEFINES += EXPERIMENTAL } - contains(COMPUTERNAME, GraphiteG4) { DEFINES += EXPERIMENTAL } - contains(COMPUTERNAME, WIS-MacBookAir) { DEFINES += EXPERIMENTAL } } CONFIG(release, debug|release) { message(Release build) @@ -77,7 +72,7 @@ else:win32 { IGNORE_DLL_API _IRR_STATIC_LIB_ _IRR_WCHAR_FILESYSTEM \ BYTE_ORDER=LITTLE_ENDIAN \ HAVE_MALLOC_H USE_UNIX_ERRORS NEED_BCOPY \ - _USE_MATH_DEFINES + _USE_MATH_DEFINES EXPERIMENTAL INCLUDEPATH += \ ../ann_1.1.2/include \ ../rapidxml-1.13 \ @@ -105,8 +100,6 @@ else:win32 { CONFIG(debug, debug|release) { message(Debug build) COMPUTERNAME = $$system(hostname.exe) - contains(COMPUTERNAME, ASL-WORK) { DEFINES += EXPERIMENTAL } - contains(COMPUTERNAME, GRAPHITE-G4) { DEFINES += EXPERIMENTAL } } CONFIG(release, debug|release) { message(Release build) @@ -125,11 +118,11 @@ else:unix { NO_IRR_COMPILE_WITH_PNG_LOADER_ NO_IRR_COMPILE_WITH_PNG_WRITER_ \ NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ NO_IRR_COMPILE_WITH_ZLIB_ NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ NO_IRR_COMPILE_WITH_BZIP2_ NO_IRR_COMPILE_WITH_LZMA_ \ NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ \ - HAVE_ALLOCA_H + HAVE_ALLOCA_H exprtk_disable_enhanced_features \ + RAPIDXML_NO_EXCEPTIONS EXPERIMENTAL # USE_OPENCL \ # USE_LIBTIFF USE_TIFF_LZW \ # USE_PCA USE_CBLAS \ - RAPIDXML_NO_EXCEPTIONS INCLUDEPATH += \ ../ann_1.1.2/include \ ../rapidxml-1.13 \ @@ -147,7 +140,7 @@ else:unix { HEADERS += SOURCES += \ ../irrlicht-1.9/source/COSOperator.cpp ../irrlicht-1.9/source/Irrlicht.cpp - QMAKE_CXXFLAGS += -std=c++11 + QMAKE_CXXFLAGS += -std=gnu++11 QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math } @@ -1278,7 +1271,6 @@ HEADERS += \ ../src/Marker.h \ ../src/MD5.h \ ../src/MovingAverage.h \ - ../src/MPIStuff.h \ ../src/Muscle.h \ ../src/NamedObject.h \ ../src/NPointStrap.h \ @@ -1294,7 +1286,6 @@ HEADERS += \ ../src/SimpleStrap.h \ ../src/Simulation.h \ ../src/SliderJoint.h \ - ../src/SocketMessages.h \ ../src/SphereGeom.h \ ../src/StackedBoxCarDriver.h \ ../src/StepDriver.h \ diff --git a/GaitSymQt/GaitSym2017.pro.user b/GaitSymQt/GaitSym2017.pro.user deleted file mode 100644 index 9eb7f36..0000000 --- a/GaitSymQt/GaitSym2017.pro.user +++ /dev/null @@ -1,568 +0,0 @@ - - - - - - EnvironmentId - {dbce7a54-ecad-41ba-92b4-73af07077c8f} - - - ProjectExplorer.Project.ActiveTarget - 0 - - - ProjectExplorer.Project.EditorSettings - - true - false - true - - Cpp - - CppGlobal - - - - QmlJS - - QmlJSGlobal - - - 2 - UTF-8 - false - 4 - false - 80 - true - true - 1 - true - false - 0 - true - true - 0 - 8 - true - 1 - true - true - true - true - - - - ProjectExplorer.Project.PluginSettings - - - -fno-delayed-template-parsing - - true - - - - - ProjectExplorer.Project.Target.0 - - Desktop Qt 5.11.2 MSVC2017 64bit - Desktop Qt 5.11.2 MSVC2017 64bit - qt.qt5.5112.win64_msvc2017_64_kit - 0 - 0 - 0 - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - - false - false - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit-Profile - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - true - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 3 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy Configuration - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - GaitSym2017 - - Qt4ProjectManager.Qt4RunConfiguration:D:/Unix/cvs/GaitSym2017/GaitSymQt/GaitSym2017.pro - true - - GaitSym2017.pro - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.Target.1 - - Desktop Qt 5.11.2 MSVC2017 64bit static - Desktop Qt 5.11.2 MSVC2017 64bit static - {238f8513-5c10-4e3e-aeb8-c852775f1f42} - 0 - 0 - 0 - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit_static-Debug - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - false - false - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Debug - Debug - Qt4ProjectManager.Qt4BuildConfiguration - 2 - true - - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit_static-Release - - - true - qmake - - QtProjectManager.QMakeBuildStep - false - - false - false - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Release - Release - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - - D:/Unix/cvs/GaitSym2017/build-GaitSym2017-Desktop_Qt_5_11_2_MSVC2017_64bit_static-Profile - - - true - qmake - - QtProjectManager.QMakeBuildStep - true - - false - true - true - - - true - Make - - Qt4ProjectManager.MakeStep - - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - true - Make - - Qt4ProjectManager.MakeStep - - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Profile - Profile - Qt4ProjectManager.Qt4BuildConfiguration - 0 - true - - 3 - - - 0 - Deploy - - ProjectExplorer.BuildSteps.Deploy - - 1 - Deploy Configuration - - ProjectExplorer.DefaultDeployConfiguration - - 1 - - - false - false - 1000 - - true - - false - false - false - false - true - 0.01 - 10 - true - 1 - 25 - - 1 - true - false - true - valgrind - - 0 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - 11 - 12 - 13 - 14 - - 2 - - - - - - Custom Executable - - ProjectExplorer.CustomExecutableRunConfiguration - 3768 - false - true - false - false - true - - 1 - - - - ProjectExplorer.Project.TargetCount - 2 - - - ProjectExplorer.Project.Updater.FileVersion - 18 - - - Version - 18 - - diff --git a/GaitSymQt/GaitSym2017Distribution.pro b/GaitSymQt/GaitSym2017Distribution.pro new file mode 100644 index 0000000..a914149 --- /dev/null +++ b/GaitSymQt/GaitSym2017Distribution.pro @@ -0,0 +1,1381 @@ +# ------------------------------------------------- +# Project created by QtCreator 2009-07-04T17:08:56 +# ------------------------------------------------- +VERSION = 2017 +AUTHOR = "Bill Sellers 2017" +macx { + DEFINES += \ + USE_QT \ + dIDEDOUBLE TRIMESH_ENABLED TRIMESH_OPCODE CCD_IDEDOUBLE dLIBCCD_ENABLED dTHREADING_INTF_DISABLED \ + _IRR_COMPILE_WITH_LEAK_HUNTER_ \ + NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_ NO_IRR_COMPILE_WITH_XML_ NO_IRR_COMPILE_WITH_GUI_ \ + NO_IRR_COMPILE_WITH_JPG_LOADER_ NO_IRR_COMPILE_WITH_JPG_WRITER_ \ + NO_IRR_COMPILE_WITH_PNG_LOADER_ NO_IRR_COMPILE_WITH_PNG_WRITER_ \ + NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ NO_IRR_COMPILE_WITH_ZLIB_ NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ NO_IRR_COMPILE_WITH_BZIP2_ NO_IRR_COMPILE_WITH_LZMA_ \ + NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ \ + HAVE_ALLOCA_H RAPIDXML_NO_EXCEPTIONS +# USE_OPENCL \ +# USE_LIBTIFF USE_TIFF_LZW \ +# USE_PCA USE_CBLAS \ + INCLUDEPATH += \ + ../ann_1.1.2/include \ + ../rapidxml-1.13 \ + ../exprtk \ + ../ode-0.15/ode/src \ + ../ode-0.15/libccd/src \ + ../ode-0.15/OPCODE \ + ../ode-0.15/include \ + ../irrlicht-1.9/include \ + ../irrlicht-1.9/source \ + ../libgwavi \ + ../GaitSymGaul ../GaitSymGaul/gaul/src ../GaitSymGaul/gaul/util \ + ../src + LIBS += \ +# -L${HOME}/Unix/lib -ltiff -lIrrlicht \ +# -framework OpenCL \ + -framework QTKit \ + -framework Cocoa \ + -framework Accelerate + HEADERS += + OBJECTIVE_SOURCES += \ + ../irrlicht-1.9/source/CIrrDeviceOSX.mm ../irrlicht-1.9/source/CNSOGLManager.mm ../irrlicht-1.9/source/COSOperator.mm ../irrlicht-1.9/source/Irrlicht.mm + QMAKE_CXXFLAGS += -std=c++11 + QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.10 + QMAKE_MAC_SDK = macosx10.11 + QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math +# QMAKE_CXXFLAGS_RELEASE += -O0 \ #turned off optimisation because of the sincos undefined symbol error +# -ffast-math + + ICON = GaitSymQt.icns + + CONFIG(debug, debug|release) { + message(Debug build) + COMPUTERNAME = $$system(scutil --get ComputerName) + } + CONFIG(release, debug|release) { + message(Release build) + DEFINES += dNODEBUG + } +} + +else:win32 { + RC_FILE = app.rc + DEFINES += \ + USE_QT \ + dIDEDOUBLE TRIMESH_ENABLED TRIMESH_OPCODE CCD_IDEDOUBLE dLIBCCD_ENABLED dTHREADING_INTF_DISABLED \ + _IRR_COMPILE_WITH_LEAK_HUNTER_ NO_IRR_COMPILE_WITH_DIRECT3D_9_ \ + NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_ NO_IRR_COMPILE_WITH_XML_ NO_IRR_COMPILE_WITH_GUI_ \ + NO_IRR_COMPILE_WITH_JPG_LOADER_ NO_IRR_COMPILE_WITH_JPG_WRITER_ \ + NO_IRR_COMPILE_WITH_PNG_LOADER_ NO_IRR_COMPILE_WITH_PNG_WRITER_ \ + NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ NO_IRR_COMPILE_WITH_ZLIB_ NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ NO_IRR_COMPILE_WITH_BZIP2_ NO_IRR_COMPILE_WITH_LZMA_ \ + NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ \ + RAPIDXML_NO_EXCEPTIONS \ + IGNORE_DLL_API _IRR_STATIC_LIB_ _IRR_WCHAR_FILESYSTEM \ + BYTE_ORDER=LITTLE_ENDIAN \ + HAVE_MALLOC_H USE_UNIX_ERRORS NEED_BCOPY \ + _USE_MATH_DEFINES + INCLUDEPATH += \ + ../ann_1.1.2/include \ + ../rapidxml-1.13 \ + ../exprtk \ + ../ode-0.15/ode/src \ + ../ode-0.15/libccd/src \ + ../ode-0.15/OPCODE \ + ../ode-0.15/include \ + ../irrlicht-1.9/include \ + ../irrlicht-1.9/source \ + ../libgwavi \ + ../GaitSymGaul ../GaitSymGaul/gaul/src ../GaitSymGaul/gaul/util \ + ../src \ + c:/Program Files (x86)/Microsoft DirectX SDK (June 2010)/Include + LIBS += -lGdi32 -lUser32 -lAdvapi32 + HEADERS += + SOURCES += \ + ../irrlicht-1.9/source/COSOperator.cpp ../irrlicht-1.9/source/Irrlicht.cpp + QMAKE_CXXFLAGS += -bigobj -W4 +# QMAKE_CXXFLAGS += -openmp + QMAKE_CXXFLAGS_DEBUG += -Od -RTCsu + QMAKE_CXXFLAGS_RELEASE += -Ox -fp:fast -GL + QMAKE_LFLAGS_RELEASE += -LTCG + + CONFIG(debug, debug|release) { + message(Debug build) + COMPUTERNAME = $$system(hostname.exe) + } + CONFIG(release, debug|release) { + message(Release build) + DEFINES += dNODEBUG + } +} + + +else:unix { + DEFINES += \ + USE_QT \ + dIDEDOUBLE TRIMESH_ENABLED TRIMESH_OPCODE CCD_IDEDOUBLE dLIBCCD_ENABLED dTHREADING_INTF_DISABLED \ + _IRR_COMPILE_WITH_LEAK_HUNTER_ \ + NO_IRR_COMPILE_WITH_JOYSTICK_EVENTS_ NO_IRR_COMPILE_WITH_XML_ NO_IRR_COMPILE_WITH_GUI_ \ + NO_IRR_COMPILE_WITH_JPG_LOADER_ NO_IRR_COMPILE_WITH_JPG_WRITER_ \ + NO_IRR_COMPILE_WITH_PNG_LOADER_ NO_IRR_COMPILE_WITH_PNG_WRITER_ \ + NO__IRR_COMPILE_WITH_ZIP_ARCHIVE_LOADER_ NO_IRR_COMPILE_WITH_ZLIB_ NO_IRR_COMPILE_WITH_ZIP_ENCRYPTION_ NO_IRR_COMPILE_WITH_BZIP2_ NO_IRR_COMPILE_WITH_LZMA_ \ + NO__IRR_COMPILE_WITH_PAK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_NPK_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_TAR_ARCHIVE_LOADER_ NO__IRR_COMPILE_WITH_WAD_ARCHIVE_LOADER_ \ + HAVE_ALLOCA_H exprtk_disable_enhanced_features RAPIDXML_NO_EXCEPTIONS +# USE_OPENCL \ +# USE_LIBTIFF USE_TIFF_LZW \ +# USE_PCA USE_CBLAS + INCLUDEPATH += \ + ../ann_1.1.2/include \ + ../rapidxml-1.13 \ + ../exprtk \ + ../ode-0.15/ode/src \ + ../ode-0.15/libccd/src \ + ../ode-0.15/OPCODE \ + ../ode-0.15/include \ + ../irrlicht-1.9/include \ + ../irrlicht-1.9/source \ + ../libgwavi \ + ../GaitSymGaul ../GaitSymGaul/gaul/src ../GaitSymGaul/gaul/util \ + ../src + LIBS += -lX11 -lXxf86vm + HEADERS += + SOURCES += \ + ../irrlicht-1.9/source/COSOperator.cpp ../irrlicht-1.9/source/Irrlicht.cpp + QMAKE_CXXFLAGS += -std=gnu++11 + QMAKE_CXXFLAGS_RELEASE += -O3 -ffast-math +} + +OBJECTS_DIR = obj +QT += opengl xml +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets +TARGET = GaitSym2017 +TEMPLATE = app +CONFIG += no_batch # this gets around a bug in Visual Studio with the object_parallel_to_source option +CONFIG += object_parallel_to_source # this is important to stop obj files overwriting each other + +SOURCES += \ + ../ann_1.1.2/src/ANN.cpp \ + ../ann_1.1.2/src/bd_fix_rad_search.cpp \ + ../ann_1.1.2/src/bd_pr_search.cpp \ + ../ann_1.1.2/src/bd_search.cpp \ + ../ann_1.1.2/src/bd_tree.cpp \ + ../ann_1.1.2/src/brute.cpp \ + ../ann_1.1.2/src/kd_dump.cpp \ + ../ann_1.1.2/src/kd_fix_rad_search.cpp \ + ../ann_1.1.2/src/kd_pr_search.cpp \ + ../ann_1.1.2/src/kd_search.cpp \ + ../ann_1.1.2/src/kd_split.cpp \ + ../ann_1.1.2/src/kd_tree.cpp \ + ../ann_1.1.2/src/kd_util.cpp \ + ../ann_1.1.2/src/perf.cpp \ + ../irrlicht-1.9/source/C3DSMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CAnimatedMeshHalfLife.cpp \ + ../irrlicht-1.9/source/CAnimatedMeshMD2.cpp \ + ../irrlicht-1.9/source/CAnimatedMeshMD3.cpp \ + ../irrlicht-1.9/source/CAnimatedMeshSceneNode.cpp \ + ../irrlicht-1.9/source/CAttributes.cpp \ + ../irrlicht-1.9/source/CB3DMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CB3DMeshWriter.cpp \ + ../irrlicht-1.9/source/CBSPMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CBillboardSceneNode.cpp \ + ../irrlicht-1.9/source/CBoneSceneNode.cpp \ + ../irrlicht-1.9/source/CBurningShader_Raster_Reference.cpp \ + ../irrlicht-1.9/source/CCSMLoader.cpp \ + ../irrlicht-1.9/source/CCameraSceneNode.cpp \ + ../irrlicht-1.9/source/CColladaFileLoader.cpp \ + ../irrlicht-1.9/source/CColladaMeshWriter.cpp \ + ../irrlicht-1.9/source/CColorConverter.cpp \ + ../irrlicht-1.9/source/CCubeSceneNode.cpp \ + ../irrlicht-1.9/source/CD3D9Driver.cpp \ + ../irrlicht-1.9/source/CD3D9HLSLMaterialRenderer.cpp \ + ../irrlicht-1.9/source/CD3D9NormalMapRenderer.cpp \ + ../irrlicht-1.9/source/CD3D9ParallaxMapRenderer.cpp \ + ../irrlicht-1.9/source/CD3D9RenderTarget.cpp \ + ../irrlicht-1.9/source/CD3D9ShaderMaterialRenderer.cpp \ + ../irrlicht-1.9/source/CD3D9Texture.cpp \ + ../irrlicht-1.9/source/CDMFLoader.cpp \ + ../irrlicht-1.9/source/CDefaultGUIElementFactory.cpp \ + ../irrlicht-1.9/source/CDefaultSceneNodeAnimatorFactory.cpp \ + ../irrlicht-1.9/source/CDefaultSceneNodeFactory.cpp \ + ../irrlicht-1.9/source/CDepthBuffer.cpp \ + ../irrlicht-1.9/source/CDummyTransformationSceneNode.cpp \ + ../irrlicht-1.9/source/CEmptySceneNode.cpp \ + ../irrlicht-1.9/source/CFPSCounter.cpp \ + ../irrlicht-1.9/source/CFileList.cpp \ + ../irrlicht-1.9/source/CFileSystem.cpp \ + ../irrlicht-1.9/source/CGLXManager.cpp \ + ../irrlicht-1.9/source/CGUIButton.cpp \ + ../irrlicht-1.9/source/CGUICheckBox.cpp \ + ../irrlicht-1.9/source/CGUIColorSelectDialog.cpp \ + ../irrlicht-1.9/source/CGUIComboBox.cpp \ + ../irrlicht-1.9/source/CGUIContextMenu.cpp \ + ../irrlicht-1.9/source/CGUIEditBox.cpp \ + ../irrlicht-1.9/source/CGUIEnvironment.cpp \ + ../irrlicht-1.9/source/CGUIFileOpenDialog.cpp \ + ../irrlicht-1.9/source/CGUIFont.cpp \ + ../irrlicht-1.9/source/CGUIImage.cpp \ + ../irrlicht-1.9/source/CGUIImageList.cpp \ + ../irrlicht-1.9/source/CGUIInOutFader.cpp \ + ../irrlicht-1.9/source/CGUIListBox.cpp \ + ../irrlicht-1.9/source/CGUIMenu.cpp \ + ../irrlicht-1.9/source/CGUIMeshViewer.cpp \ + ../irrlicht-1.9/source/CGUIMessageBox.cpp \ + ../irrlicht-1.9/source/CGUIModalScreen.cpp \ + ../irrlicht-1.9/source/CGUIProfiler.cpp \ + ../irrlicht-1.9/source/CGUIScrollBar.cpp \ + ../irrlicht-1.9/source/CGUISkin.cpp \ + ../irrlicht-1.9/source/CGUISpinBox.cpp \ + ../irrlicht-1.9/source/CGUISpriteBank.cpp \ + ../irrlicht-1.9/source/CGUIStaticText.cpp \ + ../irrlicht-1.9/source/CGUITabControl.cpp \ + ../irrlicht-1.9/source/CGUITable.cpp \ + ../irrlicht-1.9/source/CGUIToolBar.cpp \ + ../irrlicht-1.9/source/CGUITreeView.cpp \ + ../irrlicht-1.9/source/CGUIWindow.cpp \ + ../irrlicht-1.9/source/CGeometryCreator.cpp \ + ../irrlicht-1.9/source/CImage.cpp \ + ../irrlicht-1.9/source/CImageLoaderBMP.cpp \ + ../irrlicht-1.9/source/CImageLoaderDDS.cpp \ + ../irrlicht-1.9/source/CImageLoaderJPG.cpp \ + ../irrlicht-1.9/source/CImageLoaderPCX.cpp \ + ../irrlicht-1.9/source/CImageLoaderPNG.cpp \ + ../irrlicht-1.9/source/CImageLoaderPPM.cpp \ + ../irrlicht-1.9/source/CImageLoaderPSD.cpp \ + ../irrlicht-1.9/source/CImageLoaderPVR.cpp \ + ../irrlicht-1.9/source/CImageLoaderRGB.cpp \ + ../irrlicht-1.9/source/CImageLoaderTGA.cpp \ + ../irrlicht-1.9/source/CImageLoaderWAL.cpp \ + ../irrlicht-1.9/source/CImageWriterBMP.cpp \ + ../irrlicht-1.9/source/CImageWriterJPG.cpp \ + ../irrlicht-1.9/source/CImageWriterPCX.cpp \ + ../irrlicht-1.9/source/CImageWriterPNG.cpp \ + ../irrlicht-1.9/source/CImageWriterPPM.cpp \ + ../irrlicht-1.9/source/CImageWriterPSD.cpp \ + ../irrlicht-1.9/source/CImageWriterTGA.cpp \ + ../irrlicht-1.9/source/CIrrDeviceConsole.cpp \ + ../irrlicht-1.9/source/CIrrDeviceFB.cpp \ + ../irrlicht-1.9/source/CIrrDeviceLinux.cpp \ + ../irrlicht-1.9/source/CIrrDeviceSDL.cpp \ + ../irrlicht-1.9/source/CIrrDeviceStub.cpp \ + ../irrlicht-1.9/source/CIrrDeviceWin32.cpp \ + ../irrlicht-1.9/source/CIrrMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CIrrMeshWriter.cpp \ + ../irrlicht-1.9/source/CLMTSMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CLWOMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CLightSceneNode.cpp \ + ../irrlicht-1.9/source/CLimitReadFile.cpp \ + ../irrlicht-1.9/source/CLogger.cpp \ + ../irrlicht-1.9/source/CMD2MeshFileLoader.cpp \ + ../irrlicht-1.9/source/CMD3MeshFileLoader.cpp \ + ../irrlicht-1.9/source/CMS3DMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CMY3DMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CMemoryFile.cpp \ + ../irrlicht-1.9/source/CMeshCache.cpp \ + ../irrlicht-1.9/source/CMeshManipulator.cpp \ + ../irrlicht-1.9/source/CMeshSceneNode.cpp \ + ../irrlicht-1.9/source/CMeshTextureLoader.cpp \ + ../irrlicht-1.9/source/CMetaTriangleSelector.cpp \ + ../irrlicht-1.9/source/CMountPointReader.cpp \ + ../irrlicht-1.9/source/CNPKReader.cpp \ + ../irrlicht-1.9/source/CNullDriver.cpp \ + ../irrlicht-1.9/source/COBJMeshFileLoader.cpp \ + ../irrlicht-1.9/source/COBJMeshWriter.cpp \ + ../irrlicht-1.9/source/COCTLoader.cpp \ +# ../irrlicht-1.9/source/COSOperator.cpp \ + ../irrlicht-1.9/source/COctreeSceneNode.cpp \ + ../irrlicht-1.9/source/COctreeTriangleSelector.cpp \ + ../irrlicht-1.9/source/COgreMeshFileLoader.cpp \ + ../irrlicht-1.9/source/COpenGLCacheHandler.cpp \ + ../irrlicht-1.9/source/COpenGLDriver.cpp \ + ../irrlicht-1.9/source/COpenGLExtensionHandler.cpp \ + ../irrlicht-1.9/source/COpenGLNormalMapRenderer.cpp \ + ../irrlicht-1.9/source/COpenGLParallaxMapRenderer.cpp \ + ../irrlicht-1.9/source/COpenGLSLMaterialRenderer.cpp \ + ../irrlicht-1.9/source/COpenGLShaderMaterialRenderer.cpp \ + ../irrlicht-1.9/source/CPLYMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CPLYMeshWriter.cpp \ + ../irrlicht-1.9/source/CPakReader.cpp \ + ../irrlicht-1.9/source/CParticleAnimatedMeshSceneNodeEmitter.cpp \ + ../irrlicht-1.9/source/CParticleAttractionAffector.cpp \ + ../irrlicht-1.9/source/CParticleBoxEmitter.cpp \ + ../irrlicht-1.9/source/CParticleCylinderEmitter.cpp \ + ../irrlicht-1.9/source/CParticleFadeOutAffector.cpp \ + ../irrlicht-1.9/source/CParticleGravityAffector.cpp \ + ../irrlicht-1.9/source/CParticleMeshEmitter.cpp \ + ../irrlicht-1.9/source/CParticlePointEmitter.cpp \ + ../irrlicht-1.9/source/CParticleRingEmitter.cpp \ + ../irrlicht-1.9/source/CParticleRotationAffector.cpp \ + ../irrlicht-1.9/source/CParticleScaleAffector.cpp \ + ../irrlicht-1.9/source/CParticleSphereEmitter.cpp \ + ../irrlicht-1.9/source/CParticleSystemSceneNode.cpp \ + ../irrlicht-1.9/source/CProfiler.cpp \ + ../irrlicht-1.9/source/CQ3LevelMesh.cpp \ + ../irrlicht-1.9/source/CQuake3ShaderSceneNode.cpp \ + ../irrlicht-1.9/source/CReadFile.cpp \ + ../irrlicht-1.9/source/CSMFMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CSTLMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CSTLMeshWriter.cpp \ + ../irrlicht-1.9/source/CSceneCollisionManager.cpp \ + ../irrlicht-1.9/source/CSceneLoaderIrr.cpp \ + ../irrlicht-1.9/source/CSceneManager.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCameraFPS.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCameraMaya.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCollisionResponse.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorDelete.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFlyCircle.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFlyStraight.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFollowSpline.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorRotation.cpp \ + ../irrlicht-1.9/source/CSceneNodeAnimatorTexture.cpp \ + ../irrlicht-1.9/source/CShadowVolumeSceneNode.cpp \ + ../irrlicht-1.9/source/CSkinnedMesh.cpp \ + ../irrlicht-1.9/source/CSkyBoxSceneNode.cpp \ + ../irrlicht-1.9/source/CSkyDomeSceneNode.cpp \ + ../irrlicht-1.9/source/CSoftwareDriver.cpp \ + ../irrlicht-1.9/source/CSoftwareDriver2.cpp \ + ../irrlicht-1.9/source/CSoftwareTexture.cpp \ + ../irrlicht-1.9/source/CSoftwareTexture2.cpp \ + ../irrlicht-1.9/source/CSphereSceneNode.cpp \ + ../irrlicht-1.9/source/CTRFlat.cpp \ + ../irrlicht-1.9/source/CTRFlatWire.cpp \ + ../irrlicht-1.9/source/CTRGouraud.cpp \ + ../irrlicht-1.9/source/CTRGouraud2.cpp \ + ../irrlicht-1.9/source/CTRGouraudAlpha2.cpp \ + ../irrlicht-1.9/source/CTRGouraudAlphaNoZ2.cpp \ + ../irrlicht-1.9/source/CTRGouraudWire.cpp \ + ../irrlicht-1.9/source/CTRNormalMap.cpp \ + ../irrlicht-1.9/source/CTRStencilShadow.cpp \ + ../irrlicht-1.9/source/CTRTextureBlend.cpp \ + ../irrlicht-1.9/source/CTRTextureDetailMap2.cpp \ + ../irrlicht-1.9/source/CTRTextureFlat.cpp \ + ../irrlicht-1.9/source/CTRTextureFlatWire.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraud.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraud2.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudAdd.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudAdd2.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudAddNoZ2.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudAlpha.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudAlphaNoZ.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudNoZ.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudNoZ2.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudVertexAlpha2.cpp \ + ../irrlicht-1.9/source/CTRTextureGouraudWire.cpp \ + ../irrlicht-1.9/source/CTRTextureLightMap2_Add.cpp \ + ../irrlicht-1.9/source/CTRTextureLightMap2_M1.cpp \ + ../irrlicht-1.9/source/CTRTextureLightMap2_M2.cpp \ + ../irrlicht-1.9/source/CTRTextureLightMap2_M4.cpp \ + ../irrlicht-1.9/source/CTRTextureLightMapGouraud2_M4.cpp \ + ../irrlicht-1.9/source/CTRTextureWire2.cpp \ + ../irrlicht-1.9/source/CTarReader.cpp \ + ../irrlicht-1.9/source/CTerrainSceneNode.cpp \ + ../irrlicht-1.9/source/CTerrainTriangleSelector.cpp \ + ../irrlicht-1.9/source/CTextSceneNode.cpp \ + ../irrlicht-1.9/source/CTriangleBBSelector.cpp \ + ../irrlicht-1.9/source/CTriangleSelector.cpp \ + ../irrlicht-1.9/source/CVideoModeList.cpp \ + ../irrlicht-1.9/source/CVolumeLightSceneNode.cpp \ + ../irrlicht-1.9/source/CWADReader.cpp \ + ../irrlicht-1.9/source/CWGLManager.cpp \ + ../irrlicht-1.9/source/CWaterSurfaceSceneNode.cpp \ + ../irrlicht-1.9/source/CWriteFile.cpp \ + ../irrlicht-1.9/source/CXMLReader.cpp \ + ../irrlicht-1.9/source/CXMLWriter.cpp \ + ../irrlicht-1.9/source/CXMeshFileLoader.cpp \ + ../irrlicht-1.9/source/CZBuffer.cpp \ + ../irrlicht-1.9/source/CZipReader.cpp \ + ../irrlicht-1.9/source/IBurningShader.cpp \ +# ../irrlicht-1.9/source/Irrlicht.cpp \ + ../irrlicht-1.9/source/irrXML.cpp \ + ../irrlicht-1.9/source/leakHunter.cpp \ + ../irrlicht-1.9/source/os.cpp \ + ../irrlicht-1.9/source/utf8.cpp \ + ../ode-0.15/libccd/src/alloc.c \ + ../ode-0.15/libccd/src/ccd.c \ + ../ode-0.15/libccd/src/mpr.c \ + ../ode-0.15/libccd/src/polytope.c \ + ../ode-0.15/libccd/src/support.c \ + ../ode-0.15/libccd/src/vec3.c \ + ../ode-0.15/ode/src/array.cpp \ + ../ode-0.15/ode/src/box.cpp \ + ../ode-0.15/ode/src/capsule.cpp \ + ../ode-0.15/ode/src/collision_convex_trimesh.cpp \ + ../ode-0.15/ode/src/collision_cylinder_box.cpp \ + ../ode-0.15/ode/src/collision_cylinder_plane.cpp \ + ../ode-0.15/ode/src/collision_cylinder_sphere.cpp \ + ../ode-0.15/ode/src/collision_cylinder_trimesh.cpp \ + ../ode-0.15/ode/src/collision_kernel.cpp \ + ../ode-0.15/ode/src/collision_libccd.cpp \ + ../ode-0.15/ode/src/collision_quadtreespace.cpp \ + ../ode-0.15/ode/src/collision_sapspace.cpp \ + ../ode-0.15/ode/src/collision_space.cpp \ + ../ode-0.15/ode/src/collision_transform.cpp \ + ../ode-0.15/ode/src/collision_trimesh_box.cpp \ + ../ode-0.15/ode/src/collision_trimesh_ccylinder.cpp \ + ../ode-0.15/ode/src/collision_trimesh_disabled.cpp \ + ../ode-0.15/ode/src/collision_trimesh_distance.cpp \ + ../ode-0.15/ode/src/collision_trimesh_gimpact.cpp \ + ../ode-0.15/ode/src/collision_trimesh_opcode.cpp \ + ../ode-0.15/ode/src/collision_trimesh_plane.cpp \ + ../ode-0.15/ode/src/collision_trimesh_ray.cpp \ + ../ode-0.15/ode/src/collision_trimesh_sphere.cpp \ + ../ode-0.15/ode/src/collision_trimesh_trimesh_new.cpp \ + ../ode-0.15/ode/src/collision_trimesh_trimesh.cpp \ + ../ode-0.15/ode/src/collision_util.cpp \ + ../ode-0.15/ode/src/convex.cpp \ + ../ode-0.15/ode/src/cylinder.cpp \ + ../ode-0.15/ode/src/error.cpp \ + ../ode-0.15/ode/src/export-dif.cpp \ + ../ode-0.15/ode/src/fastdot.cpp \ + ../ode-0.15/ode/src/fastldlt.cpp \ + ../ode-0.15/ode/src/fastlsolve.cpp \ + ../ode-0.15/ode/src/fastltsolve.cpp \ + ../ode-0.15/ode/src/heightfield.cpp \ + ../ode-0.15/ode/src/joints/amotor.cpp \ + ../ode-0.15/ode/src/joints/ball.cpp \ + ../ode-0.15/ode/src/joints/contact.cpp \ + ../ode-0.15/ode/src/joints/dball.cpp \ + ../ode-0.15/ode/src/joints/dhinge.cpp \ + ../ode-0.15/ode/src/joints/fixed.cpp \ + ../ode-0.15/ode/src/joints/floatinghinge.cpp \ + ../ode-0.15/ode/src/joints/hinge.cpp \ + ../ode-0.15/ode/src/joints/hinge2.cpp \ + ../ode-0.15/ode/src/joints/joint.cpp \ + ../ode-0.15/ode/src/joints/lmotor.cpp \ + ../ode-0.15/ode/src/joints/null.cpp \ + ../ode-0.15/ode/src/joints/piston.cpp \ + ../ode-0.15/ode/src/joints/plane2d.cpp \ + ../ode-0.15/ode/src/joints/pr.cpp \ + ../ode-0.15/ode/src/joints/pu.cpp \ + ../ode-0.15/ode/src/joints/slider.cpp \ + ../ode-0.15/ode/src/joints/transmission.cpp \ + ../ode-0.15/ode/src/joints/universal.cpp \ + ../ode-0.15/ode/src/lcp.cpp \ + ../ode-0.15/ode/src/mass.cpp \ + ../ode-0.15/ode/src/mat.cpp \ + ../ode-0.15/ode/src/matrix.cpp \ + ../ode-0.15/ode/src/memory.cpp \ + ../ode-0.15/ode/src/misc.cpp \ + ../ode-0.15/ode/src/nextafterf.c \ + ../ode-0.15/ode/src/objects.cpp \ + ../ode-0.15/ode/src/obstack.cpp \ + ../ode-0.15/ode/src/ode.cpp \ + ../ode-0.15/ode/src/odeinit.cpp \ + ../ode-0.15/ode/src/odemath.cpp \ + ../ode-0.15/ode/src/odeou.cpp \ + ../ode-0.15/ode/src/odetls.cpp \ + ../ode-0.15/ode/src/plane.cpp \ + ../ode-0.15/ode/src/quickstep.cpp \ + ../ode-0.15/ode/src/ray.cpp \ + ../ode-0.15/ode/src/rotation.cpp \ + ../ode-0.15/ode/src/sphere.cpp \ + ../ode-0.15/ode/src/step.cpp \ + ../ode-0.15/ode/src/threading_base.cpp \ + ../ode-0.15/ode/src/threading_impl.cpp \ + ../ode-0.15/ode/src/threading_pool_posix.cpp \ + ../ode-0.15/ode/src/threading_pool_win.cpp \ + ../ode-0.15/ode/src/timer.cpp \ + ../ode-0.15/ode/src/util.cpp \ + ../ode-0.15/OPCODE/Ice/IceAABB.cpp \ + ../ode-0.15/OPCODE/Ice/IceContainer.cpp \ + ../ode-0.15/OPCODE/Ice/IceHPoint.cpp \ + ../ode-0.15/OPCODE/Ice/IceIndexedTriangle.cpp \ + ../ode-0.15/OPCODE/Ice/IceMatrix3x3.cpp \ + ../ode-0.15/OPCODE/Ice/IceMatrix4x4.cpp \ + ../ode-0.15/OPCODE/Ice/IceOBB.cpp \ + ../ode-0.15/OPCODE/Ice/IcePlane.cpp \ + ../ode-0.15/OPCODE/Ice/IcePoint.cpp \ + ../ode-0.15/OPCODE/Ice/IceRandom.cpp \ + ../ode-0.15/OPCODE/Ice/IceRay.cpp \ + ../ode-0.15/OPCODE/Ice/IceRevisitedRadix.cpp \ + ../ode-0.15/OPCODE/Ice/IceSegment.cpp \ + ../ode-0.15/OPCODE/Ice/IceTriangle.cpp \ + ../ode-0.15/OPCODE/Ice/IceUtils.cpp \ + ../ode-0.15/OPCODE/OPC_AABBCollider.cpp \ + ../ode-0.15/OPCODE/OPC_AABBTree.cpp \ + ../ode-0.15/OPCODE/OPC_BaseModel.cpp \ + ../ode-0.15/OPCODE/OPC_Collider.cpp \ + ../ode-0.15/OPCODE/OPC_Common.cpp \ + ../ode-0.15/OPCODE/OPC_HybridModel.cpp \ + ../ode-0.15/OPCODE/OPC_LSSCollider.cpp \ + ../ode-0.15/OPCODE/OPC_MeshInterface.cpp \ + ../ode-0.15/OPCODE/OPC_Model.cpp \ + ../ode-0.15/OPCODE/OPC_OBBCollider.cpp \ + ../ode-0.15/OPCODE/OPC_OptimizedTree.cpp \ + ../ode-0.15/OPCODE/OPC_Picking.cpp \ + ../ode-0.15/OPCODE/OPC_PlanesCollider.cpp \ + ../ode-0.15/OPCODE/OPC_RayCollider.cpp \ + ../ode-0.15/OPCODE/OPC_SphereCollider.cpp \ + ../ode-0.15/OPCODE/OPC_TreeBuilders.cpp \ + ../ode-0.15/OPCODE/OPC_TreeCollider.cpp \ + ../ode-0.15/OPCODE/OPC_VolumeCollider.cpp \ + ../ode-0.15/OPCODE/Opcode.cpp \ + ../ode-0.15/OPCODE/StdAfx.cpp \ + ../src/AMotorJoint.cpp \ + ../src/BallJoint.cpp \ + ../src/Body.cpp \ + ../src/BoxCarDriver.cpp \ + ../src/BoxGeom.cpp \ + ../src/ButterworthFilter.cpp \ + ../src/CappedCylinderGeom.cpp \ + ../src/Contact.cpp \ + ../src/Controller.cpp \ + ../src/CyclicDriver.cpp \ + ../src/CylinderWrapStrap.cpp \ + ../src/DampedSpringMuscle.cpp \ + ../src/DataFile.cpp \ + ../src/DataTarget.cpp \ + ../src/DataTargetQuaternion.cpp \ + ../src/DataTargetScalar.cpp \ + ../src/DataTargetVector.cpp \ + ../src/Drivable.cpp \ + ../src/Driver.cpp \ + ../src/Environment.cpp \ + ../src/ErrorHandler.cpp \ + ../src/Face.cpp \ + ../src/FacetedBox.cpp \ + ../src/FacetedCappedCylinder.cpp \ + ../src/FacetedConicSegment.cpp \ + ../src/FacetedObject.cpp \ + ../src/FacetedPolyline.cpp \ + ../src/FacetedRect.cpp \ + ../src/FacetedSphere.cpp \ + ../src/FEC.cpp \ + ../src/FixedDriver.cpp \ + ../src/FixedJoint.cpp \ + ../src/FloatingHingeJoint.cpp \ + ../src/Geom.cpp \ + ../src/GLUtils.cpp \ + ../src/HingeJoint.cpp \ + ../src/Joint.cpp \ + ../src/MAMuscle.cpp \ + ../src/MAMuscleComplete.cpp \ + ../src/MAMuscleExtended.cpp \ + ../src/Marker.cpp \ + ../src/MD5.cpp \ + ../src/MovingAverage.cpp \ + ../src/Muscle.cpp \ + ../src/NamedObject.cpp \ + ../src/NPointStrap.cpp \ + ../src/ObjectiveMain.cpp \ + ../src/PCA.cpp \ + ../src/PIDMuscleLength.cpp \ + ../src/PIDTargetMatch.cpp \ + ../src/PlaneGeom.cpp \ + ../src/PositionReporter.cpp \ + ../src/RayGeom.cpp \ + ../src/Reporter.cpp \ + ../src/Simulation.cpp \ + ../src/SliderJoint.cpp \ + ../src/SphereGeom.cpp \ + ../src/StackedBoxCarDriver.cpp \ + ../src/StepDriver.cpp \ + ../src/Strap.cpp \ + ../src/StrokeFont.cpp \ + ../src/SwingClearanceAbortReporter.cpp \ + ../src/TCP.cpp \ + ../src/ThreePointStrap.cpp \ + ../src/TIFFWrite.cpp \ + ../src/TorqueReporter.cpp \ + ../src/TrimeshGeom.cpp \ + ../src/TwoCylinderWrapStrap.cpp \ + ../src/TwoPointStrap.cpp \ + ../src/UDP.cpp \ + ../src/UGMMuscle.cpp \ + ../src/UniversalJoint.cpp \ + ../src/Util.cpp \ + ../src/Warehouse.cpp \ + ../src/XMLConverter.cpp \ + AboutDialog.cpp \ + DialogOutputSelect.cpp \ + DialogPreferences.cpp \ + IrrlichtWindow.cpp \ + main.cpp \ + MainWindow.cpp \ + Preferences.cpp \ + SimulationWindow.cpp \ + TrackBall.cpp \ + ViewControlWidget.cpp \ + ../src/Filter.cpp \ + ../src/TegotaeDriver.cpp \ + ../src/PIDErrorInController.cpp \ + ../libgwavi/avi-utils.c \ + ../libgwavi/fileio.c \ + ../libgwavi/gwavi.c \ + AVIWriter.cpp \ + ../GaitSymGaul/gaul/src/ga_bitstring.cpp \ + ../GaitSymGaul/gaul/src/ga_chromo.cpp \ + ../GaitSymGaul/gaul/src/ga_climbing.cpp \ + ../GaitSymGaul/gaul/src/ga_compare.cpp \ + ../GaitSymGaul/gaul/src/ga_core.cpp \ + ../GaitSymGaul/gaul/src/ga_crossover.cpp \ + ../GaitSymGaul/gaul/src/ga_de.cpp \ + ../GaitSymGaul/gaul/src/ga_deterministiccrowding.cpp \ + ../GaitSymGaul/gaul/src/ga_gradient.cpp \ + ../GaitSymGaul/gaul/src/ga_intrinsics.cpp \ + ../GaitSymGaul/gaul/src/ga_io.cpp \ + ../GaitSymGaul/gaul/src/ga_mutate.cpp \ + ../GaitSymGaul/gaul/src/ga_optim.cpp \ + ../GaitSymGaul/gaul/src/ga_qsort.cpp \ + ../GaitSymGaul/gaul/src/ga_randomsearch.cpp \ + ../GaitSymGaul/gaul/src/ga_rank.cpp \ + ../GaitSymGaul/gaul/src/ga_replace.cpp \ + ../GaitSymGaul/gaul/src/ga_sa.cpp \ + ../GaitSymGaul/gaul/src/ga_seed.cpp \ + ../GaitSymGaul/gaul/src/ga_select.cpp \ + ../GaitSymGaul/gaul/src/ga_similarity.cpp \ + ../GaitSymGaul/gaul/src/ga_simplex.cpp \ + ../GaitSymGaul/gaul/src/ga_stats.cpp \ + ../GaitSymGaul/gaul/src/ga_systematicsearch.cpp \ + ../GaitSymGaul/gaul/src/ga_tabu.cpp \ + ../GaitSymGaul/gaul/src/ga_utility.cpp \ + ../GaitSymGaul/gaul/util/avltree.cpp \ + ../GaitSymGaul/gaul/util/compatibility.cpp \ + ../GaitSymGaul/gaul/util/linkedlist.cpp \ + ../GaitSymGaul/gaul/util/log_util.cpp \ + ../GaitSymGaul/gaul/util/memory_chunks.cpp \ + ../GaitSymGaul/gaul/util/memory_util.cpp \ + ../GaitSymGaul/gaul/util/nn_util.cpp \ + ../GaitSymGaul/gaul/util/random_util.cpp \ + ../GaitSymGaul/gaul/util/table_util.cpp \ + ../GaitSymGaul/gaul/util/timer_util.cpp \ + ../GaitSymGaul/callbacks.cpp \ + ../GaitSymGaul/do_genetic_algorithm.cpp \ + ../GaitSymGaul/do_next_ascent_hillclimbing.cpp \ + ../GaitSymGaul/do_random_ascent_hillclimbing.cpp \ + ../GaitSymGaul/do_simplex_search.cpp \ + ../GaitSymGaul/do_simulated_annealling.cpp \ + ../GaitSymGaul/do_tabu_search.cpp \ + ../GaitSymGaul/utilities.cpp \ + Settings.cpp +HEADERS += \ + ../ann_1.1.2/include/ANN/ANN.h \ + ../ann_1.1.2/include/ANN/ANNperf.h \ + ../ann_1.1.2/include/ANN/ANNx.h \ + ../ann_1.1.2/src/bd_tree.h \ + ../ann_1.1.2/src/kd_fix_rad_search.h \ + ../ann_1.1.2/src/kd_pr_search.h \ + ../ann_1.1.2/src/kd_search.h \ + ../ann_1.1.2/src/kd_split.h \ + ../ann_1.1.2/src/kd_tree.h \ + ../ann_1.1.2/src/kd_util.h \ + ../ann_1.1.2/src/pr_queue_k.h \ + ../ann_1.1.2/src/pr_queue.h \ + ../exprtk/exprtk.hpp \ + ../irrlicht-1.9/include/CDynamicMeshBuffer.h \ + ../irrlicht-1.9/include/CIndexBuffer.h \ + ../irrlicht-1.9/include/CMeshBuffer.h \ + ../irrlicht-1.9/include/CVertexBuffer.h \ + ../irrlicht-1.9/include/EAttributes.h \ + ../irrlicht-1.9/include/ECullingTypes.h \ + ../irrlicht-1.9/include/EDebugSceneTypes.h \ + ../irrlicht-1.9/include/EDeviceTypes.h \ + ../irrlicht-1.9/include/EDriverFeatures.h \ + ../irrlicht-1.9/include/EDriverTypes.h \ + ../irrlicht-1.9/include/EFocusFlags.h \ + ../irrlicht-1.9/include/EGUIAlignment.h \ + ../irrlicht-1.9/include/EGUIElementTypes.h \ + ../irrlicht-1.9/include/EHardwareBufferFlags.h \ + ../irrlicht-1.9/include/EMaterialFlags.h \ + ../irrlicht-1.9/include/EMaterialTypes.h \ + ../irrlicht-1.9/include/EMeshWriterEnums.h \ + ../irrlicht-1.9/include/EMessageBoxFlags.h \ + ../irrlicht-1.9/include/EPrimitiveTypes.h \ + ../irrlicht-1.9/include/ESceneNodeAnimatorTypes.h \ + ../irrlicht-1.9/include/ESceneNodeTypes.h \ + ../irrlicht-1.9/include/EShaderTypes.h \ + ../irrlicht-1.9/include/ETerrainElements.h \ + ../irrlicht-1.9/include/IAnimatedMesh.h \ + ../irrlicht-1.9/include/IAnimatedMeshMD2.h \ + ../irrlicht-1.9/include/IAnimatedMeshMD3.h \ + ../irrlicht-1.9/include/IAnimatedMeshSceneNode.h \ + ../irrlicht-1.9/include/IAttributeExchangingObject.h \ + ../irrlicht-1.9/include/IAttributes.h \ + ../irrlicht-1.9/include/IBillboardSceneNode.h \ + ../irrlicht-1.9/include/IBillboardTextSceneNode.h \ + ../irrlicht-1.9/include/IBoneSceneNode.h \ + ../irrlicht-1.9/include/ICameraSceneNode.h \ + ../irrlicht-1.9/include/IColladaMeshWriter.h \ + ../irrlicht-1.9/include/IContextManager.h \ + ../irrlicht-1.9/include/ICursorControl.h \ + ../irrlicht-1.9/include/IDummyTransformationSceneNode.h \ + ../irrlicht-1.9/include/IDynamicMeshBuffer.h \ + ../irrlicht-1.9/include/IEventReceiver.h \ + ../irrlicht-1.9/include/IFileArchive.h \ + ../irrlicht-1.9/include/IFileList.h \ + ../irrlicht-1.9/include/IFileSystem.h \ + ../irrlicht-1.9/include/IGPUProgrammingServices.h \ + ../irrlicht-1.9/include/IGUIButton.h \ + ../irrlicht-1.9/include/IGUICheckBox.h \ + ../irrlicht-1.9/include/IGUIColorSelectDialog.h \ + ../irrlicht-1.9/include/IGUIComboBox.h \ + ../irrlicht-1.9/include/IGUIContextMenu.h \ + ../irrlicht-1.9/include/IGUIEditBox.h \ + ../irrlicht-1.9/include/IGUIElement.h \ + ../irrlicht-1.9/include/IGUIElementFactory.h \ + ../irrlicht-1.9/include/IGUIEnvironment.h \ + ../irrlicht-1.9/include/IGUIFileOpenDialog.h \ + ../irrlicht-1.9/include/IGUIFont.h \ + ../irrlicht-1.9/include/IGUIFontBitmap.h \ + ../irrlicht-1.9/include/IGUIImage.h \ + ../irrlicht-1.9/include/IGUIImageList.h \ + ../irrlicht-1.9/include/IGUIInOutFader.h \ + ../irrlicht-1.9/include/IGUIListBox.h \ + ../irrlicht-1.9/include/IGUIMeshViewer.h \ + ../irrlicht-1.9/include/IGUIProfiler.h \ + ../irrlicht-1.9/include/IGUIScrollBar.h \ + ../irrlicht-1.9/include/IGUISkin.h \ + ../irrlicht-1.9/include/IGUISpinBox.h \ + ../irrlicht-1.9/include/IGUISpriteBank.h \ + ../irrlicht-1.9/include/IGUIStaticText.h \ + ../irrlicht-1.9/include/IGUITabControl.h \ + ../irrlicht-1.9/include/IGUITable.h \ + ../irrlicht-1.9/include/IGUIToolbar.h \ + ../irrlicht-1.9/include/IGUITreeView.h \ + ../irrlicht-1.9/include/IGUIWindow.h \ + ../irrlicht-1.9/include/IGeometryCreator.h \ + ../irrlicht-1.9/include/IImage.h \ + ../irrlicht-1.9/include/IImageLoader.h \ + ../irrlicht-1.9/include/IImageWriter.h \ + ../irrlicht-1.9/include/IIndexBuffer.h \ + ../irrlicht-1.9/include/ILightManager.h \ + ../irrlicht-1.9/include/ILightSceneNode.h \ + ../irrlicht-1.9/include/ILogger.h \ + ../irrlicht-1.9/include/IMaterialRenderer.h \ + ../irrlicht-1.9/include/IMaterialRendererServices.h \ + ../irrlicht-1.9/include/IMesh.h \ + ../irrlicht-1.9/include/IMeshBuffer.h \ + ../irrlicht-1.9/include/IMeshCache.h \ + ../irrlicht-1.9/include/IMeshLoader.h \ + ../irrlicht-1.9/include/IMeshManipulator.h \ + ../irrlicht-1.9/include/IMeshSceneNode.h \ + ../irrlicht-1.9/include/IMeshTextureLoader.h \ + ../irrlicht-1.9/include/IMeshWriter.h \ + ../irrlicht-1.9/include/IMetaTriangleSelector.h \ + ../irrlicht-1.9/include/IOSOperator.h \ + ../irrlicht-1.9/include/IParticleAffector.h \ + ../irrlicht-1.9/include/IParticleAnimatedMeshSceneNodeEmitter.h \ + ../irrlicht-1.9/include/IParticleAttractionAffector.h \ + ../irrlicht-1.9/include/IParticleBoxEmitter.h \ + ../irrlicht-1.9/include/IParticleCylinderEmitter.h \ + ../irrlicht-1.9/include/IParticleEmitter.h \ + ../irrlicht-1.9/include/IParticleFadeOutAffector.h \ + ../irrlicht-1.9/include/IParticleGravityAffector.h \ + ../irrlicht-1.9/include/IParticleMeshEmitter.h \ + ../irrlicht-1.9/include/IParticleRingEmitter.h \ + ../irrlicht-1.9/include/IParticleRotationAffector.h \ + ../irrlicht-1.9/include/IParticleSphereEmitter.h \ + ../irrlicht-1.9/include/IParticleSystemSceneNode.h \ + ../irrlicht-1.9/include/IProfiler.h \ + ../irrlicht-1.9/include/IQ3LevelMesh.h \ + ../irrlicht-1.9/include/IQ3Shader.h \ + ../irrlicht-1.9/include/IRandomizer.h \ + ../irrlicht-1.9/include/IReadFile.h \ + ../irrlicht-1.9/include/IReferenceCounted.h \ + ../irrlicht-1.9/include/IRenderTarget.h \ + ../irrlicht-1.9/include/ISceneCollisionManager.h \ + ../irrlicht-1.9/include/ISceneLoader.h \ + ../irrlicht-1.9/include/ISceneManager.h \ + ../irrlicht-1.9/include/ISceneNode.h \ + ../irrlicht-1.9/include/ISceneNodeAnimator.h \ + ../irrlicht-1.9/include/ISceneNodeAnimatorCameraFPS.h \ + ../irrlicht-1.9/include/ISceneNodeAnimatorCameraMaya.h \ + ../irrlicht-1.9/include/ISceneNodeAnimatorCollisionResponse.h \ + ../irrlicht-1.9/include/ISceneNodeAnimatorFactory.h \ + ../irrlicht-1.9/include/ISceneNodeFactory.h \ + ../irrlicht-1.9/include/ISceneUserDataSerializer.h \ + ../irrlicht-1.9/include/IShaderConstantSetCallBack.h \ + ../irrlicht-1.9/include/IShadowVolumeSceneNode.h \ + ../irrlicht-1.9/include/ISkinnedMesh.h \ + ../irrlicht-1.9/include/ITerrainSceneNode.h \ + ../irrlicht-1.9/include/ITextSceneNode.h \ + ../irrlicht-1.9/include/ITexture.h \ + ../irrlicht-1.9/include/ITimer.h \ + ../irrlicht-1.9/include/ITriangleSelector.h \ + ../irrlicht-1.9/include/IVertexBuffer.h \ + ../irrlicht-1.9/include/IVideoDriver.h \ + ../irrlicht-1.9/include/IVideoModeList.h \ + ../irrlicht-1.9/include/IVolumeLightSceneNode.h \ + ../irrlicht-1.9/include/IWriteFile.h \ + ../irrlicht-1.9/include/IXMLReader.h \ + ../irrlicht-1.9/include/IXMLWriter.h \ + ../irrlicht-1.9/include/IrrCompileConfig.h \ + ../irrlicht-1.9/include/IrrlichtDevice.h \ + ../irrlicht-1.9/include/Keycodes.h \ + ../irrlicht-1.9/include/S3DVertex.h \ + ../irrlicht-1.9/include/SAnimatedMesh.h \ + ../irrlicht-1.9/include/SColor.h \ + ../irrlicht-1.9/include/SExposedVideoData.h \ + ../irrlicht-1.9/include/SIrrCreationParameters.h \ + ../irrlicht-1.9/include/SKeyMap.h \ + ../irrlicht-1.9/include/SLight.h \ + ../irrlicht-1.9/include/SMaterial.h \ + ../irrlicht-1.9/include/SMaterialLayer.h \ + ../irrlicht-1.9/include/SMesh.h \ + ../irrlicht-1.9/include/SMeshBuffer.h \ + ../irrlicht-1.9/include/SMeshBufferLightMap.h \ + ../irrlicht-1.9/include/SMeshBufferTangents.h \ + ../irrlicht-1.9/include/SParticle.h \ + ../irrlicht-1.9/include/SSharedMeshBuffer.h \ + ../irrlicht-1.9/include/SSkinMeshBuffer.h \ + ../irrlicht-1.9/include/SVertexIndex.h \ + ../irrlicht-1.9/include/SVertexManipulator.h \ + ../irrlicht-1.9/include/SViewFrustum.h \ + ../irrlicht-1.9/include/SceneParameters.h \ + ../irrlicht-1.9/include/aabbox3d.h \ + ../irrlicht-1.9/include/coreutil.h \ + ../irrlicht-1.9/include/dimension2d.h \ + ../irrlicht-1.9/include/driverChoice.h \ + ../irrlicht-1.9/include/exampleHelper.h \ + ../irrlicht-1.9/include/fast_atof.h \ + ../irrlicht-1.9/include/heapsort.h \ + ../irrlicht-1.9/include/irrAllocator.h \ + ../irrlicht-1.9/include/irrArray.h \ + ../irrlicht-1.9/include/irrList.h \ + ../irrlicht-1.9/include/irrMap.h \ + ../irrlicht-1.9/include/irrMath.h \ + ../irrlicht-1.9/include/irrString.h \ + ../irrlicht-1.9/include/irrTypes.h \ + ../irrlicht-1.9/include/irrXML.h \ + ../irrlicht-1.9/include/irrlicht.h \ + ../irrlicht-1.9/include/irrpack.h \ + ../irrlicht-1.9/include/irrunpack.h \ + ../irrlicht-1.9/include/leakHunter.h \ + ../irrlicht-1.9/include/line2d.h \ + ../irrlicht-1.9/include/line3d.h \ + ../irrlicht-1.9/include/matrix4.h \ + ../irrlicht-1.9/include/path.h \ + ../irrlicht-1.9/include/plane3d.h \ + ../irrlicht-1.9/include/position2d.h \ + ../irrlicht-1.9/include/quaternion.h \ + ../irrlicht-1.9/include/rect.h \ + ../irrlicht-1.9/include/triangle3d.h \ + ../irrlicht-1.9/include/vector2d.h \ + ../irrlicht-1.9/include/vector3d.h \ + ../irrlicht-1.9/source/BuiltInFont.h \ + ../irrlicht-1.9/source/C3DSMeshFileLoader.h \ + ../irrlicht-1.9/source/CAnimatedMeshHalfLife.h \ + ../irrlicht-1.9/source/CAnimatedMeshMD2.h \ + ../irrlicht-1.9/source/CAnimatedMeshMD3.h \ + ../irrlicht-1.9/source/CAnimatedMeshSceneNode.h \ + ../irrlicht-1.9/source/CAttributeImpl.h \ + ../irrlicht-1.9/source/CAttributes.h \ + ../irrlicht-1.9/source/CB3DMeshFileLoader.h \ + ../irrlicht-1.9/source/CB3DMeshWriter.h \ + ../irrlicht-1.9/source/CBSPMeshFileLoader.h \ + ../irrlicht-1.9/source/CBillboardSceneNode.h \ + ../irrlicht-1.9/source/CBlit.h \ + ../irrlicht-1.9/source/CBoneSceneNode.h \ + ../irrlicht-1.9/source/CCSMLoader.h \ + ../irrlicht-1.9/source/CCameraSceneNode.h \ + ../irrlicht-1.9/source/CColladaFileLoader.h \ + ../irrlicht-1.9/source/CColladaMeshWriter.h \ + ../irrlicht-1.9/source/CColorConverter.h \ + ../irrlicht-1.9/source/CCubeSceneNode.h \ + ../irrlicht-1.9/source/CD3D9Driver.h \ + ../irrlicht-1.9/source/CD3D9HLSLMaterialRenderer.h \ + ../irrlicht-1.9/source/CD3D9MaterialRenderer.h \ + ../irrlicht-1.9/source/CD3D9NormalMapRenderer.h \ + ../irrlicht-1.9/source/CD3D9ParallaxMapRenderer.h \ + ../irrlicht-1.9/source/CD3D9RenderTarget.h \ + ../irrlicht-1.9/source/CD3D9ShaderMaterialRenderer.h \ + ../irrlicht-1.9/source/CD3D9Texture.h \ + ../irrlicht-1.9/source/CDMFLoader.h \ + ../irrlicht-1.9/source/CDefaultGUIElementFactory.h \ + ../irrlicht-1.9/source/CDefaultSceneNodeAnimatorFactory.h \ + ../irrlicht-1.9/source/CDefaultSceneNodeFactory.h \ + ../irrlicht-1.9/source/CDepthBuffer.h \ + ../irrlicht-1.9/source/CDummyTransformationSceneNode.h \ + ../irrlicht-1.9/source/CEmptySceneNode.h \ + ../irrlicht-1.9/source/CFPSCounter.h \ + ../irrlicht-1.9/source/CFileList.h \ + ../irrlicht-1.9/source/CFileSystem.h \ + ../irrlicht-1.9/source/CGLXManager.h \ + ../irrlicht-1.9/source/CGUIButton.h \ + ../irrlicht-1.9/source/CGUICheckBox.h \ + ../irrlicht-1.9/source/CGUIColorSelectDialog.h \ + ../irrlicht-1.9/source/CGUIComboBox.h \ + ../irrlicht-1.9/source/CGUIContextMenu.h \ + ../irrlicht-1.9/source/CGUIEditBox.h \ + ../irrlicht-1.9/source/CGUIEnvironment.h \ + ../irrlicht-1.9/source/CGUIFileOpenDialog.h \ + ../irrlicht-1.9/source/CGUIFont.h \ + ../irrlicht-1.9/source/CGUIImage.h \ + ../irrlicht-1.9/source/CGUIImageList.h \ + ../irrlicht-1.9/source/CGUIInOutFader.h \ + ../irrlicht-1.9/source/CGUIListBox.h \ + ../irrlicht-1.9/source/CGUIMenu.h \ + ../irrlicht-1.9/source/CGUIMeshViewer.h \ + ../irrlicht-1.9/source/CGUIMessageBox.h \ + ../irrlicht-1.9/source/CGUIModalScreen.h \ + ../irrlicht-1.9/source/CGUIProfiler.h \ + ../irrlicht-1.9/source/CGUIScrollBar.h \ + ../irrlicht-1.9/source/CGUISkin.h \ + ../irrlicht-1.9/source/CGUISpinBox.h \ + ../irrlicht-1.9/source/CGUISpriteBank.h \ + ../irrlicht-1.9/source/CGUIStaticText.h \ + ../irrlicht-1.9/source/CGUITabControl.h \ + ../irrlicht-1.9/source/CGUITable.h \ + ../irrlicht-1.9/source/CGUIToolBar.h \ + ../irrlicht-1.9/source/CGUITreeView.h \ + ../irrlicht-1.9/source/CGUIWindow.h \ + ../irrlicht-1.9/source/CGeometryCreator.h \ + ../irrlicht-1.9/source/CImage.h \ + ../irrlicht-1.9/source/CImageLoaderBMP.h \ + ../irrlicht-1.9/source/CImageLoaderDDS.h \ + ../irrlicht-1.9/source/CImageLoaderJPG.h \ + ../irrlicht-1.9/source/CImageLoaderPCX.h \ + ../irrlicht-1.9/source/CImageLoaderPNG.h \ + ../irrlicht-1.9/source/CImageLoaderPPM.h \ + ../irrlicht-1.9/source/CImageLoaderPSD.h \ + ../irrlicht-1.9/source/CImageLoaderPVR.h \ + ../irrlicht-1.9/source/CImageLoaderRGB.h \ + ../irrlicht-1.9/source/CImageLoaderTGA.h \ + ../irrlicht-1.9/source/CImageLoaderWAL.h \ + ../irrlicht-1.9/source/CImageWriterBMP.h \ + ../irrlicht-1.9/source/CImageWriterJPG.h \ + ../irrlicht-1.9/source/CImageWriterPCX.h \ + ../irrlicht-1.9/source/CImageWriterPNG.h \ + ../irrlicht-1.9/source/CImageWriterPPM.h \ + ../irrlicht-1.9/source/CImageWriterPSD.h \ + ../irrlicht-1.9/source/CImageWriterTGA.h \ + ../irrlicht-1.9/source/CIrrDeviceConsole.h \ + ../irrlicht-1.9/source/CIrrDeviceFB.h \ + ../irrlicht-1.9/source/CIrrDeviceLinux.h \ + ../irrlicht-1.9/source/CIrrDeviceOSX.h \ + ../irrlicht-1.9/source/CIrrDeviceSDL.h \ + ../irrlicht-1.9/source/CIrrDeviceStub.h \ + ../irrlicht-1.9/source/CIrrDeviceWin32.h \ + ../irrlicht-1.9/source/CIrrMeshFileLoader.h \ + ../irrlicht-1.9/source/CIrrMeshWriter.h \ + ../irrlicht-1.9/source/CLMTSMeshFileLoader.h \ + ../irrlicht-1.9/source/CLWOMeshFileLoader.h \ + ../irrlicht-1.9/source/CLightSceneNode.h \ + ../irrlicht-1.9/source/CLimitReadFile.h \ + ../irrlicht-1.9/source/CLogger.h \ + ../irrlicht-1.9/source/CMD2MeshFileLoader.h \ + ../irrlicht-1.9/source/CMD3MeshFileLoader.h \ + ../irrlicht-1.9/source/CMS3DMeshFileLoader.h \ + ../irrlicht-1.9/source/CMY3DHelper.h \ + ../irrlicht-1.9/source/CMY3DMeshFileLoader.h \ + ../irrlicht-1.9/source/CMemoryFile.h \ + ../irrlicht-1.9/source/CMeshCache.h \ + ../irrlicht-1.9/source/CMeshManipulator.h \ + ../irrlicht-1.9/source/CMeshSceneNode.h \ + ../irrlicht-1.9/source/CMeshTextureLoader.h \ + ../irrlicht-1.9/source/CMetaTriangleSelector.h \ + ../irrlicht-1.9/source/CMountPointReader.h \ + ../irrlicht-1.9/source/CNPKReader.h \ + ../irrlicht-1.9/source/CNSOGLManager.h \ + ../irrlicht-1.9/source/CNullDriver.h \ + ../irrlicht-1.9/source/COBJMeshFileLoader.h \ + ../irrlicht-1.9/source/COBJMeshWriter.h \ + ../irrlicht-1.9/source/COCTLoader.h \ + ../irrlicht-1.9/source/COSOperator.h \ + ../irrlicht-1.9/source/COctreeSceneNode.h \ + ../irrlicht-1.9/source/COctreeTriangleSelector.h \ + ../irrlicht-1.9/source/COgreMeshFileLoader.h \ + ../irrlicht-1.9/source/COpenGLCacheHandler.h \ + ../irrlicht-1.9/source/COpenGLCommon.h \ + ../irrlicht-1.9/source/COpenGLCoreCacheHandler.h \ + ../irrlicht-1.9/source/COpenGLCoreFeature.h \ + ../irrlicht-1.9/source/COpenGLCoreRenderTarget.h \ + ../irrlicht-1.9/source/COpenGLCoreTexture.h \ + ../irrlicht-1.9/source/COpenGLDriver.h \ + ../irrlicht-1.9/source/COpenGLExtensionHandler.h \ + ../irrlicht-1.9/source/COpenGLMaterialRenderer.h \ + ../irrlicht-1.9/source/COpenGLNormalMapRenderer.h \ + ../irrlicht-1.9/source/COpenGLParallaxMapRenderer.h \ + ../irrlicht-1.9/source/COpenGLSLMaterialRenderer.h \ + ../irrlicht-1.9/source/COpenGLShaderMaterialRenderer.h \ + ../irrlicht-1.9/source/CPLYMeshFileLoader.h \ + ../irrlicht-1.9/source/CPLYMeshWriter.h \ + ../irrlicht-1.9/source/CPakReader.h \ + ../irrlicht-1.9/source/CParticleAnimatedMeshSceneNodeEmitter.h \ + ../irrlicht-1.9/source/CParticleAttractionAffector.h \ + ../irrlicht-1.9/source/CParticleBoxEmitter.h \ + ../irrlicht-1.9/source/CParticleCylinderEmitter.h \ + ../irrlicht-1.9/source/CParticleFadeOutAffector.h \ + ../irrlicht-1.9/source/CParticleGravityAffector.h \ + ../irrlicht-1.9/source/CParticleMeshEmitter.h \ + ../irrlicht-1.9/source/CParticlePointEmitter.h \ + ../irrlicht-1.9/source/CParticleRingEmitter.h \ + ../irrlicht-1.9/source/CParticleRotationAffector.h \ + ../irrlicht-1.9/source/CParticleScaleAffector.h \ + ../irrlicht-1.9/source/CParticleSphereEmitter.h \ + ../irrlicht-1.9/source/CParticleSystemSceneNode.h \ + ../irrlicht-1.9/source/CProfiler.h \ + ../irrlicht-1.9/source/CQ3LevelMesh.h \ + ../irrlicht-1.9/source/CQuake3ShaderSceneNode.h \ + ../irrlicht-1.9/source/CReadFile.h \ + ../irrlicht-1.9/source/CSMFMeshFileLoader.h \ + ../irrlicht-1.9/source/CSTLMeshFileLoader.h \ + ../irrlicht-1.9/source/CSTLMeshWriter.h \ + ../irrlicht-1.9/source/CSceneCollisionManager.h \ + ../irrlicht-1.9/source/CSceneLoaderIrr.h \ + ../irrlicht-1.9/source/CSceneManager.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCameraFPS.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCameraMaya.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorCollisionResponse.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorDelete.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFlyCircle.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFlyStraight.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorFollowSpline.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorRotation.h \ + ../irrlicht-1.9/source/CSceneNodeAnimatorTexture.h \ + ../irrlicht-1.9/source/CShadowVolumeSceneNode.h \ + ../irrlicht-1.9/source/CSkinnedMesh.h \ + ../irrlicht-1.9/source/CSkyBoxSceneNode.h \ + ../irrlicht-1.9/source/CSkyDomeSceneNode.h \ + ../irrlicht-1.9/source/CSoftware2MaterialRenderer.h \ + ../irrlicht-1.9/source/CSoftwareDriver.h \ + ../irrlicht-1.9/source/CSoftwareDriver2.h \ + ../irrlicht-1.9/source/CSoftwareTexture.h \ + ../irrlicht-1.9/source/CSoftwareTexture2.h \ + ../irrlicht-1.9/source/CSphereSceneNode.h \ + ../irrlicht-1.9/source/CTRTextureGouraud.h \ + ../irrlicht-1.9/source/CTarReader.h \ + ../irrlicht-1.9/source/CTerrainSceneNode.h \ + ../irrlicht-1.9/source/CTerrainTriangleSelector.h \ + ../irrlicht-1.9/source/CTextSceneNode.h \ + ../irrlicht-1.9/source/CTimer.h \ + ../irrlicht-1.9/source/CTriangleBBSelector.h \ + ../irrlicht-1.9/source/CTriangleSelector.h \ + ../irrlicht-1.9/source/CVideoModeList.h \ + ../irrlicht-1.9/source/CVolumeLightSceneNode.h \ + ../irrlicht-1.9/source/CWADReader.h \ + ../irrlicht-1.9/source/CWGLManager.h \ + ../irrlicht-1.9/source/CWaterSurfaceSceneNode.h \ + ../irrlicht-1.9/source/CWriteFile.h \ + ../irrlicht-1.9/source/CXMLReader.h \ + ../irrlicht-1.9/source/CXMLReaderImpl.h \ + ../irrlicht-1.9/source/CXMLWriter.h \ + ../irrlicht-1.9/source/CXMeshFileLoader.h \ + ../irrlicht-1.9/source/CZBuffer.h \ + ../irrlicht-1.9/source/CZipReader.h \ + ../irrlicht-1.9/source/EProfileIDs.h \ + ../irrlicht-1.9/source/IAttribute.h \ + ../irrlicht-1.9/source/IBurningShader.h \ + ../irrlicht-1.9/source/IDepthBuffer.h \ + ../irrlicht-1.9/source/IImagePresenter.h \ + ../irrlicht-1.9/source/ISceneNodeAnimatorFinishing.h \ + ../irrlicht-1.9/source/ITriangleRenderer.h \ + ../irrlicht-1.9/source/IZBuffer.h \ + ../irrlicht-1.9/source/Octree.h \ + ../irrlicht-1.9/source/S2DVertex.h \ + ../irrlicht-1.9/source/S4DVertex.h \ + ../irrlicht-1.9/source/SB3DStructs.h \ + ../irrlicht-1.9/source/SoftwareDriver2_compile_config.h \ + ../irrlicht-1.9/source/SoftwareDriver2_helper.h \ + ../irrlicht-1.9/source/dmfsupport.h \ + ../irrlicht-1.9/source/glext.h \ + ../irrlicht-1.9/source/glxext.h \ + ../irrlicht-1.9/source/os.h \ + ../irrlicht-1.9/source/resource.h \ + ../irrlicht-1.9/source/wglext.h \ + ../ode-0.15/include/ode/collision_space.h \ + ../ode-0.15/include/ode/collision_trimesh.h \ + ../ode-0.15/include/ode/collision.h \ + ../ode-0.15/include/ode/common.h \ + ../ode-0.15/include/ode/compatibility.h \ + ../ode-0.15/include/ode/contact.h \ + ../ode-0.15/include/ode/error.h \ + ../ode-0.15/include/ode/export-dif.h \ + ../ode-0.15/include/ode/mass.h \ + ../ode-0.15/include/ode/matrix.h \ + ../ode-0.15/include/ode/memory.h \ + ../ode-0.15/include/ode/misc.h \ + ../ode-0.15/include/ode/objects.h \ + ../ode-0.15/include/ode/ode.h \ + ../ode-0.15/include/ode/odeconfig.h \ + ../ode-0.15/include/ode/odecpp_collision.h \ + ../ode-0.15/include/ode/odecpp.h \ + ../ode-0.15/include/ode/odeinit.h \ + ../ode-0.15/include/ode/odemath_legacy.h \ + ../ode-0.15/include/ode/odemath.h \ + ../ode-0.15/include/ode/precision.h \ + ../ode-0.15/include/ode/rotation.h \ + ../ode-0.15/include/ode/threading_impl.h \ + ../ode-0.15/include/ode/threading.h \ + ../ode-0.15/include/ode/timer.h \ + ../ode-0.15/include/ode/version.h \ + ../ode-0.15/libccd/src/ccd/alloc.h \ + ../ode-0.15/libccd/src/ccd/ccd.h \ + ../ode-0.15/libccd/src/ccd/compiler.h \ + ../ode-0.15/libccd/src/ccd/dbg.h \ + ../ode-0.15/libccd/src/ccd/list.h \ + ../ode-0.15/libccd/src/ccd/polytope.h \ + ../ode-0.15/libccd/src/ccd/precision.h \ + ../ode-0.15/libccd/src/ccd/quat.h \ + ../ode-0.15/libccd/src/ccd/simplex.h \ + ../ode-0.15/libccd/src/ccd/support.h \ + ../ode-0.15/libccd/src/ccd/vec3.h \ + ../ode-0.15/ode/src/array.h \ + ../ode-0.15/ode/src/collision_kernel.h \ + ../ode-0.15/ode/src/collision_libccd.h \ + ../ode-0.15/ode/src/collision_space_internal.h \ + ../ode-0.15/ode/src/collision_std.h \ + ../ode-0.15/ode/src/collision_transform.h \ + ../ode-0.15/ode/src/collision_trimesh_colliders.h \ + ../ode-0.15/ode/src/collision_trimesh_internal.h \ + ../ode-0.15/ode/src/collision_util.h \ + ../ode-0.15/ode/src/config.h \ + ../ode-0.15/ode/src/error.h \ + ../ode-0.15/ode/src/fastdot_impl.h \ + ../ode-0.15/ode/src/fastldlt_impl.h \ + ../ode-0.15/ode/src/fastltsolve_impl.h \ + ../ode-0.15/ode/src/fastsolve_impl.h \ + ../ode-0.15/ode/src/heightfield.h \ + ../ode-0.15/ode/src/joints/amotor.h \ + ../ode-0.15/ode/src/joints/ball.h \ + ../ode-0.15/ode/src/joints/contact.h \ + ../ode-0.15/ode/src/joints/dball.h \ + ../ode-0.15/ode/src/joints/dhinge.h \ + ../ode-0.15/ode/src/joints/fixed.h \ + ../ode-0.15/ode/src/joints/floatinghinge.h \ + ../ode-0.15/ode/src/joints/hinge.h \ + ../ode-0.15/ode/src/joints/hinge2.h \ + ../ode-0.15/ode/src/joints/joint_internal.h \ + ../ode-0.15/ode/src/joints/joint.h \ + ../ode-0.15/ode/src/joints/joints.h \ + ../ode-0.15/ode/src/joints/lmotor.h \ + ../ode-0.15/ode/src/joints/null.h \ + ../ode-0.15/ode/src/joints/piston.h \ + ../ode-0.15/ode/src/joints/plane2d.h \ + ../ode-0.15/ode/src/joints/pr.h \ + ../ode-0.15/ode/src/joints/pu.h \ + ../ode-0.15/ode/src/joints/slider.h \ + ../ode-0.15/ode/src/joints/transmission.h \ + ../ode-0.15/ode/src/joints/universal.h \ + ../ode-0.15/ode/src/lcp.h \ + ../ode-0.15/ode/src/mat.h \ + ../ode-0.15/ode/src/matrix_impl.h \ + ../ode-0.15/ode/src/matrix.h \ + ../ode-0.15/ode/src/objects.h \ + ../ode-0.15/ode/src/obstack.h \ + ../ode-0.15/ode/src/odemath.h \ + ../ode-0.15/ode/src/odeou.h \ + ../ode-0.15/ode/src/odetls.h \ + ../ode-0.15/ode/src/quickstep.h \ + ../ode-0.15/ode/src/step.h \ + ../ode-0.15/ode/src/threading_atomics_provs.h \ + ../ode-0.15/ode/src/threading_base.h \ + ../ode-0.15/ode/src/threading_fake_sync.h \ + ../ode-0.15/ode/src/threading_impl_posix.h \ + ../ode-0.15/ode/src/threading_impl_templates.h \ + ../ode-0.15/ode/src/threading_impl_win.h \ + ../ode-0.15/ode/src/threading_impl.h \ + ../ode-0.15/ode/src/threadingutils.h \ + ../ode-0.15/ode/src/typedefs.h \ + ../ode-0.15/ode/src/util.h \ + ../ode-0.15/OPCODE/Ice/IceAABB.h \ + ../ode-0.15/OPCODE/Ice/IceAxes.h \ + ../ode-0.15/OPCODE/Ice/IceBoundingSphere.h \ + ../ode-0.15/OPCODE/Ice/IceContainer.h \ + ../ode-0.15/OPCODE/Ice/IceFPU.h \ + ../ode-0.15/OPCODE/Ice/IceHPoint.h \ + ../ode-0.15/OPCODE/Ice/IceIndexedTriangle.h \ + ../ode-0.15/OPCODE/Ice/IceLSS.h \ + ../ode-0.15/OPCODE/Ice/IceMatrix3x3.h \ + ../ode-0.15/OPCODE/Ice/IceMatrix4x4.h \ + ../ode-0.15/OPCODE/Ice/IceMemoryMacros.h \ + ../ode-0.15/OPCODE/Ice/IceOBB.h \ + ../ode-0.15/OPCODE/Ice/IcePairs.h \ + ../ode-0.15/OPCODE/Ice/IcePlane.h \ + ../ode-0.15/OPCODE/Ice/IcePoint.h \ + ../ode-0.15/OPCODE/Ice/IcePreprocessor.h \ + ../ode-0.15/OPCODE/Ice/IceRandom.h \ + ../ode-0.15/OPCODE/Ice/IceRay.h \ + ../ode-0.15/OPCODE/Ice/IceRevisitedRadix.h \ + ../ode-0.15/OPCODE/Ice/IceSegment.h \ + ../ode-0.15/OPCODE/Ice/IceTriangle.h \ + ../ode-0.15/OPCODE/Ice/IceTriList.h \ + ../ode-0.15/OPCODE/Ice/IceTypes.h \ + ../ode-0.15/OPCODE/Ice/IceUtils.h \ + ../ode-0.15/OPCODE/OPC_AABBCollider.h \ + ../ode-0.15/OPCODE/OPC_AABBTree.h \ + ../ode-0.15/OPCODE/OPC_BaseModel.h \ + ../ode-0.15/OPCODE/OPC_BoxBoxOverlap.h \ + ../ode-0.15/OPCODE/OPC_Collider.h \ + ../ode-0.15/OPCODE/OPC_Common.h \ + ../ode-0.15/OPCODE/OPC_HybridModel.h \ + ../ode-0.15/OPCODE/OPC_IceHook.h \ + ../ode-0.15/OPCODE/OPC_LSSAABBOverlap.h \ + ../ode-0.15/OPCODE/OPC_LSSCollider.h \ + ../ode-0.15/OPCODE/OPC_LSSTriOverlap.h \ + ../ode-0.15/OPCODE/OPC_MeshInterface.h \ + ../ode-0.15/OPCODE/OPC_Model.h \ + ../ode-0.15/OPCODE/OPC_OBBCollider.h \ + ../ode-0.15/OPCODE/OPC_OptimizedTree.h \ + ../ode-0.15/OPCODE/OPC_Picking.h \ + ../ode-0.15/OPCODE/OPC_PlanesAABBOverlap.h \ + ../ode-0.15/OPCODE/OPC_PlanesCollider.h \ + ../ode-0.15/OPCODE/OPC_PlanesTriOverlap.h \ + ../ode-0.15/OPCODE/OPC_RayAABBOverlap.h \ + ../ode-0.15/OPCODE/OPC_RayCollider.h \ + ../ode-0.15/OPCODE/OPC_RayTriOverlap.h \ + ../ode-0.15/OPCODE/OPC_Settings.h \ + ../ode-0.15/OPCODE/OPC_SphereAABBOverlap.h \ + ../ode-0.15/OPCODE/OPC_SphereCollider.h \ + ../ode-0.15/OPCODE/OPC_SphereTriOverlap.h \ + ../ode-0.15/OPCODE/OPC_TreeBuilders.h \ + ../ode-0.15/OPCODE/OPC_TreeCollider.h \ + ../ode-0.15/OPCODE/OPC_TriBoxOverlap.h \ + ../ode-0.15/OPCODE/OPC_TriTriOverlap.h \ + ../ode-0.15/OPCODE/OPC_VolumeCollider.h \ + ../ode-0.15/OPCODE/Opcode.h \ + ../ode-0.15/OPCODE/Stdafx.h \ + ../rapidxml-1.13/rapidxml_iterators.hpp \ + ../rapidxml-1.13/rapidxml_print.hpp \ + ../rapidxml-1.13/rapidxml_utils.hpp \ + ../rapidxml-1.13/rapidxml.hpp \ + ../src/AMotorJoint.h \ + ../src/BallJoint.h \ + ../src/Body.h \ + ../src/BoxCarDriver.h \ + ../src/BoxGeom.h \ + ../src/ButterworthFilter.h \ + ../src/CappedCylinderGeom.h \ + ../src/Contact.h \ + ../src/Controller.h \ + ../src/CyclicDriver.h \ + ../src/CylinderWrapStrap.h \ + ../src/DampedSpringMuscle.h \ + ../src/DataFile.h \ + ../src/DataTarget.h \ + ../src/DataTargetQuaternion.h \ + ../src/DataTargetScalar.h \ + ../src/DataTargetVector.h \ + ../src/DebugControl.h \ + ../src/Drivable.h \ + ../src/Driver.h \ + ../src/Environment.h \ + ../src/ErrorHandler.h \ + ../src/Face.h \ + ../src/FacetedBox.h \ + ../src/FacetedCappedCylinder.h \ + ../src/FacetedConicSegment.h \ + ../src/FacetedObject.h \ + ../src/FacetedPolyline.h \ + ../src/FacetedRect.h \ + ../src/FacetedSphere.h \ + ../src/FEC.h \ + ../src/FixedDriver.h \ + ../src/FixedJoint.h \ + ../src/FloatingHingeJoint.h \ + ../src/Geom.h \ + ../src/GLUtils.h \ + ../src/HingeJoint.h \ + ../src/Joint.h \ + ../src/MAMuscle.h \ + ../src/MAMuscleComplete.h \ + ../src/MAMuscleExtended.h \ + ../src/Marker.h \ + ../src/MD5.h \ + ../src/MovingAverage.h \ + ../src/Muscle.h \ + ../src/NamedObject.h \ + ../src/NPointStrap.h \ + ../src/ObjectiveMain.h \ + ../src/PCA.h \ + ../src/PGDMath.h \ + ../src/PIDMuscleLength.h \ + ../src/PIDTargetMatch.h \ + ../src/PlaneGeom.h \ + ../src/PositionReporter.h \ + ../src/RayGeom.h \ + ../src/Reporter.h \ + ../src/SimpleStrap.h \ + ../src/Simulation.h \ + ../src/SliderJoint.h \ + ../src/SphereGeom.h \ + ../src/StackedBoxCarDriver.h \ + ../src/StepDriver.h \ + ../src/Strap.h \ + ../src/StrokeFont.h \ + ../src/SwingClearanceAbortReporter.h \ + ../src/TCP.h \ + ../src/ThreePointStrap.h \ + ../src/TIFFWrite.h \ + ../src/TorqueReporter.h \ + ../src/TrimeshGeom.h \ + ../src/TwoCylinderWrapStrap.h \ + ../src/TwoPointStrap.h \ + ../src/UDP.h \ + ../src/UGMMuscle.h \ + ../src/UniversalJoint.h \ + ../src/Util.h \ + ../src/Warehouse.h \ + ../src/XMLConverter.h \ + AboutDialog.h \ + DialogOutputSelect.h \ + DialogPreferences.h \ + IrrlichtWindow.h \ + MainWindow.h \ + Preferences.h \ + SimulationWindow.h \ + TrackBall.h \ + ViewControlWidget.h \ + ../src/Filter.h \ + ../src/TegotaeDriver.h \ + ../src/PIDErrorInController.h \ + ../libgwavi/avi-utils.h \ + ../libgwavi/fileio.h \ + ../libgwavi/gwavi_private.h \ + AVIWriter.h \ + ../libgwavi/gwavi.h \ + ../GaitSymGaul/gaul/src/gaul/ga_bitstring.h \ + ../GaitSymGaul/gaul/src/gaul/ga_chromo.h \ + ../GaitSymGaul/gaul/src/gaul/ga_climbing.h \ + ../GaitSymGaul/gaul/src/gaul/ga_core.h \ + ../GaitSymGaul/gaul/src/gaul/ga_de.h \ + ../GaitSymGaul/gaul/src/gaul/ga_deterministiccrowding.h \ + ../GaitSymGaul/gaul/src/gaul/ga_gradient.h \ + ../GaitSymGaul/gaul/src/gaul/ga_intrinsics.h \ + ../GaitSymGaul/gaul/src/gaul/ga_optim.h \ + ../GaitSymGaul/gaul/src/gaul/ga_qsort.h \ + ../GaitSymGaul/gaul/src/gaul/ga_randomsearch.h \ + ../GaitSymGaul/gaul/src/gaul/ga_sa.h \ + ../GaitSymGaul/gaul/src/gaul/ga_similarity.h \ + ../GaitSymGaul/gaul/src/gaul/ga_simplex.h \ + ../GaitSymGaul/gaul/src/gaul/ga_systematicsearch.h \ + ../GaitSymGaul/gaul/src/gaul/ga_tabu.h \ + ../GaitSymGaul/gaul/src/gaul.h \ + ../GaitSymGaul/gaul/util/gaul/avltree.h \ + ../GaitSymGaul/gaul/util/gaul/compatibility.h \ + ../GaitSymGaul/gaul/util/gaul/gaul_config.h \ + ../GaitSymGaul/gaul/util/gaul/gaul_util.h \ + ../GaitSymGaul/gaul/util/gaul/linkedlist.h \ + ../GaitSymGaul/gaul/util/gaul/log_util.h \ + ../GaitSymGaul/gaul/util/gaul/memory_chunks.h \ + ../GaitSymGaul/gaul/util/gaul/memory_util.h \ + ../GaitSymGaul/gaul/util/gaul/nn_util.h \ + ../GaitSymGaul/gaul/util/gaul/random_util.h \ + ../GaitSymGaul/gaul/util/gaul/table_util.h \ + ../GaitSymGaul/gaul/util/gaul/timer_util.h \ + ../GaitSymGaul/callbacks.h \ + ../GaitSymGaul/do_genetic_algorithm.h \ + ../GaitSymGaul/do_next_ascent_hillclimbing.h \ + ../GaitSymGaul/do_random_ascent_hillclimbing.h \ + ../GaitSymGaul/do_simplex_search.h \ + ../GaitSymGaul/do_simulated_annealling.h \ + ../GaitSymGaul/do_tabu_search.h \ + ../GaitSymGaul/utilities.h \ + ../GaitSymGaul/gaul/util/gaul/gaul_config_win.h \ + Settings.h +FORMS += \ + AboutDialog.ui \ + DialogOutputSelect.ui \ + MainWindow.ui + +RESOURCES += resources.qrc + +OTHER_FILES += \ + app.rc \ + Icon.ico + +DISTFILES += \ + ../ode-0.15/ode/src/Makefile.am \ + ../makefile + + + + diff --git a/GaitSymQt/MainWindow.cpp b/GaitSymQt/MainWindow.cpp index 06a3e27..af5bafc 100644 --- a/GaitSymQt/MainWindow.cpp +++ b/GaitSymQt/MainWindow.cpp @@ -33,6 +33,7 @@ #include "DataTarget.h" #include "FacetedObject.h" #include "Reporter.h" +#include "Controller.h" #include "Warehouse.h" #include "Preferences.h" #include "SimulationWindow.h" @@ -319,7 +320,7 @@ void MainWindow::open(const QString &fileName) m_simulationWindow->setSimulation(m_simulation); m_simulation->setDrawContactForces(m_preferences->valueBool("DisplayContactForces")); m_simulation->Draw(m_simulationWindow); - if (m_preferences->valueBool("TrackingFlag")) + if (ui->checkBoxTracking->isChecked()) { Body *body = m_simulation->GetBody(m_preferences->valueQString("TrackBodyID").toUtf8().constData()); if (body) @@ -329,6 +330,19 @@ void MainWindow::open(const QString &fileName) ui->doubleSpinBoxCOIX->setValue(position[0] + m_preferences->valueDouble("TrackingOffset")); } } + if (ui->checkBoxActivationColours->isChecked()) + { + std::map *muscleList = m_simulation->GetMuscleList(); + std::map::const_iterator muscleIter; + for (muscleIter = muscleList->begin(); muscleIter != muscleList->end(); muscleIter++) + { + muscleIter->second->setActivationDisplay(true); + muscleIter->second->GetStrap()->SetColour(m_preferences->valueQColor("StrapColour")); + muscleIter->second->GetStrap()->SetForceColour(Colour(m_preferences->valueQColor("StrapForceColour"))); + muscleIter->second->GetStrap()->SetLastDrawTime(-1); + } + } + m_simulationWindow->updateCamera(); m_simulationWindow->renderLater(); @@ -1013,6 +1027,13 @@ void MainWindow::menuOutputs() (*m_simulation->GetReporterList())[std::string(item->text().toUtf8())]->SetDump(dump); } + for (i = 0; dialogOutputSelect.listWidgetController && i < dialogOutputSelect.listWidgetController->count(); i++) + { + item = dialogOutputSelect.listWidgetController->item(i); + if (item->checkState() == Qt::Unchecked) dump = false; else dump = true; + (*m_simulation->GetControllerList())[std::string(item->text().toUtf8())]->SetDump(dump); + } + for (i = 0; dialogOutputSelect.listWidgetWarehouse && i < dialogOutputSelect.listWidgetWarehouse->count(); i++) { item = dialogOutputSelect.listWidgetWarehouse->item(i); diff --git a/GaitSymQt/MainWindow.ui b/GaitSymQt/MainWindow.ui index 8c97875..2522115 100644 --- a/GaitSymQt/MainWindow.ui +++ b/GaitSymQt/MainWindow.ui @@ -16,7 +16,7 @@ - GaitSymQt + GaitSym2017 false @@ -42,8 +42,8 @@ 0 0 - 202 - 742 + 170 + 633 @@ -85,7 +85,7 @@ 0.000001000000000 - 999.000000000000000 + 99999.000000000000000 50.000000000000000 @@ -145,7 +145,7 @@ 0.010000000000000 - 179.000000000000000 + 89.000000000000000 0.100000000000000 @@ -188,10 +188,10 @@ 6 - -999.000000000000000 + -99999.000000000000000 - 999.000000000000000 + 99999.000000000000000 0.100000000000000 @@ -231,10 +231,10 @@ 6 - -999.000000000000000 + -99999.000000000000000 - 999.000000000000000 + 99999.000000000000000 0.100000000000000 @@ -274,10 +274,10 @@ 6 - -999.000000000000000 + -99999.000000000000000 - 999.000000000000000 + 99999.000000000000000 0.100000000000000 @@ -293,7 +293,7 @@ 0.000001000000000 - 999.000000000000000 + 99999.000000000000000 1.000000000000000 @@ -321,7 +321,7 @@ 0.000001000000000 - 999.000000000000000 + 99999.000000000000000 100.000000000000000 @@ -361,10 +361,10 @@ 6 - -999.000000000000000 + -99999.000000000000000 - 999.000000000000000 + 99999.000000000000000 0.100000000000000 @@ -568,7 +568,7 @@ 1 - 999999 + 99999999 10 @@ -805,8 +805,8 @@ 0 0 - 374 - 930 + 346 + 761 @@ -1095,7 +1095,7 @@ 0 0 1338 - 22 + 18 @@ -1174,6 +1174,12 @@ toolBar + + + 32 + 32 + + TopToolBarArea diff --git a/create_git.sh b/create_git.sh deleted file mode 100644 index dc380ca..0000000 --- a/create_git.sh +++ /dev/null @@ -1,8 +0,0 @@ -echo "# GaitSym_2017" >> README.md -git init -git add --all -git commit -m "first commit" -git remote add origin https://github.com/wol101/GaitSym_2017.git -git push -u origin master - - diff --git a/makefile b/makefile index aeae201..8f23456 100644 --- a/makefile +++ b/makefile @@ -100,33 +100,33 @@ ifeq ($(HOST),asl-rocks-cluster.manchester.ac.uk) endif ifeq ($(HOST),submitter.itservices.manchester.ac.uk) - #CXXFLAGS = -static -ffast-math -O3 -DEXPERIMENTAL - CXXFLAGS = -static -O3 -ffast-math -DEXPERIMENTAL \ - -DdIDEDOUBLE -DTRIMESH_ENABLED -DTRIMESH_OPCODE -DCCD_IDEDOUBLE -DdLIBCCD_ENABLED -DdTHREADING_INTF_DISABLED \ - -DRAPIDXML_NO_EXCEPTIONS -DBYTE_ORDER=LITTLE_ENDIAN -DHAVE_MALLOC_H -DUSE_UNIX_ERRORS - LDFLAGS = -static - # condor_compile is tricky with pthread so best avoided and just use vanilla universe - # CXX = condor_compile g++ - # CC = condor_compile gcc - CXX = g++ - CC = gcc - LIBS = -lpthread -lm - INC_DIRS = -Irapidxml-1.13 -Iexprtk -Iode-0.15/ode/src -Iode-0.15/libccd/src -Iode-0.15/OPCODE -Iode-0.15/include -Iann_1.1.2/include + #CXXFLAGS = -static -ffast-math -O3 -std=c++11 -DEXPERIMENTAL + CXXFLAGS = -static -O3 -ffast-math -std=c++11 -DEXPERIMENTAL \ + -DdIDEDOUBLE -DTRIMESH_ENABLED -DTRIMESH_OPCODE -DCCD_IDEDOUBLE -DdLIBCCD_ENABLED -DdTHREADING_INTF_DISABLED \ + -DRAPIDXML_NO_EXCEPTIONS -DBYTE_ORDER=LITTLE_ENDIAN -DHAVE_MALLOC_H -DUSE_UNIX_ERRORS + LDFLAGS = -static + # condor_compile is tricky with pthread so best avoided and just use vanilla universe + # CXX = condor_compile g++ + # CC = condor_compile gcc + CXX = g++ + CC = gcc + LIBS = -lpthread -lm + INC_DIRS = -Irapidxml-1.13 -Iexprtk -Iode-0.15/ode/src -Iode-0.15/libccd/src -Iode-0.15/OPCODE -Iode-0.15/include -Iann_1.1.2/include endif ifeq ($(HOST),l-u-roboticssuite.it.manchester.ac.uk) - #CXXFLAGS = -static -ffast-math -O3 -DEXPERIMENTAL - CXXFLAGS = -O3 -ffast-math -DEXPERIMENTAL \ - -DdIDEDOUBLE -DTRIMESH_ENABLED -DTRIMESH_OPCODE -DCCD_IDEDOUBLE -DdLIBCCD_ENABLED -DdTHREADING_INTF_DISABLED \ - -DRAPIDXML_NO_EXCEPTIONS -DBYTE_ORDER=LITTLE_ENDIAN -DHAVE_MALLOC_H -DUSE_UNIX_ERRORS - LDFLAGS = - # condor_compile is tricky with pthread so best avoided and just use vanilla universe - # CXX = condor_compile g++ - # CC = condor_compile gcc - CXX = g++ - CC = gcc - LIBS = -lpthread -lm - INC_DIRS = -Irapidxml-1.13 -Iexprtk -Iode-0.15/ode/src -Iode-0.15/libccd/src -Iode-0.15/OPCODE -Iode-0.15/include -Iann_1.1.2/include + #CXXFLAGS = -static -ffast-math -O3 -DEXPERIMENTAL + CXXFLAGS = -O3 -ffast-math -std=c++11 -DEXPERIMENTAL \ + -DdIDEDOUBLE -DTRIMESH_ENABLED -DTRIMESH_OPCODE -DCCD_IDEDOUBLE -DdLIBCCD_ENABLED -DdTHREADING_INTF_DISABLED \ + -DRAPIDXML_NO_EXCEPTIONS -DBYTE_ORDER=LITTLE_ENDIAN -DHAVE_MALLOC_H -DUSE_UNIX_ERRORS + LDFLAGS = + # condor_compile is tricky with pthread so best avoided and just use vanilla universe + # CXX = condor_compile g++ + # CC = condor_compile gcc + CXX = g++ + CC = gcc + LIBS = -lpthread -lm + INC_DIRS = -Irapidxml-1.13 -Iexprtk -Iode-0.15/ode/src -Iode-0.15/libccd/src -Iode-0.15/OPCODE -Iode-0.15/include -Iann_1.1.2/include endif # vpath %.cpp src diff --git a/src/Controller.h b/src/Controller.h index 5a5eada..7e77e09 100644 --- a/src/Controller.h +++ b/src/Controller.h @@ -17,6 +17,8 @@ class Controller : public Driver, public Drivable { public: Controller(); + + virtual void Dump() = 0; }; #endif // CONTROLLER_H diff --git a/src/DampedSpringMuscle.cpp b/src/DampedSpringMuscle.cpp index 4f7af0b..0e3f88c 100644 --- a/src/DampedSpringMuscle.cpp +++ b/src/DampedSpringMuscle.cpp @@ -25,6 +25,7 @@ DampedSpringMuscle::DampedSpringMuscle(Strap *strap): Muscle(strap) m_UnloadedLength = 0; m_Activation = 0; m_Area = 1; + m_BreakingStrain = 0; } // destructor @@ -83,6 +84,18 @@ void DampedSpringMuscle::SetActivation(double activation, double /* duration */) << " m_Damping " << m_Damping << " tension " << tension << "\n"; } +bool DampedSpringMuscle::ShouldBreak() +{ + if (m_BreakingStrain <= 0) return false; + double elasticStrain = (m_Strap->GetLength() - m_UnloadedLength) / m_UnloadedLength; + if (elasticStrain > m_BreakingStrain) + { + std::cerr << "DampedSpringMuscle::ShouldBreak returns true\n"; + return true; + } + return false; +} + void DampedSpringMuscle::Dump() { if (m_Dump == false) return; diff --git a/src/DampedSpringMuscle.h b/src/DampedSpringMuscle.h index 6810848..c57912d 100644 --- a/src/DampedSpringMuscle.h +++ b/src/DampedSpringMuscle.h @@ -23,19 +23,23 @@ class DampedSpringMuscle : public Muscle DampedSpringMuscle(Strap *strap); ~DampedSpringMuscle(); - void SetDamping(double d) { m_Damping = d; }; // value is in N/(m2 s) (Stress per Strain rate) - void SetSpringConstant(double k) { m_SpringConstant = k; }; // value is in N/m2 (this is the Young's Modulus) - void SetUnloadedLength(double l) { m_UnloadedLength = l; }; // value is in m - void SetArea(double a) { m_Area = a; }; // value is in m2 - double GetDamping() { return m_Damping; }; // value is in N/m2 - double GetSpringConstant() { return m_SpringConstant; }; // value is in N/m2 - double GetUnloadedLength() { return m_UnloadedLength; }; // value is in m - double GetArea() { return m_Area; }; // value is in m2 + void SetDamping(double d) { m_Damping = d; } // value is in N/(m2 s) (Stress per Strain rate) + void SetSpringConstant(double k) { m_SpringConstant = k; } // value is in N/m2 (this is the Young's Modulus) + void SetUnloadedLength(double l) { m_UnloadedLength = l; } // value is in m + void SetArea(double a) { m_Area = a; } // value is in m2 + void SetBreakingStrain(double breakingStrain) { m_BreakingStrain = breakingStrain; } // value is strain + double GetDamping() { return m_Damping; } // value is in N/m2 + double GetSpringConstant() { return m_SpringConstant; } // value is in N/m2 + double GetUnloadedLength() { return m_UnloadedLength; } // value is in m + double GetArea() { return m_Area; } // value is in m2 + double GetBreakingStrain() { return m_BreakingStrain; } // value is strain double GetElasticEnergy(); virtual void SetActivation(double activation, double duration); - virtual double GetActivation() { return m_Activation; }; - virtual double GetMetabolicPower() { return 0; }; + virtual double GetActivation() { return m_Activation; } + virtual double GetMetabolicPower() { return 0; } + + bool ShouldBreak(); virtual void Dump(); @@ -45,6 +49,7 @@ class DampedSpringMuscle : public Muscle double m_SpringConstant; double m_UnloadedLength; double m_Area; + double m_BreakingStrain; double m_Activation; }; diff --git a/src/DataTargetScalar.cpp b/src/DataTargetScalar.cpp index ee53d9f..56fab7e 100644 --- a/src/DataTargetScalar.cpp +++ b/src/DataTargetScalar.cpp @@ -298,9 +298,7 @@ double DataTargetScalar::GetError(int index) switch (m_DataType) { case DriverError: - double X = tegotaeDriver->X(); - double Y = tegotaeDriver->Y(); - errorScore = sqrt(X*X + Y*Y) - m_ValueList[index]; + errorScore = tegotaeDriver->GetValue(m_simulation->GetTime()) - m_ValueList[index]; break; } } diff --git a/src/Drivable.h b/src/Drivable.h index a69f86c..39adb69 100644 --- a/src/Drivable.h +++ b/src/Drivable.h @@ -16,14 +16,12 @@ class Driver; -class Drivable : public NamedObject +class Drivable { public: Drivable(); void AddDriver(Driver *driver) { m_driverList.push_back(driver); } - double GetCurrentDriverSum() { return m_currentDriverSum; } - void SetCurrentDriverSum(double currentDriverSum) { m_currentDriverSum = currentDriverSum; } double SumDrivers(double time); protected: diff --git a/src/Driver.cpp b/src/Driver.cpp index bf2239f..8c4b052 100644 --- a/src/Driver.cpp +++ b/src/Driver.cpp @@ -42,6 +42,22 @@ void Driver::SetTarget(Drivable *target) m_Target->AddDriver(this); } +Drivable *Driver::GetTarget() +{ + return m_Target; +} + +void Driver::SetMinMax(double minV, double maxV) +{ + m_MinValue = minV; + m_MaxValue = maxV; +} + +void Driver::SetInterp(bool interp) +{ + m_Interp = interp; +} + void Driver::Dump() { if (m_Dump == false) return; diff --git a/src/Driver.h b/src/Driver.h index 5d2b8f9..433e6c8 100644 --- a/src/Driver.h +++ b/src/Driver.h @@ -15,16 +15,16 @@ class Drivable; -class Driver: public NamedObject +class Driver : public NamedObject { public: Driver(); virtual ~Driver() ; void SetTarget(Drivable *target); - Drivable *GetTarget() { return m_Target; } - void SetMinMax(double minV, double maxV) { m_MinValue = minV; m_MaxValue = maxV; } - void SetInterp(bool interp) { m_Interp = interp; } + Drivable *GetTarget(); + void SetMinMax(double minV, double maxV); + void SetInterp(bool interp); virtual double GetValue(double time) = 0; diff --git a/src/Environment.cpp b/src/Environment.cpp index ce5cd01..c431b49 100644 --- a/src/Environment.cpp +++ b/src/Environment.cpp @@ -13,6 +13,9 @@ #ifdef USE_QT #include "GLUtils.h" #include "SimulationWindow.h" +#include "Simulation.h" +#include "MainWindow.h" +#include "Preferences.h" // ruler definition //static float gRulerMin = -500; @@ -55,6 +58,8 @@ void Environment::Draw(SimulationWindow *window) if (m_axisSceneNode == 0) { + this->SetAxisSize(m_simulation->GetMainWindow()->GetPreferences()->valueDouble("EnvironmentAxesSize")); + // create meshes for the axes irr::scene::IMesh *mesh; irr::scene::IMeshSceneNode *sceneNode; @@ -66,6 +71,7 @@ void Environment::Draw(SimulationWindow *window) m_axisSceneNode = window->sceneManager()->addMeshSceneNode(mesh); mesh->drop(); m_axisSceneNode->setAutomaticCulling(irr::scene::EAC_OFF); + m_axisSceneNode->setScale(irr::core::vector3df(m_AxisSize[0], m_AxisSize[0], m_AxisSize[0])); irr::u32 tesselationCylinder = 64; irr::u32 tesselationCone = 128; @@ -81,6 +87,7 @@ void Environment::Draw(SimulationWindow *window) mesh->drop(); sceneNode->setAutomaticCulling(irr::scene::EAC_OFF); sceneNode->setRotation(irr::core::vector3df(0, 0, -90)); // rotates Y direction to X direction + sceneNode->setScale(irr::core::vector3df(m_AxisSize[0], m_AxisSize[0], m_AxisSize[0])); colorCylinder.set(255, 0, 255, 0); // green colorCone = colorCylinder; @@ -90,6 +97,7 @@ void Environment::Draw(SimulationWindow *window) mesh->drop(); sceneNode->setAutomaticCulling(irr::scene::EAC_OFF); sceneNode->setRotation(irr::core::vector3df(0, 0, 0)); // rotates Y direction to Y direction + sceneNode->setScale(irr::core::vector3df(m_AxisSize[0], m_AxisSize[0], m_AxisSize[0])); colorCylinder.set(255, 0, 0, 255); // blue colorCone = colorCylinder; @@ -99,6 +107,7 @@ void Environment::Draw(SimulationWindow *window) mesh->drop(); sceneNode->setAutomaticCulling(irr::scene::EAC_OFF); sceneNode->setRotation(irr::core::vector3df(90, 0, 0)); // rotates Y direction to Z direction + sceneNode->setScale(irr::core::vector3df(m_AxisSize[0], m_AxisSize[0], m_AxisSize[0])); } diff --git a/src/Geom.cpp b/src/Geom.cpp index b6a99e9..bf563b4 100644 --- a/src/Geom.cpp +++ b/src/Geom.cpp @@ -37,6 +37,7 @@ Geom::Geom() m_Bounce = -1; // < 0 is not used m_Mu = dInfinity; m_Abort = false; + m_Adhesion = false; } Geom::~Geom() diff --git a/src/Geom.h b/src/Geom.h index cf76b27..20b07dc 100644 --- a/src/Geom.h +++ b/src/Geom.h @@ -52,23 +52,26 @@ class Geom: public NamedObject void GetWorldQuaternion(dQuaternion q); - void SetGeomLocation(GeomLocation l) { m_GeomLocation = l; }; - GeomLocation GetGeomLocation() { return m_GeomLocation; }; - - void SetContactSoftCFM(double cfm) { m_CFM = cfm; }; - double GetContactSoftCFM() { return m_CFM; }; - void SetContactSoftERP(double erp) { m_ERP = erp; }; - double GetContactSoftERP() { return m_ERP; }; - void SetContactMu(double mu) { m_Mu = mu; }; - double GetContactMu() { return m_Mu; }; - void SetContactBounce(double bounce) { m_Bounce = bounce; }; - double GetContactBounce() { return m_Bounce; }; + void SetGeomLocation(GeomLocation l) { m_GeomLocation = l; } + GeomLocation GetGeomLocation() { return m_GeomLocation; } + + void SetContactSoftCFM(double cfm) { m_CFM = cfm; } + double GetContactSoftCFM() { return m_CFM; } + void SetContactSoftERP(double erp) { m_ERP = erp; } + double GetContactSoftERP() { return m_ERP; } + void SetContactMu(double mu) { m_Mu = mu; } + double GetContactMu() { return m_Mu; } + void SetContactBounce(double bounce) { m_Bounce = bounce; } + double GetContactBounce() { return m_Bounce; } void SetSpringDamp(double springConstant, double dampingConstant, double integrationStep); void SetSpringERP(double springConstant, double ERP, double integrationStep); - void SetAbort(bool abort) { m_Abort = abort; }; - bool GetAbort() { return m_Abort; }; + void SetAbort(bool abort) { m_Abort = abort; } + bool GetAbort() { return m_Abort; } + + void SetAdhesion(bool adhesion) { m_Adhesion = adhesion; } + bool GetAdhesion() { return m_Adhesion; } void AddContact(Contact *contact) { m_ContactList.push_back(contact); } std::vector *GetContactList() { return &m_ContactList; } @@ -92,6 +95,7 @@ class Geom: public NamedObject double m_Bounce; bool m_Abort; + bool m_Adhesion; std::vector m_ContactList; }; diff --git a/src/MovingAverage.cpp b/src/MovingAverage.cpp index 97515e4..66fd5d4 100644 --- a/src/MovingAverage.cpp +++ b/src/MovingAverage.cpp @@ -24,8 +24,12 @@ MovingAverage::MovingAverage() : Filter() MovingAverage::MovingAverage(int window) : Filter() { - m_buffer = 0; - InitialiseBuffer(window); + m_window = window; + m_buffer = new double[m_window]; + std::fill_n(m_buffer, m_window, 0); + m_index = 0; + m_sum = 0; + m_average = 0; } MovingAverage::~MovingAverage() diff --git a/src/Muscle.cpp b/src/Muscle.cpp index 2bd233b..711075e 100644 --- a/src/Muscle.cpp +++ b/src/Muscle.cpp @@ -23,6 +23,7 @@ Muscle::Muscle(Strap *strap) m_ElasticEnergyColourFullScale = 50.0; m_drawMuscleForces = false; m_elasticDisplay = false; + m_activationDisplay = false; #endif } diff --git a/src/Muscle.h b/src/Muscle.h index 318e9d2..0a3f233 100644 --- a/src/Muscle.h +++ b/src/Muscle.h @@ -16,7 +16,7 @@ #include #include -class Muscle:public Drivable +class Muscle: public NamedObject, public Drivable { public: diff --git a/src/ObjectiveMain.cpp b/src/ObjectiveMain.cpp index a5b9484..96d5c29 100644 --- a/src/ObjectiveMain.cpp +++ b/src/ObjectiveMain.cpp @@ -1124,6 +1124,7 @@ int ReadModel(void *userData) if (gMungeModelStateFlag) gSimulation->SetMungeModelStateFlag(true); if (gMungeRotationFlag) gSimulation->SetMungeRotationFlag(true); gSimulation->SetModelStateRelative(gModelStateRelative); + gSimulation->SetDisplaySkip(gDisplaySkip); #ifdef USE_QT gSimulation->SetMainWindow(static_cast(userData)); diff --git a/src/PIDErrorInController.cpp b/src/PIDErrorInController.cpp index 4c47a84..7d331f8 100644 --- a/src/PIDErrorInController.cpp +++ b/src/PIDErrorInController.cpp @@ -8,6 +8,9 @@ */ #include "PIDErrorInController.h" +#include "Simulation.h" + +#include #define RANGE(x, l, h) if (x < (l)) x = (l); if (x > (h)) x = (h); @@ -48,8 +51,7 @@ double PIDErrorInController::GetValue(double time) m_LastTime = time; // in this driver, the error is driven by the upstream driver - SumDrivers(time); - m_error = GetCurrentDriverSum(); + m_error = SumDrivers(time); // do the PID calculations m_integral = m_integral + (m_error * m_dt); @@ -68,3 +70,41 @@ double PIDErrorInController::GetValue(double time) //{ // m_outputIsDelta = outputIsDelta; //} + +void PIDErrorInController::Dump() +{ + if (m_Dump == false) return; + + if (m_FirstDump) + { + m_FirstDump = false; + if (m_DumpStream == nullptr) + { + if (m_Name.size() == 0) std::cerr << "NamedObject::Dump error: can only dump a named object\n"; + std::string filename(m_Name); + filename.append(".dump"); + m_DumpStream = new std::ofstream(filename.c_str()); + m_DumpStream->precision(17); + } + if (m_DumpStream) + { + *m_DumpStream << "Time\tKp\tKi\tKd\tprevious_error\terror\tintegral\tderivative\toutput\tdt\n"; + } + } + + if (m_DumpStream) + { + *m_DumpStream << m_simulation->GetTime() << + "\t" << m_Kp << + "\t" << m_Ki << + "\t" << m_Kd << + "\t" << m_previous_error << + "\t" << m_error << + "\t" << m_integral << + "\t" << m_derivative << + "\t" << m_output << + "\t" << m_dt << + "\n"; + } +} + diff --git a/src/PIDErrorInController.h b/src/PIDErrorInController.h index fea1b94..67d5426 100644 --- a/src/PIDErrorInController.h +++ b/src/PIDErrorInController.h @@ -23,6 +23,8 @@ class PIDErrorInController : public Controller // void setOutputIsDelta(bool outputIsDelta); + virtual void Dump(); + protected: double m_Kp; diff --git a/src/PIDMuscleLength.cpp b/src/PIDMuscleLength.cpp index 380c045..093dfa1 100644 --- a/src/PIDMuscleLength.cpp +++ b/src/PIDMuscleLength.cpp @@ -15,44 +15,85 @@ PIDMuscleLength::PIDMuscleLength() { m_Muscle = 0; - Kp = 0; - Ki = 0; - Kd = 0; - setpoint = 0; - previous_error = 0; - error = 0; - integral = 0; - derivative = 0; - output = 0; - last_activation = 0; - nomimal_length = 1; + m_Kp = 0; + m_Ki = 0; + m_Kd = 0; + m_setpoint = 0; + m_previous_error = 0; + m_error = 0; + m_integral = 0; + m_derivative = 0; + m_output = 0; + m_last_activation = 0; + m_nomimal_length = 1; + m_actual_position = 0; + m_dt = 0; } void PIDMuscleLength::SetActivation(double activation, double duration) { - if (activation != setpoint) // reset the error values when the target value changes + if (activation != m_setpoint) // reset the error values when the target value changes { - setpoint = activation; - previous_error = 0; - integral = 0; + m_setpoint = activation; + m_previous_error = 0; + m_integral = 0; } - double actual_position = m_Muscle->GetLength() / nomimal_length; - double dt = duration; + m_actual_position = m_Muscle->GetLength() / m_nomimal_length; + m_dt = duration; // do the PID calculations - error = setpoint - actual_position; - integral = integral + (error * dt); - derivative = (error - previous_error) / dt; - output = (Kp * error) + (Ki * integral) + (Kd * derivative); - previous_error = error; + m_error = m_setpoint - m_actual_position; + m_integral = m_integral + (m_error * m_dt); + m_derivative = (m_error - m_previous_error) / m_dt; + m_output = (m_Kp * m_error) + (m_Ki * m_integral) + (m_Kd * m_derivative); + m_previous_error = m_error; // now alter the activation based on the PID output - activation = last_activation - output; + activation = m_last_activation - m_output; if (activation < 0) activation = 0; else if (activation > 1) activation = 1; std::cerr << "PIDMuscleLength::SetActivation currently untested\n"; // m_Muscle->SetActivation(activation, duration); - last_activation = activation; + m_last_activation = activation; +} + +void PIDMuscleLength::Dump() +{ + if (m_Dump == false) return; + + if (m_FirstDump) + { + m_FirstDump = false; + if (m_DumpStream == nullptr) + { + if (m_Name.size() == 0) std::cerr << "NamedObject::Dump error: can only dump a named object\n"; + std::string filename(m_Name); + filename.append(".dump"); + m_DumpStream = new std::ofstream(filename.c_str()); + m_DumpStream->precision(17); + } + if (m_DumpStream) + { + *m_DumpStream << "Time\tKp\tKi\tKd\tprevious_error\terror\tintegral\tderivative\toutput\tdt\tactual_position\tsetpoint\n"; + } + } + + if (m_DumpStream) + { + *m_DumpStream << m_simulation->GetTime() << + "\t" << m_Kp << + "\t" << m_Ki << + "\t" << m_Kd << + "\t" << m_previous_error << + "\t" << m_error << + "\t" << m_integral << + "\t" << m_derivative << + "\t" << m_output << + "\t" << m_dt << + "\t" << m_actual_position << + "\t" << m_setpoint << + "\n"; + } } diff --git a/src/PIDMuscleLength.h b/src/PIDMuscleLength.h index fdece3d..fe48937 100644 --- a/src/PIDMuscleLength.h +++ b/src/PIDMuscleLength.h @@ -19,28 +19,32 @@ class PIDMuscleLength : public Controller PIDMuscleLength(); void SetMuscle(Muscle *muscle) { m_Muscle = muscle; } - void SetPID(double P, double I, double D) { Kp = P; Ki = I; Kd = D; } + void SetPID(double P, double I, double D) { m_Kp = P; m_Ki = I; m_Kd = D; } - void SetNominalLength(double length) { nomimal_length = length; } + void SetNominalLength(double length) { m_nomimal_length = length; } virtual void SetActivation(double activation, double duration); - virtual double GetActivation() { return last_activation; } + virtual double GetActivation() { return m_last_activation; } virtual double GetValue(double time) { return 0; }; // dummy value for now + virtual void Dump(); + protected: Muscle *m_Muscle; - double Kp; - double Ki; - double Kd; - double setpoint; - double previous_error; - double error; - double integral; - double derivative; - double output; - double last_activation; - double nomimal_length; + double m_Kp; + double m_Ki; + double m_Kd; + double m_setpoint; + double m_previous_error; + double m_error; + double m_integral; + double m_derivative; + double m_output; + double m_last_activation; + double m_nomimal_length; + double m_actual_position; + double m_dt; }; #endif // PIDMUSCLELENGTH_H diff --git a/src/PIDTargetMatch.cpp b/src/PIDTargetMatch.cpp index 63cf867..0ad4be2 100644 --- a/src/PIDTargetMatch.cpp +++ b/src/PIDTargetMatch.cpp @@ -17,16 +17,17 @@ PIDTargetMatch::PIDTargetMatch() { m_Muscle = 0; m_Target = 0; - Kp = 0; - Ki = 0; - Kd = 0; - previous_error = 0; - error = 0; - integral = 0; - derivative = 0; - output = 0; - last_activation = 0; - last_set_activation = 0; + m_Kp = 0; + m_Ki = 0; + m_Kd = 0; + m_previous_error = 0; + m_error = 0; + m_integral = 0; + m_derivative = 0; + m_output = 0; + m_last_activation = 0; + m_last_set_activation = 0; + m_dt = 0; } // the activation value here is just a global gain modifier @@ -34,23 +35,23 @@ PIDTargetMatch::PIDTargetMatch() // and 0 to deactivate the controller (although this will just leave the current value fixed) void PIDTargetMatch::SetActivation(double activation, double duration) { - if (activation != last_set_activation) // reset the error values when the target value changes + if (activation != m_last_set_activation) // reset the error values when the target value changes { - last_set_activation = activation; - previous_error = 0; - integral = 0; + m_last_set_activation = activation; + m_previous_error = 0; + m_integral = 0; } - double dt = duration; + m_dt = duration; // do the PID calculations - error = m_Target->GetError(0); // this assumes that the error is at index zero and it won't always be - integral = integral + (error * dt); - derivative = (error - previous_error) / dt; - output = (Kp * error) + (Ki * integral) + (Kd * derivative); - previous_error = error; + m_error = m_Target->GetError(0); // this assumes that the error is at index zero and it won't always be + m_integral = m_integral + (m_error * m_dt); + m_derivative = (m_error - m_previous_error) / m_dt; + m_output = (m_Kp * m_error) + (m_Ki * m_integral) + (m_Kd * m_derivative); + m_previous_error = m_error; // now alter the activation based on the PID output - double muscleActivation = last_activation - activation * output; + double muscleActivation = m_last_activation - activation * m_output; if (muscleActivation < 0) muscleActivation = 0; else if (muscleActivation > 1) muscleActivation = 1; @@ -64,6 +65,44 @@ void PIDTargetMatch::SetActivation(double activation, double duration) std::cerr << "PIDTargetMatch::SetActivation currently untested\n"; // m_Muscle->SetActivation(muscleActivation, duration); - last_activation = muscleActivation; + m_last_activation = muscleActivation; } +void PIDTargetMatch::Dump() +{ + if (m_Dump == false) return; + + if (m_FirstDump) + { + m_FirstDump = false; + if (m_DumpStream == nullptr) + { + if (m_Name.size() == 0) std::cerr << "NamedObject::Dump error: can only dump a named object\n"; + std::string filename(m_Name); + filename.append(".dump"); + m_DumpStream = new std::ofstream(filename.c_str()); + m_DumpStream->precision(17); + } + if (m_DumpStream) + { + *m_DumpStream << "Time\tKp\tKi\tKd\tprevious_error\terror\tintegral\tderivative\toutput\tdt\tlast_set_activation\tlast_activation\n"; + } + } + + if (m_DumpStream) + { + *m_DumpStream << m_simulation->GetTime() << + "\t" << m_Kp << + "\t" << m_Ki << + "\t" << m_Kd << + "\t" << m_previous_error << + "\t" << m_error << + "\t" << m_integral << + "\t" << m_derivative << + "\t" << m_output << + "\t" << m_dt << + "\t" << m_last_set_activation << + "\t" << m_last_activation << + "\n"; + } +} diff --git a/src/PIDTargetMatch.h b/src/PIDTargetMatch.h index 8376701..f1c5e42 100644 --- a/src/PIDTargetMatch.h +++ b/src/PIDTargetMatch.h @@ -21,28 +21,31 @@ class PIDTargetMatch : public Controller PIDTargetMatch(); void SetMuscle(Muscle *muscle) { m_Muscle = muscle; } - void SetPID(double P, double I, double D) { Kp = P; Ki = I; Kd = D; } + void SetPID(double P, double I, double D) { m_Kp = P; m_Ki = I; m_Kd = D; } void SetDataTarget(DataTarget *target) { m_Target = target; } virtual void SetActivation(double activation, double duration); - virtual double GetActivation() { return last_activation; } + virtual double GetActivation() { return m_last_activation; } virtual double GetValue(double time) { return 0; }; // dummy value for now + virtual void Dump(); + protected: Muscle *m_Muscle; DataTarget *m_Target; - double Kp; - double Ki; - double Kd; - double previous_error; - double error; - double integral; - double derivative; - double output; - double last_activation; - double last_set_activation; + double m_Kp; + double m_Ki; + double m_Kd; + double m_previous_error; + double m_error; + double m_integral; + double m_derivative; + double m_output; + double m_last_activation; + double m_last_set_activation; + double m_dt; }; #endif // PIDTARGETMATCH_H diff --git a/src/Simulation.cpp b/src/Simulation.cpp index 56a67d2..690770e 100644 --- a/src/Simulation.cpp +++ b/src/Simulation.cpp @@ -107,10 +107,12 @@ Simulation::Simulation() // initialise the ODE world dInitODE(); m_WorldID = dWorldCreate(); - m_SpaceID = dSimpleSpaceCreate(0); + // m_SpaceID = dSimpleSpaceCreate(0); + m_SpaceID = dHashSpaceCreate(nullptr); m_ContactGroup = dJointGroupCreate(0); m_Environment = new Environment(); + m_Environment->setSimulation(this); m_MaxContacts = 16; m_DefaultContact = new Contact(); @@ -570,7 +572,6 @@ void Simulation::UpdateSimulation() for (GeomIter = m_GeomList.begin(); GeomIter != m_GeomList.end(); GeomIter++) GeomIter->second->ClearContacts(); dSpaceCollide(m_SpaceID, this, &NearCallback); - bool activationsDone = false; // if (activationsDone == false) // { @@ -589,11 +590,21 @@ void Simulation::UpdateSimulation() std::vector *pointForceList; std::map::const_iterator iter1; PointForce *pointForce; - for (iter1 = m_MuscleList.begin(); iter1 != m_MuscleList.end(); iter1++) + for (iter1 = m_MuscleList.begin(); iter1 != m_MuscleList.end(); ) { - if (activationsDone == false) iter1->second->SumDrivers(m_SimulationTime); - iter1->second->SetActivation(iter1->second->GetCurrentDriverSum(), m_StepSize); + iter1->second->SetActivation(iter1->second->SumDrivers(m_SimulationTime), m_StepSize); iter1->second->CalculateStrap(m_StepSize); + // check for breaking strain + DampedSpringMuscle *dampedSpringMuscle = dynamic_cast(iter1->second); + if (dampedSpringMuscle) + { + if (dampedSpringMuscle->ShouldBreak()) + { + iter1 = m_MuscleList.erase(iter1); // erase returns the next iterator [but m_MuscleList.erase(iter1++) would also work and is compatible with pre C++11 compilers] + delete dampedSpringMuscle; + continue; + } + } pointForceList = iter1->second->GetPointForceList(); tension = iter1->second->GetTension(); @@ -621,6 +632,7 @@ void Simulation::UpdateSimulation() std::cerr << iter1->first << " " << force.x << " " << force.y << " " << force.z << "\n"; std::cerr.unsetf(std::ios::floatfield); #endif + iter1++; // this is done here because the erase that might happen earlier needs to increment the iterator } // update the joints (needed for motors, end stops and stress calculations) @@ -728,7 +740,7 @@ void Simulation::UpdateSimulation() // all reporting is done after a simulation step - Dump(); + if (m_StepCount % m_DisplaySkip == 0) Dump(); if (gDebug == MuscleDebug) { @@ -2371,6 +2383,18 @@ void Simulation::ParseGeom(rapidxml::xml_node * cur) geom->SetAbort(Util::Bool(buf)); } + buf = DoXmlGetProp(cur, "Adhesion"); + if (buf) + { + bool adhesion = Util::Bool(buf); + if (adhesion && m_AllowConnectedCollisions) + { + std::cerr << "Adhesion and AllowConnectedCollisions currently not implemented\n"; + throw(__LINE__); + } + geom->SetAdhesion(adhesion); + } + #ifdef USE_QT if (m_loadMeshFiles) { @@ -2751,7 +2775,9 @@ void Simulation::ParseMuscle(rapidxml::xml_node * cur) ((DampedSpringMuscle *)muscle)->SetArea(Util::Double(buf)); THROWIFZERO(buf = DoXmlGetProp(cur, "Damping")); ((DampedSpringMuscle *)muscle)->SetDamping(Util::Double(buf)); - + buf = DoXmlGetProp(cur, "BreakingStrain"); + if (buf) + ((DampedSpringMuscle *)muscle)->SetBreakingStrain(Util::Double(buf)); } else if (strcmp((const char *)buf, "UmbergerGerritsenMartin") == 0) { @@ -3047,12 +3073,11 @@ void Simulation::ParseDriver(rapidxml::xml_node * cur) if (strcmp((const char *)buf, "Horizontal") == 0) outputVertical = false; else if (strcmp((const char *)buf, "Vertical") == 0) outputVertical = true; else throw __LINE__; - THROWIFZERO(buf = DoXmlGetProp(cur, "ContactOffset")); - Util::Double(buf, 3, m_DoubleList); - pgd::Vector contactOffset(m_DoubleList[0], m_DoubleList[1], m_DoubleList[2]); THROWIFZERO(buf = DoXmlGetProp(cur, "ReferenceBody")); if (m_BodyList.find((const char *)buf) == m_BodyList.end()) throw __LINE__; Body *referenceBody = m_BodyList[(const char *)buf]; + THROWIFZERO(buf = DoXmlGetProp(cur, "ContactOffset")); + pgd::Vector contactOffset = TegotaeDriver::ParseContactOffset(buf, this, referenceBody->GetName()->c_str()); THROWIFZERO(buf = DoXmlGetProp(cur, "ContactGeom")); Geom *contactGeom = m_GeomList[(const char *)buf]; if (m_GeomList.find((const char *)buf) == m_GeomList.end()) throw __LINE__; @@ -3432,10 +3457,10 @@ void Simulation::ParseController(rapidxml::xml_node * cur) if (strcmp((const char *)buf, "PIDMuscleLength") == 0) { PIDMuscleLength *pidMuscleLength = new PIDMuscleLength(); - pidMuscleLength->Driver::setSimulation(this); + pidMuscleLength->setSimulation(this); THROWIFZERO(buf = DoXmlGetProp(cur, "ID")); m_ControllerList[(const char *)buf] = pidMuscleLength; - pidMuscleLength->Driver::SetName((const char *)buf); + pidMuscleLength->SetName((const char *)buf); THROWIFZERO(buf = DoXmlGetProp(cur, "MuscleID")); pidMuscleLength->SetMuscle(m_MuscleList[(const char *)buf]); @@ -3467,10 +3492,10 @@ void Simulation::ParseController(rapidxml::xml_node * cur) else if (strcmp((const char *)buf, "PIDTargetMatch") == 0) { PIDTargetMatch *pidTargetMatch = new PIDTargetMatch(); - pidTargetMatch->Driver::setSimulation(this); + pidTargetMatch->setSimulation(this); THROWIFZERO(buf = DoXmlGetProp(cur, "ID")); m_ControllerList[(const char *)buf] = pidTargetMatch; - pidTargetMatch->Driver::SetName((const char *)buf); + pidTargetMatch->SetName((const char *)buf); THROWIFZERO(buf = DoXmlGetProp(cur, "MuscleID")); pidTargetMatch->SetMuscle(m_MuscleList[(const char *)buf]); @@ -3502,10 +3527,10 @@ void Simulation::ParseController(rapidxml::xml_node * cur) else if (strcmp((const char *)buf, "PIDErrorIn") == 0) { PIDErrorInController *pidErrorInController = new PIDErrorInController(); - pidErrorInController->Driver::setSimulation(this); + pidErrorInController->setSimulation(this); THROWIFZERO(buf = DoXmlGetProp(cur, "ID")); m_ControllerList[(const char *)buf] = pidErrorInController; - pidErrorInController->Driver::SetName((const char *)buf); + pidErrorInController->SetName((const char *)buf); THROWIFZERO(buf = DoXmlGetProp(cur, "TargetID")); if (m_MuscleList.find((const char *)buf) != m_MuscleList.end()) pidErrorInController->SetTarget(m_MuscleList[(const char *)buf]); else if (m_ControllerList.find((const char *)buf) != m_ControllerList.end()) pidErrorInController->SetTarget(m_ControllerList[(const char *)buf]); @@ -4104,15 +4129,15 @@ void Simulation::OutputProgramState() jpu->GetUniversalAnchor(v); dBodyGetPosRelPoint(body->GetBodyID(), v[0], v[1], v[2], result); sprintf(m_Buffer, "%s %.17e %.17e %.17e", body->GetName()->c_str(), result[0], result[1], result[2]); - newAttr = DoXmlReplaceProp(newNode, "UniversalAnchor", m_Buffer); + newAttr = DoXmlReplaceProp(newNode, "Body2UniversalAnchor", m_Buffer); jpu->GetUniversalAxis1(v); dBodyVectorFromWorld(body->GetBodyID(), v[0], v[1], v[2], result); sprintf(m_Buffer, "%s %.17e %.17e %.17e", body->GetName()->c_str(), result[0], result[1], result[2]); - newAttr = DoXmlReplaceProp(newNode, "UniversalAxis1", m_Buffer); + newAttr = DoXmlReplaceProp(newNode, "Body2UniversalAxis1", m_Buffer); jpu->GetUniversalAxis2(v); dBodyVectorFromWorld(body->GetBodyID(), v[0], v[1], v[2], result); sprintf(m_Buffer, "%s %.17e %.17e %.17e", body->GetName()->c_str(), result[0], result[1], result[2]); - newAttr = DoXmlReplaceProp(newNode, "UniversalAxis2", m_Buffer); + newAttr = DoXmlReplaceProp(newNode, "Body2UniversalAxis2", m_Buffer); } FixedJoint *jpf = dynamic_cast(joint); @@ -4188,17 +4213,26 @@ void Simulation::OutputProgramState() if (m_ModelStateRelative) { sprintf(m_Buffer, "%s %.17e %.17e %.17e", body->GetName()->c_str(), p[0], p[1], p[2]); + newAttr = DoXmlReplaceProp(newNode, "Position", m_Buffer); + dQuaternion q; + geom->GetQuaternion(q); + sprintf(m_Buffer, "%s %.17e %.17e %.17e %.17e", body->GetName()->c_str(), q[0], q[1], q[2], q[3]); + newAttr = DoXmlReplaceProp(newNode, "Quaternion", m_Buffer); } else { dBodyGetRelPointPos (geom->GetBody(), p[0], p[1], p[2], result); sprintf(m_Buffer, "%s %.17e %.17e %.17e", "World", result[0], result[1], result[2]); + newAttr = DoXmlReplaceProp(newNode, "Position", m_Buffer); + dQuaternion q; + geom->GetQuaternion(q); + pgd::Quaternion geomQuaternion(q[0], q[1], q[2], q[3]); + const double *bodyRotation = dBodyGetQuaternion(body->GetBodyID()); + pgd::Quaternion bodyQuaternion(bodyRotation[0], bodyRotation[1], bodyRotation[2], bodyRotation[3]); + pgd::Quaternion worldRotation = bodyQuaternion * geomQuaternion; + sprintf(m_Buffer, "%s %.17e %.17e %.17e %.17e", "World", worldRotation.n, worldRotation.v.x, worldRotation.v.y, worldRotation.v.z); + newAttr = DoXmlReplaceProp(newNode, "Quaternion", m_Buffer); } - newAttr = DoXmlReplaceProp(newNode, "Position", m_Buffer); - dQuaternion q; - geom->GetQuaternion(q); - sprintf(m_Buffer, "%s %.17e %.17e %.17e %.17e", body->GetName()->c_str(), q[0], q[1], q[2], q[3]); - newAttr = DoXmlReplaceProp(newNode, "Quaternion", m_Buffer); } outputFile << (*currentNode) << "\n"; } @@ -4630,34 +4664,44 @@ void Simulation::NearCallback(void *data, dGeomID o1, dGeomID o2) { for (i = 0; i < numc; i++) { - dJointID c = dJointCreateContact(s->m_WorldID, s->m_ContactGroup, contact + i); - dJointAttach(c, b1, b2); - if (((Geom *)dGeomGetData(o1))->GetAbort()) s->SetContactAbort(true); if (((Geom *)dGeomGetData(o2))->GetAbort()) s->SetContactAbort(true); - - myContact = new Contact(); - myContact->setSimulation(s); - dJointSetFeedback(c, myContact->GetJointFeedback()); - myContact->SetJointID(c); - memcpy(myContact->GetContactPosition(), contact[i].geom.pos, sizeof(dVector3)); - s->m_ContactList.push_back(myContact); - // only add the contact information once - // and add it to the non-environment geom - if (((Geom *)dGeomGetData(o1))->GetGeomLocation() == Geom::environment) - ((Geom *)dGeomGetData(o2))->AddContact(myContact); + dJointID c; + if (((Geom *)dGeomGetData(o1))->GetAdhesion() == false && ((Geom *)dGeomGetData(o2))->GetAdhesion() == false) + { + c = dJointCreateContact(s->m_WorldID, s->m_ContactGroup, contact + i); + dJointAttach(c, b1, b2); + myContact = new Contact(); + myContact->setSimulation(s); + dJointSetFeedback(c, myContact->GetJointFeedback()); + myContact->SetJointID(c); + memcpy(myContact->GetContactPosition(), contact[i].geom.pos, sizeof(dVector3)); + s->m_ContactList.push_back(myContact); + // only add the contact information once + // and add it to the non-environment geom + if (((Geom *)dGeomGetData(o1))->GetGeomLocation() == Geom::environment) + ((Geom *)dGeomGetData(o2))->AddContact(myContact); + else + ((Geom *)dGeomGetData(o1))->AddContact(myContact); + #ifdef USE_QT + if (s->GetLoadMeshFiles()) + { + myContact->SetAxisSize(s->m_DefaultContact->GetAxisSize()); + myContact->SetColour(s->m_DefaultContact->GetColour()); + myContact->SetForceRadius(s->m_DefaultContact->GetForceRadius()); + myContact->SetForceScale(s->m_DefaultContact->GetForceScale()); + myContact->SetDrawContactForces(s->m_drawContactForces); + } + #endif + } else - ((Geom *)dGeomGetData(o1))->AddContact(myContact); -#ifdef USE_QT - if (s->GetLoadMeshFiles()) { - myContact->SetAxisSize(s->m_DefaultContact->GetAxisSize()); - myContact->SetColour(s->m_DefaultContact->GetColour()); - myContact->SetForceRadius(s->m_DefaultContact->GetForceRadius()); - myContact->SetForceScale(s->m_DefaultContact->GetForceScale()); - myContact->SetDrawContactForces(s->m_drawContactForces); + // for adhesive joints we don't create temporary contacts, we create permanent ball joints + c = dJointCreateBall(s->m_WorldID, nullptr); + dJointAttach(c, b1, b2); + dJointSetBallAnchor(c, contact[i].geom.pos[0], contact[i].geom.pos[1], contact[i].geom.pos[2]); } -#endif + } } delete [] contact; @@ -4853,6 +4897,9 @@ void Simulation::Dump() std::map::const_iterator ReporterIter; for (ReporterIter = m_ReporterList.begin(); ReporterIter != m_ReporterList.end(); ReporterIter++) ReporterIter->second->Dump(); + std::map::const_iterator ControllerIter; + for (ControllerIter = m_ControllerList.begin(); ControllerIter != m_ControllerList.end(); ControllerIter++) ControllerIter->second->Dump(); + std::map::const_iterator WarehouseIter; for (WarehouseIter = m_WarehouseList.begin(); WarehouseIter != m_WarehouseList.end(); WarehouseIter++) WarehouseIter->second->Dump(); diff --git a/src/Simulation.h b/src/Simulation.h index b3ae46d..47efd19 100644 --- a/src/Simulation.h +++ b/src/Simulation.h @@ -94,6 +94,7 @@ class Simulation: public NamedObject Marker *GetMarker(const char *name); Environment *GetEnvironment() { return m_Environment; } bool GetOutputModelStateOccured() { return m_OutputModelStateOccured; } + int GetDisplaySkip() { return m_DisplaySkip; } void SetTimeLimit(double timeLimit) { m_TimeLimit = timeLimit; } void SetMetabolicEnergyLimit(double energyLimit) { m_MetabolicEnergyLimit = energyLimit; } @@ -110,6 +111,7 @@ class Simulation: public NamedObject void SetMungeRotationFlag(bool f) { m_MungeRotationFlag = f; } void SetModelStateRelative(bool f) { m_ModelStateRelative = f; } void SetWarehouseFailDistanceAbort(double warehouseFailDistanceAbort) { m_WarehouseFailDistanceAbort = warehouseFailDistanceAbort; if (m_FitnessType == ClosestWarehouse) m_FitnessType = DistanceTravelled; } + void SetDisplaySkip(int displaySkip) { m_DisplaySkip = displaySkip; } void AddWarehouse(const char *filename); diff --git a/src/TegotaeDriver.cpp b/src/TegotaeDriver.cpp index aaa85a0..25cd819 100644 --- a/src/TegotaeDriver.cpp +++ b/src/TegotaeDriver.cpp @@ -50,7 +50,7 @@ TegotaeDriver::TegotaeDriver() m_output = 0; // the output value of the controller #ifdef USE_QT - m_Radius = 0.1; + m_Radius = 0.01; #endif } @@ -131,6 +131,55 @@ void TegotaeDriver::UpdateReactionForce() if (m_N < 0) m_N = 0; } +pgd::Vector TegotaeDriver::ParseContactOffset(const char *buf, Simulation *simulation, const char *referenceBodyID) +{ + size_t l = strlen(buf); + char *lBuf = reinterpret_cast(alloca((l + 1) * sizeof(char))); + char **lBufPtrs = reinterpret_cast(alloca(l * sizeof(char *))); + strcpy(lBuf, buf); + long count = DataFile::ReturnTokens(lBuf, lBufPtrs, long(l)); + + pgd::Vector v; + pgd::Vector v2; + if (count < 3 || count > 4) return v; + if (count == 3) + { + v.x = strtod(lBufPtrs[0], 0); + v.y = strtod(lBufPtrs[1], 0); + v.z = strtod(lBufPtrs[2], 0); + return v; + } + if (!simulation || !referenceBodyID) return v; + if (strcmp(lBufPtrs[0], "World") == 0) + { + Body *theBody = simulation->GetBody(referenceBodyID); + if (theBody == 0) return v; + v2.x = strtod(lBufPtrs[1], 0); + v2.y = strtod(lBufPtrs[2], 0); + v2.z = strtod(lBufPtrs[3], 0); + dVector3 bodyRelativeCoordinates; + dBodyGetPosRelPoint(theBody->GetBodyID(), v2.x, v2.y, v2.z, bodyRelativeCoordinates); + v.x = bodyRelativeCoordinates[0]; + v.y = bodyRelativeCoordinates[1]; + v.z = bodyRelativeCoordinates[2]; + return v; + } + Body *theBody = simulation->GetBody(lBufPtrs[0]); + if (theBody == 0) return v; + v2.x = strtod(lBufPtrs[1], 0); + v2.y = strtod(lBufPtrs[2], 0); + v2.z = strtod(lBufPtrs[3], 0); + dVector3 worldCoordinates; + dBodyGetRelPointPos (theBody->GetBodyID(), v2.x, v2.y, v2.z, worldCoordinates); + theBody = simulation->GetBody(referenceBodyID); + if (theBody == 0) return v; + dVector3 bodyRelativeCoordinates; + dBodyGetPosRelPoint(theBody->GetBodyID(), worldCoordinates[0], worldCoordinates[1], worldCoordinates[2], bodyRelativeCoordinates); + v.x = bodyRelativeCoordinates[0]; + v.y = bodyRelativeCoordinates[1]; + v.z = bodyRelativeCoordinates[2]; + return v; +} void TegotaeDriver::Dump() { @@ -141,8 +190,8 @@ void TegotaeDriver::Dump() m_FirstDump = false; if (m_DumpStream == 0) { - if (Driver::m_Name.size() == 0) std::cerr << "TegotaeDriver::Dump error: can only dump a named object\n"; - std::string filename(Driver::m_Name); + if (m_Name.size() == 0) std::cerr << "TegotaeDriver::Dump error: can only dump a named object\n"; + std::string filename(m_Name); filename.append(".dump"); m_DumpStream = new std::ofstream(filename.c_str()); m_DumpStream->precision(17); diff --git a/src/TegotaeDriver.h b/src/TegotaeDriver.h index cd380b9..fdb687b 100644 --- a/src/TegotaeDriver.h +++ b/src/TegotaeDriver.h @@ -51,6 +51,9 @@ class TegotaeDriver : public Driver double Y() const; double N() const; + // utility + static pgd::Vector ParseContactOffset(const char *buf, Simulation *simulation, const char *referenceBodyID); + protected: // these are the parameters from the paper Owaki D, Kano T, Nagasawa K, Tero A, Ishiguro A. 2012 Simple robot suggests physical interlimb communication is essential for quadruped walking. J R Soc Interface 20120669