Skip to content

Commit 11ef49e

Browse files
author
Tristan
committed
added cython pyx source
1 parent 5d2bd93 commit 11ef49e

File tree

3 files changed

+55
-46
lines changed

3 files changed

+55
-46
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,5 @@ script:
2424
- mkdir $HOME/.matplotlib
2525
- "echo 'backend : Agg' > $HOME/.matplotlib/matplotlibrc"
2626
- "echo 'backend.qt4 : PyQt4' >> $HOME/.matplotlib/matplotlibrc"
27-
- nosetests-$PYVER
27+
- "cd stl_tools"
28+
- "$PYTHON test/test_stl.py"

stl_tools/cwrapped.pyx

Lines changed: 52 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -25,85 +25,93 @@ def tessellate(np.ndarray[DTYPE_t, ndim=2] A,
2525
cdef int idx = 0
2626
cdef np.ndarray item
2727
cdef np.ndarray facets = np.zeros([4 * m * n, 12], dtype=np.float64)
28-
#cdef np.ndarray mask = np.zeros([m, n], dtype=DTYPE)
28+
cdef np.ndarray mask = np.zeros([m, n], dtype=DTYPE)
2929

30-
#cdef np.ndarray edge_mask = np.sum([roll2d(mask, (i, k))
31-
# for i, k in product([-1, 0, 1],
32-
# repeat=2)], axis=0)
3330
cdef double zmin, zthickness, minval, xsize, ysize, zsize
3431
cdef np.ndarray X, Y
3532
cdef int facet_cut = 1
3633

3734
for i in xrange(m - 1):
3835
for k in xrange(n - 1):
3936
if A[i, k] > mask_val and A[i, k + 1] > mask_val and A[i + 1, k ] > mask_val:
40-
facets[idx, 3] = i -m/2.
41-
facets[idx, 4] = k + 1 - n / 2.
37+
facets[idx, 3] = i
38+
facets[idx, 4] = k + 1
4239
facets[idx, 5] = A[i, k + 1]
4340

44-
facets[idx, 6] = i - m / 2.
45-
facets[idx, 7] = k - n / 2.
41+
facets[idx, 6] = i
42+
facets[idx, 7] = k
4643
facets[idx, 8] = A[i, k]
4744

48-
facets[idx, 9] = i + 1 - m / 2.
49-
facets[idx, 10] = k + 1 - n / 2.
45+
facets[idx, 9] = i + 1
46+
facets[idx, 10] = k + 1
5047
facets[idx, 11] = A[i + 1, k + 1]
5148

52-
#mask[i, k] = 1
53-
#mask[i, k + 1] = 1
54-
#mask[i + 1, k] = 1
49+
mask[i, k + 1] = 1
50+
mask[i, k] = 1
51+
mask[i + 1, k] = 1
5552

5653
idx += 1
5754

5855
if A[i + 1, k + 1] > mask_val and A[i, k] > mask_val and A[i + 1, k] > mask_val:
59-
facets[idx, 3] = i - m / 2.
60-
facets[idx, 4] = k - n / 2.
56+
facets[idx, 3] = i
57+
facets[idx, 4] = k
6158
facets[idx, 5] = A[i, k]
6259

63-
facets[idx, 6] = i + 1 - m / 2.
64-
facets[idx, 7] = k - n / 2.
60+
facets[idx, 6] = i + 1
61+
facets[idx, 7] = k
6562
facets[idx, 8] = A[i + 1, k]
6663

67-
facets[idx, 9] = i + 1 - m / 2.
68-
facets[idx, 10] = k + 1 - n / 2.
64+
facets[idx, 9] = i + 1
65+
facets[idx, 10] = k + 1
6966
facets[idx, 11] = A[i + 1, k + 1]
7067

71-
#mask[i, k] = 1
72-
#mask[i + 1, k + 1] = 1
73-
#mask[i + 1, k] = 1
68+
mask[i, k] = 1
69+
mask[i + 1, k + 1] = 1
70+
mask[i + 1, k] = 1
7471

7572
idx += 1
7673

77-
# if solid:
78-
# facet_cut = 2
79-
# edge_mask[np.where(edge_mask == 9.)] = 0.
80-
# edge_mask[np.where(edge_mask != 0.)] = 1.
81-
# edge_mask[0::m - 1, :] = 1.
82-
# edge_mask[:, 0::n - 1] = 1.
83-
# X, Y = np.where(edge_mask == 1.)
84-
# locs = np.array(zip(X - m / 2., Y - n / 2.))
74+
cdef np.ndarray edge_mask = np.sum([roll2d(mask, (i, k))
75+
for i, k in product([-1, 0, 1],
76+
repeat=2)], axis=0)
8577

86-
# zvals = facets[:, 5::3]
87-
# zmin, zthickness = zvals.min(), zvals.ptp()
78+
if solid:
79+
facet_cut = 2
80+
edge_mask[np.where(edge_mask == 9.)] = 0.
81+
edge_mask[np.where(edge_mask != 0.)] = 1.
82+
edge_mask[0::m - 1, :] = 1.
83+
edge_mask[:, 0::n - 1] = 1.
8884

89-
# minval = zmin - min_thickness_percent * zthickness
85+
#X, Y = np.where(edge_mask == 1.)
86+
#locs = np.array(zip(X - m / 2., Y - n / 2.))
9087

91-
# for i in xrange(idx):
88+
zvals = facets[:, 5::3]
89+
zmin, zthickness = zvals.min(), zvals.ptp()
9290

91+
minval = zmin - min_thickness_percent * zthickness
9392

94-
# facets[idx+i, 3] = i_ - m / 2.
95-
# facets[idx+i, 4] = k_ - n / 2.
96-
# facets[idx+i, 5] = minval
93+
for i in xrange(idx):
9794

98-
# facets[idx+i, 6] = i_ + 1 - m / 2.
99-
# facets[idx+i, 7] = k_ - n / 2.
100-
# facets[idx+i, 8] = minval
95+
# if (facet[3], facet[4]) in locs:
96+
# facets[i][5] = minval
97+
# if (facet[6], facet[7]) in locs:
98+
# facets[i][8] = minval
99+
# if (facet[9], facet[10]) in locs:
100+
# facets[i][11] = minval
101101

102-
# facets[idx+i, 9] = i_ + 1 - m / 2.
103-
# facets[idx+i, 10] = k_ + 1 - n / 2.
104-
# facets[idx+i, 11] = minval
102+
facets[idx+i, 3] = facets[i, 6]
103+
facets[idx+i, 4] = facets[i, 7]
104+
facets[idx+i, 5] = minval
105105

106-
return facets[:idx]
106+
facets[idx+i, 6] = facets[i, 3]
107+
facets[idx+i, 7] = facets[i, 4]
108+
facets[idx+i, 8] = minval
109+
110+
facets[idx+i, 9] = facets[i, 9]
111+
facets[idx+i, 10] = facets[i, 10]
112+
facets[idx+i, 11] = minval
113+
114+
return facets[:facet_cut*idx]
107115

108116

109117
@cython.boundscheck(False)

stl_tools/numpy2stl.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def numpy2stl(A, fn, scale=0.1, mask_val=None, ascii=False,
105105

106106
if not mask_val:
107107
mask_val = A.min() - 1.
108-
A = A.astype(np.float, copy=False)
108+
A = A.astype(np.float)
109109
facets = tessellate(A, mask_val, min_thickness_percent, solid)
110110

111111
xsize = facets[:, 3::3].ptp()

0 commit comments

Comments
 (0)