Skip to content

Commit a20d272

Browse files
committed
Merge branch 'louen-master'
2 parents b81f111 + 1bec309 commit a20d272

File tree

8 files changed

+104
-101
lines changed

8 files changed

+104
-101
lines changed

CMake/Common.cmake

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,25 @@ set(CMAKE_MINSIZEREL_POSTFIX "_ms")
1010

1111
if (WIN32)
1212
set(CMAKE_USE_RELATIVE_PATHS "1")
13-
# Set compiler flags
14-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP")
15-
set(CMAKE_CXX_FLAGS_RELEASE "/MD /MP /Ox /Ob2 /Oi /Ot /D NDEBUG /openmp")
13+
# Set compiler flags
14+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MP")
15+
set(CMAKE_CXX_FLAGS_RELEASE "/MD /MP /Ox /Ob2 /Oi /Ot /D NDEBUG /openmp")
1616
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
17-
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
18-
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
17+
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
18+
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "/INCREMENTAL:NO")
1919
endif (WIN32)
2020

2121
if (UNIX)
2222
set(CMAKE_USE_RELATIVE_PATHS "1")
23-
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
23+
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
2424
# Set compiler flags for "release"
25-
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -fopenmp")
25+
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -fopenmp")
2626
endif (UNIX)
2727

2828
if(APPLE)
29-
set(CMAKE_MACOSX_RPATH 1)
29+
set(CMAKE_MACOSX_RPATH 1)
3030
endif()
3131

32+
set (CMAKE_CXX_STANDARD 11)
33+
3234
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)

Common/Common.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#define COMMON_H
33

44
#include <Eigen/Dense>
5-
#include "float.h"
5+
#include <float.h>
66

77
#define USE_DOUBLE
88
#define MIN_PARALLEL_SIZE 64
@@ -48,7 +48,7 @@ namespace PBD
4848
#define PDB_MAKE_ALIGNED_OPERATOR_NEW EIGEN_MAKE_ALIGNED_OPERATOR_NEW
4949
#define REPORT_MEMORY_LEAKS
5050

51-
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
51+
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
5252
#ifdef _DEBUG
5353
// Enable memory leak detection for Eigen new
5454
#undef PDB_MAKE_ALIGNED_OPERATOR_NEW
@@ -72,27 +72,28 @@ namespace PBD
7272
#else
7373
#define PDB_MAKE_ALIGNED_OPERATOR_NEW
7474

75-
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
75+
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
7676
// Enable memory leak detection
7777
#ifdef _DEBUG
7878
#define _CRTDBG_MAP_ALLOC
79-
#include <stdlib.h>
80-
#include <crtdbg.h>
79+
#include <stdlib.h>
80+
#include <crtdbg.h>
8181
#define DEBUG_NEW new(_NORMAL_BLOCK, __FILE__, __LINE__)
8282
#define REPORT_MEMORY_LEAKS _CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
8383
#else
8484
#define REPORT_MEMORY_LEAKS
8585
#endif
8686
#else
8787
#define REPORT_MEMORY_LEAKS
88+
#define DEBUG_NEW new
8889
#endif
8990

9091
#endif
9192
}
9293

9394
#endif
9495

95-
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
96+
#if defined(WIN32) || defined(_WIN32) || defined(WIN64)
9697
#define FORCE_INLINE __forceinline
9798
#else
9899
#define FORCE_INLINE __attribute__((always_inline))

Demos/GenericConstraintsDemos/GenericConstraints.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,9 @@ bool GenericDistanceConstraint::solvePositionConstraint(SimulationModel &model)
9595
void GenericIsometricBendingConstraint::constraintFct(
9696
const unsigned int numberOfParticles,
9797
const Real invMass[],
98-
const Eigen::Vector3d x[],
98+
const Vector3r x[],
9999
void *userData,
100-
Eigen::Matrix<double, 1, 1> &constraintValue)
100+
Eigen::Matrix<Real, 1, 1> &constraintValue)
101101
{
102102
Matrix4r *Q = (Matrix4r*)userData;
103103

@@ -177,27 +177,27 @@ bool GenericIsometricBendingConstraint::solvePositionConstraint(SimulationModel
177177

178178
Real invMass[4] = { invMass0, invMass1, invMass2, invMass3 };
179179
const Vector3r x[4] = { x0, x1, x2, x3 };
180-
181-
Vector3r corr[4];
182-
180+
181+
Vector3r corr[4];
182+
183183
const bool res = PositionBasedGenericConstraints::solve_GenericConstraint<4, 1>(
184184
invMass, x, &m_Q,
185185
GenericIsometricBendingConstraint::constraintFct,
186186
//GenericIsometricBendingConstraint::gradientFct,
187-
corr);
188-
189-
if (res)
190-
{
187+
corr);
188+
189+
if (res)
190+
{
191191
const Real stiffness = model.getClothBendingStiffness();
192-
if (invMass0 != 0.0)
192+
if (invMass0 != 0.0)
193193
x0 += stiffness*corr[0];
194-
if (invMass1 != 0.0)
194+
if (invMass1 != 0.0)
195195
x1 += stiffness*corr[1];
196196
if (invMass2 != 0.0)
197197
x2 += stiffness*corr[2];
198198
if (invMass3 != 0.0)
199199
x3 += stiffness*corr[3];
200-
}
200+
}
201201
return res;
202202
}
203203

Demos/GenericConstraintsDemos/GenericConstraints.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ namespace PBD
4545
static void constraintFct(
4646
const unsigned int numberOfParticles,
4747
const Real invMass[],
48-
const Eigen::Vector3d x[],
48+
const Vector3r x[],
4949
void *userData,
50-
Eigen::Matrix<double, 1, 1> &constraintValue);
50+
Eigen::Matrix<Real, 1, 1> &constraintValue);
5151

5252
GenericIsometricBendingConstraint() : Constraint(4) {}
5353
virtual int &getTypeId() const { return TYPE_ID; }
5454

55-
virtual bool initConstraint(SimulationModel &model, const unsigned int particle1, const unsigned int particle2,
55+
virtual bool initConstraint(SimulationModel &model, const unsigned int particle1, const unsigned int particle2,
5656
const unsigned int particle3, const unsigned int particle4);
5757
virtual bool solvePositionConstraint(SimulationModel &model);
5858
};

Demos/Simulation/DistanceFieldCollisionDetection.cpp

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ void DistanceFieldCollisionDetection::collisionDetection(SimulationModel &model)
4545
}
4646

4747
//omp_set_num_threads(1);
48-
std::vector<std::vector<ContactData> > contacts_mt;
48+
std::vector<std::vector<ContactData> > contacts_mt;
4949
#ifdef _DEBUG
5050
const unsigned int maxThreads = 1;
5151
#else
@@ -56,7 +56,7 @@ void DistanceFieldCollisionDetection::collisionDetection(SimulationModel &model)
5656
#pragma omp parallel default(shared)
5757
{
5858
// Update BVHs
59-
#pragma omp for schedule(static)
59+
#pragma omp for schedule(static)
6060
for (int i = 0; i < (int)m_collisionObjects.size(); i++)
6161
{
6262
CollisionDetection::CollisionObject *co = m_collisionObjects[i];
@@ -90,7 +90,7 @@ void DistanceFieldCollisionDetection::collisionDetection(SimulationModel &model)
9090
if ((co1->m_bodyType == CollisionDetection::CollisionObject::RigidBodyCollisionObjectType) &&
9191
((DistanceFieldCollisionObject*) co1)->m_testMesh)
9292
{
93-
RigidBody *rb1 = rigidBodies[co1->m_bodyIndex];
93+
RigidBody *rb1 = rigidBodies[co1->m_bodyIndex];
9494
const Real restitutionCoeff = rb1->getRestitutionCoeff() * rb2->getRestitutionCoeff();
9595
const Real frictionCoeff = rb1->getFrictionCoeff() + rb2->getFrictionCoeff();
9696
collisionDetectionRigidBodies(rb1, (DistanceFieldCollisionObject*)co1, rb2, (DistanceFieldCollisionObject*)co2,
@@ -131,18 +131,18 @@ void DistanceFieldCollisionDetection::collisionDetection(SimulationModel &model)
131131
for (unsigned int j = 0; j < contacts_mt[i].size(); j++)
132132
{
133133
if (contacts_mt[i][j].m_type == 1)
134-
addParticleRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
135-
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
134+
addParticleRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
135+
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
136136
contacts_mt[i][j].m_dist, contacts_mt[i][j].m_restitution, contacts_mt[i][j].m_friction);
137137
else
138-
addRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
139-
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
138+
addRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
139+
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
140140
contacts_mt[i][j].m_dist, contacts_mt[i][j].m_restitution, contacts_mt[i][j].m_friction);
141141
}
142142
}
143143
}
144144

145-
void DistanceFieldCollisionDetection::collisionDetectionRigidBodies(RigidBody *rb1, DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2,
145+
void DistanceFieldCollisionDetection::collisionDetectionRigidBodies(RigidBody *rb1, DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2,
146146
const Real restitutionCoeff, const Real frictionCoeff
147147
, std::vector<std::vector<ContactData> > &contacts_mt
148148
)
@@ -155,12 +155,12 @@ void DistanceFieldCollisionDetection::collisionDetectionRigidBodies(RigidBody *r
155155
const Vector3r &com2 = rb2->getPosition();
156156

157157
// remove the rotation of the main axis transformation that is performed
158-
// to get a diagonal inertia tensor since the distance function is
158+
// to get a diagonal inertia tensor since the distance function is
159159
// evaluated in local coordinates
160160
//
161161
// transformation world to local:
162162
// p_local = R_initial^T ( R_MAT R^T (p_world - x) - x_initial + x_MAT)
163-
//
163+
//
164164
// transformation local to:
165165
// p_world = R R_MAT^T (R_initial p_local + x_initial - x_MAT) + x
166166
//
@@ -215,7 +215,7 @@ void DistanceFieldCollisionDetection::collisionDetectionRigidBodies(RigidBody *r
215215
int tid = 0;
216216
#else
217217
int tid = omp_get_thread_num();
218-
#endif
218+
#endif
219219
contacts_mt[tid].push_back({ 0, co1->m_bodyIndex, co2->m_bodyIndex, x_w, cp_w, n_w, dist, restitutionCoeff, frictionCoeff });
220220
}
221221
}
@@ -225,20 +225,20 @@ void DistanceFieldCollisionDetection::collisionDetectionRigidBodies(RigidBody *r
225225

226226

227227
void DistanceFieldCollisionDetection::collisionDetectionRBSolid(const ParticleData &pd, const unsigned int offset, const unsigned int numVert,
228-
DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2,
228+
DistanceFieldCollisionObject *co1, RigidBody *rb2, DistanceFieldCollisionObject *co2,
229229
const Real restitutionCoeff, const Real frictionCoeff
230230
, std::vector<std::vector<ContactData> > &contacts_mt
231231
)
232232
{
233233
const Vector3r &com2 = rb2->getPosition();
234234

235235
// remove the rotation of the main axis transformation that is performed
236-
// to get a diagonal inertia tensor since the distance function is
236+
// to get a diagonal inertia tensor since the distance function is
237237
// evaluated in local coordinates
238238
//
239239
// transformation world to local:
240240
// p_local = R_initial^T ( R_MAT R^T (p_world - x) - x_initial + x_MAT)
241-
//
241+
//
242242
// transformation local to:
243243
// p_world = R R_MAT^T (R_initial p_local + x_initial - x_MAT) + x
244244
//
@@ -294,7 +294,7 @@ void DistanceFieldCollisionDetection::collisionDetectionRBSolid(const ParticleDa
294294
int tid = 0;
295295
#else
296296
int tid = omp_get_thread_num();
297-
#endif
297+
#endif
298298
contacts_mt[tid].push_back({ 1, index, co2->m_bodyIndex, x_w, cp_w, n_w, dist, restitutionCoeff, frictionCoeff });
299299
}
300300
}
@@ -305,9 +305,9 @@ void DistanceFieldCollisionDetection::collisionDetectionRBSolid(const ParticleDa
305305

306306
bool DistanceFieldCollisionDetection::isDistanceFieldCollisionObject(CollisionObject *co) const
307307
{
308-
return (co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionBox::TYPE_ID) ||
309-
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionSphere::TYPE_ID) ||
310-
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionTorus::TYPE_ID) ||
308+
return (co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionBox::TYPE_ID) ||
309+
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionSphere::TYPE_ID) ||
310+
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionTorus::TYPE_ID) ||
311311
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionCylinder::TYPE_ID) ||
312312
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionHollowSphere::TYPE_ID) ||
313313
(co->getTypeId() == DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox::TYPE_ID) ||
@@ -319,7 +319,7 @@ void DistanceFieldCollisionDetection::addCollisionBox(const unsigned int bodyInd
319319
DistanceFieldCollisionDetection::DistanceFieldCollisionBox *cf = new DistanceFieldCollisionDetection::DistanceFieldCollisionBox();
320320
cf->m_bodyIndex = bodyIndex;
321321
cf->m_bodyType = bodyType;
322-
// distance function requires 0.5*box
322+
// distance function requires 0.5*box
323323
cf->m_box = 0.5*box;
324324
cf->m_bvh.init(vertices, numVertices);
325325
cf->m_bvh.construct();
@@ -393,7 +393,7 @@ void DistanceFieldCollisionDetection::addCollisionHollowBox(const unsigned int b
393393
DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox *cf = new DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox();
394394
cf->m_bodyIndex = bodyIndex;
395395
cf->m_bodyType = bodyType;
396-
// distance function requires 0.5*box
396+
// distance function requires 0.5*box
397397
cf->m_box = 0.5*box;
398398
cf->m_thickness = thickness;
399399
cf->m_bvh.init(vertices, numVertices);
@@ -416,18 +416,18 @@ void DistanceFieldCollisionDetection::addCollisionObjectWithoutGeometry(const un
416416
m_collisionObjects.push_back(co);
417417
}
418418

419-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionBox::distance(const Eigen::Vector3d &x, const Real tolerance)
419+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionBox::distance(const Vector3r &x, const Real tolerance)
420420
{
421-
const Eigen::Vector3d box_d = m_box.template cast<Real>();
422-
const Eigen::Vector3d x_d = x.template cast<Real>();
423-
const Eigen::Vector3d d(fabs(x_d.x()) - box_d.x(), fabs(x_d.y()) - box_d.y(), fabs(x_d.z()) - box_d.z());
424-
const Eigen::Vector3d max_d(std::max(d.x(), 0.0), std::max(d.y(), 0.0), std::max(d.z(), 0.0));
425-
return m_invertSDF*(std::min(std::max(d.x(), std::max(d.y(), d.z())), 0.0) + max_d.norm()) - tolerance;
421+
const Vector3r box_d = m_box.template cast<Real>();
422+
const Vector3r x_d = x.template cast<Real>();
423+
const Vector3r d(fabs(x_d.x()) - box_d.x(), fabs(x_d.y()) - box_d.y(), fabs(x_d.z()) - box_d.z());
424+
const Vector3r max_d(std::max<Real>(d.x(), 0.0), std::max<Real>(d.y(), 0.0), std::max<Real>(d.z(), 0.0));
425+
return m_invertSDF*(std::min<Real>(std::max<Real>(d.x(), std::max<Real>(d.y(), d.z())), 0.0) + max_d.norm()) - tolerance;
426426
}
427427

428-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionSphere::distance(const Eigen::Vector3d &x, const Real tolerance)
428+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionSphere::distance(const Vector3r &x, const Real tolerance)
429429
{
430-
const Eigen::Vector3d d = x.template cast<Real>();
430+
const Vector3r d = x.template cast<Real>();
431431
const Real dl = d.norm();
432432
return m_invertSDF*(dl - static_cast<Real>(m_radius)) - tolerance;
433433
}
@@ -450,25 +450,25 @@ bool DistanceFieldCollisionDetection::DistanceFieldCollisionSphere::collisionTes
450450
return false;
451451
}
452452

453-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionTorus::distance(const Eigen::Vector3d &x, const Real tolerance)
453+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionTorus::distance(const Vector3r &x, const Real tolerance)
454454
{
455-
const Eigen::Vector2d radii_d = m_radii.template cast<Real>();
456-
const Eigen::Vector2d q(Vector2r(x.x(), x.z()).norm() - radii_d.x(), x.y());
455+
const Vector2r radii_d = m_radii.template cast<Real>();
456+
const Vector2r q(Vector2r(x.x(), x.z()).norm() - radii_d.x(), x.y());
457457
return m_invertSDF*(q.norm() - radii_d.y()) - tolerance;
458458
}
459459

460-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionCylinder::distance(const Eigen::Vector3d &x, const Real tolerance)
460+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionCylinder::distance(const Vector3r &x, const Real tolerance)
461461
{
462462
const Real l = sqrt(x.x()*x.x() + x.z()*x.z());
463-
const Eigen::Vector2d d = Eigen::Vector2d(fabs(l), fabs(x.y())) - m_dim.template cast<Real>();
464-
const Eigen::Vector2d max_d(std::max(d.x(), 0.0), std::max(d.y(), 0.0));
465-
return m_invertSDF*(std::min(std::max(d.x(), d.y()), 0.0) + max_d.norm()) - tolerance;
463+
const Vector2r d = Vector2r(std::abs(l), std::abs(x.y())) - m_dim.template cast<Real>();
464+
const Vector2r max_d(std::max<Real>(d.x(), 0.0), std::max<Real>(d.y(), 0.0));
465+
return m_invertSDF*(std::min<Real>(std::max<Real>(d.x(), d.y()), 0.0) + max_d.norm()) - tolerance;
466466
}
467467

468468

469-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionHollowSphere::distance(const Eigen::Vector3d &x, const Real tolerance)
469+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionHollowSphere::distance(const Vector3r &x, const Real tolerance)
470470
{
471-
const Eigen::Vector3d d = x.template cast<Real>();
471+
const Vector3r d = x.template cast<Real>();
472472
const Real dl = d.norm();
473473
return m_invertSDF*(fabs(dl - m_radius) - m_thickness) - tolerance;
474474
}
@@ -493,21 +493,21 @@ bool DistanceFieldCollisionDetection::DistanceFieldCollisionHollowSphere::collis
493493
return false;
494494
}
495495

496-
Real DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox::distance(const Eigen::Vector3d &x, const Real tolerance)
496+
Real DistanceFieldCollisionDetection::DistanceFieldCollisionHollowBox::distance(const Vector3r &x, const Real tolerance)
497497
{
498-
const Eigen::Vector3d box_d = m_box.template cast<Real>();
499-
const Eigen::Vector3d x_d = x.template cast<Real>();
500-
const Eigen::Vector3d d = x_d.cwiseAbs() - box_d;
501-
const Eigen::Vector3d max_d = d.cwiseMax(Eigen::Vector3d(0.0, 0.0, 0.0));
502-
return m_invertSDF * (fabs(std::min(d.maxCoeff(), 0.0) + max_d.norm()) - m_thickness) - tolerance;
498+
const Vector3r box_d = m_box.template cast<Real>();
499+
const Vector3r x_d = x.template cast<Real>();
500+
const Vector3r d = x_d.cwiseAbs() - box_d;
501+
const Vector3r max_d = d.cwiseMax(Vector3r(0.0, 0.0, 0.0));
502+
return m_invertSDF * (std::abs(std::min<Real>(d.maxCoeff(), 0.0) + max_d.norm()) - m_thickness) - tolerance;
503503
}
504504

505-
void DistanceFieldCollisionDetection::DistanceFieldCollisionObject::approximateNormal(const Eigen::Vector3d &x, const Real tolerance, Vector3r &n)
505+
void DistanceFieldCollisionDetection::DistanceFieldCollisionObject::approximateNormal(const Vector3r &x, const Real tolerance, Vector3r &n)
506506
{
507507
// approximate gradient
508508
Real eps = 1.e-6;
509509
n.setZero();
510-
Eigen::Vector3d xTmp = x;
510+
Vector3r xTmp = x;
511511
for (unsigned int j = 0; j < 3; j++)
512512
{
513513
xTmp[j] += eps;
@@ -538,7 +538,7 @@ bool DistanceFieldCollisionDetection::DistanceFieldCollisionObject::collisionTes
538538
if (dist < maxDist)
539539
{
540540
// approximate gradient
541-
const Eigen::Vector3d x_d = x.template cast<Real>();
541+
const Vector3r x_d = x.template cast<Real>();
542542

543543
approximateNormal(x_d, t_d, n);
544544

0 commit comments

Comments
 (0)