Skip to content

Commit 3b77951

Browse files
committed
2 parents 820d242 + 446d32e commit 3b77951

File tree

5 files changed

+93
-121
lines changed

5 files changed

+93
-121
lines changed

attic/skip/edge_flaps.cpp

Lines changed: 0 additions & 114 deletions
This file was deleted.

src/edge_flaps.cpp

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#include <common.h>
2+
#include <npe.h>
3+
#include <typedefs.h>
4+
5+
#include <igl/edge_flaps.h>
6+
7+
const char *ds_edge_flaps = R"igl_Qu8mg5v7(
8+
9+
Determine "edge flaps": two faces on either side of a unique edge (assumes edge-manifold mesh)
10+
11+
12+
Parameters
13+
----------
14+
15+
F #F by 3 list of face indices
16+
17+
Returns
18+
-------
19+
20+
E #E by 2 list of edge indices into V.
21+
EMAP #F*3 list of indices into E, mapping each directed edge to unique
22+
unique edge in E
23+
EF #E by 2 list of edge flaps, EF(e,0)=f means e=(i-->j) is the edge of
24+
F(f,:) opposite the vth corner, where EI(e,0)=v. Similarly EF(e,1) "
25+
e=(j->i)
26+
EI #E by 2 list of edge flap corners (see above).
27+
28+
See also
29+
--------
30+
31+
32+
Notes
33+
-----
34+
None
35+
36+
Examples
37+
--------
38+
39+
)igl_Qu8mg5v7";
40+
41+
npe_function(edge_flaps)
42+
npe_doc(ds_edge_flaps)
43+
44+
npe_arg(f, dense_int, dense_long, dense_longlong)
45+
46+
47+
npe_begin_code()
48+
assert_valid_tri_mesh_faces(f);
49+
50+
Eigen::MatrixXi f_copy = f.template cast<int>();
51+
Eigen::MatrixXi e_copy;
52+
Eigen::VectorXi emap_copy;
53+
Eigen::MatrixXi ef_copy;
54+
Eigen::MatrixXi ei_copy;
55+
igl::edge_flaps(f_copy, e_copy, emap_copy, ef_copy, ei_copy);
56+
57+
EigenDense<npe_Scalar_f> e = e_copy.template cast<npe_Scalar_f>();
58+
EigenDense<npe_Scalar_f> emap = emap_copy.template cast<npe_Scalar_f>();
59+
EigenDense<npe_Scalar_f> ef = ef_copy.template cast<npe_Scalar_f>();
60+
EigenDense<npe_Scalar_f> ei = ei_copy.template cast<npe_Scalar_f>();
61+
return std::make_tuple(npe::move(e), npe::move(emap), npe::move(ef), npe::move(ei));
62+
63+
npe_end_code()
64+
65+

src/flip_avoiding_line_search.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,16 @@ npe_arg(cur_energy, double)
6464
npe_begin_code()
6565
assert_shapes_match(cur_v, dst_v, "cur_v", "dst_v");
6666
assert_valid_tet_or_tri_mesh_faces(f);
67+
if(f.cols() == 3)
68+
{
69+
assert_cols_equals(cur_v, 2, "cur_v");
70+
assert_cols_equals(dst_v, 2, "dst_v");
71+
}
72+
else
73+
{
74+
assert_cols_equals(cur_v, 3, "cur_v");
75+
assert_cols_equals(dst_v, 3, "dst_v");
76+
}
6777

6878
//TODO: remove __copy
6979
Eigen::MatrixXi f_copy = f.template cast<int>();

src/sparse_voxel_grid.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,18 @@ npe_arg(expected_number_of_cubes, int)
5353

5454

5555
npe_begin_code()
56+
assert_size_equals(p0, 3, "p0");
5657

5758
EigenDenseFloat cs;
5859
EigenDenseFloat cv;
5960
EigenDenseInt ci;
60-
igl::sparse_voxel_grid(p0, scalar_func, eps, expected_number_of_cubes, cs, cv, ci);
61+
Eigen::Matrix<typename EigenDenseFloat::Scalar, 1, 3> p0_copy;
62+
if(p0.cols() == 1)
63+
p0_copy = p0.transpose();
64+
else
65+
p0_copy = p0;
66+
67+
igl::sparse_voxel_grid(p0_copy, scalar_func, eps, expected_number_of_cubes, cs, cv, ci);
6168
return std::make_tuple(npe::move(cs), npe::move(cv), npe::move(ci));
6269

6370
npe_end_code()

tests/test_basic.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2298,17 +2298,21 @@ def test_fast_winding_number_for_meshes(self):
22982298
pass
22992299

23002300
def test_flip_avoiding_line_search(self):
2301-
#def fun(v):
2302-
# return 0.5
2303-
#energy, vr = igl.flip_avoiding_line_search(self.f1, self.v1, -self.v1, fun, 10.0)
2301+
def fun(v):
2302+
return 0.5
2303+
energy, vr = igl.flip_avoiding_line_search(self.f1, self.v1, -self.v1, fun, 10.0)
23042304
# TODO: fix function assertion fail
23052305
pass
23062306

2307+
def test_edge_flaps(self):
2308+
# TODO
2309+
e, emap, ef, ei = igl.edge_flaps(self.f2)
2310+
pass
2311+
23072312
def test_circulation(self):
23082313
pass
2309-
# difficult data
2310-
# _, e, emap = igl.crouzeix_raviart_cotmatrix(self.v1, self.f1)
2311-
# ret = igl.circulation(0, False, emap, e, e)
2314+
# e, emap, ef, ei = igl.edge_flaps(self.f2)
2315+
# ret = igl.circulation(0, False, emap, ef, ei)
23122316
# self.assertTrue(type(ret) == list)
23132317
# self.assertTrue(type(ret[0]) == int)
23142318

0 commit comments

Comments
 (0)