9#ifndef IGL_COPYLEFT_CGAL_BINARY_WINDING_NUMBER_OPERATIONS_H
10#define IGL_COPYLEFT_CGAL_BINARY_WINDING_NUMBER_OPERATIONS_H
31 template <igl::MeshBooleanType Op>
34 template<
typename DerivedW>
36 const Eigen::MatrixBase<DerivedW>& )
const {
37 throw (std::runtime_error(
"not implemented!"));
45 template<
typename DerivedW>
47 const Eigen::MatrixBase<DerivedW>& win_nums)
const
49 for(
int i = 0;i<win_nums.size();i++)
51 if(win_nums(i) > 0)
return true;
61 template<
typename DerivedW>
63 const Eigen::MatrixBase<DerivedW>& win_nums)
const
65 for(
int i = 0;i<win_nums.size();i++)
67 if(win_nums(i)<=0)
return false;
77 template<
typename DerivedW>
79 const Eigen::MatrixBase<DerivedW>& win_nums)
const
81 assert(win_nums.size()>1);
83 bool union_rest =
false;
84 for(
int i = 1;i<win_nums.size();i++)
86 union_rest = union_rest || win_nums(i) > 0;
90 return win_nums(0) > 0 && !union_rest;
98 template<
typename DerivedW>
100 const Eigen::MatrixBase<DerivedW>& win_nums)
const
104 for(
int i = 0;i<win_nums.size();i++)
106 if(win_nums(i) > 0)
count++;
108 return count % 2 == 1;
116 template<
typename DerivedW>
118 const Eigen::MatrixBase<DerivedW>& )
const {
138 template<KeeperType T>
141 template<
typename DerivedW>
143 const Eigen::MatrixBase<DerivedW>& )
const {
144 throw std::runtime_error(
"Not implemented");
154 if (in_w > 0 && out_w <= 0)
return 1;
155 else if (in_w <= 0 && out_w > 0)
return -1;
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &win_nums) const
Definition BinaryWindingNumberOperations.h:62
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &win_nums) const
Definition BinaryWindingNumberOperations.h:78
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &) const
Definition BinaryWindingNumberOperations.h:117
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &win_nums) const
Definition BinaryWindingNumberOperations.h:46
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &win_nums) const
Definition BinaryWindingNumberOperations.h:99
Binary winding number operations.
Definition BinaryWindingNumberOperations.h:32
DerivedW::Scalar operator()(const Eigen::MatrixBase< DerivedW > &) const
Definition BinaryWindingNumberOperations.h:35
short operator()(T, T) const
Definition BinaryWindingNumberOperations.h:165
short operator()(T out_w, T in_w) const
Definition BinaryWindingNumberOperations.h:153
Filter winding numbers according to keep policy.
Definition BinaryWindingNumberOperations.h:139
short operator()(const Eigen::MatrixBase< DerivedW > &) const
Definition BinaryWindingNumberOperations.h:142
BinaryWindingNumberOperations< MESH_BOOLEAN_TYPE_INTERSECT > BinaryIntersect
Definition BinaryWindingNumberOperations.h:124
BinaryWindingNumberOperations< MESH_BOOLEAN_TYPE_UNION > BinaryUnion
Definition BinaryWindingNumberOperations.h:123
KeeperType
Types of Keep policies.
Definition BinaryWindingNumberOperations.h:130
@ KEEP_ALL
Keep everything.
Definition BinaryWindingNumberOperations.h:134
@ KEEP_INSIDE
Keep only inside.
Definition BinaryWindingNumberOperations.h:132
WindingNumberFilter< KEEP_INSIDE > KeepInside
Definition BinaryWindingNumberOperations.h:170
WindingNumberFilter< KEEP_ALL > KeepAll
Definition BinaryWindingNumberOperations.h:171
BinaryWindingNumberOperations< MESH_BOOLEAN_TYPE_RESOLVE > BinaryResolve
Definition BinaryWindingNumberOperations.h:127
BinaryWindingNumberOperations< MESH_BOOLEAN_TYPE_XOR > BinaryXor
Definition BinaryWindingNumberOperations.h:126
BinaryWindingNumberOperations< MESH_BOOLEAN_TYPE_MINUS > BinaryMinus
Definition BinaryWindingNumberOperations.h:125
@ MESH_BOOLEAN_TYPE_MINUS
A \ B.
Definition MeshBooleanType.h:20
@ MESH_BOOLEAN_TYPE_XOR
A ⊕ B.
Definition MeshBooleanType.h:22
@ MESH_BOOLEAN_TYPE_INTERSECT
A ∩ B.
Definition MeshBooleanType.h:18
@ MESH_BOOLEAN_TYPE_UNION
A ∪ B.
Definition MeshBooleanType.h:16
@ MESH_BOOLEAN_TYPE_RESOLVE
Resolve intersections without removing any non-coplanar faces.
Definition MeshBooleanType.h:24
void count(const Eigen::SparseMatrix< XType > &X, const int dim, Eigen::SparseVector< SType > &S)
Count the number of non-zeros in the columns or rows of a sparse matrix.