mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-27 10:41:15 -06:00
Merged branch 'dev_native' into lm_sla_supports_auto
Added igl library files
This commit is contained in:
commit
7681d00ee5
2865 changed files with 142806 additions and 22325 deletions
117
src/igl/IndexComparison.h
Normal file
117
src/igl/IndexComparison.h
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
// This file is part of libigl, a simple c++ geometry processing library.
|
||||
//
|
||||
// Copyright (C) 2013 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/.
|
||||
#ifndef IGL_INDEXCOMPARISON_H
|
||||
#define IGL_INDEXCOMPARISON_H
|
||||
#include <iostream>
|
||||
namespace igl{
|
||||
// Comparison struct used by sort
|
||||
// http://bytes.com/topic/c/answers/132045-sort-get-index
|
||||
|
||||
// For use with functions like std::sort
|
||||
template<class T> struct IndexLessThan
|
||||
{
|
||||
IndexLessThan(const T arr) : arr(arr) {}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
return arr[a] < arr[b];
|
||||
}
|
||||
const T arr;
|
||||
};
|
||||
|
||||
// For use with functions like std::unique
|
||||
template<class T> struct IndexEquals
|
||||
{
|
||||
IndexEquals(const T arr) : arr(arr) {}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
return arr[a] == arr[b];
|
||||
}
|
||||
const T arr;
|
||||
};
|
||||
|
||||
// For use with functions like std::sort
|
||||
template<class T> struct IndexVectorLessThan
|
||||
{
|
||||
IndexVectorLessThan(const T & vec) : vec ( vec) {}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
return vec(a) < vec(b);
|
||||
}
|
||||
const T & vec;
|
||||
};
|
||||
|
||||
// For use with functions like std::sort
|
||||
template<class T> struct IndexDimLessThan
|
||||
{
|
||||
IndexDimLessThan(const T & mat,const int & dim, const int & j) :
|
||||
mat(mat),
|
||||
dim(dim),
|
||||
j(j)
|
||||
{}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
if(dim == 1)
|
||||
{
|
||||
return mat(a,j) < mat(b,j);
|
||||
}else
|
||||
{
|
||||
return mat(j,a) < mat(j,b);
|
||||
}
|
||||
}
|
||||
const T & mat;
|
||||
const int & dim;
|
||||
const int & j;
|
||||
};
|
||||
|
||||
// For use with functions like std::sort
|
||||
template<class T> struct IndexRowLessThan
|
||||
{
|
||||
IndexRowLessThan(const T & mat) : mat ( mat) {}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
const int cols = mat.cols();
|
||||
// Lexicographical order
|
||||
for(int j = 0;j<cols;j++)
|
||||
{
|
||||
if(mat(a,j) > mat(b,j))
|
||||
{
|
||||
return false;
|
||||
} else if(mat(a,j) < mat(b,j))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// equality is false
|
||||
return false;
|
||||
}
|
||||
const T & mat;
|
||||
};
|
||||
|
||||
// For use with functions like std::sort
|
||||
template<class T> struct IndexRowEquals
|
||||
{
|
||||
IndexRowEquals(const T & mat) : mat ( mat) {}
|
||||
bool operator()(const size_t a, const size_t b) const
|
||||
{
|
||||
const int cols = mat.cols();
|
||||
// Lexicographical order
|
||||
for(int j = 0;j<cols;j++)
|
||||
{
|
||||
if(mat(a,j) != mat(b,j))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
const T & mat;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue