mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 04:31:15 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			54 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // This file is part of libigl, a simple c++ geometry processing library.
 | |
| //
 | |
| // Copyright (C) 2014 Alec Jacobson <alecjacobson@gmail.com>
 | |
| //
 | |
| // This Source Code Form is subject to the terms of the Mozilla Public License
 | |
| // v. 2.0. If a copy of the MPL was not distributed with this file, You can
 | |
| // obtain one at http://mozilla.org/MPL/2.0/.
 | |
| #include "point_mesh_squared_distance.h"
 | |
| #include "AABB.h"
 | |
| #include <cassert>
 | |
| 
 | |
| template <
 | |
|   typename DerivedP,
 | |
|   typename DerivedV,
 | |
|   typename DerivedsqrD,
 | |
|   typename DerivedI,
 | |
|   typename DerivedC>
 | |
| IGL_INLINE void igl::point_mesh_squared_distance(
 | |
|   const Eigen::PlainObjectBase<DerivedP> & P,
 | |
|   const Eigen::PlainObjectBase<DerivedV> & V,
 | |
|   const Eigen::MatrixXi & Ele,
 | |
|   Eigen::PlainObjectBase<DerivedsqrD> & sqrD,
 | |
|   Eigen::PlainObjectBase<DerivedI> & I,
 | |
|   Eigen::PlainObjectBase<DerivedC> & C)
 | |
| {
 | |
|   using namespace std;
 | |
|   const size_t dim = P.cols();
 | |
|   assert((dim == 2 || dim == 3) && "P.cols() should be 2 or 3");
 | |
|   assert(P.cols() == V.cols() && "P.cols() should equal V.cols()");
 | |
|   switch(dim)
 | |
|   {
 | |
|     default:
 | |
|       assert(false && "Unsupported dim");
 | |
|       // fall-through and pray
 | |
|     case 3:
 | |
|     {
 | |
|       AABB<DerivedV,3> tree;
 | |
|       tree.init(V,Ele);
 | |
|       return tree.squared_distance(V,Ele,P,sqrD,I,C);
 | |
|     }
 | |
|     case 2:
 | |
|     {
 | |
|       AABB<DerivedV,2> tree;
 | |
|       tree.init(V,Ele);
 | |
|       return tree.squared_distance(V,Ele,P,sqrD,I,C);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| #ifdef IGL_STATIC_LIBRARY
 | |
| template void igl::point_mesh_squared_distance<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
 | |
| template void igl::point_mesh_squared_distance<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<int, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, -1, 0, -1, -1> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> >&);
 | |
| template void igl::point_mesh_squared_distance<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<double, -1, 1, 0, -1, 1>, Eigen::Matrix<long, -1, 1, 0, -1, 1>, Eigen::Matrix<double, -1, 3, 0, -1, 3> >(Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::Matrix<int, -1, -1, 0, -1, -1> const&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<long, -1, 1, 0, -1, 1> >&, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 3, 0, -1, 3> >&);
 | |
| #endif
 | 
