Skip to content
Snippets Groups Projects

Feature/arviz profiles

Merged Andre Meixner requested to merge feature/arviz-profiles into master
5 files
+ 602
15
Compare changes
  • Side-by-side
  • Inline
Files
5
@@ -22,10 +22,10 @@
#include "ArVizWidgetController.h"
#include <ArmarXCore/observers/variant/Variant.h>
#include <SimoxUtility/algorithm/string/string_tools.h>
#include <ArmarXCore/observers/variant/Variant.h>
#include <QLineEdit>
#include <QMessageBox>
#include <QTimer>
@@ -93,7 +93,6 @@ namespace armarx
connect(this, &This::disconnectGui, this, &This::onDisconnectGui, Qt::QueuedConnection);
// Layer info tree.
connect(widget.layerTree, &QTreeWidget::currentItemChanged, this, &This::updateSelectedLayer);
connect(widget.layerInfoTreeGroupBox, &QGroupBox::toggled, &layerInfoTree, &LayerInfoTree::setEnabled);
@@ -105,7 +104,6 @@ namespace armarx
layerInfoTree.setEnabled(widget.layerInfoTreeGroupBox->isChecked());
layerInfoTree.registerVisualizerCallbacks(visualizer);
// We need a callback from the visualizer, when the layers have changed
// So we can update the tree accordingly
visualizer.layersChangedCallback = [this](std::vector<viz::CoinLayerID> const & layers)
@@ -113,6 +111,12 @@ namespace armarx
layersChanged(layers);
};
// Arviz Profile tree.
arvizeProfileLayerWidget = new ArvizProfileManagerWidget();
widget.verticalLayout->addWidget(arvizeProfileLayerWidget);
connect(arvizeProfileLayerWidget, &ArvizProfileManagerWidget::publishUpdate, this, &This::updateLayersFromProfile);
connect(arvizeProfileLayerWidget, &ArvizProfileManagerWidget::fetchUpdate, this, &This::updateLayers);
replayTimer->start(33);
}
@@ -167,6 +171,38 @@ namespace armarx
emit disconnectGui();
}
void ArVizWidgetController::updateLayers()
{
// Update shown/hidden layers
layerTreeChanged(nullptr, 0);
}
void ArVizWidgetController::updateLayersFromProfile()
{
{
QSignalBlocker blocker(widget.layerTree);
// Iterate over all items and activate/deactivate layers accordingly
for (int compIndex = 0; compIndex < widget.layerTree->topLevelItemCount(); ++compIndex)
{
QTreeWidgetItem* componentItem = widget.layerTree->topLevelItem(compIndex);
bool parentChecked = true;
const std::string component = componentItem->text(0).toStdString();
for (int layerIndex = 0; layerIndex < componentItem->childCount(); ++layerIndex)
{
QTreeWidgetItem* layerItem = componentItem->child(layerIndex);
const std::string layer = layerItem->text(0).toStdString();
const viz::CoinLayerID layerID(component, layer);
const bool visible = not arvizeProfileLayerWidget->isHidden(layerID);
layerItem->setCheckState(0, visible ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
parentChecked &= visible;
visualizer.showLayer(layerID, visible);
}
componentItem->setCheckState(0, parentChecked ? Qt::CheckState::Checked : Qt::CheckState::Unchecked);
}
}
}
void ArVizWidgetController::onConnectGui()
{
onRefreshRecordings();
@@ -194,6 +230,8 @@ namespace armarx
Qt::CheckState componentCheck = componentItem->checkState(0);
int layerCount = componentItem->childCount();
arvizeProfileLayerWidget->update(component, componentCheck == Qt::Checked);
if (componentItem == item)
{
// The parent was selected or deselected, so all children should be set accordingly
@@ -208,7 +246,6 @@ namespace armarx
}
return;
}
for (int layerIndex = 0; layerIndex < layerCount; ++layerIndex)
{
QTreeWidgetItem* layerItem = componentItem->child(layerIndex);
@@ -217,6 +254,9 @@ namespace armarx
ARMARX_VERBOSE << "Layer: " << layer << ", Visible: " << layerVisible;
viz::CoinLayerID layerID(component, layer);
arvizeProfileLayerWidget->update(layerID, layerVisible);
visualizer.showLayer(layerID, layerVisible);
}
}
@@ -261,10 +301,10 @@ namespace armarx
if (iter == currentComponents.end())
{
// Create a new item
QSignalBlocker blocker(tree); // otherwise added as unchecked and directly updated
currentItem = new QTreeWidgetItem(tree);
currentItem->setText(0, QString::fromStdString(component));
// A new item is visible by default
currentItem->setCheckState(0, Qt::Checked);
currentItem->setCheckState(0, arvizeProfileLayerWidget->isHidden(component) ? Qt::Unchecked : Qt::Checked);
componentWasNew = true;
}
@@ -286,8 +326,7 @@ namespace armarx
std::string const& layer = entry.second;
QTreeWidgetItem* layerItem = new QTreeWidgetItem;
layerItem->setText(0, QString::fromStdString(layer));
// A new item is visible by default
layerItem->setCheckState(0, Qt::Checked);
layerItem->setCheckState(0, arvizeProfileLayerWidget->isHidden(entry) ? Qt::Unchecked : Qt::Checked);
if (currentItem)
{
@@ -308,7 +347,11 @@ namespace armarx
}
else
{
// Item exists already ==> nothing to be done
// Item exists already ==> make sure that it is not shown if necessary
if (arvizeProfileLayerWidget->isHidden(iter->first) or iter->second->checkState(0) == Qt::Unchecked)
{
visualizer.showLayer(iter->first, false);
}
}
}
}
@@ -398,8 +441,7 @@ namespace armarx
widget.layerTree->blockSignals(false);
// Update shown/hidden layers
layerTreeChanged(nullptr, 0);
updateLayers();
}
void ArVizWidgetController::showFilteredLayers(bool visible)
@@ -422,8 +464,7 @@ namespace armarx
widget.layerTree->blockSignals(false);
// Update shown/hidden layers
layerTreeChanged(nullptr, 0);
updateLayers();
}
void ArVizWidgetController::onDeselectElement()
Loading