20#ifndef _FLEXIBLE_PLANAR_NURBS_CONTOUR_H_
21#define _FLEXIBLE_PLANAR_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);
64 fmatvec::Vec3 evalWs_t(
const fmatvec::Vec2 &zeta)
override;
65 fmatvec::Vec3 evalWu_t(
const fmatvec::Vec2 &zeta)
override;
66 fmatvec::Vec3 evalPosition(
const fmatvec::Vec2 &zeta)
override;
67 fmatvec::Vec3 evalWs(
const fmatvec::Vec2 &zeta)
override;
68 fmatvec::Vec3 evalWt(
const fmatvec::Vec2 &zeta)
override;
69 fmatvec::Vec3 evalParDer1Ws(
const fmatvec::Vec2 &zeta);
70 fmatvec::Vec3 evalParDer1Wu(
const fmatvec::Vec2 &zeta)
override;
71 fmatvec::Vec3 evalParWvCParEta(
const fmatvec::Vec2 &zeta)
override;
72 fmatvec::Vec3 evalParWuPart(
const fmatvec::Vec2 &zeta)
override;
77 void updateJacobians(
MBSim::Frame *frame,
int j=0)
override;
78 void updateGyroscopicAccelerations(
MBSim::Frame *frame)
override;
82 void setInterpolation(
bool interpolation_) { interpolation = interpolation_; }
83 void setNodeNumbers(
const fmatvec::VecVI &node) { index <<= node; }
84 void setKnotVector(
const fmatvec::VecV &knot_) { knot <<= knot_; }
85 void setDegree(
int degree_) { degree = degree_; }
90 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))) {
91 OpenMBVDynamicNurbsCurve ombv(diffuseColor,transparency,pointSize,lineWidth);
92 openMBVNurbsCurve=ombv.createOpenMBV();
95 void initializeUsingXML(xercesc::DOMElement *element)
override;
97 bool isZetaOutside(
const fmatvec::Vec2 &zeta)
override;
99 void setOpen(
bool open_) { open = open_; }
101 void resetUpToDate()
override { updCrvPos =
true; updCrvVel =
true; updCrvJac =
true; updCrvGA =
true; }
103 void updateCurvePositions();
104 void updateCurveVelocities();
105 void updateCurveJacobians();
106 void updateCurveGyroscopicAccelerations();
109 double continueEta(
double eta_);
110 void updateHessianMatrix(
double eta);
111 void updateHessianMatrix_t(
double eta);
112 const fmatvec::MatVx4& evalHessianMatrix(
double eta){
if(updCrvPos or fabs(eta-etaOld)>1e-13) updateHessianMatrix(eta);
return hess; }
113 const fmatvec::MatVx4& evalHessianMatrix_t(
double eta){ updateHessianMatrix_t(eta);
return hess_t; }
115 bool interpolation{
false};
116 fmatvec::VecVI index;
121 std::vector<MBSim::NurbsCurve> crvJac;
122 double etaOld{-1e10};
123 fmatvec::MatVx4 hess, hess_t, hessTmp;
124 bool updCrvPos{
true};
125 bool updCrvVel{
true};
126 bool updCrvJac{
true};
129 std::shared_ptr<OpenMBV::DynamicNurbsCurve> openMBVNurbsCurve;
flexible planar contour
Definition: flexible_contour.h:36
flexible planar nurbs contour
Definition: flexible_planar_nurbs_contour.h:43
FlexiblePlanarNurbsContour(const std::string &name="")
constructor
Definition: flexible_planar_nurbs_contour.h:49
~FlexiblePlanarNurbsContour() override=default
destructor