diff --git a/Base/Core/imstkLogger.cpp b/Base/Core/imstkLogger.cpp index 665cbd13baf7670e0ca814606fab7933ba1b5f95..d12ff629ee36af68bb157c09730da10d3d09bdd5 100644 --- a/Base/Core/imstkLogger.cpp +++ b/Base/Core/imstkLogger.cpp @@ -26,7 +26,7 @@ namespace imstk { Logger::Logger(std::string filename) { - m_filename = filename + this->getCurrentTimeFormatted() + ".log"; + m_filename = filename + "_" + this->getCurrentTimeFormatted() + ".log"; m_mutex = new std::mutex(); m_thread = new std::thread(Logger::eventLoop, this); } @@ -83,9 +83,7 @@ void Logger::eventLoop(Logger * logger) { std::ofstream file(logger->m_filename); - - char buffer[1024]; - std::fill_n(buffer, 1024, '\0'); + std::string buffer; while (logger->m_running) { std::unique_lock<std::mutex> ul(*logger->m_mutex); @@ -98,13 +96,13 @@ Logger::eventLoop(Logger * logger) break; } - std::strcpy(buffer, logger->m_message.c_str()); + buffer = logger->m_message; logger->m_changed = false; ul.unlock(); logger->m_condition.notify_one(); - file << buffer << "\n"; + file << buffer; } file.close(); logger->m_condition.notify_one(); @@ -113,6 +111,7 @@ Logger::eventLoop(Logger * logger) void Logger::log(std::string message, bool prependTime /* = false */) { + m_message = ""; if (prependTime) { m_message = this->getCurrentTimeFormatted() + " "; diff --git a/Base/Core/imstkLogger.h b/Base/Core/imstkLogger.h index 222bf492eca785ce0d08f1cd2f1e1aa099c23e41..fb132c9d199507e4ec24b6add4e650468cb2f1b3 100644 --- a/Base/Core/imstkLogger.h +++ b/Base/Core/imstkLogger.h @@ -49,7 +49,7 @@ public: /// \params filename this name will be used in the file name of the log file /// Logger(std::string filename); - ~Logger(); + virtual ~Logger(); /// /// \brief Log one line. @@ -94,6 +94,11 @@ public: /// void shutdown(); + /// + /// \brief Get the file name + /// + inline std::string getFileName() const { return m_filename; } + private: static std::string getCurrentTimeFormatted(); diff --git a/Base/SceneElements/Controllers/imstkSceneObjectController.cpp b/Base/SceneElements/Controllers/imstkSceneObjectController.cpp index b57d2811bcf4fb54d26dde4c598f4829cb12759e..b33fe31e71bf54062e755798e8d0739b11f79993 100644 --- a/Base/SceneElements/Controllers/imstkSceneObjectController.cpp +++ b/Base/SceneElements/Controllers/imstkSceneObjectController.cpp @@ -49,6 +49,11 @@ SceneObjectController::updateControlledObjects() } } + if (m_updateCallback) + { + m_updateCallback(this); + } + // Update colliding geometry m_sceneObject->getMasterGeometry()->setTranslation(m_trackingController->getPosition()); m_sceneObject->getMasterGeometry()->setRotation(m_trackingController->getRotation()); diff --git a/Base/SceneElements/Controllers/imstkSceneObjectController.h b/Base/SceneElements/Controllers/imstkSceneObjectController.h index 8b9d86e443e037d441b97c56ffc54e463f490280..a4bf690194661adbe200ddce65865a7458fddf25 100644 --- a/Base/SceneElements/Controllers/imstkSceneObjectController.h +++ b/Base/SceneElements/Controllers/imstkSceneObjectController.h @@ -37,6 +37,7 @@ namespace imstk /// class SceneObjectController : public SceneObjectControllerBase { + using ControllerCallbackFunction = std::function<void(SceneObjectController* hdapiClient)>; public: /// /// \brief Constructor @@ -83,9 +84,16 @@ public: inline std::shared_ptr<DeviceTracker> getTrackingController() const { return m_trackingController; } inline void setTrackingController(std::shared_ptr<DeviceTracker> controller) { m_trackingController = controller; } + /// + /// \brief Setting custom behavior functions + /// + inline void setUpdateCallback(ControllerCallbackFunction foo) { m_updateCallback = foo; } + protected: std::shared_ptr<DeviceTracker> m_trackingController; ///< Device tracker std::shared_ptr<SceneObject> m_sceneObject; ///< SceneObject controlled by the Tracker + //Callback functions + ControllerCallbackFunction m_updateCallback; ///> function callback preceding module update }; } // imstk #endif // ifndef imstkSceneObjectController_h