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
36 changes: 29 additions & 7 deletions src/InfinyToolkit/InteractionTools/GrasperJawModel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ typedef sofa::core::behavior::MechanicalState< sofa::defaulttype::Vec3Types > me
GrasperJawModel::GrasperJawModel()
: BaseJawModel()
, d_stiffness(initData(&d_stiffness, SReal(100.0), "stiffness", "jaw speed factor."))
, l_springFF(initLink("springFF", "link to the spring forcefield used to mimic grasping interaction."))
{
}

Expand Down Expand Up @@ -87,7 +88,9 @@ void GrasperJawModel::performAction()
void GrasperJawModel::stopAction()
{
// clean springs
m_forcefield->clear();
if (l_springFF.get())
l_springFF.get()->clear();

m_rawIds.clear();
//activateImpl();
}
Expand Down Expand Up @@ -115,20 +118,39 @@ void GrasperJawModel::stopSecondaryAction()

int GrasperJawModel::createStiffSpringFF()
{
std::cout << this->getName() << " + createStiffSpringFF()" << std::endl;
if (m_jaw == nullptr)
{
msg_error() << " Error createStiffSpringFF, no jaw model";
return 0;
}

if (m_target == nullptr)
{
msg_error() << " Error createStiffSpringFF, no valid m_target";
return 0;
}

SpringFF* stiffspringforcefield = l_springFF.get();
if (stiffspringforcefield == nullptr)
{
msg_error() << " Error createStiffSpringFF, no valid spring force field";
return 0;
}

m_forcefield = sofa::core::objectmodel::New<SpringFF>(dynamic_cast<mechaState*>(m_jaw), dynamic_cast<mechaState*>(m_target));
SpringFF* stiffspringforcefield = static_cast<SpringFF*>(m_forcefield.get());
stiffspringforcefield->setName(this->getName() + "_SpringFF");
m_target->getContext()->addObject(stiffspringforcefield);

return 1;
}


void GrasperJawModel::addJawSprings()
{
SpringFF* stiffspringforcefield = static_cast<SpringFF*>(m_forcefield.get());
SpringFF* stiffspringforcefield = l_springFF.get();
if (stiffspringforcefield == nullptr)
{
msg_error() << " Error addJawSprings, no valid spring force field";
return;
}

SReal stiffness = d_stiffness.getValue();

for (GrabContactInfo* cInfo : m_contactInfos)
Expand Down
5 changes: 2 additions & 3 deletions src/InfinyToolkit/InteractionTools/GrasperJawModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,15 @@ class SOFA_INFINYTOOLKIT_API GrasperJawModel : public BaseJawModel
void performSecondaryAction() override;
/// Main API public method to stop the action of the Jaw
void stopSecondaryAction() override;

Data<SReal> d_stiffness;
SingleLink<GrasperJawModel, SpringFF, BaseLink::FLAG_STOREPATH | BaseLink::FLAG_STRONGLINK> l_springFF;

protected:
bool initImpl() override;
int createStiffSpringFF();
void addJawSprings();

private:
SpringFF::SPtr m_forcefield = nullptr;
};

} // namespace sofa::infinytoolkit
Expand Down
Loading