1 /* 2 * Software License Agreement (BSD License) 3 * 4 * Copyright (c) 2011-2014, Willow Garage, Inc. 5 * Copyright (c) 2014-2016, Open Source Robotics Foundation 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions 10 * are met: 11 * 12 * * Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * * Redistributions in binary form must reproduce the above 15 * copyright notice, this list of conditions and the following 16 * disclaimer in the documentation and/or other materials provided 17 * with the distribution. 18 * * Neither the name of Open Source Robotics Foundation nor the names of its 19 * contributors may be used to endorse or promote products derived 20 * from this software without specific prior written permission. 21 * 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 23 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 24 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 25 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 26 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 27 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 28 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 30 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33 * POSSIBILITY OF SUCH DAMAGE. 34 */ 35 36 /** @author Jia Pan */ 37 38 #ifndef FCL_COLLISIONRESULT_H 39 #define FCL_COLLISIONRESULT_H 40 41 #include <set> 42 #include <vector> 43 #include "fcl/common/types.h" 44 #include "fcl/narrowphase/contact.h" 45 #include "fcl/narrowphase/cost_source.h" 46 47 namespace fcl 48 { 49 50 /// @brief collision result 51 template <typename S> 52 struct FCL_EXPORT CollisionResult 53 { 54 private: 55 /// @brief contact information 56 std::vector<Contact<S>> contacts; 57 58 /// @brief cost sources 59 std::set<CostSource<S>> cost_sources; 60 61 public: 62 Vector3<S> cached_gjk_guess; 63 64 public: 65 CollisionResult(); 66 67 /// @brief add one contact into result structure 68 void addContact(const Contact<S>& c); 69 70 /// @brief add one cost source into result structure 71 void addCostSource(const CostSource<S>& c, std::size_t num_max_cost_sources); 72 73 /// @brief return binary collision result 74 bool isCollision() const; 75 76 /// @brief number of contacts found 77 size_t numContacts() const; 78 79 /// @brief number of cost sources found 80 size_t numCostSources() const; 81 82 /// @brief get the i-th contact calculated 83 const Contact<S>& getContact(size_t i) const; 84 85 /// @brief get all the contacts 86 void getContacts(std::vector<Contact<S>>& contacts_); 87 88 /// @brief get all the cost sources 89 void getCostSources(std::vector<CostSource<S>>& cost_sources_); 90 91 /// @brief clear the results obtained 92 void clear(); 93 }; 94 95 using CollisionResultf = CollisionResult<float>; 96 using CollisionResultd = CollisionResult<double>; 97 98 } // namespace fcl 99 100 #include "fcl/narrowphase/collision_result-inl.h" 101 102 #endif 103