20#ifndef _FLEXIBLE_PLANAR_FFR_NURBS_CONTOUR_H_
21#define _FLEXIBLE_PLANAR_FFR_NURBS_CONTOUR_H_
23#include "mbsimFlexibleBody/contours/flexible_contour.h"
25#include "mbsim/utils/boost_parameters.h"
26#include <mbsimFlexibleBody/utils/openmbv_utils.h>
27#include <mbsim/numerics/nurbs/nurbs_curve.h>
30 class DynamicNurbsCurve;
37namespace MBSimFlexibleBody {
60 void init(
InitStage stage,
const MBSim::InitConfigSet &config)
override;
62 double getCurvature(
const fmatvec::Vec2 &zeta);
63 fmatvec::Vec3 evalWs_t(
const fmatvec::Vec2 &zeta)
override;
64 fmatvec::Vec3 evalWu_t(
const fmatvec::Vec2 &zeta)
override;
65 fmatvec::Vec3 evalPosition(
const fmatvec::Vec2 &zeta)
override;
66 fmatvec::Vec3 evalWs(
const fmatvec::Vec2 &zeta)
override;
67 fmatvec::Vec3 evalWt(
const fmatvec::Vec2 &zeta)
override;
68 fmatvec::Vec3 evalParDer1Ws(
const fmatvec::Vec2 &zeta);
69 fmatvec::Vec3 evalParDer1Wu(
const fmatvec::Vec2 &zeta)
override;
70 fmatvec::Vec3 evalParWvCParEta(
const fmatvec::Vec2 &zeta)
override;
71 fmatvec::Vec3 evalParWuPart(
const fmatvec::Vec2 &zeta)
override;
73 fmatvec::Vec3 evalKs_t(
const fmatvec::Vec2 &zeta);
74 fmatvec::Vec3 evalKu_t(
const fmatvec::Vec2 &zeta);
75 fmatvec::Vec3 evalKrPS(
const fmatvec::Vec2 &zeta);
76 fmatvec::Vec3 evalKs(
const fmatvec::Vec2 &zeta);
77 fmatvec::Vec3 evalKt(
const fmatvec::Vec2 &zeta);
78 fmatvec::Vec3 evalParDer1Ks(
const fmatvec::Vec2 &zeta);
79 fmatvec::Vec3 evalParDer1Ku(
const fmatvec::Vec2 &zeta);
84 void updateJacobians(
MBSim::Frame *frame,
int j=0)
override;
85 void updateGyroscopicAccelerations(
MBSim::Frame *frame)
override;
89 void setInterpolation(
bool interpolation_) { interpolation = interpolation_; }
90 void setNodeNumbers(
const fmatvec::VecVI &node) { index <<= node; }
91 void setKnotVector(
const fmatvec::VecV &knot_) { knot <<= knot_; }
92 void setDegree(
int degree_) { degree = degree_; }
97 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBV, MBSim::tag, (optional (diffuseColor,(
const fmatvec::Vec3&),
"[-1;1;1]")(transparency,(
double),0)(pointSize,(
double),0)(lineWidth,(
double),0))) {
98 OpenMBVDynamicNurbsCurve ombv(diffuseColor,transparency,pointSize,lineWidth);
99 openMBVNurbsCurve=ombv.createOpenMBV();
102 void initializeUsingXML(xercesc::DOMElement *element)
override;
104 bool isZetaOutside(
const fmatvec::Vec2 &zeta)
override;
106 void setOpen(
bool open_) { open = open_; }
108 void resetUpToDate()
override { updPos =
true; updVel =
true; }
111 double continueEta(
double eta_);
112 void updateHessianMatrix(
double eta);
113 void updateGlobalRelativePosition(
double eta);
114 void updateGlobalRelativeVelocity(
double eta);
115 const fmatvec::MatVx4& evalHessianMatrixPos(
double eta) {
if(fabs(eta-etaOld)>1e-13) updateHessianMatrix(eta);
return hessPos; }
116 const std::vector<fmatvec::MatVx4>& evalHessianMatrixPhi(
double eta) {
if(fabs(eta-etaOld)>1e-13) updateHessianMatrix(eta);
return hessPhi; }
117 const fmatvec::Vec3& evalGlobalRelativePosition(
double eta) {
if(updPos) updateGlobalRelativePosition(eta);
return WrPS; }
118 const fmatvec::Vec3& evalGlobalRelativeVelocity(
double eta) {
if(updVel) updateGlobalRelativeVelocity(eta);
return Wvrel; }
121 bool interpolation{
false};
122 fmatvec::VecVI index;
127 std::vector<MBSim::NurbsCurve> crvPhi;
128 double etaOld{-1e10};
129 fmatvec::MatVx4 hessPos;
130 std::vector<fmatvec::MatVx4> hessPhi;
131 fmatvec::Vec3 WrPS, Wvrel;
135 std::shared_ptr<OpenMBV::DynamicNurbsCurve> openMBVNurbsCurve;
flexible planar contour
Definition: flexible_contour.h:36
flexible planar nurbs contour with local interpolation
Definition: flexible_planar_ffr_nurbs_contour.h:43
~FlexiblePlanarFfrNurbsContour() override=default
destructor
FlexiblePlanarFfrNurbsContour(const std::string &name="")
constructor
Definition: flexible_planar_ffr_nurbs_contour.h:49