@@ -443,7 +443,7 @@ def plot_voxels(self, sliced=False, dual_phase=None, phases=False, cmap='prism',
443
443
asp_arr = [int (self .rve .size [0 ] / hmin ),
444
444
int (self .rve .size [1 ] / hmin ),
445
445
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 ,
447
447
phases = phases , cmap = cmap , clist = clist ,
448
448
silent = silent , asp_arr = asp_arr )
449
449
if silent :
@@ -1086,7 +1086,8 @@ def output_ang(self, ori=None, cut='xy', data=None, plot=True, cs=None,
1086
1086
plt .show ()
1087
1087
return fname
1088
1088
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 ):
1090
1091
""" Write triangles of convex polyhedra forming grains in form of STL
1091
1092
files in the format
1092
1093
'
@@ -1132,6 +1133,14 @@ def write_grains():
1132
1133
nv = np .cross (pts [1 ] - pts [0 ], pts [2 ] - pts [0 ]) # facet normal
1133
1134
write_facet (nv , pts , ft )
1134
1135
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
+
1135
1144
def write_particles ():
1136
1145
for pa in self .particles :
1137
1146
for ft in pa .inner .convex_hull :
@@ -1156,7 +1165,12 @@ def write_particles():
1156
1165
pa .sync_poly ()
1157
1166
write_particles ()
1158
1167
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 ()
1160
1174
f .write ("endsolid\n " )
1161
1175
return
1162
1176
0 commit comments