37 this->originalCSpace = cspace;
38 this->scalingFactors = scale;
39 unscaled.resize(scalingFactors.size());
41 if (
static_cast<std::size_t
>(originalCSpace->getDimensionality()) != scalingFactors.size())
44 s <<
"Different number of scaling factors (" << scalingFactors.size()
45 <<
") than dimensionality of the original cspace("
46 << originalCSpace->getDimensionality() <<
")";
48 throw std::invalid_argument{s.str()};
52 scalingFactors.begin(), scalingFactors.end(), [](
float f) { return f <= 0.f; }))
55 throw std::invalid_argument{
"One or more factors are <= 0!"};
81 for (
auto& cfg : nodes)
91 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
93 config.at(i) *= scalingFactors.at(i);
100 for (
auto& cfg : path.nodes)
111 static_cast<std::size_t
>(std::distance(cfg.first, cfg.second)));
113 return originalCSpace->isCollisionFree(
114 std::make_pair(unscaled.data(), unscaled.data() + unscaled.size()));
121 cloned->scalingFactors = scalingFactors;
122 cloned->originalCSpace = originalCSpace->clone();
129 FloatRangeSeq bounds = originalCSpace->getDimensionsBounds();
131 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
133 bounds.at(i).min *= scalingFactors.at(i);
134 bounds.at(i).max *= scalingFactors.at(i);
145 for (std::size_t i = 0; i < scalingFactors.size(); ++i)
147 buffer.at(i) = cfg[i] / scalingFactors.at(i);
virtual void unscaleConfig(VectorXf &config) const
CSpaceBasePtr clone(const Ice::Current &=Ice::emptyCurrent) override
FloatRangeSeq getDimensionsBounds(const Ice::Current &=Ice::emptyCurrent) const override
virtual void unscalePath(Path &path) const
ScaledCSpace(const CSpaceBasePtr &cspace, const Ice::FloatSeq &scale)
ctor.
ScaledCSpace()=default
Default ctor.
void unscaleToBuffer(const Ice::Float *cfg, VectorXf &buffer) const
Unscales the given configuration to a buffer.
virtual void scalePath(Path &path) const
virtual void scaleConfig(VectorXf &config) const
bool isCollisionFree(const ::std::pair< const Ice::Float *, const Ice::Float * > &cfg, const Ice::Current &=Ice::emptyCurrent) override
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
#define ARMARX_ERROR_S
The logging level for unexpected behaviour, that must be fixed.
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< ScaledCSpace > ScaledCSpacePtr
An ice handle to a ScaledCSpace.