Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
20 changes: 4 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:
-GNinja \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$GITHUB_WORKSPACE/install/CollisionAlgorithm" \
-DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/deps/CollisionAlgorithm/install \
.. \
&& ninja install"
else
Expand All @@ -48,22 +48,10 @@ jobs:
-GNinja \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install/CollisionAlgorithm \
-DCMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/deps/CollisionAlgorithm/install \
..
ninja install
fi
# Move the CollisionAlgorithm installation to match ConstraintGeometry CMake
SRC_PATH="$GITHUB_WORKSPACE/install/CollisionAlgorithm/include/include/CollisionAlgorithm/CollisionAlgorithm/src"
DEST_PATH="$GITHUB_WORKSPACE/install/CollisionAlgorithm/include/CollisionAlgorithm"
# If Windows, convert paths
if [[ "$RUNNER_OS" == "Windows" ]]; then
SRC_PATH=$(cygpath -u "$SRC_PATH")
DEST_PATH=$(cygpath -u "$DEST_PATH")
fi
# Flatten install structure
mkdir -p "$DEST_PATH"
mv "$SRC_PATH"/* "$DEST_PATH"/
rm -rf "$GITHUB_WORKSPACE/install/CollisionAlgorithm/include/include"

- name: Checkout source code
uses: actions/checkout@v2
Expand All @@ -79,7 +67,7 @@ jobs:
&& cd /d %GITHUB_WORKSPACE%/build \
&& cmake \
-GNinja \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake;%GITHUB_WORKSPACE%/install/CollisionAlgorithm \
-DCMAKE_PREFIX_PATH=$SOFA_ROOT/lib/cmake;%GITHUB_WORKSPACE%/deps/CollisionAlgorithm/install/lib/cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install \
../src \
Expand All @@ -91,7 +79,7 @@ jobs:
-GNinja \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake;$GITHUB_WORKSPACE/install/CollisionAlgorithm" \
-DCMAKE_PREFIX_PATH="$SOFA_ROOT/lib/cmake;$GITHUB_WORKSPACE/deps/CollisionAlgorithm/install/lib/cmake" \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$WORKSPACE_INSTALL_PATH" \
../src
Expand Down
97 changes: 62 additions & 35 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,55 +1,82 @@
cmake_minimum_required(VERSION 3.12)
project(ConstraintGeometry VERSION 0.1 LANGUAGES CXX)

set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
find_package(CollisionAlgorithm REQUIRED)
find_package(Sofa.Component.StateContainer REQUIRED)
find_package(Sofa.Component.Constraint.Lagrangian.Solver REQUIRED)
find_package(Sofa.GL REQUIRED)

file(GLOB_RECURSE HEADER_FILES
"src/*.h"
"src/*.inl"
)
set(CONSTRAINTGEOMETRY_SRC "src/${PROJECT_NAME}")

file(GLOB_RECURSE SOURCE_FILES
"src/*.cpp"
)
set(HEADER_FILES
${CONSTRAINTGEOMETRY_SRC}/config.h.in
${CONSTRAINTGEOMETRY_SRC}/initConstraintGeometry.h

file(GLOB_RECURSE SCENES_FILES
"scenes/*.scn"
"*.xml"
)
${CONSTRAINTGEOMETRY_SRC}/BaseConstraint.h
${CONSTRAINTGEOMETRY_SRC}/BaseNormalHandler.h
${CONSTRAINTGEOMETRY_SRC}/ConstraintDirection.h
${CONSTRAINTGEOMETRY_SRC}/ConstraintNormal.h
${CONSTRAINTGEOMETRY_SRC}/ConstraintProximity.h
${CONSTRAINTGEOMETRY_SRC}/ConstraintResponse.h
${CONSTRAINTGEOMETRY_SRC}/InternalConstraint.h

file(GLOB_RECURSE IGNORED_FILES
"ignored/*.h"
"ignored/*.inl"
"ignored/*.cpp"
)
${CONSTRAINTGEOMETRY_SRC}/constraint/BilateralResolution.h
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintBilateral.h
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintInsertion.h
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintUnilateral.h
${CONSTRAINTGEOMETRY_SRC}/constraint/InsertionResolution.h
${CONSTRAINTGEOMETRY_SRC}/constraint/UnilateralResolution.h

${CONSTRAINTGEOMETRY_SRC}/directions/BindDirection.h
${CONSTRAINTGEOMETRY_SRC}/directions/ContactDirection.h
${CONSTRAINTGEOMETRY_SRC}/directions/FirstDirection.h
${CONSTRAINTGEOMETRY_SRC}/directions/FixedFrameDirection.h
${CONSTRAINTGEOMETRY_SRC}/directions/SecondDirection.h

file(GLOB_RECURSE DEPRECATED_FILES
"deprecated/*.h"
"deprecated/*.inl"
"deprecated/*.cpp"
${CONSTRAINTGEOMETRY_SRC}/normalHandler/EdgeNormalHandler.h
${CONSTRAINTGEOMETRY_SRC}/normalHandler/GouraudTriangleNormalHandler.h
${CONSTRAINTGEOMETRY_SRC}/normalHandler/GravityPointNormalHandler.h
${CONSTRAINTGEOMETRY_SRC}/normalHandler/PhongTriangleNormalHandler.h
${CONSTRAINTGEOMETRY_SRC}/normalHandler/VectorPointNormalHandler.h

${CONSTRAINTGEOMETRY_SRC}/operations/ConstraintProximityOperation.h
)

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/ignored")
#include_directories("${CMAKE_CURRENT_SOURCE_DIR}/deprecated")
set(SOURCE_FILES
${CONSTRAINTGEOMETRY_SRC}/initConstraintGeometry.cpp

find_package(CollisionAlgorithm REQUIRED)
find_package(Sofa.Component.StateContainer REQUIRED)
find_package(Sofa.Component.Constraint.Lagrangian.Solver REQUIRED)
find_package(Sofa.GL REQUIRED)
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintInsertion.cpp
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintBilateral.cpp
${CONSTRAINTGEOMETRY_SRC}/constraint/ConstraintUnilateral.cpp

set_source_files_properties(${IGNORED_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
${CONSTRAINTGEOMETRY_SRC}/directions/BindDirection.cpp
${CONSTRAINTGEOMETRY_SRC}/directions/ContactDirection.cpp
${CONSTRAINTGEOMETRY_SRC}/directions/FirstDirection.cpp
${CONSTRAINTGEOMETRY_SRC}/directions/FixedFrameDirection.cpp
${CONSTRAINTGEOMETRY_SRC}/directions/SecondDirection.cpp

${CONSTRAINTGEOMETRY_SRC}/normalHandler/EdgeNormalHandler.cpp
${CONSTRAINTGEOMETRY_SRC}/normalHandler/GouraudTriangleNormalHandler.cpp
${CONSTRAINTGEOMETRY_SRC}/normalHandler/GravityPointNormalHandler.cpp
${CONSTRAINTGEOMETRY_SRC}/normalHandler/PhongTriangleNormalHandler.cpp
${CONSTRAINTGEOMETRY_SRC}/normalHandler/VectorPointNormalHandler.cpp
)

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

add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${HEADER_FILES} ${SCENES_FILES} ${IGNORED_FILES} ${DEPRECATED_FILES} ${README_FILES} )
set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "-DPLUGIN_DATA_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/\"")
target_link_libraries(${PROJECT_NAME}
CollisionAlgorithm
Sofa.Component.StateContainer
Sofa.Component.Constraint.Lagrangian.Solver
Sofa.GL
)

## Install rules for the library and headers; CMake package configurations files
set(${PROJECT_NAME}_INCLUDE_DIRS "include/${PROJECT_NAME}")
target_include_directories(${PROJECT_NAME} PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>")
target_include_directories(${PROJECT_NAME} PUBLIC "$<INSTALL_INTERFACE:${${PROJECT_NAME}_INCLUDE_DIRS}>")
sofa_create_package_with_targets(PACKAGE_NAME ${PROJECT_NAME} PACKAGE_VERSION 0.1 TARGETS ${PROJECT_NAME} INCLUDE_INSTALL_DIR ${${PROJECT_NAME}_INCLUDE_DIRS})
sofa_create_package_with_targets(
PACKAGE_NAME ${PROJECT_NAME}
PACKAGE_VERSION ${PROJECT_VERSION}
TARGETS ${PROJECT_NAME} AUTO_SET_TARGET_PROPERTIES
INCLUDE_SOURCE_DIR "src"
INCLUDE_INSTALL_DIR ${PROJECT_NAME}
EXAMPLE_INSTALL_DIR "scenes"
RELOCATABLE "plugins"
)
3 changes: 3 additions & 0 deletions ConstraintGeometryConfig.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
@PACKAGE_INIT@

find_package(CollisionAlgorithm QUIET REQUIRED)
find_package(Sofa.Component.StateContainer QUIET REQUIRED)
find_package(Sofa.Component.Constraint.Lagrangian.Solver QUIET REQUIRED)
find_package(Sofa.GL QUIET REQUIRED)

if(NOT TARGET @PROJECT_NAME@)
include("${CMAKE_CURRENT_LIST_DIR}/@PROJECT_NAME@Targets.cmake")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
#pragma once

#include <sofa/collisionAlgorithm/BaseAlgorithm.h>
#include <sofa/collisionAlgorithm/BaseGeometry.h>
#include <CollisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseGeometry.h>
#include <sofa/core/behavior/BaseLagrangianConstraint.h>
#include <sofa/collisionAlgorithm/BaseProximity.h>
#include <sofa/constraintGeometry/ConstraintNormal.h>
#include <sofa/constraintGeometry/InternalConstraint.h>
#include <sofa/constraintGeometry/ConstraintResponse.h>
#include <sofa/constraintGeometry/ConstraintDirection.h>
#include <CollisionAlgorithm/BaseProximity.h>
#include <ConstraintGeometry/ConstraintNormal.h>
#include <ConstraintGeometry/InternalConstraint.h>
#include <ConstraintGeometry/ConstraintResponse.h>
#include <ConstraintGeometry/ConstraintDirection.h>

namespace sofa::constraintGeometry {
namespace sofa::constraintgeometry {


class BaseConstraint : public sofa::core::behavior::BaseLagrangianConstraint{
Expand All @@ -35,16 +35,16 @@ class BaseConstraint : public sofa::core::behavior::BaseLagrangianConstraint{
/*!
* \brief The BaseConstraint abstract class is the implementation of sofa's abstract BaseLagrangianConstraint
*/
template<class FIRST = collisionAlgorithm::BaseProximity, class SECOND = collisionAlgorithm::BaseProximity>
template<class FIRST = collisionalgorithm::BaseProximity, class SECOND = collisionalgorithm::BaseProximity>
class TBaseConstraint : public BaseConstraint {
public:
SOFA_CLASS(BaseConstraint, sofa::core::behavior::BaseLagrangianConstraint);

typedef collisionAlgorithm::BaseProximity BaseProximity;
typedef collisionalgorithm::BaseProximity BaseProximity;

Data<double> d_drawScale;
Data<bool> d_draw;
Data<collisionAlgorithm::DetectionOutput<FIRST,SECOND> > d_input; // THIS SHOULD BE REPLACED BY A PAIR OF CST PROXIMITY INPUT
Data<collisionalgorithm::DetectionOutput<FIRST,SECOND> > d_input; // THIS SHOULD BE REPLACED BY A PAIR OF CST PROXIMITY INPUT
Data<std::vector<BaseInternalConstraint::SPtr> > d_container;

TBaseConstraint()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,23 @@
#pragma once

#include <sofa/collisionAlgorithm/CollisionPipeline.h>
#include <sofa/collisionAlgorithm/BaseProximity.h>
#include <sofa/constraintGeometry/ConstraintProximity.h>
#include <sofa/collisionAlgorithm/BaseGeometry.h>
#include <sofa/constraintGeometry/operations/ConstraintProximityOperation.h>
#include <sofa/collisionAlgorithm/operations/CreateCenterProximity.h>
#include <CollisionAlgorithm/CollisionPipeline.h>
#include <CollisionAlgorithm/BaseProximity.h>
#include <ConstraintGeometry/ConstraintProximity.h>
#include <CollisionAlgorithm/BaseGeometry.h>
#include <ConstraintGeometry/operations/ConstraintProximityOperation.h>
#include <CollisionAlgorithm/operations/CreateCenterProximity.h>

namespace sofa ::constraintGeometry {
namespace sofa ::constraintgeometry {

/*!
* \brief The BaseConstraint abstract class is the implementation of sofa's abstract BaseConstraint
*/
class BaseNormalHandler : public collisionAlgorithm::CollisionComponent {
class BaseNormalHandler : public collisionalgorithm::CollisionComponent {
public:
SOFA_ABSTRACT_CLASS(BaseNormalHandler, collisionAlgorithm::CollisionComponent);
SOFA_ABSTRACT_CLASS(BaseNormalHandler, collisionalgorithm::CollisionComponent);

typedef collisionAlgorithm::BaseGeometry BaseGeometry;
typedef collisionAlgorithm::BaseProximity BaseProximity;
typedef collisionalgorithm::BaseGeometry BaseGeometry;
typedef collisionalgorithm::BaseProximity BaseProximity;

void init() {
if (getGeometry()==NULL) {
Expand Down Expand Up @@ -46,7 +46,7 @@ class BaseNormalHandler : public collisionAlgorithm::CollisionComponent {
glDisable(GL_LIGHTING);
if (color[3] == 0.0) return;

collisionAlgorithm::Operations::CreateCenterProximity::FUNC operation = collisionAlgorithm::Operations::CreateCenterProximity::Operation::get(getGeometry()->pointBegin());
collisionalgorithm::Operations::CreateCenterProximity::FUNC operation = collisionalgorithm::Operations::CreateCenterProximity::Operation::get(getGeometry()->pointBegin());

for (auto it = getGeometry()->pointBegin();it != getGeometry()->end(); it++) {
auto prox = operation(it->element());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
#pragma once

#include <sofa/collisionAlgorithm/BaseAlgorithm.h>
#include <sofa/collisionAlgorithm/BaseGeometry.h>
#include <CollisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseGeometry.h>
#include <sofa/core/behavior/BaseLagrangianConstraint.h>
#include <sofa/constraintGeometry/ConstraintNormal.h>
#include <sofa/constraintGeometry/InternalConstraint.h>
#include <ConstraintGeometry/ConstraintNormal.h>
#include <ConstraintGeometry/InternalConstraint.h>

namespace sofa::constraintGeometry {
namespace sofa::constraintgeometry {

/*!
* \brief The BaseConstraint abstract class is the implementation of sofa's abstract BaseLagrangianConstraint
Expand All @@ -15,7 +15,7 @@ class ConstraintDirection : public sofa::core::objectmodel::BaseObject {
public:
SOFA_CLASS(ConstraintDirection, sofa::core::objectmodel::BaseObject);

typedef collisionAlgorithm::BaseProximity BaseProximity;
typedef collisionalgorithm::BaseProximity BaseProximity;

virtual ConstraintNormal createConstraintsNormal(const BaseProximity::SPtr & first, const BaseProximity::SPtr & second) const = 0;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

#include <sofa/type/vector.h>
#include <sofa/defaulttype/VecTypes.h>
#include <sofa/collisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseAlgorithm.h>

namespace sofa::constraintGeometry {
namespace sofa::constraintgeometry {

/*!
* \brief The ConstraintNormal class
Expand All @@ -14,9 +14,9 @@ namespace sofa::constraintGeometry {
class ConstraintNormal {
public:

typedef collisionAlgorithm::BaseProximity BaseProximity;
typedef collisionAlgorithm::BaseBaseProximity FIRST;
typedef collisionAlgorithm::BaseBaseProximity SECOND;
typedef collisionalgorithm::BaseProximity BaseProximity;
typedef collisionalgorithm::BaseBaseProximity FIRST;
typedef collisionalgorithm::BaseBaseProximity SECOND;
typedef std::function<double(const typename FIRST::SPtr &, const typename SECOND::SPtr &, const type::Vec3 &)> ViolationFunction;

static double defaultViolationFunction(const typename FIRST::SPtr & first, const typename SECOND::SPtr & second, const type::Vec3 & normal) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#pragma once

#include <sofa/collisionAlgorithm/BaseProximity.h>
#include <CollisionAlgorithm/BaseProximity.h>
#include <memory>

namespace sofa::constraintGeometry {
namespace sofa::constraintgeometry {

class ConstraintProximity : public virtual collisionAlgorithm::BaseBaseProximity {
class ConstraintProximity : public virtual collisionalgorithm::BaseBaseProximity {
public:

typedef std::shared_ptr<ConstraintProximity> SPtr;
Expand Down Expand Up @@ -66,7 +66,7 @@ class TConstraintProximity : public ConstraintProximity {
};

template<class PROXIMITY>
class BaseProximityNormal : public PROXIMITY, public constraintGeometry::ConstraintProximity {
class BaseProximityNormal : public PROXIMITY, public constraintgeometry::ConstraintProximity {
public:
typedef std::shared_ptr<BaseProximityNormal> SPtr;

Expand Down Expand Up @@ -100,7 +100,7 @@ class DefaultConstraintProximity : public ConstraintProximity {

typedef std::shared_ptr<DefaultConstraintProximity> SPtr;

DefaultConstraintProximity(const collisionAlgorithm::BaseProximity::SPtr & p)
DefaultConstraintProximity(const collisionalgorithm::BaseProximity::SPtr & p)
: m_prox(p) {}

sofa::type::Vec3 getPosition(core::VecCoordId v = core::vec_id::write_access::position) const override {
Expand All @@ -123,12 +123,12 @@ class DefaultConstraintProximity : public ConstraintProximity {
return type::Vec3();
}

static ConstraintProximity::SPtr create(const collisionAlgorithm::BaseProximity::SPtr & p) {
static ConstraintProximity::SPtr create(const collisionalgorithm::BaseProximity::SPtr & p) {
return ConstraintProximity::SPtr(new DefaultConstraintProximity(p));
}

protected:
collisionAlgorithm::BaseProximity::SPtr m_prox;
collisionalgorithm::BaseProximity::SPtr m_prox;
};


Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
#pragma once

#include <sofa/collisionAlgorithm/BaseAlgorithm.h>
#include <sofa/collisionAlgorithm/BaseGeometry.h>
#include <CollisionAlgorithm/BaseAlgorithm.h>
#include <CollisionAlgorithm/BaseGeometry.h>
#include <sofa/core/behavior/BaseLagrangianConstraint.h>
#include <sofa/constraintGeometry/ConstraintNormal.h>
#include <sofa/constraintGeometry/InternalConstraint.h>
#include <ConstraintGeometry/ConstraintNormal.h>
#include <ConstraintGeometry/InternalConstraint.h>

namespace sofa {

namespace constraintGeometry {
namespace constraintgeometry {

/*!
* \brief The BaseConstraint abstract class is the implementation of sofa's abstract BaseLagrangianConstraint
Expand Down
Loading
Loading