20#ifndef _FLEXIBLE_BAND_H_
21#define _FLEXIBLE_BAND_H_
23#include "mbsimFlexibleBody/contours/contour1s.h"
24#include "mbsimFlexibleBody/utils/contact_utils.h"
25#include "mbsim/utils/eps.h"
27#include <openmbvcppinterface/spineextrusion.h>
28#include "mbsim/utils/boost_parameters.h"
29#include <mbsim/utils/openmbv_utils.h>
35 BOOST_PARAMETER_NAME(numberOfSpinePoints)
39namespace MBSimFlexibleBody {
50 void init(
InitStage stage,
const MBSim::InitConfigSet &config)
override;
56 void setWidth(
double width_) {
width = width_; }
57 double getWidth()
const {
return width; }
59 void setRelativePosition(
const fmatvec::Vec2 &r);
60 void setRelativeOrientation(
double al);
62 const fmatvec::Vec3& getRelativePosition()
const {
return RrRP; }
63 const fmatvec::SqrMat3& getRelativeOrientation()
const {
return ARK; }
65 fmatvec::Vec3 evalPosition(
const fmatvec::Vec2 &zeta)
override {
return evalPosition(zeta(0)); }
66 fmatvec::Vec3 evalWs(
const fmatvec::Vec2 &zeta)
override {
return evalWs(zeta(0)); }
67 fmatvec::Vec3 evalWt(
const fmatvec::Vec2 &zeta)
override {
return evalWt(zeta(0)); }
68 fmatvec::Vec3 evalWu(
const fmatvec::Vec2 &zeta)
override {
return evalWs(zeta); }
69 fmatvec::Vec3 evalWv(
const fmatvec::Vec2 &zeta)
override {
return evalWt(zeta); }
71 bool isZetaOutside(
const fmatvec::Vec2 &zeta)
override;
73 void updatePositions(
double s);
75 fmatvec::Vec3 evalPosition(
double s) {
if(fabs(s-sOld)>MBSim::macheps) updatePositions(s);
return WrOP; }
76 fmatvec::Vec3 evalWs(
double s) {
if(fabs(s-sOld)>MBSim::macheps) updatePositions(s);
return Ws; }
77 fmatvec::Vec3 evalWt(
double s) {
if(fabs(s-sOld)>MBSim::macheps) updatePositions(s);
return Wt; }
81 void setContourOfReference(
Contour1s *contour_) { contour = contour_; }
83 MBSim::ContactKinematics * findContactPairingWith(
const std::type_info &type0,
const std::type_info &type1)
override {
return findContactPairingFlexible(type0, type1); }
85 void setNodes(
const std::vector<double> &nodes_) { etaNodes = nodes_; }
87 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBV, MBSim::tag, (optional (numberOfSpinePoints,(
int),10)(diffuseColor,(
const fmatvec::Vec3&),
"[-1;1;1]")(transparency,(
double),0))) {
88 openMBVSpineExtrusion = OpenMBV::ObjectFactory::create<OpenMBV::SpineExtrusion>();
89 openMBVSpineExtrusion->setNumberOfSpinePoints(numberOfSpinePoints);
92 void resetUpToDate()
override;
100 fmatvec::Vec3 RrRP, WrOP, Ws, Wt;
101 fmatvec::SqrMat3 ARK;
107 std::shared_ptr<OpenMBV::SpineExtrusion> openMBVSpineExtrusion;
basic class for contours described by one contour parameter
Definition: contour1s.h:35
Contour1s(const std::string &name)
constructor
Definition: contour1s.h:41
Definition: flexible_band.h:41
FlexibleBand(const std::string &name)
constructor
Definition: flexible_band.h:47
double width
width of flexible band
Definition: flexible_band.h:98