diff --git a/Sofa/Component/StateContainer/src/sofa/component/statecontainer/MechanicalObject.inl b/Sofa/Component/StateContainer/src/sofa/component/statecontainer/MechanicalObject.inl index 278f489da96..9499b8a7d1a 100644 --- a/Sofa/Component/StateContainer/src/sofa/component/statecontainer/MechanicalObject.inl +++ b/Sofa/Component/StateContainer/src/sofa/component/statecontainer/MechanicalObject.inl @@ -2632,8 +2632,12 @@ inline void MechanicalObject::drawIndices(const core::visual::VisualP { std::vector positions; positions.reserve(d_size.getValue()); - for (int i = 0; i readPositions(); + std::transform(positionData.begin(), positionData.end(), std::back_inserter(positions), [](const auto& p) + { + return sofa::type::toVec3(DataTypes::getCPos(p)); + }); vparams->drawTool()->draw3DText_Indices(positions, showIndicesScale.getValue(), d_color.getValue()); } @@ -2642,18 +2646,25 @@ template inline void MechanicalObject::drawVectors(const core::visual::VisualParams* vparams) { float scale = showVectorsScale.getValue(); - sofa::helper::ReadAccessor< Data > v_rA = *this->read(core::vec_id::read_access::velocity); + + const auto v_rA = sofa::helper::getReadAccessor(*this->read(core::vec_id::read_access::velocity)); + const auto x_rA = sofa::helper::getReadAccessor(*this->read(core::vec_id::read_access::position)); + type::vector points; points.resize(2); - for(Size i=0; i::draw(const core::visual::VisualParams* if (showObject.getValue()) { const float& scale = showObjectScale.getValue(); - type::vector positions(d_size.getValue()); - for (sofa::Index i = 0; i < Size(d_size.getValue()); ++i) - positions[i] = type::Vec3(getPX(i), getPY(i), getPZ(i)); + + std::vector positions; + positions.reserve(d_size.getValue()); + + const auto positionData = this->readPositions(); + std::transform(positionData.begin(), positionData.end(), std::back_inserter(positions), [](const auto& p) + { + return sofa::type::toVec3(DataTypes::getCPos(p)); + }); switch (drawMode.getValue()) {