27 #include "../ListDictHelper.h"
28 #include "../widgets/EditMatrixWidget.h"
29 #include "../widgets/IntEnumWidget.h"
30 #include "../widgets/QuaternionWidget.h"
40 const char* locale =
"C";
41 ss.imbue(std::locale(locale));
42 ss << std::fixed << std::setprecision(precision) << number;
51 AronTreeWidgetSetterVisitor::checkTreeWidgetItemForSimilarName(
const std::string& name)
const
59 auto descr = castedThis->aronType->getDescriptor();
65 std::string n = el->text(0).toStdString();
68 ARMARX_WARNING_S <<
"Could not set a tree widget value for the element with key '"
69 << name <<
"' because it is different from the expected name '" << n
77 AronTreeWidgetSetterVisitor::adjustNumberOfChildren(AronTreeWidgetItem* parent,
80 if (((
size_t)parent->childCount()) < numChildren)
84 size_t childrenToAdd = numChildren - parent->childCount();
85 for (
size_t j = 0; j < childrenToAdd; ++j)
87 AronTreeWidgetCreatorVisitor childCreator(parent);
92 else if ((
size_t)parent->childCount() > numChildren)
94 size_t numChilds = (size_t)parent->childCount() - numChildren;
96 for (
size_t j = 0; j < numChilds; ++j)
98 parent->removeChild(parent->child(parent->childCount() - 1));
108 if (i->getPath().size() == 0 ||
109 checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
114 adjustNumberOfChildren(aronTreeWidget, i->childrenSize());
118 for (
const auto& [key,
value] : i->getElements())
120 el->child(x)->setText(0, {key.c_str()});
128 el->setCheckState(2, Qt::CheckState::Checked);
137 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
141 adjustNumberOfChildren(aronTreeWidget, i->childrenSize());
144 for (
const auto&
value : i->getElements())
148 auto* currChild = el->child(x);
150 currChild->setText(0, listNum.c_str());
156 aronTreeWidget->setText(1, numElemsText);
158 auto currFont = aronTreeWidget->font(1);
159 currFont.setItalic(
true);
160 aronTreeWidget->setFont(1, currFont);
164 el->setCheckState(2, Qt::CheckState::Checked);
171 const std::shared_ptr<armarx::aron::type::Matrix>& matrixType,
175 auto elemType = matrixType->getElementType();
176 auto* rawData = arr->getData();
178 auto toString = [elemType, rawData](
size_t elementNr) -> std::string
182 case aron::type::matrix::ElementType::FLOAT32:
184 static_assert(
sizeof(
float) == 4);
185 float* interpreted =
reinterpret_cast<float*
>(rawData);
186 float laundered = std::launder(interpreted)[elementNr];
187 return usString<float>(laundered);
189 case aron::type::matrix::ElementType::FLOAT64:
191 static_assert(
sizeof(
double) == 8);
192 double* interpreted =
reinterpret_cast<double*
>(rawData);
193 float laundered = std::launder(interpreted)[elementNr];
194 return usString<double>(laundered);
196 case aron::type::matrix::ElementType::UINT8:
198 auto* interpreted =
reinterpret_cast<uint8_t*
>(rawData);
199 auto laudered = std::launder(interpreted)[elementNr];
200 return usString<>(laudered);
202 case aron::type::matrix::ElementType::UINT16:
204 auto* interpreted =
reinterpret_cast<uint16_t*
>(rawData);
205 auto laudered = std::launder(interpreted)[elementNr];
206 return usString<>(laudered);
208 case aron::type::matrix::ElementType::UINT32:
210 auto* interpreted =
reinterpret_cast<uint32_t*
>(rawData);
211 auto laudered = std::launder(interpreted)[elementNr];
212 return usString<>(laudered);
214 case aron::type::matrix::ElementType::INT8:
216 auto* interpreted =
reinterpret_cast<int8_t*
>(rawData);
217 auto laudered = std::launder(interpreted)[elementNr];
218 return usString<>(laudered);
220 case aron::type::matrix::ElementType::INT16:
222 int16_t* interpreted =
reinterpret_cast<int16_t*
>(rawData);
223 int16_t laudered = std::launder(interpreted)[elementNr];
224 return usString<int16_t>(laudered);
226 case aron::type::matrix::ElementType::INT32:
228 int32_t* interpreted =
reinterpret_cast<int32_t*
>(rawData);
229 int32_t laudered = std::launder(interpreted)[elementNr];
230 return usString<int32_t>(laudered);
232 case aron::type::matrix::ElementType::INT64:
234 int64_t* interpreted =
reinterpret_cast<int64_t*
>(rawData);
235 int64_t laudered = std::launder(interpreted)[elementNr];
236 return usString<int64_t>(laudered);
243 for (
size_t row = 0; (int)row < matrixType->getRows(); ++row)
245 for (
size_t col = 0; (int)col < matrixType->getCols(); ++col)
247 matrixWidget->
setText(row, col,
toString(col * matrixType->getRows() + row));
254 std::shared_ptr<armarx::aron::type::Quaternion>& quatType,
258 auto elemType = quatType->getElementType();
259 auto rawData = arr->getData();
260 auto shape = arr->getShape();
262 auto toString = [elemType, rawData](
size_t elementNr) -> std::string
266 case aron::type::quaternion::ElementType::FLOAT32:
268 static_assert(
sizeof(
float) == 4);
269 float* interpreted =
reinterpret_cast<float*
>(rawData);
270 float laundered = std::launder(interpreted)[elementNr];
271 return usString<float>(laundered);
273 case aron::type::quaternion::ElementType::FLOAT64:
275 static_assert(
sizeof(
double) == 8);
276 double* interpreted =
reinterpret_cast<double*
>(rawData);
278 float laundered = std::launder(interpreted)[elementNr];
279 return usString<double>(laundered);
284 for (
size_t i = 0; i < 4; ++i)
301 auto* rootWidget = el->treeWidget();
306 if (matrixCast && matrixWidget)
310 else if (quaternionCast && quaternionWidget)
317 <<
"we do not support raw NDArrays. Ask Fabian Peller for more information.";
322 el->setCheckState(2, Qt::CheckState::Checked);
330 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
334 auto newText = QString::fromStdString(usString<int>(i->getValue()));
338 enumWidget->setText(newText);
343 el->setText(1, newText);
348 el->setCheckState(2, Qt::CheckState::Checked);
357 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
360 el->setText(1, QString::fromStdString(usString<long>(i->getValue())));
364 el->setCheckState(2, Qt::CheckState::Checked);
372 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
375 std::string repr = usString<float>(i->getValue());
376 QString
qstr = QString::fromStdString(repr);
377 el->setText(1,
qstr);
380 el->setCheckState(2, Qt::CheckState::Checked);
389 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
392 el->setText(1, QString::fromStdString(usString<double>(i->getValue())));
396 el->setCheckState(2, Qt::CheckState::Checked);
405 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
408 el->setText(1, QString::fromStdString(usString<bool>(i->getValue())));
412 el->setCheckState(2, Qt::CheckState::Checked);
421 if (checkTreeWidgetItemForSimilarName(i->getPath().getLastElement()))
424 el->setText(1, QString::fromStdString(i->getValue()));
428 el->setCheckState(2, Qt::CheckState::Checked);
436 ARMARX_WARNING_S <<
"Received an unknown type when trying to set a skill argument type "
437 "from an aron data object.";