Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
102 changes: 90 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,23 +1,100 @@
cmake_minimum_required(VERSION 3.12)
project(CollisionAlgorithm VERSION 0.1 LANGUAGES CXX)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)

file(GLOB_RECURSE HEADER_FILES "src/*.h" "src/*.inl")
file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")
file(GLOB_RECURSE SCENES_FILES "scenes/*.scn" "*.xml")
file(GLOB_RECURSE IGNORED_FILES "ignored/*.h" "ignored/*.inl" "ignored/*.cpp")
file(GLOB_RECURSE DEPRECATED_FILES "deprecated/*.h" "deprecated/*.inl" "deprecated/*.cpp")

find_package(Sofa.Simulation.Core REQUIRED)
find_package(Sofa.Component.StateContainer REQUIRED)
find_package(Sofa.Component.Constraint.Lagrangian.Solver REQUIRED)
find_package(Sofa.GL REQUIRED)

#include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ignored")
#include_directories("${CMAKE_CURRENT_SOURCE_DIR}/deprecated")
set(COLLISIONALGORITHM_SRC "src/${PROJECT_NAME}")

set(HEADER_FILES
${COLLISIONALGORITHM_SRC}/config.h.in
${COLLISIONALGORITHM_SRC}/initCollisionAlgorithm.h

${COLLISIONALGORITHM_SRC}/BaseAABBBroadPhase.h
${COLLISIONALGORITHM_SRC}/BaseAlgorithm.h
${COLLISIONALGORITHM_SRC}/BaseElement.h
${COLLISIONALGORITHM_SRC}/BaseGeometry.h
${COLLISIONALGORITHM_SRC}/BaseOperation.h
${COLLISIONALGORITHM_SRC}/BaseProximity.h
${COLLISIONALGORITHM_SRC}/CollisionPipeline.h
${COLLISIONALGORITHM_SRC}/DataDetectionOutput.h
${COLLISIONALGORITHM_SRC}/ElementIterator.h
${COLLISIONALGORITHM_SRC}/InternalData.h

${COLLISIONALGORITHM_SRC}/algorithm/Find2DClosestProximityAlgorithm.h
${COLLISIONALGORITHM_SRC}/algorithm/FindClosestProximityAlgorithm.h
${COLLISIONALGORITHM_SRC}/algorithm/InsertionAlgorithm.h

${COLLISIONALGORITHM_SRC}/broadphase/AABBBroadPhase.h
${COLLISIONALGORITHM_SRC}/broadphase/FullAABBBroadPhase.h

${COLLISIONALGORITHM_SRC}/elements/EdgeElement.h
${COLLISIONALGORITHM_SRC}/elements/PointElement.h
${COLLISIONALGORITHM_SRC}/elements/TetrahedronElement.h
${COLLISIONALGORITHM_SRC}/elements/TriangleElement.h

set_source_files_properties(${IGNORED_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
${COLLISIONALGORITHM_SRC}/filters/DistanceFilter.h

${COLLISIONALGORITHM_SRC}/geometry/EdgeGeometry.h
${COLLISIONALGORITHM_SRC}/geometry/PointGeometry.h
${COLLISIONALGORITHM_SRC}/geometry/SubsetGeometry.h
${COLLISIONALGORITHM_SRC}/geometry/TetrahedronGeometry.h
${COLLISIONALGORITHM_SRC}/geometry/TriangleGeometry.h

${COLLISIONALGORITHM_SRC}/operations/CreateCenterProximity.h
${COLLISIONALGORITHM_SRC}/operations/FindClosestProximity.h
${COLLISIONALGORITHM_SRC}/operations/Project.h

${COLLISIONALGORITHM_SRC}/proximity/EdgeProximity.h
${COLLISIONALGORITHM_SRC}/proximity/FixedProximity.h
${COLLISIONALGORITHM_SRC}/proximity/MechanicalProximity.h
${COLLISIONALGORITHM_SRC}/proximity/MultiProximity.h
${COLLISIONALGORITHM_SRC}/proximity/PointProximity.h
${COLLISIONALGORITHM_SRC}/proximity/TetrahedronProximity.h
${COLLISIONALGORITHM_SRC}/proximity/TriangleProximity.h

${COLLISIONALGORITHM_SRC}/toolbox/EdgeToolBox.h
${COLLISIONALGORITHM_SRC}/toolbox/PointToolBox.h
${COLLISIONALGORITHM_SRC}/toolbox/TetrahedronToolBox.h
${COLLISIONALGORITHM_SRC}/toolbox/TriangleToolBox.h
)

set(SOURCE_FILES
${COLLISIONALGORITHM_SRC}/initCollisionAlgorithm.cpp

${COLLISIONALGORITHM_SRC}/CollisionPipeline.cpp

${COLLISIONALGORITHM_SRC}/algorithm/Find2DClosestProximityAlgorithm.cpp
${COLLISIONALGORITHM_SRC}/algorithm/FindClosestProximityAlgorithm.cpp
${COLLISIONALGORITHM_SRC}/algorithm/InsertionAlgorithm.cpp

${COLLISIONALGORITHM_SRC}/broadphase/AABBBroadPhase.cpp
${COLLISIONALGORITHM_SRC}/broadphase/FullAABBBroadPhase.cpp

${COLLISIONALGORITHM_SRC}/elements/EdgeElement.cpp
${COLLISIONALGORITHM_SRC}/elements/PointElement.cpp
${COLLISIONALGORITHM_SRC}/elements/TetrahedronElement.cpp
${COLLISIONALGORITHM_SRC}/elements/TriangleElement.cpp

${COLLISIONALGORITHM_SRC}/filters/DistanceFilter.cpp

${COLLISIONALGORITHM_SRC}/geometry/EdgeGeometry.cpp
${COLLISIONALGORITHM_SRC}/geometry/PointGeometry.cpp
${COLLISIONALGORITHM_SRC}/geometry/SubsetGeometry.cpp
${COLLISIONALGORITHM_SRC}/geometry/TetrahedronGeometry.cpp
${COLLISIONALGORITHM_SRC}/geometry/TriangleGeometry.cpp

${COLLISIONALGORITHM_SRC}/operations/CreateCenterProximity.cpp
${COLLISIONALGORITHM_SRC}/operations/FindClosestProximity.cpp
${COLLISIONALGORITHM_SRC}/operations/Project.cpp

${COLLISIONALGORITHM_SRC}/toolbox/EdgeToolBox.cpp
${COLLISIONALGORITHM_SRC}/toolbox/PointToolBox.cpp
${COLLISIONALGORITHM_SRC}/toolbox/TetrahedronToolBox.cpp
${COLLISIONALGORITHM_SRC}/toolbox/TriangleToolBox.cpp
)

add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${HEADER_FILES} ${README_FILES})

Expand All @@ -35,4 +112,5 @@ sofa_create_package_with_targets(
INCLUDE_SOURCE_DIR "src"
INCLUDE_INSTALL_DIR ${PROJECT_NAME}
EXAMPLE_INSTALL_DIR "scenes"
)
RELOCATABLE "plugins"
)
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseAABBBroadPhase.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <CollisionAlgorithm/BaseElement.h>
#include <thread>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class BaseAABBBroadPhase : public BaseGeometry::BroadPhase {
public:
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseAlgorithm.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <CollisionAlgorithm/DataDetectionOutput.h>
#include <CollisionAlgorithm/CollisionPipeline.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

/*!
* \class BaseAlgorithm
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <CollisionAlgorithm/BaseProximity.h>
#include <sofa/core/visual/VisualParams.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class PointElement;
class EdgeElement;
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseGeometry.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
#include <CollisionAlgorithm/InternalData.h>


namespace sofa ::collisionAlgorithm {
namespace sofa ::collisionalgorithm {


/*!
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseOperation.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <sofa/helper/NameDecoder.h>
#include <memory>

namespace sofa::collisionAlgorithm::Operations {
namespace sofa::collisionalgorithm::Operations {

template<class A,class B>
class REAL_TYPE_CHECK {
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/BaseProximity.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
#include <sofa/core/topology/Topology.h>
#include <sofa/type/Vec.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

/*!
* \brief The BaseProximity class is the basic abstract proximity class
Expand Down
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/CollisionPipeline.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <CollisionAlgorithm/CollisionPipeline.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerCollisionLoop(sofa::core::ObjectFactory* factory)
{
Expand All @@ -10,4 +10,4 @@ void registerCollisionLoop(sofa::core::ObjectFactory* factory)
"A collision pipeline customized for proximity detection during needle insertion")
.add<CollisionLoop>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/CollisionPipeline.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
#include <sofa/simulation/Node.h>
#include <sofa/helper/AdvancedTimer.h>

namespace sofa ::collisionAlgorithm {
namespace sofa ::collisionalgorithm {

class CollisionComponent : public core::objectmodel::BaseObject {
public:
Expand Down
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/DataDetectionOutput.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace sofa
{

namespace collisionAlgorithm
namespace collisionalgorithm
{

template<class FIRST = BaseProximity,class SECOND = BaseProximity>
Expand Down Expand Up @@ -130,7 +130,7 @@ struct DetectionOutputTypeInfo
};

template<>
struct DataTypeInfo< collisionAlgorithm::DetectionOutput<collisionAlgorithm::BaseProximity::SPtr, collisionAlgorithm::BaseProximity::SPtr> > : public DetectionOutputTypeInfo< collisionAlgorithm::DetectionOutput<collisionAlgorithm::BaseProximity::SPtr, collisionAlgorithm::BaseProximity::SPtr> >
struct DataTypeInfo< collisionalgorithm::DetectionOutput<collisionalgorithm::BaseProximity::SPtr, collisionalgorithm::BaseProximity::SPtr> > : public DetectionOutputTypeInfo< collisionalgorithm::DetectionOutput<collisionalgorithm::BaseProximity::SPtr, collisionalgorithm::BaseProximity::SPtr> >
{
static std::string name() { std::ostringstream o; o << "DetectionOutput"; return o.str(); }
};
Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/ElementIterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#include <CollisionAlgorithm/BaseProximity.h>
#include <CollisionAlgorithm/BaseElement.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class BaseGeometry;

Expand Down
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/InternalData.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include <CollisionAlgorithm/elements/TriangleElement.h>
#include <CollisionAlgorithm/elements/TetrahedronElement.h>

namespace sofa ::collisionAlgorithm {
namespace sofa ::collisionalgorithm {


class InternalDataContainer {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <CollisionAlgorithm/algorithm/Find2DClosestProximityAlgorithm.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerFind2DClosestProximityAlgorithm(sofa::core::ObjectFactory* factory)
{
Expand All @@ -10,4 +10,4 @@ void registerFind2DClosestProximityAlgorithm(sofa::core::ObjectFactory* factory)
"An algorithm to find the closest proximity between two BaseGeometry types in 2D")
.add<Find2DClosestProximityAlgorithm>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <CollisionAlgorithm/operations/Project.h>
#include <CollisionAlgorithm/operations/FindClosestProximity.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class Find2DClosestProximityAlgorithm : public BaseAlgorithm {
public:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <CollisionAlgorithm/algorithm/FindClosestProximityAlgorithm.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerFindClosestProximityAlgorithm(sofa::core::ObjectFactory* factory)
{
Expand All @@ -10,4 +10,4 @@ void registerFindClosestProximityAlgorithm(sofa::core::ObjectFactory* factory)
"An algorithm to find the closest proximity between two BaseGeometry types")
.add<FindClosestProximityAlgorithm>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include <CollisionAlgorithm/operations/Project.h>
#include <CollisionAlgorithm/operations/FindClosestProximity.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class FindClosestProximityAlgorithm : public BaseAlgorithm {
public:
Expand Down
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/algorithm/InsertionAlgorithm.cpp
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#include <CollisionAlgorithm/algorithm/InsertionAlgorithm.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerInsertionAlgorithm(sofa::core::ObjectFactory* factory)
{
factory->registerObjects(sofa::core::ObjectRegistrationData(
"A class implementing a customized needle insertion algorithm")
.add<InsertionAlgorithm>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/algorithm/InsertionAlgorithm.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#include <sofa/component/constraint/lagrangian/solver/ConstraintSolverImpl.h>
#include <sofa/component/statecontainer/MechanicalObject.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{

class InsertionAlgorithm : public BaseAlgorithm
Expand Down Expand Up @@ -308,4 +308,4 @@ class InsertionAlgorithm : public BaseAlgorithm
}
};

} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/broadphase/AABBBroadPhase.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#include <CollisionAlgorithm/broadphase/AABBBroadPhase.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerAABBBroadPhase(sofa::core::ObjectFactory* factory)
{
Expand All @@ -15,4 +15,4 @@ void registerAABBBroadPhase(sofa::core::ObjectFactory* factory)
)")
.add<AABBBroadPhase>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/broadphase/AABBBroadPhase.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <CollisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseElement.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

/**
* @brief A class for broad-phase collision detection using Axis-Aligned Bounding Boxes (AABB).
Expand Down Expand Up @@ -170,4 +170,4 @@ class AABBBroadPhase : public BaseAABBBroadPhase {
type::Vec<2, size_t> m_offset;
};

} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
4 changes: 2 additions & 2 deletions src/CollisionAlgorithm/broadphase/FullAABBBroadPhase.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include <CollisionAlgorithm/broadphase/FullAABBBroadPhase.h>
#include <sofa/core/ObjectFactory.h>

namespace sofa::collisionAlgorithm
namespace sofa::collisionalgorithm
{
void registerFullAABBBroadPhase(sofa::core::ObjectFactory* factory)
{
factory->registerObjects(sofa::core::ObjectRegistrationData("").add<FullAABBBroadPhase>());
}
} // namespace sofa::collisionAlgorithm
} // namespace sofa::collisionalgorithm
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/broadphase/FullAABBBroadPhase.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
#include <CollisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseElement.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

class FullAABBBroadPhase : public BaseAABBBroadPhase {
public:
Expand Down
19 changes: 19 additions & 0 deletions src/CollisionAlgorithm/config.h.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#pragma once

#include <sofa/config.h>
#include <sofa/config/sharedlibrary_defines.h>

#define COLLISIONALGORITHM_VERSION @PROJECT_VERSION@

#ifdef SOFA_BUILD_COLLISIONALGORITHM
# define SOFA_TARGET @PROJECT_NAME@
# define SOFA_COLLISIONALGORITHM_API SOFA_EXPORT_DYNAMIC_LIBRARY

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the good way but I saw that it is just used in the init.cpp files. I think you will need to use it to export the classes as well (or the explicit instanciations if they are templated).
But if you are not on Windows, it will be a bit difficult to do it "blindly" so it may be the best to do it in a other PR and test it on Windows.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for these tips @fredroy!

A question about using this feature properly in SOFA plugins:
I would be using the *_API macro to export classes in the following situations:

  • For base classes that I might want to inherit from and extend in another plugin
  • Derived ones that will end up in a sofa scene as components
  • Some internal classes (like an iterator) that are returned by public functions and should be exposed

and limit the export right there. Would you recommend this approach or perhaps export classes in other cases as well?

#else
# define SOFA_COLLISIONALGORITHM_API SOFA_IMPORT_DYNAMIC_LIBRARY
#endif

namespace sofa::collisionalgorithm
{
constexpr const char* MODULE_NAME = "@PROJECT_NAME@";
constexpr const char* MODULE_VERSION = "@PROJECT_VERSION@";
}
2 changes: 1 addition & 1 deletion src/CollisionAlgorithm/elements/EdgeElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
#include <CollisionAlgorithm/elements/TetrahedronElement.h>
#include <CollisionAlgorithm/proximity/EdgeProximity.h>

namespace sofa::collisionAlgorithm {
namespace sofa::collisionalgorithm {

EdgeElement::SPtr EdgeElement::create(const PointElement::SPtr & p0, const PointElement::SPtr & p1) {
EdgeElement::SPtr res = EdgeElement::SPtr(new EdgeElement());
Expand Down
Loading
Loading