Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,11 @@ class SOFA_SOFABASECOLLISION_API BruteForceDetection final : public sofa::core::
static typename T::SPtr create(T*, sofa::core::objectmodel::BaseContext* context, sofa::core::objectmodel::BaseObjectDescription* arg)
{
BruteForceBroadPhase::SPtr broadPhase = sofa::core::objectmodel::New<BruteForceBroadPhase>();
broadPhase->setName(context->getNameHelper().resolveName(broadPhase->getClassName(), {}));
broadPhase->setName(context->getNameHelper().resolveName(broadPhase->getClassName(), core::ComponentNameHelper::Convention::python));
if (context) context->addObject(broadPhase);

BVHNarrowPhase::SPtr narrowPhase = sofa::core::objectmodel::New<BVHNarrowPhase>();
narrowPhase->setName(context->getNameHelper().resolveName(narrowPhase->getClassName(), {}));
narrowPhase->setName(context->getNameHelper().resolveName(narrowPhase->getClassName(), core::ComponentNameHelper::Convention::python));
if (context) context->addObject(narrowPhase);

typename T::SPtr obj = sofa::core::objectmodel::New<T>();
Expand Down
18 changes: 13 additions & 5 deletions SofaKernel/modules/SofaCore/src/sofa/core/ComponentNameHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,16 +26,24 @@
namespace sofa::core
{

std::string ComponentNameHelper::resolveName(const std::string& type, const std::string& name)
std::string ComponentNameHelper::resolveName(const std::string& type, const std::string& name, Convention convention)
{
if (name.empty())
{
const std::string radix = helper::NameDecoder::shortName(type);
std::ostringstream oss;
oss << radix << m_instanceCounter[radix]++;
return oss.str();
return resolveName(type, convention);
}
return name;
}

std::string ComponentNameHelper::resolveName(const std::string& type, Convention convention)
{
std::string radix = helper::NameDecoder::shortName(type);
if (convention == Convention::xml)
{
return radix + std::to_string((m_instanceCounter[radix]++) + 1);
}

return radix;
}

}//namespace sofa::core
15 changes: 13 additions & 2 deletions SofaKernel/modules/SofaCore/src/sofa/core/ComponentNameHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,24 @@ namespace sofa::core
{

/**
* Helper class to get a unique name for a component, based on a counter suffix.
* Helper class to name a component based on its type.
*
* Two conventions are available for legacy reasons:
* - XML: use a counter to add a unique suffix at the end of the name
* - Python: the short name of the type is returned
*/
class SOFA_CORE_API ComponentNameHelper
{
public:

std::string resolveName(const std::string& type, const std::string& name);
enum class Convention : char
{
xml,
python
};

std::string resolveName(const std::string& type, const std::string& name, Convention convention);
std::string resolveName(const std::string& type, Convention convention);

private:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ bool ObjectElement::initNode()
auto& objName = *obj->name.beginEdit();
if (objName.empty())
{
objName = ctx->getNameHelper().resolveName(obj->getClassName(), objName);
objName = ctx->getNameHelper().resolveName(obj->getClassName(), objName, sofa::core::ComponentNameHelper::Convention::xml);
}
obj->name.endEdit();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ void Simulation::init ( Node* root )
"Default Animation Manager Loop will be used. Add DefaultAnimationLoop to the root node of scene file to remove this warning";

DefaultAnimationLoop::SPtr aloop = sofa::core::objectmodel::New<DefaultAnimationLoop>(root);
aloop->setName(root->getNameHelper().resolveName(aloop->getClassName(), {}));
aloop->setName(root->getNameHelper().resolveName(aloop->getClassName(), sofa::core::ComponentNameHelper::Convention::python));
root->addObject(aloop,sofa::core::objectmodel::TypeOfInsertion::AtBegin);
}

Expand All @@ -175,7 +175,7 @@ void Simulation::init ( Node* root )
"Default Visual Manager Loop will be used. Add DefaultVisualManagerLoop to the root node of scene file to remove this warning";

DefaultVisualManagerLoop::SPtr vloop = sofa::core::objectmodel::New<DefaultVisualManagerLoop>(root);
vloop->setName(root->getNameHelper().resolveName(vloop->getClassName(), {}));
vloop->setName(root->getNameHelper().resolveName(vloop->getClassName(), sofa::core::ComponentNameHelper::Convention::python));
root->addObject(vloop,sofa::core::objectmodel::TypeOfInsertion::AtBegin);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ void FreeMotionAnimationLoop::parse ( sofa::core::objectmodel::BaseObjectDescrip

defaultSolver = sofa::core::objectmodel::New<constraintset::LCPConstraintSolver>();
defaultSolver->parse(arg);
defaultSolver->setName(defaultSolver->getContext()->getNameHelper().resolveName(defaultSolver->getClassName(), {}));
defaultSolver->setName(defaultSolver->getContext()->getNameHelper().resolveName(defaultSolver->getClassName(), core::ComponentNameHelper::Convention::python));
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,11 @@ class SOFA_SOFAGENERALMESHCOLLISION_API DirectSAP final : public sofa::core::obj
static typename T::SPtr create(T*, sofa::core::objectmodel::BaseContext* context, sofa::core::objectmodel::BaseObjectDescription* arg)
{
BruteForceBroadPhase::SPtr broadPhase = sofa::core::objectmodel::New<BruteForceBroadPhase>();
broadPhase->setName(context->getNameHelper().resolveName(broadPhase->getClassName(), {}));
broadPhase->setName(context->getNameHelper().resolveName(broadPhase->getClassName(), core::ComponentNameHelper::Convention::python));
if (context) context->addObject(broadPhase);

DirectSAPNarrowPhase::SPtr narrowPhase = sofa::core::objectmodel::New<DirectSAPNarrowPhase>();
narrowPhase->setName(context->getNameHelper().resolveName(narrowPhase->getClassName(), {}));
narrowPhase->setName(context->getNameHelper().resolveName(narrowPhase->getClassName(), core::ComponentNameHelper::Convention::python));
if (context) context->addObject(narrowPhase);

typename T::SPtr obj = sofa::core::objectmodel::New<T>();
Expand Down
4 changes: 2 additions & 2 deletions modules/SofaGuiCommon/src/sofa/gui/BaseViewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ bool BaseViewer::load()
if (!currentCamera)
{
currentCamera = sofa::core::objectmodel::New<component::visualmodel::InteractiveCamera>();
currentCamera->setName(groot->getNameHelper().resolveName(currentCamera->getClassName(), {}));
currentCamera->setName(groot->getNameHelper().resolveName(currentCamera->getClassName(), sofa::core::ComponentNameHelper::Convention::python));
groot->addObject(currentCamera);
//currentCamera->p_position.forceSet();
//currentCamera->p_orientation.forceSet();
Expand All @@ -219,7 +219,7 @@ bool BaseViewer::load()
if (!visualStyle)
{
visualStyle = sofa::core::objectmodel::New<component::visualmodel::VisualStyle>();
visualStyle->setName(groot->getNameHelper().resolveName(visualStyle->getClassName(), {}));
visualStyle->setName(groot->getNameHelper().resolveName(visualStyle->getClassName(), sofa::core::ComponentNameHelper::Convention::python));

core::visual::DisplayFlags* displayFlags = visualStyle->displayFlags.beginEdit();
displayFlags->setShowVisualModels(sofa::core::visual::tristate::true_value);
Expand Down