Commit dbdac854 authored by Sreekanth Arikatla's avatar Sreekanth Arikatla
Browse files

Merge branch 'TemplateSolverFix' into 'master'

BUG: Template solver fix + uncrustify

See merge request iMSTK/iMSTK!467
parents 7729828f f71e564b
......@@ -98,9 +98,9 @@ main()
sims[i].params->enableConstraint(PbdConstraint::Type::Bend, static_cast<double>(i) * 0.1 / numStrings + 0.001);
sims[i].params->m_fixedNodeIds = { 0 };
sims[i].params->m_uniformMassValue = 5.0;
sims[i].params->m_gravity = Vec3d(0, -9.8, 0);
sims[i].params->m_defaultDt = 0.0005;
sims[i].params->m_iterations = 5;
sims[i].params->m_gravity = Vec3d(0, -9.8, 0);
sims[i].params->m_defaultDt = 0.0005;
sims[i].params->m_iterations = 5;
// Set the parameters
sims[i].model->configure(sims[i].params);
......@@ -129,18 +129,18 @@ main()
const double radius = 1.5;
auto movePoints =
[&sims, &t, dt, radius](Module* module)
{
for (unsigned int i = 0; i < sims.size(); i++)
{
Vec3d pos = sims[i].model->getCurrentState()->getVertexPosition(0);
// Move in circle, derivatives of parametric eq of circle
sims[i].model->getCurrentState()->setVertexPosition(0, imstk::Vec3d(
for (unsigned int i = 0; i < sims.size(); i++)
{
Vec3d pos = sims[i].model->getCurrentState()->getVertexPosition(0);
// Move in circle, derivatives of parametric eq of circle
sims[i].model->getCurrentState()->setVertexPosition(0, imstk::Vec3d(
pos.x() + -std::sin(t) * radius * dt,
pos.y(),
pos.z() + std::cos(t) * radius * dt));
}
t += dt;
};
}
t += dt;
};
simManager->getSceneManager(scene)->setPostUpdateCallback(movePoints);
// Start
......
......@@ -38,13 +38,14 @@
using namespace imstk;
static std::unique_ptr<SurfaceMesh> makeCloth(
static std::unique_ptr<SurfaceMesh>
makeCloth(
const double width, const double height, const int nRows, const int nCols)
{
// Create surface mesh
std::unique_ptr<SurfaceMesh> clothMesh = std::make_unique<SurfaceMesh>();
StdVectorOfVec3d vertList;
StdVectorOfVec3d vertList;
vertList.resize(nRows * nCols);
const double dy = width / (double)(nCols - 1);
const double dx = height / (double)(nRows - 1);
......@@ -91,7 +92,8 @@ static std::unique_ptr<SurfaceMesh> makeCloth(
return clothMesh;
}
static std::shared_ptr<PbdObject> makeClothObj(const std::string& name, double width, double height, int nRows, int nCols)
static std::shared_ptr<PbdObject>
makeClothObj(const std::string& name, double width, double height, int nRows, int nCols)
{
auto clothObj = std::make_shared<PbdObject>(name);
......@@ -100,9 +102,9 @@ static std::shared_ptr<PbdObject> makeClothObj(const std::string& name, double w
// Setup the Parameters
auto pbdParams = std::make_shared<PBDModelConfig>();
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.005;
pbdParams->m_iterations = 5;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.005;
pbdParams->m_iterations = 5;
pbdParams->m_viscousDampingCoeff = 0.05;
pbdParams->enableConstraint(PbdConstraint::Type::Distance, 0.1);
pbdParams->enableConstraint(PbdConstraint::Type::Dihedral, 0.001);
......@@ -144,10 +146,10 @@ main()
auto simManager = std::make_shared<SimulationManager>();
auto scene = simManager->createNewScene("PBDCloth");
const double width = 10.0;
const double height = 10.0;
const int nRows = 16;
const int nCols = 16;
const double width = 10.0;
const double height = 10.0;
const int nRows = 16;
const int nCols = 16;
std::shared_ptr<PbdObject> clothObj = makeClothObj("Cloth", width, height, nRows, nCols);
scene->addSceneObject(clothObj);
......@@ -174,33 +176,32 @@ main()
{
std::shared_ptr<PbdModel> pbdModel = clothObj->getPbdModel();
scene->setComputeGraphConfigureCallback([&](Scene* scene)
{
// Get the graph
std::shared_ptr<ComputeGraph> graph = scene->getComputeGraph();
// First write the graph before we make modifications, just to show the changes
ComputeGraphVizWriter writer;
writer.setInput(graph);
writer.setFileName("computeGraphConfigureExampleOld.svg");
writer.write();
std::shared_ptr<ComputeNode> printVelocities = std::make_shared<ComputeNode>([&]()
{
// Make the timestep a function of max velocity
const StdVectorOfVec3d& velocities = *pbdModel->getCurrentState()->getVelocities();
for (size_t i = 0; i < velocities.size(); i++)
{
printf("Velocity: %f, %f, %f\n", velocities[i].x(), velocities[i].y(), velocities[i].z());
}
{
// Get the graph
std::shared_ptr<ComputeGraph> graph = scene->getComputeGraph();
// First write the graph before we make modifications, just to show the changes
ComputeGraphVizWriter writer;
writer.setInput(graph);
writer.setFileName("computeGraphConfigureExampleOld.svg");
writer.write();
std::shared_ptr<ComputeNode> printVelocities = std::make_shared<ComputeNode>([&]()
{
// Make the timestep a function of max velocity
const StdVectorOfVec3d& velocities = *pbdModel->getCurrentState()->getVelocities();
for (size_t i = 0; i < velocities.size(); i++)
{
printf("Velocity: %f, %f, %f\n", velocities[i].x(), velocities[i].y(), velocities[i].z());
}
}, "PrintVelocities");
// After IntegratePosition
graph->insertAfter(pbdModel->getIntegratePositionNode(), printVelocities);
// After IntegratePosition
graph->insertAfter(pbdModel->getIntegratePositionNode(), printVelocities);
// Write the modified graph
writer.setFileName("computeGraphConfigureExampleNew.svg");
writer.write();
// Write the modified graph
writer.setFileName("computeGraphConfigureExampleNew.svg");
writer.write();
});
}
......
......@@ -105,30 +105,6 @@ main()
planeObj->setCollidingGeometry(planeGeom);
scene->addSceneObject(planeObj);
// create a nonlinear system
auto nlSystem = std::make_shared<NonLinearSystem<SparseMatrixd>>(
dynaModel->getFunction(),
dynaModel->getFunctionGradient());
nlSystem->setUnknownVector(dynaModel->getUnknownVec());
nlSystem->setUpdateFunction(dynaModel->getUpdateFunction());
nlSystem->setUpdatePreviousStatesFunction(dynaModel->getUpdatePrevStateFunction());
// create a linear solver
auto linSolver = std::make_shared<ConjugateGradient>();
if (linSolver->getType() == imstk::LinearSolver<imstk::SparseMatrixd>::Type::GaussSeidel
&& dynaModel->isFixedBCImplemented())
{
LOG(WARNING) << "The GS solver may not be viable!";
}
// create a non-linear solver and add to the scene
auto nlSolver = std::make_shared<NewtonSolver<SparseMatrixd>>();
nlSolver->setLinearSolver(linSolver);
nlSolver->setSystem(nlSystem);
scene->addNonlinearSolver(nlSolver);
// Light
auto light = std::make_shared<DirectionalLight>("light");
light->setFocalPoint(Vec3d(5, -8, -5));
......
......@@ -72,7 +72,7 @@ createSoftBodyScene(std::shared_ptr<SimulationManager> simManager, const char* s
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_iterations = 45;
// Set the parameters
......@@ -163,9 +163,9 @@ createClothScene(std::shared_ptr<SimulationManager> simManager, const char* scen
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.03;
pbdParams->m_iterations = 5;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.03;
pbdParams->m_iterations = 5;
// Set the parameters
pbdModel->configure(pbdParams);
......
......@@ -34,40 +34,40 @@ using namespace imstk;
int
main(int argc, char** argv)
{
const int N = 2;
auto x = Vectord(N);
const int N = 2;
auto x = Vectord(N);
auto xe = Vectord(N);
auto y = Vectord(N);
auto A = Matrixd(N, N);
auto y = Vectord(N);
auto A = Matrixd(N, N);
x[0] = 100.0;
x[1] = 100.0;
x[0] = 100.0;
x[1] = 100.0;
xe[0] = 1.0;
xe[1] = 10.0;
auto func = [&y](const Vectord& x, const bool isSemiImplicit) -> const Vectord& {
// auto y = Vectord(x.size());
y[0] = x[0] * x[0] - 1.0;
y[1] = x[1] * x[1] - 100.0;
// auto y = Vectord(x.size());
y[0] = x[0] * x[0] - 1.0;
y[1] = x[1] * x[1] - 100.0;
return y;
};
return y;
};
auto jac = [&A](const Vectord& x) -> const Matrixd& {
// auto A = Matrixd(x.size(), x.size());
A(0, 0) = 2 * x[0];
A(0, 1) = 0.0;
A(1, 0) = 0.0;
A(1, 1) = 2 * x[1];
// auto A = Matrixd(x.size(), x.size());
A(0, 0) = 2 * x[0];
A(0, 1) = 0.0;
A(1, 0) = 0.0;
A(1, 1) = 2 * x[1];
return A;
};
return A;
};
auto updateX = [&x](const Vectord& du, const bool isSemiImplicit)
{
x -= du;
return;
};
{
x -= du;
return;
};
auto updateXold = [](void) {};
......@@ -84,8 +84,8 @@ main(int argc, char** argv)
nlSolver->setSystem(nlSystem);
nlSolver->setLinearSolver(linSolver);
std::cout << "init_error = " << std::setprecision(12) << std::scientific << (x-xe).norm() << std::endl;
std::cout << "init_error = " << std::setprecision(12) << std::scientific << (x - xe).norm() << std::endl;
nlSolver->solve();
std::cout << "final_error = " << std::setprecision(12) << std::scientific << (x-xe).norm() << std::endl;
std::cout << "final_error = " << std::setprecision(12) << std::scientific << (x - xe).norm() << std::endl;
}
......@@ -110,9 +110,9 @@ main()
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.005;
pbdParams->m_iterations = 5;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.005;
pbdParams->m_iterations = 5;
// Set the parameters
pbdModel->configure(pbdParams);
......
......@@ -125,8 +125,8 @@ generateDragon(const std::shared_ptr<imstk::Scene>& scene,
// Other parameters
pbdParams->m_uniformMassValue = 5.0;
pbdParams->m_gravity = Vec3d(0, -1.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_gravity = Vec3d(0, -1.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 20;
pbdParams->collisionParams->m_proximity = 0.5;
......@@ -222,7 +222,7 @@ main()
const double distanceY = 5.0;
const double minHeight = -5.0;
std::vector<std::shared_ptr<PbdObject>> pbdObjs;
std::vector<std::shared_ptr<PbdObject>> pbdObjs;
#ifdef BIG_SCENE
for (int i = -expandsXZ; i < expandsXZ; ++i)
......
......@@ -85,9 +85,9 @@ main()
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -10.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 5;
pbdParams->m_gravity = Vec3d(0, -10.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 5;
pbdParams->collisionParams->m_proximity = 0.3;
pbdParams->collisionParams->m_stiffness = 0.1;
......@@ -149,7 +149,7 @@ main()
// configure model
auto pbdParams2 = std::make_shared<PBDModelConfig>();
pbdParams2->m_uniformMassValue = 0.0;
pbdParams2->m_iterations = 0;
pbdParams2->m_iterations = 0;
pbdParams2->collisionParams->m_proximity = -0.1;
// Set the parameters
......
......@@ -113,8 +113,8 @@ makeDragonPbdObject(const std::string& name)
pbdParams->enableFEMConstraint(PbdConstraint::Type::FEMTet,
PbdFEMConstraint::MaterialType::StVK);
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -10.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_gravity = Vec3d(0, -10.0, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 10;
pbdParams->collisionParams->m_proximity = 0.3;
pbdParams->collisionParams->m_stiffness = 0.1;
......
......@@ -73,7 +73,7 @@ main()
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_iterations = 45;
// Set the parameters
......
......@@ -76,9 +76,9 @@ main()
// Other parameters
pbdParams->m_uniformMassValue = 1.0;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 2;
pbdParams->m_gravity = Vec3d(0, -9.8, 0);
pbdParams->m_defaultDt = 0.01;
pbdParams->m_iterations = 2;
pbdParams->collisionParams->m_proximity = 0.01;
// Set the parameters
......
......@@ -95,9 +95,9 @@ main()
sims[i].params->enableConstraint(PbdConstraint::Type::Bend, static_cast<double>(i) * 0.1 / numStrings + 0.001);
sims[i].params->m_fixedNodeIds = { 0 };
sims[i].params->m_uniformMassValue = 5.0;
sims[i].params->m_gravity = Vec3d(0, -9.8, 0);
sims[i].params->m_defaultDt = 0.0005;
sims[i].params->m_iterations = 5;
sims[i].params->m_gravity = Vec3d(0, -9.8, 0);
sims[i].params->m_defaultDt = 0.0005;
sims[i].params->m_iterations = 5;
// Set the parameters
sims[i].model->configure(sims[i].params);
......
......@@ -64,7 +64,7 @@ public:
BidirectionalPlaneToSphere,
SphereToCylinder,
SphereToSphere,
// Image based CD
SignedDistanceField,
......
......@@ -61,33 +61,33 @@ namespace imstk
{
std::shared_ptr<CollisionDetection>
makeCollisionDetectionObject(const CollisionDetection::Type type,
std::shared_ptr<Geometry> collidingGeometryA,
std::shared_ptr<Geometry> collidingGeometryB,
std::shared_ptr<CollisionData> colData)
std::shared_ptr<Geometry> collidingGeometryA,
std::shared_ptr<Geometry> collidingGeometryB,
std::shared_ptr<CollisionData> colData)
{
switch (type)
{
// Points to objects
// Points to objects
case CollisionDetection::Type::PointSetToSphere:
{
auto pointset = std::dynamic_pointer_cast<PointSet>(collidingGeometryA);
auto sphere = std::dynamic_pointer_cast<Sphere>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(pointset, sphere)
return std::make_shared<PointSetToSphereCD>(pointset, sphere, colData);
return std::make_shared<PointSetToSphereCD>(pointset, sphere, colData);
}
case CollisionDetection::Type::PointSetToPlane:
{
auto pointset = std::dynamic_pointer_cast<PointSet>(collidingGeometryA);
auto plane = std::dynamic_pointer_cast<Plane>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(pointset, plane)
return std::make_shared<PointSetToPlaneCD>(pointset, plane, colData);
return std::make_shared<PointSetToPlaneCD>(pointset, plane, colData);
}
case CollisionDetection::Type::PointSetToCapsule:
{
auto pointset = std::dynamic_pointer_cast<PointSet>(collidingGeometryA);
auto capsule = std::dynamic_pointer_cast<Capsule>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(pointset, capsule)
return std::make_shared<PointSetToCapsuleCD>(pointset, capsule, colData);
return std::make_shared<PointSetToCapsuleCD>(pointset, capsule, colData);
}
#if 0
case CollisionDetection::ype::PointSetToSpherePicking:
......@@ -95,24 +95,24 @@ makeCollisionDetectionObject(const CollisionDetection::Type type,
auto pointset = std::dynamic_pointer_cast<PointSet>(objA->getCollidingGeometry());
auto sphere = std::dynamic_pointer_cast<Sphere>(objB->getCollidingGeometry());
IMSTK_CHECK_FOR_VALID_GEOMETRIES(pointset, sphere)
return std::make_shared<PointSetToSpherePickingCD>(pointset, sphere, colData);
return std::make_shared<PointSetToSpherePickingCD>(pointset, sphere, colData);
}
#endif
case CollisionDetection::Type::PointSetToSurfaceMesh:
{
auto pointset = std::dynamic_pointer_cast<PointSet>(collidingGeometryA);
auto triMesh = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
auto pointset = std::dynamic_pointer_cast<PointSet>(collidingGeometryA);
auto triMesh = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(pointset, triMesh)
CollisionDetection::addCollisionPairToOctree(collidingGeometryA, collidingGeometryB, type, colData);
CollisionDetection::addCollisionPairToOctree(collidingGeometryA, collidingGeometryB, type, colData);
return std::make_shared<PointSetToSurfaceMeshCD>(pointset, triMesh, colData);
}
// Mesh to mesh
case CollisionDetection::Type::SurfaceMeshToSurfaceMesh:
{
auto meshA = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryA);
auto meshB = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
auto meshA = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryA);
auto meshB = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(meshA, meshB)
CollisionDetection::addCollisionPairToOctree(collidingGeometryA, collidingGeometryB, type, colData);
CollisionDetection::addCollisionPairToOctree(collidingGeometryA, collidingGeometryB, type, colData);
return std::make_shared<SurfaceMeshToSurfaceMeshCD>(meshA, meshB, colData);
}
case CollisionDetection::Type::SurfaceMeshToSurfaceMeshCCD:
......@@ -120,7 +120,7 @@ makeCollisionDetectionObject(const CollisionDetection::Type type,
auto meshA = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryA);
auto meshB = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(meshA, meshB)
return std::make_shared<SurfaceMeshToSurfaceMeshCCD>(meshA, meshB, colData);
return std::make_shared<SurfaceMeshToSurfaceMeshCCD>(meshA, meshB, colData);
}
case CollisionDetection::Type::VolumeMeshToVolumeMesh:
......@@ -128,7 +128,7 @@ makeCollisionDetectionObject(const CollisionDetection::Type type,
auto tet1 = std::dynamic_pointer_cast<TetrahedralMesh>(collidingGeometryA);
auto tet2 = std::dynamic_pointer_cast<TetrahedralMesh>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(tet1, tet2)
return std::make_shared<TetraToTetraCD>(tet1, tet2, colData);
return std::make_shared<TetraToTetraCD>(tet1, tet2, colData);
}
// Analytical object to analytical object
......@@ -137,34 +137,34 @@ makeCollisionDetectionObject(const CollisionDetection::Type type,
auto plane = std::dynamic_pointer_cast<Plane>(collidingGeometryA);
auto sphere = std::dynamic_pointer_cast<Sphere>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(plane, sphere)
return std::make_shared<UnidirectionalPlaneToSphereCD>(plane, sphere, colData);
return std::make_shared<UnidirectionalPlaneToSphereCD>(plane, sphere, colData);
}
case CollisionDetection::Type::BidirectionalPlaneToSphere:
{
auto plane = std::dynamic_pointer_cast<Plane>(collidingGeometryA);
auto sphere = std::dynamic_pointer_cast<Sphere>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(plane, sphere)
return std::make_shared<BidirectionalPlaneToSphereCD>(plane, sphere, colData);
return std::make_shared<BidirectionalPlaneToSphereCD>(plane, sphere, colData);
}
case CollisionDetection::Type::SphereToSphere:
{
auto sphereA = std::dynamic_pointer_cast<Sphere>(collidingGeometryA);
auto sphereB = std::dynamic_pointer_cast<Sphere>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(sphereA, sphereB)
return std::make_shared<SphereToSphereCD>(sphereA, sphereB, colData);
return std::make_shared<SphereToSphereCD>(sphereA, sphereB, colData);
}
case CollisionDetection::Type::SphereToCylinder:
{
auto sphere = std::dynamic_pointer_cast<Sphere>(collidingGeometryB);
auto cylinder = std::dynamic_pointer_cast<Cylinder>(collidingGeometryA);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(sphere, cylinder)
return std::make_shared<SphereToCylinderCD>(sphere, cylinder, colData);
return std::make_shared<SphereToCylinderCD>(sphere, cylinder, colData);
}
case CollisionDetection::Type::MeshToMeshBruteForce:
{
auto meshB = std::dynamic_pointer_cast<SurfaceMesh>(collidingGeometryB);
IMSTK_CHECK_FOR_VALID_GEOMETRIES(collidingGeometryA, meshB)
return std::make_shared<MeshToMeshBruteForceCD>(collidingGeometryA, meshB, colData);
return std::make_shared<MeshToMeshBruteForceCD>(collidingGeometryA, meshB, colData);
}
default:
{
......
......@@ -33,9 +33,8 @@ class Geometry;
/// it will be added to an internal static octree for detecting collision
/// \todo Other collision pair may be considered to use octree too
///
extern std::shared_ptr<CollisionDetection>
makeCollisionDetectionObject(const CollisionDetection::Type type,
std::shared_ptr<Geometry> collidingGeometryA,
std::shared_ptr<Geometry> collidingGeometryB,
std::shared_ptr<CollisionData> colData);
extern std::shared_ptr<CollisionDetection> makeCollisionDetectionObject(const CollisionDetection::Type type,
std::shared_ptr<Geometry> collidingGeometryA,
std::shared_ptr<Geometry> collidingGeometryB,
std::shared_ptr<CollisionData> colData);
}
......@@ -29,6 +29,5 @@ CollisionHandling::CollisionHandling(const Type& type, const Side& side,
m_type(type), m_side(side), m_colData(colData),
m_computeNode(std::make_shared<ComputeNode>(std::bind(&CollisionHandling::processCollisionData, this), "CollisionHandling", true))
{
}
}
\ No newline at end of file
......@@ -33,8 +33,8 @@ namespace imstk
{
PBDCollisionHandling::PBDCollisionHandling(const Side& side,
const std::shared_ptr<CollisionData> colData,
std::shared_ptr<PbdObject> pbdObject1,
std::shared_ptr<PbdObject> pbdObject2) :
std::shared_ptr<PbdObject> pbdObject1,
std::shared_ptr<PbdObject> pbdObject2) :
CollisionHandling(Type::PBD, side, colData),
m_PbdObject1(pbdObject1),
m_PbdObject2(pbdObject2),
......
......@@ -49,8 +49,8 @@ public:
///
PBDCollisionHandling(const Side& side,
const std::shared_ptr<CollisionData> colData,
std::shared_ptr<PbdObject> pbdObject1,
std::shared_ptr<PbdObject> pbdObject2);
std::shared_ptr<PbdObject> pbdObject1,