1
+ clear
2
+ clear global
3
+ close all
4
+ clc
5
+ global meshXmin meshXmax meshYmin meshYmax meshZmin meshZmax
6
+ %% BEGIN USER SETTINGS
7
+ paraview_export_flag = 1 ;
8
+ x_ray_flag = 1 ;
9
+ model_name= ' plate' ;
10
+ %
11
+ stl_files(1 ).name = ' plate.stl' ;
12
+ stl_files(1 ).tag = ' cond' ;
13
+ stl_files(1 ).rho= 1 / 1.33e6 ;
14
+ % to scale a stl file from any unit to meters
15
+ scal_geomery.x= 1 / 1 ; scal_geomery.y= 1 / 1 ; scal_geomery.z= 1 / 1 ;
16
+ % Box
17
+ % number of voxels in the x y z directions
18
+ Nx= 100 ;
19
+ Ny= 100 ;
20
+ Nz= 1 ;
21
+ % corners
22
+ flag_auto= 1 ; % if 1, user_data below are ignored
23
+ % user_data
24
+ meshXmin = 0 ; % (m)
25
+ meshXmax = 100e-3 ; % (m)
26
+ meshYmin = 0 ;% (m)
27
+ meshYmax = 100e-3 ; % (m)
28
+ meshZmin = 0 ;% (m)
29
+ meshZmax = 1e-3 ; % (m)
30
+ %% END USER SETTINGS
31
+ how_many_stl= size(stl_files ,2 );
32
+ %%
33
+ dad= pwd ;
34
+ cd .. ; cd .. ; cd(' fun' ); addpath(genpath(pwd )); cd(dad )
35
+ %% Plot the original STL mesh
36
+ ccolor= distinguishable_colors(how_many_stl );
37
+ figure
38
+ hold on
39
+ xmin= [];
40
+ xmax= [];
41
+ ymin= [];
42
+ ymax= [];
43
+ zmin= [];
44
+ zmax= [];
45
+ for ii = 1 : how_many_stl
46
+ [stlcoords ] = READ_stl(stl_files(ii ).name);
47
+ xco = squeeze( stlcoords(: ,1 ,: ) )' ;
48
+ yco = squeeze( stlcoords(: ,2 ,: ) )' ;
49
+ zco = squeeze( stlcoords(: ,3 ,: ) )' ;
50
+ [hpat ] = patch(xco * scal_geomery .x ,yco * scal_geomery .y ,zco * scal_geomery .z ,ccolor(ii ,: ));
51
+ alpha(0.3 ) % for trasparency
52
+ axis equal
53
+ xlabel(' x' );
54
+ ylabel(' y' );
55
+ zlabel(' z' );
56
+ view(3 )
57
+ title(' stl' )
58
+ drawnow
59
+ %
60
+ xmin= min([xmin ;xco(: )]);
61
+ xmax= max([xmax ;xco(: )]);
62
+ ymin= min([ymin ;yco(: )]);
63
+ ymax= max([ymax ;yco(: )]);
64
+ zmin= min([zmin ;zco(: )]);
65
+ zmax= max([zmax ;zco(: )]);
66
+ end
67
+ %%
68
+ if flag_auto
69
+ meshXmin= xmin ;
70
+ meshXmax= xmax ;
71
+ meshYmin= ymin ;
72
+ meshYmax= ymax ;
73
+ meshZmin= zmin ;
74
+ meshZmax= zmax ;
75
+ else
76
+ meshXmin = meshXmin / scal_geomery .x ;
77
+ meshXmax = meshXmax / scal_geomery .x ;
78
+ meshYmin = meshYmin / scal_geomery .y ;
79
+ meshYmax = meshYmax / scal_geomery .y ;
80
+ meshZmin = meshZmin / scal_geomery .z ;
81
+ meshZmax = meshZmax / scal_geomery .z ;
82
+ end
83
+ %%
84
+ disp(' ===================================================================' )
85
+ disp(' voxelize...' )
86
+ for ii = 1 : how_many_stl
87
+ [o(ii ).OUTPUTgrid,...
88
+ o(ii ).gridCOx,...
89
+ o(ii ).gridCOy,...
90
+ o(ii ).gridCOz] = VOXELISE_mod2(Nx ,Ny ,Nz ,stl_files(ii ).name,' xyz' );
91
+ o(ii ).gridCOx= o(ii ).gridCOx* scal_geomery .x ;
92
+ o(ii ).gridCOy= o(ii ).gridCOy* scal_geomery .y ;
93
+ o(ii ).gridCOz= o(ii ).gridCOz* scal_geomery .z ;
94
+ end
95
+ xyz= grid3dRT2(o(1 ).gridCOx,o(1 ).gridCOy,o(1 ).gridCOz);
96
+ xd= xyz(: ,: ,: ,1 );
97
+ yd= xyz(: ,: ,: ,2 );
98
+ zd= xyz(: ,: ,: ,3 );
99
+ %
100
+ idx= zeros(Nx ,Ny ,Nz );
101
+ for ii = 1 : how_many_stl
102
+ idx= idx +(o(ii ).OUTPUTgrid);
103
+ end
104
+ idx= find(idx );
105
+ % plot
106
+ xidx= xd(idx );
107
+ yidx= yd(idx );
108
+ zidx= zd(idx );
109
+ disp(' ' )
110
+ %%
111
+ disp(' ===================================================================' )
112
+ disp(' x_ray...' )
113
+ if x_ray_flag
114
+ for ii = 1 : how_many_stl
115
+ figure
116
+ subplot(1 ,3 ,1 );
117
+ title([' xray object' ,num2str(ii ),' ZY' ])
118
+ hold on
119
+ imagesc(squeeze(sum(o(ii ).OUTPUTgrid,1 )));
120
+ colormap(gray(256 ));
121
+ xlabel(' Z-direction' );
122
+ ylabel(' Y-direction' );
123
+ axis equal
124
+ subplot(1 ,3 ,2 );
125
+ title([' xray object' ,num2str(ii ),' ZX' ])
126
+ hold on
127
+ imagesc(squeeze(sum(o(ii ).OUTPUTgrid,2 )));
128
+ colormap(gray(256 ));
129
+ xlabel(' Z-direction' );
130
+ ylabel(' X-direction' );
131
+ axis equal
132
+ subplot(1 ,3 ,3 );
133
+ title([' xray object' ,num2str(ii ),' YX' ])
134
+ hold on
135
+ imagesc(squeeze(sum(o(ii ).OUTPUTgrid,3 )));
136
+ colormap(gray(256 ));
137
+ xlabel(' Y-direction' );
138
+ ylabel(' X-direction' );
139
+ axis equal
140
+ end
141
+ end
142
+ drawnow
143
+ %%
144
+ if Nx > 1
145
+ dx= abs(o(1 ).gridCOx(2 )-o(1 ).gridCOx(1 ));
146
+ else
147
+ dx= (max(xco(: ))-min(xco(: )))*scal_geomery .x ;
148
+ end
149
+ if Ny > 1
150
+ dy= abs(o(1 ).gridCOy(2 )-o(1 ).gridCOy(1 ));
151
+ else
152
+ dy= (max(yco(: ))-min(yco(: )))*scal_geomery .y ;
153
+ end
154
+ if Nz > 1
155
+ dz= abs(o(1 ).gridCOz(2 )-o(1 ).gridCOz(1 ));
156
+ else
157
+ dz= (max(zco(: ))-min(zco(: )))*scal_geomery .z ;
158
+ end
159
+ xidx= xd([idx ]);
160
+ yidx= yd([idx ]);
161
+ zidx= zd([idx ]);
162
+ disp(' ' )
163
+ %% paraview
164
+ disp(' ===================================================================' )
165
+ disp(' paraview...' )
166
+ if paraview_export_flag
167
+ P0= [...
168
+ [xidx - dx / 2 ,yidx - dy / 2 ,zidx + dz / 2 ];...
169
+ [xidx - dx / 2 ,yidx - dy / 2 ,zidx - dz / 2 ];...
170
+ [xidx + dx / 2 ,yidx - dy / 2 ,zidx - dz / 2 ];...
171
+ [xidx + dx / 2 ,yidx - dy / 2 ,zidx + dz / 2 ];...
172
+ [xidx - dx / 2 ,yidx + dy / 2 ,zidx + dz / 2 ];...
173
+ [xidx - dx / 2 ,yidx + dy / 2 ,zidx - dz / 2 ];...
174
+ [xidx + dx / 2 ,yidx + dy / 2 ,zidx - dz / 2 ];...
175
+ [xidx + dx / 2 ,yidx + dy / 2 ,zidx + dz / 2 ]];
176
+ nVox= length([idx ]);
177
+ VP= [1 : nVox ;...
178
+ nVox + 1 : 2 * nVox ;...
179
+ 2 * nVox + 1 : 3 * nVox ;...
180
+ 3 * nVox + 1 : 4 * nVox ;...
181
+ 4 * nVox + 1 : 5 * nVox ;...
182
+ 5 * nVox + 1 : 6 * nVox ;...
183
+ 6 * nVox + 1 : 7 * nVox ;...
184
+ 7 * nVox + 1 : 8 * nVox ];
185
+ val= 2 * ones(length([idx ]),1 );
186
+ val(1 : length(idx ))=1 ;
187
+ dad= pwd ;
188
+ [Ricc ] = fun_for_ParaView_sca_HEXA(...
189
+ val ,val ,P0 ,VP ,dad ,model_name );
190
+ end
191
+ %%
192
+ L= length(o(1 ).gridCOx);
193
+ M= length(o(1 ).gridCOy);
194
+ N= length(o(1 ).gridCOz);
195
+ nVoxel= L * M * N ;
196
+ smeshx= dx ;smeshy= dy ;smeshz= dz ;
197
+ %%
198
+ for ii = 1 : how_many_stl
199
+ Ind(ii ).ind= find(o(ii ).OUTPUTgrid);
200
+ Ind(ii ).tag= stl_files(ii ).tag;
201
+ Ind(ii ).rho= stl_files(ii ).rho;
202
+ end
203
+ %%
204
+ Nmat = how_many_stl ;
205
+ save data.mat Ind L M N Nmat nVoxel smeshx smeshy smeshz xyz -v7.3
0 commit comments