From 9caf5f46876e8a0cdd7437e81ca85923ca32ae6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 6 Sep 2023 15:46:53 +0200 Subject: [PATCH 01/15] [refact] Add new reaction to enable/disable menu save as Was done in python applogic before --- Application/Client/LidarViewMainWindow.cxx | 4 +- .../Qt/ApplicationComponents/CMakeLists.txt | 1 + .../lqMenuSaveAsReaction.cxx | 42 ++++++++++++++ .../lqMenuSaveAsReaction.h | 56 +++++++++++++++++++ Application/Wrapping/Python/applogic.py | 1 - 5 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.cxx create mode 100644 Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.h diff --git a/Application/Client/LidarViewMainWindow.cxx b/Application/Client/LidarViewMainWindow.cxx index 2fc53aa03..b60a80ac0 100644 --- a/Application/Client/LidarViewMainWindow.cxx +++ b/Application/Client/LidarViewMainWindow.cxx @@ -20,6 +20,7 @@ #include "lqEnableAdvancedArraysReaction.h" #include "lqLiveSourceScalarColoringBehavior.h" #include "lqLoadLidarStateReaction.h" +#include "lqMenuSaveAsReaction.h" #include "lqOpenPcapReaction.h" #include "lqOpenRecentFilesReaction.h" #include "lqOpenSensorReaction.h" @@ -163,7 +164,7 @@ LidarViewMainWindow::LidarViewMainWindow() LidarViewMainWindow::~LidarViewMainWindow() { delete this->Internals; - this->Internals = NULL; + this->Internals = nullptr; } //----------------------------------------------------------------------------- @@ -417,6 +418,7 @@ void LidarViewMainWindow::setupGUICustom() new lqOpenSensorReaction(this->Internals->actionOpen_Sensor_Stream); new lqOpenPcapReaction(this->Internals->actionOpenPcap); + new lqMenuSaveAsReaction(this->Internals->menuSaveAs); new pqLoadDataReaction(this->Internals->actionOpenFile); new lqUpdateCalibrationReaction( diff --git a/Application/Qt/ApplicationComponents/CMakeLists.txt b/Application/Qt/ApplicationComponents/CMakeLists.txt index 2f3bc962e..b2edc0786 100644 --- a/Application/Qt/ApplicationComponents/CMakeLists.txt +++ b/Application/Qt/ApplicationComponents/CMakeLists.txt @@ -1,6 +1,7 @@ set(classes lqAboutDialogReaction lqLidarViewManager + lqMenuSaveAsReaction lqOpenPcapReaction lqOpenRecentFilesReaction lqOpenSensorReaction diff --git a/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.cxx b/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.cxx new file mode 100644 index 000000000..139acb491 --- /dev/null +++ b/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.cxx @@ -0,0 +1,42 @@ +/*========================================================================= + + Program: LidarView + Module: lqMenuSaveAsReaction.cxx + + Copyright (c) Kitware Inc. + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + +#include "lqMenuSaveAsReaction.h" + +#include + +#include "lqHelper.h" + +//----------------------------------------------------------------------------- +lqMenuSaveAsReaction::lqMenuSaveAsReaction(QMenu* parentObject) + : Superclass(parentObject) +{ + auto* core = pqApplicationCore::instance(); + + pqServerManagerModel* smmodel = core->getServerManagerModel(); + this->connect( + smmodel, SIGNAL(sourceAdded(pqPipelineSource*)), SLOT(onUpdateUI(pqPipelineSource*))); + this->connect( + smmodel, SIGNAL(sourceRemoved(pqPipelineSource*)), SLOT(onUpdateUI(pqPipelineSource*))); + + this->onUpdateUI(nullptr); +} + +//----------------------------------------------------------------------------- +void lqMenuSaveAsReaction::onUpdateUI(pqPipelineSource*) +{ + bool hasLidarReader = HasProxy(); + this->parentMenu()->setEnabled(hasLidarReader); +} diff --git a/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.h b/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.h new file mode 100644 index 000000000..713e0969c --- /dev/null +++ b/Application/Qt/ApplicationComponents/lqMenuSaveAsReaction.h @@ -0,0 +1,56 @@ +/*========================================================================= + + Program: LidarView + Module: lqMenuSaveAsReaction.h + + Copyright (c) Kitware Inc. + All rights reserved. + See Copyright.txt or http://www.kitware.com/Copyright.htm for details. + + This software is distributed WITHOUT ANY WARRANTY; without even + the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + PURPOSE. See the above copyright notice for more information. + +=========================================================================*/ + +#ifndef lqMenuSaveAsReaction_h +#define lqMenuSaveAsReaction_h + +#include "lvApplicationComponentsModule.h" + +#include +#include + +class pqPipelineSource; + +/** + * @ingroup Reactions + * Reaction to save data files. + */ +class LVAPPLICATIONCOMPONENTS_EXPORT lqMenuSaveAsReaction : public QObject +{ + Q_OBJECT + typedef QObject Superclass; + +public: + /** + * Constructor. Parent cannot be nullptr. + */ + lqMenuSaveAsReaction(QMenu* parent); + + /** + * Provides access to the parent menu. + */ + QMenu* parentMenu() const { return qobject_cast(this->parent()); } + +public Q_SLOTS: + /** + * Updates the enabled state. Applications need not explicitly call this. + */ + void onUpdateUI(pqPipelineSource*); + +private: + Q_DISABLE_COPY(lqMenuSaveAsReaction) +}; + +#endif diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 4613b5f6f..16385e05f 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -127,7 +127,6 @@ def onClose(): # Generic Helpers def _setSaveActionsEnabled(enabled): app.actions['actionClose'].setEnabled(enabled) - getMainWindow().findChild('QMenu', 'menuSaveAs').enabled = enabled def enableSaveActions(): -- GitLab From d8a0180c204ef985816c58682204eb785db55825 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 6 Sep 2023 16:00:29 +0200 Subject: [PATCH 02/15] [refact] Replace 'Close data' button by paraview 'Reset Session' --- Application/Client/LidarViewMainWindow.cxx | 3 +- Application/Client/LidarViewMainWindow.ui | 8 ++-- Application/Wrapping/Python/applogic.py | 47 ---------------------- 3 files changed, 6 insertions(+), 52 deletions(-) diff --git a/Application/Client/LidarViewMainWindow.cxx b/Application/Client/LidarViewMainWindow.cxx index b60a80ac0..663a21f13 100644 --- a/Application/Client/LidarViewMainWindow.cxx +++ b/Application/Client/LidarViewMainWindow.cxx @@ -218,7 +218,7 @@ void LidarViewMainWindow::setupPVGUI() // TODO Enable help from the properties panel. - /// hook delete to pqDeleteReaction. + /// Hook delete to pqDeleteReaction in pipeline browser. QAction* tempDeleteAction = new QAction(this); pqDeleteReaction* handler = new pqDeleteReaction(tempDeleteAction); handler->connect(this->Internals->propertiesPanel, @@ -420,6 +420,7 @@ void LidarViewMainWindow::setupGUICustom() new lqOpenPcapReaction(this->Internals->actionOpenPcap); new lqMenuSaveAsReaction(this->Internals->menuSaveAs); new pqLoadDataReaction(this->Internals->actionOpenFile); + new pqDeleteReaction(this->Internals->actionResetSession, pqDeleteReaction::DeleteModes::ALL); new lqUpdateCalibrationReaction( this->Internals->actionChoose_Calibration_File); // Requires lqSensorListWidget init diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index 86a840452..ff8463667 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -71,7 +71,7 @@ - + @@ -476,12 +476,12 @@ F8 - + - &Close Data + Reset Session - Close Data + Reset Session Ctrl+W diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 16385e05f..405fbcc84 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -85,8 +85,6 @@ def UpdateApplogicLidar(lidarProxyName, gpsProxyName): sensor.UpdatePipelineInformation() sensor.UpdatePipeline() - enableSaveActions() # WIP UNSURE - smp.Show(sensor) showSourceInSpreadSheet(sensor) smp.Render() @@ -103,47 +101,10 @@ def UpdateApplogicReader(lidarName, posOrName): # WIP could explicit send Proxy reader.UpdatePipelineInformation() reader.UpdatePipeline() - enableSaveActions() - getAnimationScene().UpdateAnimationUsingDataTimeSteps() smp.SetActiveView(smp.GetActiveView()) -def onClose(): - # Pause - smp.GetAnimationScene().Stop() - # Remove Lidar Related - unloadData() - getAnimationScene().AnimationTime = 0 - # Remove widgets - smp.HideUnusedScalarBars() - - # Reset Camera - lvsmp.ResetCameraToForwardView() - - # Disable Actions - disableSaveActions() - -# Generic Helpers -def _setSaveActionsEnabled(enabled): - app.actions['actionClose'].setEnabled(enabled) - - -def enableSaveActions(): - _setSaveActionsEnabled(True) - - -def disableSaveActions(): - _setSaveActionsEnabled(False) - - -def unloadData(): - for k, src in smp.GetSources().items(): - if src != app.grid: - smp.Delete(src) - - clearSpreadSheetView() - def getReaderSource(): return PythonQt.paraview.lqSensorListWidget.getActiveLidarSource() @@ -165,12 +126,6 @@ def getLidar(index = -1): # WIP TODO def getSpreadSheetViewProxy(): #WIP this is probably unreliable return smp.servermanager.ProxyManager().GetProxy("views", "main spreadsheet view") -def clearSpreadSheetView(): - view = getSpreadSheetViewProxy() - if view is not None: - view.Representations = [] - - def showSourceInSpreadSheet(source): if not source: return @@ -251,7 +206,6 @@ def start(): lvsmp.ResetCameraToForwardView() setupActions() - disableSaveActions() hideColorByComponent() # Create Grid #WIP not perfect requires loaded plugin @@ -371,7 +325,6 @@ def setupActions(): app.actions['actionAdvanceFeature'].connect('triggered()', onToogleAdvancedGUI) app.actions['actionPlaneFit'].connect('triggered()', planeFit) - app.actions['actionClose'].connect('triggered()', onClose) app.actions['actionGrid_Properties'].connect('triggered()', onGridProperties) app.actions['actionShowPosition'].connect('triggered()', ShowPosition) -- GitLab From 43e8e9d2139412bdd8031f5f1eb08991a9d431ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 4 Oct 2023 08:47:44 +0200 Subject: [PATCH 03/15] [refact] Remove call to python applogic in PCAP readers --- .../lqOpenPcapReaction.cxx | 6 +-- .../lqOpenSensorReaction.cxx | 6 +-- Application/Wrapping/Python/applogic.py | 54 ------------------- 3 files changed, 4 insertions(+), 62 deletions(-) diff --git a/Application/Qt/ApplicationComponents/lqOpenPcapReaction.cxx b/Application/Qt/ApplicationComponents/lqOpenPcapReaction.cxx index db9d34e5f..354f808e1 100644 --- a/Application/Qt/ApplicationComponents/lqOpenPcapReaction.cxx +++ b/Application/Qt/ApplicationComponents/lqOpenPcapReaction.cxx @@ -18,6 +18,7 @@ #include #include #include +#include #include "lqCalibrationDialog.h" #include "lqHelper.h" @@ -185,9 +186,8 @@ void lqOpenPcapReaction::createSourceFromFile(QString fileName, const lqCalibrat controller->Show(posOrSource->getSourceProxy(), 0, view->getViewProxy()); } - // Update applogic to be able to use function only define in applogic. - lqLidarViewManager::instance()->runPython( - QString("lv.UpdateApplogicReader('%1', '%2')\n").arg(lidarName, posOrName)); + vtkSMAnimationSceneProxy::UpdateAnimationUsingDataTimeSteps( + controller->GetAnimationScene(server->session())); // Show the Lidar source controller->Show(lidarSource->getSourceProxy(), 0, view->getViewProxy()); diff --git a/Application/Qt/ApplicationComponents/lqOpenSensorReaction.cxx b/Application/Qt/ApplicationComponents/lqOpenSensorReaction.cxx index 7f93e4df5..ff41fb1ee 100644 --- a/Application/Qt/ApplicationComponents/lqOpenSensorReaction.cxx +++ b/Application/Qt/ApplicationComponents/lqOpenSensorReaction.cxx @@ -15,11 +15,11 @@ #include #include +#include "lqCalibrationDialog.h" #include "lqHelper.h" #include "lqLidarViewManager.h" #include "lqSensorListWidget.h" #include "lqUpdateCalibrationReaction.h" -#include "lqCalibrationDialog.h" #include #include @@ -96,8 +96,4 @@ void lqOpenSensorReaction::createSensorStream(const lqCalibrationDialog& dialog) // "Start" of the lidar Source have to be called lidarSource->getProxy()->InvokeCommand("Start"); - - // Update applogic to be able to use function only define in applogic. - lqLidarViewManager::instance()->runPython( - QString("lv.UpdateApplogicLidar('%1', '%2')\n").arg(lidarName, posOrName)); } diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 405fbcc84..8ff7700ab 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -65,46 +65,6 @@ def hasArrayName(sourceProxy, arrayName): def planeFit(): planefit.fitPlane(app.actions['actionSpreadsheet']) -# Main API -def UpdateApplogicCommon(lidar): - # WIP ACTUALLY THINK ABOUT always enabled ok, just apply settings on current lidar actually needed - # Overall on what buttons are on-off when there is data or not - - # Reset Scene Time # WIP TIME CONTROLLER API ? - smp.GetActiveView().ViewTime = 0.0 - -# Used by lqLidarViewManager -def UpdateApplogicLidar(lidarProxyName, gpsProxyName): - - sensor = smp.FindSource(lidarProxyName) #WIP use getSensor() and getPosOr() - if not sensor: - return - - UpdateApplogicCommon(sensor) - - sensor.UpdatePipelineInformation() - sensor.UpdatePipeline() - - smp.Show(sensor) - showSourceInSpreadSheet(sensor) - smp.Render() - -# Used by lqLidarViewManager -def UpdateApplogicReader(lidarName, posOrName): # WIP could explicit send Proxy using _getPyProxy(vtkSMProxy) - - reader = getReader() - if not reader : - return - - UpdateApplogicCommon(reader) - - reader.UpdatePipelineInformation() - reader.UpdatePipeline() - - getAnimationScene().UpdateAnimationUsingDataTimeSteps() - - smp.SetActiveView(smp.GetActiveView()) - def getReaderSource(): return PythonQt.paraview.lqSensorListWidget.getActiveLidarSource() @@ -123,20 +83,6 @@ def getPosOrSource(index = -1): def getLidar(index = -1): # WIP TODO return getReader(index) or getSensor(index) -def getSpreadSheetViewProxy(): #WIP this is probably unreliable - return smp.servermanager.ProxyManager().GetProxy("views", "main spreadsheet view") - -def showSourceInSpreadSheet(source): - if not source: - return - spreadSheetView = getSpreadSheetViewProxy() - smp.Show(source, spreadSheetView) - - # Work around a bug where the 'Showing' combobox doesn't update. - # Calling hide and show again will trigger the refresh. - smp.Hide(source, spreadSheetView) - smp.Show(source, spreadSheetView) - def createGrid(): app.grid = smp.GridSource(guiName='Measurement Grid') -- GitLab From 2b815ec2ef4e9673022af77d85134699705345d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 4 Oct 2023 14:20:27 +0200 Subject: [PATCH 04/15] [fix] Deactivate reset session reaction does't work with current renderview Re-uses lqLidarCoreManager::onCloseAllData instead --- Application/Client/LidarViewMainWindow.cxx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Application/Client/LidarViewMainWindow.cxx b/Application/Client/LidarViewMainWindow.cxx index 663a21f13..b5ead1951 100644 --- a/Application/Client/LidarViewMainWindow.cxx +++ b/Application/Client/LidarViewMainWindow.cxx @@ -420,7 +420,13 @@ void LidarViewMainWindow::setupGUICustom() new lqOpenPcapReaction(this->Internals->actionOpenPcap); new lqMenuSaveAsReaction(this->Internals->menuSaveAs); new pqLoadDataReaction(this->Internals->actionOpenFile); - new pqDeleteReaction(this->Internals->actionResetSession, pqDeleteReaction::DeleteModes::ALL); + // Doesn't currently works a refact of LidarViewMaindow and how the main render view is handled + // needed. + // new pqDeleteReaction(this->Internals->actionResetSession, pqDeleteReaction::DeleteModes::ALL); + connect(this->Internals->actionResetSession, + SIGNAL(triggered()), + lqLidarCoreManager::instance(), + SLOT(onCloseAllData())); new lqUpdateCalibrationReaction( this->Internals->actionChoose_Calibration_File); // Requires lqSensorListWidget init -- GitLab From ba5cf21d46a167d7e6ad95861d000ab19f1033ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 4 Oct 2023 14:29:16 +0200 Subject: [PATCH 05/15] [refact] Remove unused & broken geolocation toolbar --- Application/Client/LidarViewMainWindow.ui | 12 ------ Application/Wrapping/Python/applogic.py | 51 ----------------------- 2 files changed, 63 deletions(-) diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index ff8463667..a351b36a7 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -196,18 +196,6 @@ - - - Geolocation Controls - - - TopToolBarArea - - - false - - - Color Map Editor diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 8ff7700ab..aa09811aa 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -206,28 +206,6 @@ def adjustScalarBarRangeLabelFormat(): sb.RangeLabelFormat = '%g' smp.Render() -def transformMode(): - reader = getReader() - if not reader: - return None - if hasattr(reader.Interpreter, 'ApplyTransform') and reader.Interpreter.ApplyTransform: - return 1 # absolute - else: - return 0 # raw - -def setTransformMode(mode): - # 0 - raw - # 1 - absolute - # 2 - relative # WIP what ? - reader = getReader() - - if reader: - reader.Interpreter.ApplyTransform = (mode > 0) - -def geolocationChanged(setting): - setTransformMode(setting) - smp.Render(view=smp.GetActiveView()) - def onToogleAdvancedGUI(updateSettings = True): """ Switch the GUI between advanced and classic mode""" # hide/show Sources menu @@ -282,35 +260,6 @@ def setupActions(): app.actions['actionAdvanceFeature'].checked = False onToogleAdvancedGUI(updateSettings=False) - # Setup and add the geolocation toolbar - geolocationToolBar = mW.findChild('QToolBar', 'geolocationToolbar') - - # Creating and adding the geolocation label to the geolocation toolbar - geolocationLabel = QtGui.QLabel('Frame Mapping: ') - geolocationToolBar.addWidget(geolocationLabel) - - # Creating the geolocation combobox - geolocationComboBox = QtGui.QComboBox() - - # Add the different entries - # Currently, as Absolute and Relative Geolocation options are broken, disable them. - geolocationComboBox.addItem('None (RAW Data)') - geolocationComboBox.setItemData(0, "No mapping: Each frame is at the origin", 3) - - geolocationComboBox.addItem('Absolute Geolocation') - geolocationComboBox.setItemData(1, "Use GPS geolocation to get each frame absolute location, the first frame is shown at origin", 3) - geolocationComboBox.model().item(1).setEnabled(False) - - geolocationComboBox.addItem('Relative Geolocation') - geolocationComboBox.setItemData(2, "Use GPS geolocation to get each frame absolute location, the current frame is shown at origin", 3) - geolocationComboBox.model().item(2).setEnabled(False) - - geolocationComboBox.connect('currentIndexChanged(int)', geolocationChanged) - geolocationToolBar.addWidget(geolocationComboBox) - - # Set default toolbar visibility - geolocationToolBar.visible = False - displayWidget = getMainWindow().findChild('lqColorToolbar').findChild('pqDisplayColorWidget') displayWidget.connect('arraySelectionChanged ()',adjustScalarBarRangeLabelFormat) app.actions['actionScalarBarVisibility'].connect('triggered()',adjustScalarBarRangeLabelFormat) -- GitLab From 7ff54f285543376d40ff1306e3aa69d38cd9be76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Wed, 4 Oct 2023 14:37:40 +0200 Subject: [PATCH 06/15] [refact] Remove adjustScalarBarRenage fixes from lidarview Theses fixes are already made in paraview --- Application/Wrapping/Python/applogic.py | 36 ------------------------- 1 file changed, 36 deletions(-) diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index aa09811aa..97bd78b22 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -39,28 +39,6 @@ class AppLogic(object): def __init__(self): pass -# Array Helper -def hasArrayName(sourceProxy, arrayName): - ''' - Returns True if the data has non-zero points and has a point data - attribute with the given arrayName. - ''' - if not sourceProxy: - return False - - info = sourceProxy.GetDataInformation().DataInformation - if info.GetNumberOfPoints() == 0: - return False - - # ~ info = info.GetAttributeInformation(0) - # ~ for i in range(info.GetNumberOfArrays()): - # ~ if info.GetArrayInformation(i).GetName() == arrayName: - # ~ return True - # ~ return False - array = sourceProxy.PointData.GetArray(arrayName) - if array: - return True - # Action Related Logic def planeFit(): planefit.fitPlane(app.actions['actionSpreadsheet']) @@ -196,16 +174,6 @@ def onGridProperties(): def hideColorByComponent(): getMainWindow().findChild('lqColorToolbar').findChild('pqDisplayColorWidget').findChildren('QComboBox')[1].hide() -def adjustScalarBarRangeLabelFormat(): - if not app.actions['actionScalarBarVisibility'].isChecked(): - return - - arrayName = getMainWindow().findChild('lqColorToolbar').findChild('pqDisplayColorWidget').findChild('QComboBox').currentText - if arrayName != '' and hasArrayName(getReader(), arrayName): - sb = smp.GetScalarBar(smp.GetLookupTableForArray(arrayName, [])) - sb.RangeLabelFormat = '%g' - smp.Render() - def onToogleAdvancedGUI(updateSettings = True): """ Switch the GUI between advanced and classic mode""" # hide/show Sources menu @@ -259,7 +227,3 @@ def setupActions(): if not advanceMode: app.actions['actionAdvanceFeature'].checked = False onToogleAdvancedGUI(updateSettings=False) - - displayWidget = getMainWindow().findChild('lqColorToolbar').findChild('pqDisplayColorWidget') - displayWidget.connect('arraySelectionChanged ()',adjustScalarBarRangeLabelFormat) - app.actions['actionScalarBarVisibility'].connect('triggered()',adjustScalarBarRangeLabelFormat) -- GitLab From ea61f035e91672db05157ccd09a249d77ed6af10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 11:30:05 +0200 Subject: [PATCH 07/15] [refact] Remove unused getAnimationScene applogic function --- Application/Wrapping/Python/applogic.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 97bd78b22..ba7f66ef7 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -111,13 +111,6 @@ def createGrid(): smp.Show(app.grid) return app.grid -def getAnimationScene(): - '''This function is a workaround because paraview.simple.GetAnimationScene() - has an issue where the returned proxy might not have its Cues property initialized''' - for proxy in paraview.servermanager.ProxyManager().GetProxiesInGroup("animation").values(): - if proxy.GetXMLName() == 'AnimationScene' and len(proxy.Cues): - return proxy - # Main function, Used by lqLidarViewManager def start(): -- GitLab From 1ea62b02664df46aaf19cf8557a8f51b708b7e18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 11:42:15 +0200 Subject: [PATCH 08/15] [refact] Remove show GPS strack button from UI --- Application/Client/LidarViewMainWindow.ui | 15 --------------- Application/Wrapping/Python/applogic.py | 12 ------------ 2 files changed, 27 deletions(-) diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index a351b36a7..881a05ae6 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -724,21 +724,6 @@ Advance Feature - - - true - - - - :/lvResources/Icons/map.png:/lvResources/Icons/map.png - - - actionShowPosition - - - Show the GPS Track - - diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index ba7f66ef7..cbd1cc118 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -186,17 +186,6 @@ def onToogleAdvancedGUI(updateSettings = True): newValue = int(not int(getPVSettings().value("LidarPlugin/AdvanceFeature/Enable", 0))) getPVSettings().setValue("LidarPlugin/AdvanceFeature/Enable", newValue) -def switchVisibility(Proxy): - """ Invert the Proxy visibility int the current view """ - ProxyRep = smp.GetRepresentation(Proxy) - ProxyRep.Visibility = not ProxyRep.Visibility - -def ShowPosition(): - position = getPosOrSource() - if position: - switchVisibility(position) - smp.Render() - # Setup Actions def setupActions(): @@ -211,7 +200,6 @@ def setupActions(): app.actions['actionAdvanceFeature'].connect('triggered()', onToogleAdvancedGUI) app.actions['actionPlaneFit'].connect('triggered()', planeFit) app.actions['actionGrid_Properties'].connect('triggered()', onGridProperties) - app.actions['actionShowPosition'].connect('triggered()', ShowPosition) # Restore action states from settings settings = getPVSettings() -- GitLab From 05f991dc8ddd78c0bd2f0705454b3eff44fb4032 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 11:44:05 +0200 Subject: [PATCH 09/15] [refact] Remove hidColorByComponent function It was directly implemented in LVCore lqColorToolbar --- Application/Wrapping/Python/applogic.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index cbd1cc118..a40e4b13c 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -123,7 +123,6 @@ def start(): lvsmp.ResetCameraToForwardView() setupActions() - hideColorByComponent() # Create Grid #WIP not perfect requires loaded plugin createGrid() @@ -164,9 +163,6 @@ def onGridProperties(): smp.Render() -def hideColorByComponent(): - getMainWindow().findChild('lqColorToolbar').findChild('pqDisplayColorWidget').findChildren('QComboBox')[1].hide() - def onToogleAdvancedGUI(updateSettings = True): """ Switch the GUI between advanced and classic mode""" # hide/show Sources menu -- GitLab From cb70289f2b9a25c74db77555630b6c7e205b9ebc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 11:53:17 +0200 Subject: [PATCH 10/15] [refact] Remove getLidar/Sensor PythonQt utility function --- Application/Wrapping/Python/applogic.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index a40e4b13c..979b2608c 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -43,24 +43,6 @@ class AppLogic(object): def planeFit(): planefit.fitPlane(app.actions['actionSpreadsheet']) -def getReaderSource(): - return PythonQt.paraview.lqSensorListWidget.getActiveLidarSource() - -def getReader(index = -1): - return paraview.servermanager._getPyProxy(PythonQt.paraview.lqSensorListWidget.getReader(index)) - -#def getLidarNew(): -# return paraview.servermanager._getPyProxy(PythonQt.paraview.lqSensorListWidget.getLidar()) - -def getSensor(index = -1): - return paraview.servermanager._getPyProxy(PythonQt.paraview.lqSensorListWidget.getSensor(index)) - -def getPosOrSource(index = -1): - return paraview.servermanager._getPyProxy(PythonQt.paraview.lqSensorListWidget.getPosOrSource(index)) - -def getLidar(index = -1): # WIP TODO - return getReader(index) or getSensor(index) - def createGrid(): app.grid = smp.GridSource(guiName='Measurement Grid') -- GitLab From ba3b43890449c177563902e1d46c24b74cf93856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 13:26:54 +0200 Subject: [PATCH 11/15] [refact] Remove applogic planefit action --- Application/Client/LidarViewMainWindow.ui | 13 ------------- Application/Wrapping/Python/applogic.py | 6 ------ 2 files changed, 19 deletions(-) diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index 881a05ae6..a9e0ffd54 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -193,7 +193,6 @@ - @@ -636,18 +635,6 @@ Advanced Selection and Measurement options - - - - :/lvResources/Icons/planefit.png:/lvResources/Icons/planefit.png - - - Plane Fit - - - Plane Fit to selection - - true diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 979b2608c..d5223b958 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -22,7 +22,6 @@ import PythonQt from PythonQt import QtCore, QtGui import lidarview.gridAdjustmentDialog -import lidarview.planefit as planefit import lidarview.simple as lvsmp # import the vtk wrapping of the Lidar Plugin @@ -39,10 +38,6 @@ class AppLogic(object): def __init__(self): pass -# Action Related Logic -def planeFit(): - planefit.fitPlane(app.actions['actionSpreadsheet']) - def createGrid(): app.grid = smp.GridSource(guiName='Measurement Grid') @@ -176,7 +171,6 @@ def setupActions(): app.actions[a.objectName] = a app.actions['actionAdvanceFeature'].connect('triggered()', onToogleAdvancedGUI) - app.actions['actionPlaneFit'].connect('triggered()', planeFit) app.actions['actionGrid_Properties'].connect('triggered()', onGridProperties) # Restore action states from settings -- GitLab From 5d604ec323e7d2a28e5e429dad270bc5689e9888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 14:07:46 +0200 Subject: [PATCH 12/15] [refact] Remove advanced mode and show pipeline browser & property toolbar This will be probably re-implemented but under another form. --- Application/Client/LidarViewMainWindow.cxx | 2 -- Application/Client/LidarViewMainWindow.ui | 12 ---------- Application/Wrapping/Python/applogic.py | 27 ---------------------- 3 files changed, 41 deletions(-) diff --git a/Application/Client/LidarViewMainWindow.cxx b/Application/Client/LidarViewMainWindow.cxx index b5ead1951..9aa9aa001 100644 --- a/Application/Client/LidarViewMainWindow.cxx +++ b/Application/Client/LidarViewMainWindow.cxx @@ -203,8 +203,6 @@ void LidarViewMainWindow::setupPVGUI() // Hide Various Other Docks this->Internals->colorMapEditorDock->hide(); - this->Internals->pipelineBrowserDock->hide(); - this->Internals->propertiesDock->hide(); this->Internals->viewPropertiesDock->hide(); this->Internals->displayPropertiesDock->hide(); this->Internals->informationDock->hide(); diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index a9e0ffd54..2596c98dd 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -105,7 +105,6 @@ - @@ -700,17 +699,6 @@ Enable the interpreter's advanced arrays. - - - true - - - true - - - Advance Feature - - diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index d5223b958..0a441d741 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -140,25 +140,6 @@ def onGridProperties(): smp.Render() -def onToogleAdvancedGUI(updateSettings = True): - """ Switch the GUI between advanced and classic mode""" - # hide/show Sources menu - menuSources = getMainWindow().findChild("QMenu", "menuSources").menuAction() - menuSources.visible = not menuSources.visible - # hide/show Filters menu - menuFilters = getMainWindow().findChild("QMenu", "menuFilters").menuAction() - menuFilters.visible = not menuFilters.visible - # hide/show Advance menu - menuAdvance = getMainWindow().findChild("QMenu", "menuAdvance").menuAction() - menuAdvance.visible = not menuAdvance.visible - # hide/show view decorator - getMainWindow().centralWidget().toggleWidgetDecoration() - # update the UserSettings - if updateSettings: - # booleans must be store as int - newValue = int(not int(getPVSettings().value("LidarPlugin/AdvanceFeature/Enable", 0))) - getPVSettings().setValue("LidarPlugin/AdvanceFeature/Enable", newValue) - # Setup Actions def setupActions(): @@ -170,13 +151,5 @@ def setupActions(): for a in actions: app.actions[a.objectName] = a - app.actions['actionAdvanceFeature'].connect('triggered()', onToogleAdvancedGUI) app.actions['actionGrid_Properties'].connect('triggered()', onGridProperties) - # Restore action states from settings - settings = getPVSettings() - - advanceMode = int(settings.value("LidarPlugin/AdvanceFeature/Enable", 0)) - if not advanceMode: - app.actions['actionAdvanceFeature'].checked = False - onToogleAdvancedGUI(updateSettings=False) -- GitLab From c5e2f6bb916d949c7f383007696cd8def5096d22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 14:17:31 +0200 Subject: [PATCH 13/15] [refact] Remove grid dialog windows This dialog will probably be reimplemented under another form --- Application/Client/LidarViewMainWindow.ui | 6 - .../Resources/lqGridAdjustmentDialog.ui | 326 ------------------ Application/Client/Resources/lvResources.qrc | 1 - Application/Wrapping/Python/CMakeLists.txt | 1 - Application/Wrapping/Python/applogic.py | 22 -- .../Wrapping/Python/gridAdjustmentDialog.py | 91 ----- 6 files changed, 447 deletions(-) delete mode 100644 Application/Client/Resources/lqGridAdjustmentDialog.ui delete mode 100644 Application/Wrapping/Python/gridAdjustmentDialog.py diff --git a/Application/Client/LidarViewMainWindow.ui b/Application/Client/LidarViewMainWindow.ui index 2596c98dd..3a2660954 100644 --- a/Application/Client/LidarViewMainWindow.ui +++ b/Application/Client/LidarViewMainWindow.ui @@ -81,7 +81,6 @@ - @@ -501,11 +500,6 @@ Save &CSV... - - - Grid Properties - - diff --git a/Application/Client/Resources/lqGridAdjustmentDialog.ui b/Application/Client/Resources/lqGridAdjustmentDialog.ui deleted file mode 100644 index b82ce8175..000000000 --- a/Application/Client/Resources/lqGridAdjustmentDialog.ui +++ /dev/null @@ -1,326 +0,0 @@ - - - Dialog - - - - 0 - 0 - 395 - 252 - - - - Grid Properties - - - - - - - - Sensor origin: - - - - - - - -999.000000000000000 - - - 999.000000000000000 - - - - - - - -999.000000000000000 - - - 999.000000000000000 - - - - - - - -999.000000000000000 - - - 999.000000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - - 88 - 0 - - - - Sensor up: - - - - - - - -99.000000000000000 - - - - - - - -99.000000000000000 - - - - - - - -99.000000000000000 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Grid resolution (meters): - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Grid radius (meters): - - - - - - - 999.990000000000009 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Grid line width - - - - - - - 1 - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Grid color - - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Persisting properties - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - Qt::Vertical - - - - 20 - 27 - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - buttonBox - accepted() - Dialog - accept() - - - 248 - 254 - - - 157 - 274 - - - - - buttonBox - rejected() - Dialog - reject() - - - 316 - 260 - - - 286 - 274 - - - - - diff --git a/Application/Client/Resources/lvResources.qrc b/Application/Client/Resources/lvResources.qrc index 831cef224..ee51aa781 100644 --- a/Application/Client/Resources/lvResources.qrc +++ b/Application/Client/Resources/lvResources.qrc @@ -29,6 +29,5 @@ Icons/WiresharkDoc-128.png Images/About.png Images/bottom_logo.png - lqGridAdjustmentDialog.ui diff --git a/Application/Wrapping/Python/CMakeLists.txt b/Application/Wrapping/Python/CMakeLists.txt index 58fd12d12..a8bcdef20 100644 --- a/Application/Wrapping/Python/CMakeLists.txt +++ b/Application/Wrapping/Python/CMakeLists.txt @@ -5,7 +5,6 @@ python_module_install( FILES __init__.py applogic.py - gridAdjustmentDialog.py planefit.py simple.py OUTPUT_DIRECTORY lidarview diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index 0a441d741..cf515b801 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -21,7 +21,6 @@ from paraview import vtk import PythonQt from PythonQt import QtCore, QtGui -import lidarview.gridAdjustmentDialog import lidarview.simple as lvsmp # import the vtk wrapping of the Lidar Plugin @@ -122,24 +121,6 @@ def getPVApplicationCore(): def getPVSettings(): return getPVApplicationCore().settings() -def onGridProperties(): - if not app.grid: - createGrid() - if lidarview.gridAdjustmentDialog.showDialog(getMainWindow(), app): - rep = smp.Show(app.grid) - rep.LineWidth = app.grid.LineWidth - rep.DiffuseColor = app.grid.Color - - if(getPVSettings().value('LidarPlugin/grid/gridPropertiesPersist') == "true") : - getPVSettings().setValue('LidarPlugin/grid/gridColor', app.grid.Color) - getPVSettings().setValue('LidarPlugin/grid/LineWidth', app.grid.LineWidth) - getPVSettings().setValue('LidarPlugin/grid/GridNbTicks', app.grid.GridNbTicks) - getPVSettings().setValue('LidarPlugin/grid/Normal', app.grid.Normal) - getPVSettings().setValue('LidarPlugin/grid/Origin', app.grid.Origin) - getPVSettings().setValue('LidarPlugin/grid/Scale', app.grid.Scale) - - smp.Render() - # Setup Actions def setupActions(): @@ -150,6 +131,3 @@ def setupActions(): for a in actions: app.actions[a.objectName] = a - - app.actions['actionGrid_Properties'].connect('triggered()', onGridProperties) - diff --git a/Application/Wrapping/Python/gridAdjustmentDialog.py b/Application/Wrapping/Python/gridAdjustmentDialog.py deleted file mode 100644 index d4ce4517a..000000000 --- a/Application/Wrapping/Python/gridAdjustmentDialog.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2013 Velodyne Acoustics, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -from __future__ import print_function -from PythonQt import QtCore, QtGui, QtUiTools, paraview -import math - -def showDialog(mainWindow, app): - - loader = QtUiTools.QUiLoader() - uifile = QtCore.QFile(':/lvResources/lqGridAdjustmentDialog.ui') - if not uifile.open(uifile.ReadOnly): - print("error opening file") - return - - dialog = loader.load(uifile, mainWindow) - uifile.close() - - # Delete "?" Button that appears on windows os - # Rewrite the flags without QtCore.Qt.WindowContextHelpButtonHint - flags = QtCore.Qt.Dialog | QtCore.Qt.WindowStaysOnTopHint | QtCore.Qt.WindowTitleHint | QtCore.Qt.WindowCloseButtonHint - dialog.setWindowFlags(flags) - - - def w(name): - for widget in dialog.children(): - if widget.objectName == name: - return widget - - w('SensorUpX').setValue(app.grid.Normal[0]) - w('SensorUpY').setValue(app.grid.Normal[1]) - w('SensorUpZ').setValue(app.grid.Normal[2]) - - w('SensorOriginX').setValue(-app.grid.Origin[0]) - w('SensorOriginY').setValue(-app.grid.Origin[1]) - w('SensorOriginZ').setValue(-app.grid.Origin[2]) - - w('GridResolution').setValue(app.grid.Scale) - w('GridWidth').setValue(app.grid.Scale*app.grid.GridNbTicks) - w('GridLineWidth').setValue(app.grid.LineWidth) - - r = app.grid.Color[0] * 255 - g = app.grid.Color[1] * 255 - b = app.grid.Color[2] * 255 - w('GridColorPicker').setStyleSheet("background-color: rgb(" + str(r) + "," + str(g) + "," + str(b) +");") - - pvsettings = paraview.pqPVApplicationCore.instance().settings() - w('ShouldPropertiesPersist').setChecked(pvsettings.value('LidarPlugin/grid/gridPropertiesPersist') == "true") - - def pickColor(): - colorPicker = QtGui.QColorDialog() - colorPicker.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint) - - if(colorPicker.exec()): - qColor = colorPicker.selectedColor() - - if not qColor.isValid(): - return False - - r = qColor.red() - g = qColor.green() - b = qColor.blue() - w('GridColorPicker').setStyleSheet("background-color: rgb(" + str(r) + "," + str(g) + "," + str(b) +");") - - w('GridColorPicker').connect('clicked()', pickColor) - - accepted = dialog.exec_() - if not accepted: - return False - - app.grid.Normal = [w('SensorUpX').value, w('SensorUpY').value, w('SensorUpZ').value] - app.grid.Origin = [-w('SensorOriginX').value, -w('SensorOriginY').value, -w('SensorOriginZ').value] - app.grid.Scale = w('GridResolution').value - app.grid.GridNbTicks = int(math.ceil(w('GridWidth').value / w('GridResolution').value)) - app.grid.LineWidth = w('GridLineWidth').value - color = w('GridColorPicker').palette.color(QtGui.QPalette.Background) - app.grid.Color = [color.redF(), color.greenF(), color.blueF()] - - pvsettings.setValue('LidarPlugin/grid/gridPropertiesPersist', "true" if w('ShouldPropertiesPersist').checked else "false" ) - - return True -- GitLab From 792e90b40d549eed96c68edd9af480535379c5f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Fri, 6 Oct 2023 14:20:16 +0200 Subject: [PATCH 14/15] [refact] Remove setupAction function from applogic --- Application/Wrapping/Python/applogic.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/Application/Wrapping/Python/applogic.py b/Application/Wrapping/Python/applogic.py index cf515b801..5219e26cc 100644 --- a/Application/Wrapping/Python/applogic.py +++ b/Application/Wrapping/Python/applogic.py @@ -98,36 +98,13 @@ def start(): lvsmp.ResetCameraToForwardView() - setupActions() - # Create Grid #WIP not perfect requires loaded plugin createGrid() -def findQObjectByName(widgets, name): - for w in widgets: - if w.objectName == name: - return w - - -def getMainWindow(): - return findQObjectByName(QtGui.QApplication.topLevelWidgets(), 'LidarViewMainWindow') - - def getPVApplicationCore(): return PythonQt.paraview.pqPVApplicationCore.instance() def getPVSettings(): return getPVApplicationCore().settings() - -# Setup Actions -def setupActions(): - - mW = getMainWindow() - actions = mW.findChildren('QAction') - - app.actions = {} - - for a in actions: - app.actions[a.objectName] = a -- GitLab From a7d08dd30bcb1ebfe1e2cf662f3e5d87ee341471 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Couble?= Date: Mon, 16 Oct 2023 16:27:16 +0200 Subject: [PATCH 15/15] [submodule] Bump LVCore d065d75c Merge branch 'refact/removeApplogicLastActions' into 'master' --- LVCore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LVCore b/LVCore index 237fcb3c3..d065d75c6 160000 --- a/LVCore +++ b/LVCore @@ -1 +1 @@ -Subproject commit 237fcb3c3c0268d19c13877b5f24cddb8d7a351d +Subproject commit d065d75c6a43d80f3023e8b393e8a69c0e5f8301 -- GitLab