Skip to content

Commit 9ce631c

Browse files
authored
Merge pull request #211 from pariterre/master
Allowed MX/SX as functions in to_casadi
2 parents 7e9b565 + bc2557d commit 9ce631c

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

binding/c/biorbd_c.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,16 @@ void c_massMatrix(
104104
for (unsigned int i=0; i<nQ*nQ; ++i)
105105
massMatrix[i] = Mass(i);
106106
}
107+
void c_CoM(
108+
biorbd::Model* model,
109+
const double* q,
110+
double *com) {
111+
biorbd::rigidbody::GeneralizedCoordinates Q(dispatchQinput(model, q));
112+
113+
biorbd::utils::Vector3d CoM(model->CoM(Q));
114+
115+
dispatchVectorOutput(CoM, com);
116+
}
107117

108118

109119
// dof functions

binding/c/biorbd_c.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ extern "C" {
5151
biorbd::Model* model,
5252
const double* q,
5353
double* massMatrix);
54+
BIORBD_API_C void c_CoM(
55+
biorbd::Model* model,
56+
const double* q,
57+
double *com);
5458

5559

5660
// dof functions

binding/matlab/Matlab_MusclesPoints.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "class_handle.h"
88
#include "processArguments.h"
99
#include "Utils/Vector3d.h"
10-
#include "Muscles/WrappingCylinder.h"
10+
#include "Muscles/WrappingHalfCylinder.h"
1111
#include "Muscles/MuscleGroup.h"
1212
#include "Muscles/Muscle.h"
1313
#include "Muscles/PathModifiers.h"
@@ -56,8 +56,8 @@ void Matlab_MusclesPoints( int nlhs, mxArray *plhs[],
5656
wrap_RT.push_back(wrappingObject.RT());
5757

5858
// Quel est sa dimension
59-
if (type == biorbd::utils::NODE_TYPE::WRAPPING_CYLINDER){
60-
const biorbd::muscles::WrappingCylinder& cylinder(dynamic_cast<const biorbd::muscles::WrappingCylinder&>(wrappingObject));
59+
if (type == biorbd::utils::NODE_TYPE::WRAPPING_HALF_CYLINDER){
60+
const biorbd::muscles::WrappingHalfCylinder& cylinder(dynamic_cast<const biorbd::muscles::WrappingHalfCylinder&>(wrappingObject));
6161
wrap_dim1.push_back(cylinder.radius());
6262
wrap_dim2.push_back(cylinder.length());
6363
}

binding/python3/__init__.py

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,21 @@
44
from .rigid_body import *
55

66
if biorbd.currentLinearAlgebraBackend() == 1:
7-
from casadi import Function, MX, horzcat
7+
from casadi import Function, MX, SX, horzcat
88

99
def to_casadi_func(name, func, *all_param):
10-
mx_param = []
10+
cx_param = []
1111
for p in all_param:
12-
if isinstance(p, MX):
13-
mx_param.append(p)
12+
if isinstance(p, (MX, SX)):
13+
cx_param.append(p)
14+
15+
if isinstance(func, (MX, SX, Function)):
16+
func_evaluated = func
17+
else:
18+
func_evaluated = func(*all_param)
19+
if isinstance(func_evaluated, (list, tuple)):
20+
func_evaluated = horzcat(*[val if isinstance(val, MX) else val.to_mx() for val in func_evaluated])
21+
elif not isinstance(func_evaluated, MX):
22+
func_evaluated = func_evaluated.to_mx()
23+
return Function(name, cx_param, [func_evaluated]).expand()
1424

15-
func_evaluated = func(*all_param)
16-
if isinstance(func_evaluated, (list, tuple)):
17-
func_evaluated = horzcat(*[val if isinstance(val, MX) else val.to_mx() for val in func_evaluated])
18-
elif not isinstance(func_evaluated, MX):
19-
func_evaluated = func_evaluated.to_mx()
20-
return Function(name, mx_param, [func_evaluated]).expand()

0 commit comments

Comments
 (0)