20 #ifndef _SINGLE_CONTACT_H_
21 #define _SINGLE_CONTACT_H_
23 #include <mbsim/link_mechanics.h>
26 #ifdef HAVE_OPENMBVCPPINTERFACE
27 #include "mbsim/utils/boost_parameters.h"
28 #include "mbsim/utils/openmbv_utils.h"
33 class ContactKinematics;
34 class GeneralizedForceLaw;
35 class GeneralizedImpactLaw;
36 class FrictionForceLaw;
37 class FrictionImpactLaw;
38 class ContourPointData;
68 virtual void updatewb(
double t,
int i=0);
69 virtual void updateW(
double t,
int i=0);
70 virtual void updateV(
double t,
int i=0);
71 virtual void updateh(
double t,
int i=0);
72 virtual void updateg(
double t);
73 virtual void updategd(
double t);
74 virtual void updateStopVector(
double t);
75 virtual void updateJacobians(
double t,
int j=0);
84 virtual void calcxSize();
95 virtual void updateLinkStatus(
double dt);
96 virtual void updateLinkStatusReg(
double dt);
119 virtual std::string
getType()
const {
return "SingleContact"; }
120 virtual void plot(
double t,
double dt = 1);
124 #ifdef HAVE_OPENMBVCPPINTERFACE
131 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBVContactPoints, tag, (optional (size,(
double),1)(offset,(
double),1)(transparency,(
double),0))) {
132 OpenMBVFrame ombv(size,offset,
"[-1;1;1]",transparency);
133 setOpenMBVContactPoints(ombv.createOpenMBV());
135 void setOpenMBVContactPoints(
const boost::shared_ptr<OpenMBV::Frame> &
frame) {
136 openMBVContactFrame[0]=
frame;
145 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBVNormalForce, tag, (optional (scaleLength,(
double),1)(scaleSize,(
double),1)(referencePoint,(OpenMBV::Arrow::ReferencePoint),OpenMBV::Arrow::toPoint)(diffuseColor,(
const fmatvec::Vec3&),
"[-1;1;1]")(transparency,(
double),0))) {
146 OpenMBVArrow ombv(diffuseColor,transparency,OpenMBV::Arrow::toHead,referencePoint,scaleLength,scaleSize);
147 contactArrow=ombv.createOpenMBV();
149 void setOpenMBVNormalForce(
const boost::shared_ptr<OpenMBV::Arrow> &arrow) { contactArrow=arrow; }
158 BOOST_PARAMETER_MEMBER_FUNCTION( (
void), enableOpenMBVTangentialForce, tag, (optional (scaleLength,(
double),1)(scaleSize,(
double),1)(referencePoint,(OpenMBV::Arrow::ReferencePoint),OpenMBV::Arrow::toPoint)(diffuseColor,(
const fmatvec::Vec3&),
"[-1;1;1]")(transparency,(
double),0))) {
159 OpenMBVArrow ombv(diffuseColor,transparency,OpenMBV::Arrow::toHead,referencePoint,scaleLength,scaleSize);
160 frictionArrow=ombv.createOpenMBV();
162 void setOpenMBVTangentialForce(
const boost::shared_ptr<OpenMBV::Arrow> &arrow) { frictionArrow=arrow; }
166 void setNormalForceLaw(GeneralizedForceLaw *fcl_);
167 GeneralizedForceLaw * getNormalForceLaw()
const {
return fcl; }
168 void setNormalImpactLaw(GeneralizedImpactLaw *fnil_);
169 void setTangentialForceLaw(FrictionForceLaw *fdf_);
170 FrictionForceLaw * getTangentialForceLaw()
const {
return fdf;}
171 void setTangentialImpactLaw(FrictionImpactLaw *ftil_);
174 ContourPointData* & getcpData() {
return cpData; }
175 ContourPointData* getcpData()
const {
return cpData; }
206 void applyh(
double t,
int j);
210 virtual void initializeUsingXML(xercesc::DOMElement *element);
212 void calccorrSize(
int j);
213 void updatecorr(
int j);
315 #ifdef HAVE_OPENMBVCPPINTERFACE
319 boost::shared_ptr<OpenMBV::Group> openMBVContactGrp;
324 std::vector<boost::shared_ptr<OpenMBV::Frame> > openMBVContactFrame;
329 boost::shared_ptr<OpenMBV::Arrow> contactArrow, frictionArrow;
342 std::string saved_ref1, saved_ref2;
basic force law on acceleration level for constraint description
Definition: constitutive_laws.h:41
virtual void connect(Frame *frame_)
Definition: link_mechanics.cc:226
std::vector< Frame * > frame
array in which all frames are listed, connecting bodies via a link
Definition: link_mechanics.h:123
basic friction force law on velocity level for constraint description
Definition: constitutive_laws.h:547
InitStage
The stages of the initialization.
Definition: element.h:97
basic friction force law on acceleration level for constraint description
Definition: constitutive_laws.h:308
std::vector< fmatvec::Vec > r[2]
nonsmooth right hand side
Definition: link.h:570
basic force law on velocity level for constraint description
Definition: constitutive_laws.h:213
std::string name
name of element
Definition: element.h:290
struct for data-management for single point on a contour to describe contact kinematics ...
Definition: contour_pdata.h:38
general link to one or more objects
Definition: link_mechanics.h:48
static boost::shared_ptr< CreateType > create()