Go to the documentation of this file.
25 #include <SimoxUtility/algorithm/string/string_conversion_eigen.h>
26 #include <SimoxUtility/algorithm/string/string_tools.h>
38 #define INPUT_GUARD(i) \
40 ARMARX_CHECK_NOT_NULL(i); \
47 std::string result =
"";
49 namespaces.begin(), namespaces.end(), [&result](
const auto& i) { result += i +
"."; });
62 property_user_->getProperty(
value->getValue(), name);
71 property_user_->getProperty(
value->getValue(), name);
80 property_user_->getProperty(
value->getValue(), name);
89 property_user_->getProperty(
value->getValue(), name);
97 auto name = global_namespace_ +
pathToName(
string);
98 auto property = property_user_->getProperty<std::string>(name);
99 if (not property.getValue().empty())
101 value->getValue() =
property.getValueAndReplaceAllVars();
105 value->getValue() =
"";
114 const auto& name = global_namespace_ +
pathToName(o);
116 if (
std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) ==
117 implementedListDescriptors.end())
123 auto get_list = [
this, &name]() -> std::vector<std::string>
126 property_user_->getProperty(
list, name);
130 std::vector<std::string> vector = get_list();
131 std::for_each(vector.begin(),
133 [&old_list, &i, &type](
const auto& el)
135 old_list->addElement(factories::VariantHelper::make(type)->from_string(
136 el, old_list->getPath().withIndex(i)));
152 auto name = global_namespace_ +
pathToName(enumData);
153 property_user_->getProperty(
data->getValue(), name);
160 << (unknown ? unknown->getFullName() :
"nullptr");
165 const std::string& globalNamespace) :
167 global_namespace_(globalNamespace),
177 const auto& name = global_namespace_ +
pathToName(o);
179 if (
std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) ==
180 implementedListDescriptors.end())
186 auto get_list = [
this, &name]() -> std::vector<std::string>
189 property_user_->getProperty(
list, name);
192 std::vector<std::string> vector = get_list();
196 [&old_dict, &type](
const auto& el)
198 auto key_value = simox::alg::split(el,
":");
199 old_dict->addElement(
201 factories::VariantHelper::make(type)->from_string(
202 key_value.back(), old_dict->getPath().withElement(key_value.front())));
254 const auto name = global_namespace_ +
pathToName(matrix);
255 const std::string
property = property_user_->getProperty<std::string>(name).getValue();
256 const auto vec = simox::alg::to_eigen_vec(property,
", ");
258 <<
"Matrix recovered from properties does not match the aron type";
260 data->setData(
data->getDataAsVector().size(),
261 reinterpret_cast<const unsigned char*
>(vec.data()));
269 auto name = global_namespace_ +
pathToName(quaternion);
270 const std::string
property = property_user_->getProperty<std::string>(name).getValue();
273 value->setData(newQuat->getDataAsVector().size(), newQuat->getData());
280 if (global_namespace_.empty())
283 global_namespace_ = t->getObjectNameWithoutNamespace() +
".";
289 const std::string& globalNamespace) :
291 global_namespace_(globalNamespace)
300 auto name = global_namespace_ +
pathToName(i);
301 property_definitions_->defineOptionalProperty<
int>(name, i->getValue());
309 auto name = global_namespace_ +
pathToName(f);
310 property_definitions_->defineOptionalProperty<
float>(name, f->getValue());
318 auto name = global_namespace_ +
pathToName(d);
319 property_definitions_->defineOptionalProperty<
double>(name, d->getValue());
327 auto name = global_namespace_ +
pathToName(b);
328 property_definitions_->defineOptionalProperty<
bool>(name, b->getValue());
336 auto name = global_namespace_ +
pathToName(
string);
337 property_definitions_->defineOptionalProperty<std::string>(name,
string->getValue());
345 auto name = global_namespace_ +
pathToName(i);
346 property_definitions_->defineOptionalProperty<
int>(name, i->getValue())
347 .map(t->getAcceptedValueMap());
357 const auto& name = global_namespace_ +
pathToName(l);
358 const auto& type = t->getAcceptedType()->getDescriptor();
359 if (
std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) ==
360 implementedListDescriptors.end())
364 const auto&
input = l->getElements();
366 std::vector<std::string> vector;
369 std::back_inserter(vector),
370 [&type](
const auto& el)
371 { return factories::VariantHelper::make(type)->to_string(el); });
373 property_definitions_->defineOptionalProperty<std::string>(name,
str);
389 const auto& name = global_namespace_ +
pathToName(d);
390 const auto& type = t->getAcceptedType()->getDescriptor();
391 if (
std::find(implementedListDescriptors.begin(), implementedListDescriptors.end(), type) ==
392 implementedListDescriptors.end())
396 const auto&
input = d->getElements();
397 std::stringstream ss;
398 for (
const auto& [key, el] :
input)
404 std::string
value = ss.str();
405 if (not
value.empty())
409 property_definitions_->defineOptionalProperty<std::string>(name,
value);
424 if (global_namespace_.empty())
426 global_namespace_ = type->getObjectNameWithoutNamespace() +
".";
435 auto name = global_namespace_ +
pathToName(quaternion);
437 data::converter::AronEigenConverter::ConvertToQuaternion<float>(quaternion);
438 property_definitions_->defineOptionalProperty<std::string>(
447 auto name = global_namespace_ +
pathToName(matrix);
448 auto shape = matrix->getShape();
450 if (shape.size() != 3 or (shape[0] != 1 and shape[1] != 1))
455 const auto mat = data::converter::AronEigenConverter::ConvertToMatrix<float>(*matrix);
456 std::string
value =
"";
457 for (
int i = 0; i < shape[0]; i++)
459 for (
int j = 0; j < shape[1]; j++)
464 if (not
value.empty())
469 property_definitions_->defineOptionalProperty<std::string>(name,
value);
std::shared_ptr< class Matrix > MatrixPtr
void visitListOnEnter(DataInput &elementData, TypeInput &elementType) override
std::map< std::string, std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type > > getObjectElements(DataInputT &o, TypeInputT &t)
type::Descriptor getDescriptor(DataInput &o, TypeInput &t) override
void visitAronVariant(const data::IntPtr &, const type::IntEnumPtr &) override
std::vector< std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type > > getTupleElements(DataInputT &o, TypeInputT &t)
void visitInt(DataInput &elementData, TypeInput &elementType) override
PropertyDefinitionSetterVisitor(const armarx::PropertyDefinitionsPtr &defs, const std::string &global_namespace="")
list(APPEND SOURCES ${QT_RESOURCES}) set(COMPONENT_LIBS ArmarXGui ArmarXCoreObservers ArmarXCoreEigen3Variants PlotterController $
void visitMatrix(DataInput &elementData, TypeInput &elementType) override
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
static data::NDArrayPtr ConvertFromQuaternion(const Eigen::Quaternion< T > &quat)
static auto make(const type::Descriptor &s, Args &&... args)
std::map< std::string, std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type > > getDictElements(DataInputT &o, TypeInputT &t)
void visitAronVariantOnEnter(const data::ListPtr &, const type::ListPtr &) override
observer_ptr< _Tp > make_observer(_Tp *__p) noexcept
std::map< std::string, std::pair< DataInputNonConst, TypeInputNonConst > > MapElements
std::shared_ptr< NDArray > NDArrayPtr
std::shared_ptr< Double > DoublePtr
PairElements getPairElements(DataInput &o, TypeInput &t) override
std::pair< std::pair< DataInputNonConst, TypeInputNonConst >, std::pair< DataInputNonConst, TypeInputNonConst > > PairElements
static PointerType DynamicCastAndCheck(const VariantPtr &n)
std::shared_ptr< class Float > FloatPtr
PropertyDefinitionGetterVisitor(const armarx::PropertyUser &defs, const std::string &global_namespace="")
const VariantTypeId Quaternion
void visitString(DataInput &elementData, TypeInput &elementType) override
static PointerType DynamicCast(const VariantPtr &n)
void visitAronVariantOnExit(const data::ListPtr &, const type::ListPtr &) override
void visitIntEnum(DataInput &elementData, TypeInput &elementType) override
std::shared_ptr< class List > ListPtr
void visitUnknown(DataInput &elementData, TypeInput &elementType) override
std::shared_ptr< Value > value()
std::shared_ptr< class String > StringPtr
typename TypedVisitorBase< data::VariantPtr, const type::VariantPtr >::TypeInput TypeInput
void visitFloat(DataInput &elementData, TypeInput &elementType) override
static List & DynamicCast(Variant &n)
ReaderT::InputType & input
MapElements getObjectElements(DataInput &o, TypeInput &t) override
void visitObjectOnEnter(DataInput &elementData, TypeInput &elementType) override
std::shared_ptr< class Dict > DictPtr
void visitDouble(DataInput &elementData, TypeInput &elementType) override
void visitDictOnEnter(DataInput &elementData, TypeInput &elementType) override
TupleElements getTupleElements(DataInput &o, TypeInput &t) override
std::shared_ptr< class Bool > BoolPtr
VariantPtr getAcceptedType() const
const std::string & to_string(const std::string &s)
typename TypedVisitorBase< data::VariantPtr, const type::VariantPtr >::DataInput DataInput
auto transform(const Container< InputT, Alloc > &in, OutputT(*func)(InputT const &)) -> Container< OutputT, typename std::allocator_traits< Alloc >::template rebind_alloc< OutputT >>
Convenience function (with less typing) to transform a container of type InputT into the same contain...
std::pair< std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type >, std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type > > getPairElements(DataInputT &o, TypeInputT &t)
std::shared_ptr< Dict > DictPtr
void visitBool(DataInput &elementData, TypeInput &elementType) override
std::vector< std::pair< typename std::remove_const< DataInputT >::type, typename std::remove_const< TypeInputT >::type > > getListElements(DataInputT &o, TypeInputT &t)
void visitListOnExit(DataInput &elementData, TypeInput &elementType) override
MapElements getDictElements(DataInput &o, TypeInput &t) override
std::string pathToName(const std::shared_ptr< data::Variant > &v)
constexpr std::size_t find(string_view str, char_type c) noexcept
static std::shared_ptr< Object > DynamicCastAndCheck(const VariantPtr &n)
void visitQuaternion(DataInput &elementData, TypeInput &elementType) override
std::shared_ptr< Float > FloatPtr
VariantPtr getAcceptedType() const
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > ListElements
std::shared_ptr< String > StringPtr
std::shared_ptr< IntEnum > IntEnumPtr
std::shared_ptr< Object > ObjectPtr
std::shared_ptr< Int > IntPtr
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
Abstract PropertyUser class.
std::shared_ptr< class Quaternion > QuaternionPtr
std::shared_ptr< class Int > IntPtr
void visitDictOnExit(DataInput &elementData, TypeInput &elementType) override
std::shared_ptr< class Double > DoublePtr
std::string joinNamespaces(const std::vector< std::string > &namespaces)
ListElements getListElements(DataInput &o, TypeInput &t) override
std::shared_ptr< List > ListPtr
static type::Descriptor GetDescriptor(DataInput &i, TypeInput &j)
std::vector< std::string > split(const std::string &source, const std::string &splitBy, bool trimElements=false, bool removeEmptyElements=false)
std::vector< std::pair< DataInputNonConst, TypeInputNonConst > > TupleElements
std::shared_ptr< Bool > BoolPtr