diff --git a/CMakeLists.txt b/CMakeLists.txt index ba1bf98e01c2ef857f01b26d8dc971d834e44ef0..b1856dcc0f900cd82915f06f0e59b4557d6d993c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -245,6 +245,7 @@ SET(${PROJECT_NAME}_HEADERS include/hpp/fcl/distance_func_matrix.h include/hpp/fcl/collision.h include/hpp/fcl/collision_func_matrix.h + include/hpp/fcl/contact_patch.h include/hpp/fcl/distance.h include/hpp/fcl/math/matrix_3f.h include/hpp/fcl/math/vec_3f.h diff --git a/include/hpp/fcl/contact_patch.h b/include/hpp/fcl/contact_patch.h new file mode 100644 index 0000000000000000000000000000000000000000..4a9a32f694395b4694807a59963d75e527035b11 --- /dev/null +++ b/include/hpp/fcl/contact_patch.h @@ -0,0 +1,60 @@ +/* + * Software License Agreement (BSD License) + * + * Copyright (c) 2024, INRIA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Open Source Robotics Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** \author Louis Montaut */ + +#ifndef HPP_FCL_CONTACT_PATCH_H +#define HPP_FCL_CONTACT_PATCH_H + +#include "hpp/fcl/data_types.h" +#include "hpp/fcl/collision_data.h" + +namespace hpp { +namespace fcl { + +/// @brief Main contact patch computation interface. +/// @note Please see @ref ContactPatchRequest and @ref ContactPatchResult for +/// more info on the content of the input/output of this function. Also, please +/// read @ref ContactPatch if you want to fully understand what is meant by +/// "contact patch". +void computeContactPatch(const CollisionGeometry* o1, const Transform3f& tf1, + const CollisionGeometry* o2, const Transform3f& tf2, + const CollisionResult& collision_result, + const ContactPatchRequest& request, + ContactPatchResult& result); + +} // namespace fcl +} // namespace hpp + +#endif diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3699973b7d028da1a088fc9734b930e849269e36..2e993dc40955601d5f71eb59a73828955ad7f033 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,6 +35,7 @@ set(LIBRARY_NAME ${PROJECT_NAME}) set(${LIBRARY_NAME}_SOURCES collision.cpp + contact_patch.cpp distance_func_matrix.cpp collision_data.cpp collision_node.cpp diff --git a/src/contact_patch.cpp b/src/contact_patch.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c47e257602aada97f29e60e52b2dd7afbe001f3c --- /dev/null +++ b/src/contact_patch.cpp @@ -0,0 +1,56 @@ +/* + * Software License Agreement (BSD License) + * + * Copyright (c) 2024, INRIA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Open Source Robotics Foundation nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +/** \author Louis Montaut */ + +#include "hpp/fcl/contact_patch.h" + +namespace hpp { +namespace fcl { + +void computeContactPatch(const CollisionGeometry* o1, const Transform3f& tf1, + const CollisionGeometry* o2, const Transform3f& tf2, + const CollisionResult& collision_result, + const ContactPatchRequest& request, + ContactPatchResult& result) { + // Before doing any computation, we initialize and clear the input result. + result.initialize(request); + + if (!collision_result.isCollision()) { + return; + } +} + +} // namespace fcl +} // namespace hpp