Constraints#

Defines constraint components for multibody dynamics modeling.

In multibody simulation, constraints are mathematical rules that define the allowable motion between bodies. They restrict or limit the relative movement between bodies, typically through joints or other connection elements. Understanding and applying constraints is crucial for accurately modeling and simulating the behavior of multibody systems.

This module provides the infrastructure to define, configure, and validate constraint elements, supporting both built-in and user-defined formulations.

For a complete overview of all the modeling entities and how components integrate, refer back to the msolve.Model module.

class Constraint#

Base class for constraint objects.

The objects derived from Constraint are:

out_proc#

Type=Bool, Default=False

virtual#

Defines whether the constraint is virtual or regular.

Type=Bool, Default=False

class Coupler(**kwds)#
Defines an algebraic relationship between the degrees of freedom of two or three joints.

This constraint element may be used to model idealized spur gears, rack and pinion gears, and differentials as simple constraints that relate the displacements in a set of Joint.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

function

Function

id

Int

Auto

joints

Reference - Joint [3]

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

routine

Routine

scales

Double [3]

[1.0, 0.0, 0.0]

\(\checkmark\)

\(\checkmark\)

script

Script

type

EnumStr [3]

\(\checkmark\)

virtual

Bool

False

See also

For more details, see also Constraint: Coupler.

User Subroutine

The following user subroutine template expects the function signature and return value(s) as shown. Note that this is a placeholder implementation for reference purposes only.

def COUSUB(id, time, par, npar, disp, ndisp, iflag):
  phi = 0.0   # calculate the scalar output value of the coupler `phi`
  return phi

def COUXX(id, time, par, npar, disp, ndisp, iflag):
  dfda = 2 * [0.0]  # calculate the partial derivative of `phi` with respect to the displacement `disp`
  return dfda

def COUXX2(id, time, par, npar, disp, ndisp, iflag):
  d2fda2 = 2 * [0.0]  # calculate the second partial derivative of `phi` with respect to the displacement `disp`
  return d2fda2

For more information, see MotionSolve Subroutines.

function#

Parameters passed to user defined subroutine.

Info

This attribute is mutually exclusive with scales.

Type=Function

joints#

List of joints used to define constraint relationship.

Type=Reference (Joint) [3], Required, Modifiable

routine#

The value can be a callable Python function, a Matlab/OML script, or a string that includes the name of a DLL/SO file and the corresponding function name, separated by ‘::’. The order of the user subroutines is fixed and must be ‘cousub’, ‘couxx’ and ‘couxx2’

Type=Routine

scales#

Scale factors defining the constraint associated with a coupler.

Info

This attribute is mutually exclusive with function.

Type=Double [3], Default=[1.0, 0.0, 0.0], Modifiable, Designable

script#

Path and name of the script that contains the routine.

Type=Script

type#

Freedom type used for the respective joints.

Type=EnumStr [3], Modifiable

Permitted values are:

  • R

  • T

class Cvcv(**kwds)#
Defines a (Curve to Curve) higher pair constraint.

The constraint consists of a 3D Curve fixed on one body rolling and sliding on a 3D Curve fixed on a second body. The curves are required to have a unique point of contact and a common tangent at that point of contact.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

icurve

Reference - Curve

\(\checkmark\)

id

Int

Auto

irm

Reference - Marker

\(\checkmark\)

jcurve

Reference - Curve

\(\checkmark\)

jrm

Reference - Marker

\(\checkmark\)

label

Str

name

Str

no_slip

Bool

False

virtual

Bool

False

Example

Create a Curve to Curve constraint.#
from msolve import *

model = Model(output="cvcv")

ground = Part(ground=True)
global_ref = Marker(body=ground)
Units(length="MILLIMETER")
Accgrav(kgrav=-9810)

body0 = Part(mass=10,ip=[1e3,700,500,0,0,0])
body0.cm = Marker(qp=[229.61,0.0,554.328],zv=[0,0,1], xv=[1,0,0])

body1 = Part(mass=50,ip=[5e3,10e3,5e3])
body1.cm = Marker(qp=[0,0,0],zv=[0,0,1], xv=[1,0,0])

jrev1 = Joint(type="REVOLUTE")
jrev1.i = Marker(label="joint 1-marker i",body=ground,qp=[0,0,-300],zv=[0,1,0])
jrev1.j = Marker(label="joint 1-marker j",body=body1,qp=[0,0,-300],zv=[0,1,0])

curve_1 = Curve(closed=True,minpar=-1,maxpar=1, function="user(100)", routine = "ms_csubdll::CURSUB")
curve_2 = Curve(closed=True,minpar=-1,maxpar=1, function="user(500)", routine = "ms_csubdll::CURSUB")

cvcv = Cvcv(icurve=curve_1, irm=body0.cm, jcurve=curve_2, jrm=body1.cm)

See also

For more details, see also Constraint: CVCV.

icurve#

Curve that contains the first curve definition.

Type=Reference (Curve), Required

irm#

Coordinate system in which the icurve points are defined.

Type=Reference (Marker), Required

jcurve#

Curve that contains the second curve definition.

Type=Reference (Curve), Required

jrm#

Coordinate system in which the jcurve points are defined.

Type=Reference (Marker), Required

no_slip#

Specifies if slip or slide is allowed between the two curves.

Type=Bool, Default=False

class Cvsf(**kwds)#
Defines a (Curve to Surface) higher pair constraint.

A Curve on one body slides on a Surface that is fixed to a second body. The curve is not allowed to lift off the surface.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

curve

Reference - Curve

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

idisp

Double [3]

[0, 0, 0]

\(\checkmark\)

irm

Reference - Marker

\(\checkmark\)

\(\checkmark\)

jdisp

Double [3]

[0, 0, 0]

\(\checkmark\)

jrm

Reference - Marker

\(\checkmark\)

label

Str

name

Str

no_slip

Bool

False

surface

Reference - Surface

\(\checkmark\)

\(\checkmark\)

virtual

Bool

False

Example

Create a Curve to Surface constraint.#
from msolve import *

model = Model(output="cvsf")

ground = Part(ground=True)
global_frame = Marker(part=ground)
Units(length="MILLIMETER")
Accgrav(kgrav=-9810)

part1 = Part (mass=1, ip=[1e3,1e3,1e3], cm=Marker(qp=[100,0,200], zv=[0,0,1]))
part2 = Part (mass=1, ip=[1e3,1e3,1e3], cm=Marker())

cv = Curve(closed   = True,
           minpar   = -1,
           maxpar   = 1,
           function = "USER(100)",
           routine  = "ms_csubdll::CURSUB")

sf = Surface(uclosed   = True,
             vclosed   = True,
             minpar    = [-1,-1],
             maxpar    = [1,1],
             function  = "USER(2,500)",
             routine   = "ms_csubdll::SURSUB")

cvsf = Cvsf(curve=cv,irm=part2.cm,surface=sf,jrm=part1.cm)

See also

For more details, see also Constraint: CVSF.

curve#

Reference to an existing Curve in the model.

Type=Reference (Curve), Required, Modifiable

idisp#

A guess for the initial contact point on the curve.

Type=Double [3], Default=[0, 0, 0], Designable

irm#

Coordinate system for the definition of the curve.

Type=Reference (Marker), Required, Modifiable

jdisp#

A guess for the initial contact point on the surface.

Type=Double [3], Default=[0, 0, 0], Designable

jrm#

Coordinate system for the definition of the surface.

Type=Reference (Marker), Required

no_slip#

Specifies if slip or slide is allowed between the curve and the surface.

Type=Bool, Default=False

surface#

Reference to an existing Surface in the model.

Type=Reference (Surface), Required, Modifiable

class Gcon(**kwds)#
Specifies a user defined general constraint.

Your constraint equations may involve position as well as velocity measures of the system. Although MotionSolve provides a large set of constraints to choose from (see Joint), there are situations that require non-standard constraints. For example, the constraint that a wheel rolls without slipping is a non-holonomic constraint that can be modeled using the GCON element.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

function

Function

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

routine

Routine

script

Script

virtual

Bool

False

Example

Create a general constraint.#
from msolve import *

model = Model(output="gcon")

Units(length="MILLIMETER")

ground = Part(ground=True)
global_ref = Marker(body=ground)

wheel = Part(mass=1.5, ip=[2.5e3, 2.5e3, 5e3])
wheel.radius = 80
wheel.cm = Marker(qp=[0, wheel.radius, 0], zv=[0,0,1], xv=[1,0,0])

gcon = Gcon(function=f"VX({wheel.cm.id})+{wheel.radius}*WZ({wheel.cm.id})")

See also

For more details, see also Constraint: General.

User Subroutine

The following user subroutine template expects the function signature and return value(s) as shown. Note that this is a placeholder implementation for reference purposes only.

def GCOSUB(id, time, par, npar, dflag, iflag):
  # calculate the value of the constraint
  value = 0.0
  return value

For more information, see MotionSolve Subroutines.

function#

Parameters passed to user defined subroutine or a legal MotionSolve expression that defines the general constraint.

Type=Function, Required

routine#

The value can be a callable Python function, a Matlab/OML script, or a string that includes the name of a DLL/SO file and the corresponding function name, separated by ‘::’.

Type=Routine

script#

Path and name of the script that contains the routine.

Type=Script

class Gear(**kwds)#
Defines a gear constraint between two bodies.

The gear is modeled as an algebraic relationship between input and output displacements between Joint. The inputs and outputs may be either rotational or translational. This allows spur, helical, bevel, and rack-and-pinion gear sets to be modeled.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

cv

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

joints

Reference - Joint [2]

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

virtual

Bool

False

See also

For more details, see also Constraint: Gear.

cv#

Marker whose origin defines the contact point.

Type=Reference (Marker), Required, Modifiable

joints#

Two joints coupled by the gear constraint.

Type=Reference (Joint) [2], Required, Modifiable

class Joint(**kwds)#
Creates an idealized connector between two bodies.

Joint defines a set of lower pair constraints. Physically, the joint consists of two mating surfaces that allow relative translational and/or rotational movement in certain specific directions only. The surfaces are abstracted away, and the relationships are always expressed as a set of algebraic constraint equations between points and directions on two bodies.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

ic

Double [2]

\(\checkmark\)

icrot

Double [2]

\(\checkmark\)

ictran

Double [2]

\(\checkmark\)

id

Int

Auto

j

Reference - Marker

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

pd

Double

0.0

\(\checkmark\)

\(\checkmark\)

pitch

Double

0.0

\(\checkmark\)

\(\checkmark\)

type

Enum

\(\checkmark\)

SPHERICAL

virtual

Bool

False

Example

Create a Joint.#
from msolve import *

model = Model(output="joint")

Units(system="MKS")
ground = Part(ground=True)
global_ref = Marker(body=ground)

body = Part(mass=5.0, ip=[1]*3, cm=Marker(qp=[0,0,0]))

sph_joint = Joint(type="SPHERICAL", i=body.cm, j=global_ref)

See also

For more details, see also Constraint: Joint.

i#

Reference Marker that defines the connection on the first body.

Type=Reference (Marker), Required, Modifiable

ic#

Initial velocity and displacement.

Info

This attribute can only be used when type = TRANSLATIONAL, REVOLUTE.

Type=Double [2], Designable

icrot#

Initial rotational velocity and displacement.

Info

This attribute can only be used when type = CYLINDRICAL.

Type=Double [2], Designable

ictran#

Initial translational velocity and displacement.

Info

This attribute can only be used when type = CYLINDRICAL.

Type=Double [2], Designable

j#

Reference Marker that defines the connection on the second body.

Type=Reference (Marker), Required, Modifiable

pd#

Pitch diameter of the pinion gear of a rack and pinion gear Joint.

Info

This attribute can only be used when type = RACKPIN.

Type=Double, Default=0.0, Modifiable, Designable

pitch#

Pitch of a screw Joint.

Info

This attribute can only be used when type = SCREW.

Type=Double, Default=0.0, Modifiable, Designable

type#

Type of constraint connection between marker i and j.

Type=Enum, Required, Default=SPHERICAL

Permitted values are:

  • CONVEL

  • CYLINDRICAL

  • FIXED

  • FREE

  • HOOKE

  • PLANAR

  • RACKPIN

  • REVOLUTE

  • SCREW

  • SPHERICAL

  • TRANSLATIONAL

  • UNIVERSAL

class Jprim(**kwds)#
Removes degrees of freedom between two bodies by specifying conditions in which the relative translational or rotational motion can occur.

Jprim differs from Joint in that the former specifies mathematical constraints, which may not have concrete physical realizations like the latter.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

j

Reference - Marker

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

type

Enum

\(\checkmark\)

ATPOINT

virtual

Bool

False

Example

Create a primitive Joint.#
from msolve import *

model = Model(output="jprim")

Units(system="MKS")
ground = Part(ground=True)
global_ref = Marker(body=ground)

body = Part(mass=5.0, ip=[1]*3, cm=Marker(qp=[0,0,0]))

jprim = Jprim(type="ATPOINT", i=body.cm, j=global_ref)

See also

For more details, see also Constraint: Primitive.

i#

Reference Marker that defines the connection on the first body.

Type=Reference (Marker), Required, Modifiable

j#

Reference Marker that defines the connection on the second body.

Type=Reference (Marker), Required, Modifiable

type#

Type of constraint connection between marker i and j.

Type=Enum, Required, Default=ATPOINT

Permitted values are:

  • ATPOINT

  • INLINE

  • INPLANE

  • ORIENTATION

  • PARALLEL_AXES

  • PERPENDICULAR

class Mate(**kwds)#
Specifies general mating constraints between geometric primitives based on

distance, tangency, and coincidence relations. The geometric primitives can be point, line, plane, sphere, cylinder or cone.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

dist

Double

0.0

\(\checkmark\)

\(\checkmark\)

height

Double

0.0

\(\checkmark\)

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

id

Int

Auto

iradius

Double

0.0

\(\checkmark\)

\(\checkmark\)

j

Reference - Marker

\(\checkmark\)

jradius

Double

0.0

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

radius

Double

0.0

\(\checkmark\)

\(\checkmark\)

type

Enum

virtual

Bool

False

See also

For more details, see also Constraint: Mate.

dist#

Distance between the two parts constrained.

Type=Double, Default=0.0, Modifiable, Designable

height#

Height of the geometric primitive.

Type=Double, Default=0.0, Modifiable, Designable

i#

Marker that defines the connection on the first body.

Type=Reference (Marker), Modifiable

iradius#

Radius of the i geometric primitive.

Type=Double, Default=0.0, Modifiable, Designable

j#

Marker that defines the connection on the second body.

Type=Reference (Marker), Modifiable

jradius#

Radius of the j geometric primitive.

Type=Double, Default=0.0, Modifiable, Designable

radius#

Radius of the circle/sphere/cone.

Type=Double, Default=0.0, Modifiable, Designable

type#

Type of mate between i and j markers.

Type=Enum

Permitted values are:

  • COI_LIN_CYL

  • COI_LIN_LIN

  • COI_LIN_PLA

  • COI_POI_CON

  • COI_POI_CYL

  • COI_POI_LIN

  • COI_POI_POI

  • COI_POI_SPH

  • DIS_CYL_CYL

  • DIS_LIN_CYL

  • DIS_LIN_LIN

  • DIS_LIN_PLA

  • DIS_PLA_CON

  • DIS_PLA_CYL

  • DIS_POI_CYL

  • DIS_POI_LIN

  • DIS_POI_POI

  • DIS_POI_SPH

  • DIS_SPH_CON

  • DIS_SPH_CYL

  • DIS_SPH_LIN

  • DIS_SPH_PLA

  • DIS_SPH_SPH

  • TAN_CYL_CYL

  • TAN_LIN_CYL

  • TAN_PLA_CON

  • TAN_PLA_CYL

  • TAN_SPH_CON

  • TAN_SPH_CYL

  • TAN_SPH_LIN

  • TAN_SPH_PLA

  • TAN_SPH_SPH

class Motion(**kwds)#
Specifies a system degree of freedom as an explicit function of time.

The degree of freedom is specified as either:

  • A Joint and a type of motion (translational or rotational)

  • A relative translation or rotation component between two markers

When the input is specified on a joint, only three types of joints are valid:

  • Revolute joints (rotational motion only)

  • Translational joints (translational motion only)

  • Cylindrical joints (either rotational or translational motion)

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

direction

Enum

\(\checkmark\)

dtype

Enum

DISPLACEMENT

\(\checkmark\)

function

Function

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

icdisp

Double

\(\checkmark\)

\(\checkmark\)

icvel

Double

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

index

Int

3

j

Reference - Marker

\(\checkmark\)

joint

Reference - Joint

\(\checkmark\)

jtype

Enum

TRANSLATION

\(\checkmark\)

label

Str

name

Str

pinput

Reference - Pinput

ptcv

Reference - Ptcv

ptcv_joint

Alias

routine

Routine

script

Script

virtual

Bool

False

Example

Impose Motion on a Joint and between Markers.#
from msolve import *

model = Model(output="motion")

Units(system="MKS")
ground = Part(ground=True)
global_ref = Marker(part=ground)

part_1 = Part(mass=1, ip=[1]*3, cm=Marker())
part_2 = Part(mass=1, ip=[1]*3, cm=Marker())

cyl_joint = Joint(type="CYLINDRICAL", i=part_1.cm, j=global_ref)

joint_motion = Motion(label    = "Joint Motion",
                      jtype    = "TRANSLATION",
                      joint    = cyl_joint,
                      dtype    = "VELOCITY",
                      icdisp   = 0.0,
                      function = "10*SIN(20*TIME)"
                      )

marker_motion = Motion(label     = "Marker Motion",
                       i         = part_2.cm,
                       j         = global_ref,
                       direction = "X",
                       function  = "10*SIN(20*TIME)"
                      )

See also

For more details, see also Motion: Joint Based, Motion: Marker Based.

User Subroutine

The following user subroutine template expects the function signature and return value(s) as shown. Note that this is a placeholder implementation for reference purposes only.

def MOTSUB(id, time, par, npar, iord, iflag):
  # calcualate the value of the motion
  value = 0.0
  return value

For more information, see MotionSolve Subroutines.

direction#

Direction of marker-marker motion.

Type=Enum, Modifiable

Permitted values are:

  • B1

  • B2

  • B3

  • X

  • Y

  • Z

dtype#

Motion function type.

Type=Enum, Default=DISPLACEMENT, Modifiable

Permitted values are:

  • ACCELERATION

  • DISPLACEMENT

  • PLANT_INPUT

  • VELOCITY

function#

Parameters passed to user defined subroutine or a legal MotionSolve expression that defines the motion value.

Info

This attribute is mutually exclusive with pinput.

Type=Function, Modifiable

i#

Marker at which motion is applied, required for marker motion.

Info

This attribute is mutually exclusive with joint, ptcv.

Type=Reference (Marker), Modifiable

icdisp#

Displacement initial condition.

Type=Double, Modifiable, Designable

icvel#

Velocity initial condition for ACCELERATION motion.

Type=Double, Modifiable, Designable

index#

Index that defines the simultaneous enforcement of constraints at the position, velocity, and acceleration levels when pinput is specified.

Type=Int, Default=3

j#

Marker at which motion is applied, required for marker motion.

Info

This attribute is mutually exclusive with joint, ptcv.

Type=Reference (Marker), Modifiable

joint#

Joint at which motion is applied.

Info

This attribute is mutually exclusive with { i , j }, ptcv.

Type=Reference (Joint), Modifiable

jtype#

Select the motion type for cylindrical joint.

Type=Enum, Default=TRANSLATION, Modifiable

Permitted values are:

  • ROTATION

  • TRANSLATION

pinput#

Plant Input at which motion is applied.

Info

This attribute is mutually exclusive with function.

Type=Reference (Pinput)

ptcv#

Ptcv joint at which motion is applied.

Info

This attribute is mutually exclusive with { i , j }, joint.

Type=Reference (Ptcv)

ptcv_joint#

Alias to ptcv.

Type=Alias

routine#

The value can be a callable Python function, a Matlab/OML script, or a string that includes the name of a DLL/SO file and the corresponding function name, separated by ‘::’.

Type=Routine

script#

Path and name of the script that contains the routine.

Type=Script

class Ptcv(**kwds)#
Defines a (Point to Curve) higher pair constraint.

A fixed point on one body slides on a Curve that is fixed on a second body. The point is not allowed to lift off the curve.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

curve

Reference - Curve

\(\checkmark\)

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

rm

Reference - Marker

\(\checkmark\)

\(\checkmark\)

virtual

Bool

False

zaxis

Enum

UNCONSTRAINED

See also

For more details, see also Constraint: PTCV.

curve#

Curve that is fixed to the second body.

Type=Reference (Curve), Required, Modifiable

i#

Fixed marker that defines the connection on the first body.

Type=Reference (Marker), Required, Modifiable

rm#

Coordinate system in which the curve points are defined.

Type=Reference (Marker), Required, Modifiable

zaxis#

Directional constraint imposed on the Z axis of the i marker.

Type=Enum, Default=UNCONSTRAINED

Permitted values are:

  • PARALLEL

  • PERPENDICULAR

  • UNCONSTRAINED

class Ptdcv(**kwds)#
Defines a (Point to Deformable Curve) higher pair constraint.

A point is constrained to only move by sliding along a DeformableCurve. The curve can deform. As the markers move in space, the curve is calculated at every time step using CUBIC spline interpolation through the marker origins. This constraint is useful for simulating connection between a point on a body and a slender, flexible element such as a cable.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

dcurve

Reference - DeformableCurve

\(\checkmark\)

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

virtual

Bool

False

See also

For more details, see also Constraint: PTdCV.

dcurve#

Reference to a DeformableCurve that defines the constraint.

Type=Reference (DeformableCurve), Required, Modifiable

i#

Reference to a Marker constrained to lie on the curve.

Type=Reference (Marker), Required, Modifiable

class Ptdsf(**kwds)#
Defines a (Point to Deformable Surface) higher pair constraint.

This element constrains a fixed point on a body to slide along a DeformableSurface that passes through the origins of a specified set of markers. These markers may belong to different bodies. As the markers move in space, the surface is calculated at every time step using CUBIC spline interpolation through the marker origins. Hence, the surface deforms as the markers move about.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

dsurface

Reference - DeformableSurface

\(\checkmark\)

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

virtual

Bool

False

See also

For more details, see also Constraint: PTdSF.

dsurface#

Reference to a DeformableSurface that defines the constraint.

Type=Reference (DeformableSurface), Required, Modifiable

i#

Reference to a Marker defining the point constrained to the deformable surface.

Type=Reference (Marker), Required, Modifiable

class Ptsf(**kwds)#
Defines a (Point to Surface) higher pair constraint.

A fixed point on one body slides on a Surface that is fixed on a second body. The point is not allowed to lift off the surface.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

disp

Double [3]

[0, 0, 0]

\(\checkmark\)

i

Reference - Marker

\(\checkmark\)

\(\checkmark\)

id

Int

Auto

label

Str

name

Str

rm

Reference - Marker

\(\checkmark\)

\(\checkmark\)

surface

Reference - Surface

\(\checkmark\)

\(\checkmark\)

virtual

Bool

False

zaxis_perpendicular

Bool

False

See also

For more details, see also Constraint: PTSF.

disp#

A guess for the initial contact point on the surface.

Type=Double [3], Default=[0, 0, 0], Designable

i#

Fixed marker that defines the connection on the first body.

Type=Reference (Marker), Required, Modifiable

rm#

Coordinate system in which the surface points are defined.

Type=Reference (Marker), Required, Modifiable

surface#

Surface that is fixed to the second body.

Type=Reference (Surface), Required, Modifiable

zaxis_perpendicular#

Imposes perpendicularity between marker I zaxis and tangent plane.

Type=Bool, Default=False

class Sfsf(**kwds)#
Defines a (Surface to Surface) higher pair constraint.

The constraint consists of a Surface on one body rolling and sliding on a surface on a second body. The surfaces are required to have a unique contact point.

Name

Type

Required

Default

Modifiable

Designable

active

Bool

True

\(\checkmark\)

id

Int

Auto

idisp

Double [3]

[0, 0, 0]

\(\checkmark\)

irm

Reference - Marker

\(\checkmark\)

\(\checkmark\)

isurface

Reference - Surface

\(\checkmark\)

\(\checkmark\)

jdisp

Double [3]

[0, 0, 0]

\(\checkmark\)

jrm

Reference - Marker

\(\checkmark\)

\(\checkmark\)

jsurface

Reference - Surface

\(\checkmark\)

\(\checkmark\)

label

Str

name

Str

no_slip

Bool

False

virtual

Bool

False

See also

For more details, see also Constraint: SFSF.

idisp#

Location of the contact point on i Surface.

Type=Double [3], Default=[0, 0, 0], Designable

irm#

Coordinate system in which the i Surface is defined.

Type=Reference (Marker), Required, Modifiable

isurface#

Reference to an existing Surface in the model.

Type=Reference (Surface), Required, Modifiable

jdisp#

Location of the contact point on j Surface.

Type=Double [3], Default=[0, 0, 0], Designable

jrm#

Coordinate system in which the j Surface is defined.

Type=Reference (Marker), Required, Modifiable

jsurface#

Reference to an existing Surface in the model.

Type=Reference (Surface), Required, Modifiable

no_slip#

Specifies if slip or slide is allowed between the two surfaces.

Type=Bool, Default=False