Skip to content

Commit 0addf29

Browse files
committed
Added export option for phase-specific STL files
1 parent de1495a commit 0addf29

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

src/kanapy/api.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ def plot_voxels(self, sliced=False, dual_phase=None, phases=False, cmap='prism',
443443
asp_arr = [int(self.rve.size[0] / hmin),
444444
int(self.rve.size[1] / hmin),
445445
int(self.rve.size[2] / hmin)]
446-
fig = plot_voxels_3D(data, Ngr=np.sum(self.ngrains), sliced=sliced,
446+
fig = plot_voxels_3D(data, sliced=sliced,
447447
phases=phases, cmap=cmap, clist=clist,
448448
silent=silent, asp_arr=asp_arr)
449449
if silent:
@@ -1086,7 +1086,8 @@ def output_ang(self, ori=None, cut='xy', data=None, plot=True, cs=None,
10861086
plt.show()
10871087
return fname
10881088

1089-
def write_stl(self, data='grains', file=None, path='./'):
1089+
def write_stl(self, data='grains', file=None, path='./',
1090+
phases=False, phase_num=None):
10901091
""" Write triangles of convex polyhedra forming grains in form of STL
10911092
files in the format
10921093
'
@@ -1132,6 +1133,14 @@ def write_grains():
11321133
nv = np.cross(pts[1] - pts[0], pts[2] - pts[0]) # facet normal
11331134
write_facet(nv, pts, ft)
11341135

1136+
def write_phases(ip):
1137+
for grain in self.geometry['Grains'].values():
1138+
if grain['Phase'] == ip:
1139+
for ft in grain['Simplices']:
1140+
pts = self.geometry['Points'][ft]
1141+
nv = np.cross(pts[1] - pts[0], pts[2] - pts[0]) # facet normal
1142+
write_facet(nv, pts, ft)
1143+
11351144
def write_particles():
11361145
for pa in self.particles:
11371146
for ft in pa.inner.convex_hull:
@@ -1156,7 +1165,12 @@ def write_particles():
11561165
pa.sync_poly()
11571166
write_particles()
11581167
else:
1159-
write_grains()
1168+
if phases:
1169+
if phase_num is None:
1170+
raise ValueError('Phase-specific output requested, but no phase number specified.')
1171+
write_phases(phase_num)
1172+
else:
1173+
write_grains()
11601174
f.write("endsolid\n")
11611175
return
11621176

0 commit comments

Comments
 (0)