4
4
5
5
* ** Copyright** : (C) Qianqian Fang (2024-2025) <q.fang at neu.edu>
6
6
* ** License** : GNU Public License V3 or later
7
- * ** Version** : 0.3.8
7
+ * ** Version** : 0.4.0
8
8
* ** URL** : [ https://pypi.org/project/iso2mesh/ ] ( https://pypi.org/project/iso2mesh/ )
9
9
* ** Homepage** : [ https://iso2mesh.sf.net ] ( https://iso2mesh.sf.net )
10
10
* ** Github** : [ https://github.com/NeuroJSON/pyiso2mesh ] ( https://github.com/NeuroJSON/pyiso2mesh )
25
25
- [ Run built-in unit-tests] ( #run-built-in-unit-tests )
26
26
- [ How to Use] ( #how-to-use )
27
27
- [ Iso2Mesh function port status] ( #iso2mesh-function-port-status )
28
+ - [ How to Cite] ( #how-to-cite )
28
29
- [ Acknowledgement] ( #acknowledgement )
29
30
30
31
## Introduction
@@ -197,27 +198,27 @@ tracked in https://github.com/NeuroJSON/pyiso2mesh/issues/1
197
198
198
199
| Ported | Unit-tested | | Ported | Unit-tested |
199
200
| ------ | ------ | --- | ------ | ------ |
200
- | > All-in-one pipeline shortcuts | | | > File I/O | |
201
+ | > All-in-one pipeline shortcuts | | | > File I/O | |
201
202
| ✅ ` v2m.m ` | ✅ tested | | ✅ ` saveasc.m ` | ⭕️ tested |
202
203
| ✅ ` v2s.m ` | ✅ tested | | ✅ ` savedxf.m ` | ⭕️ tested |
203
204
| ✅ ` s2m.m ` | ✅ tested | | ✅ ` savestl.m ` | ⭕️ tested |
204
205
| ✅ ` s2v.m ` | ✅ tested | | ✅ ` savebinstl.m ` | ⭕️ tested |
205
- | ✅ ` m2v.m ` | ✅️ tested | | ✅ ` saveinr.m ` | ⭕️ tested |
206
+ | ✅ ` m2v.m ` | ✅ tested | | ✅ ` saveinr.m ` | ⭕️ tested |
206
207
| ✅ ` sms.m ` | ✅ tested | | ✅ ` saveoff.m ` | ✅ tested |
207
208
| > Streamlined mesh generation| | | ⭕️ ` savesmf.m ` | ⭕️ tested |
208
209
| ✅ ` vol2mesh.m ` | ✅ tested | | ✅ ` savesurfpoly.m ` | ✅ tested |
209
210
| ✅ ` vol2surf.m ` | ✅ tested | | ⭕️ ` savegts.m ` | ⭕️ tested |
210
211
| ✅ ` surf2mesh.m ` | ✅ tested | | ⭕️ ` readgts.m ` | ⭕️ tested |
211
212
| ✅ ` surf2vol.m ` | ✅ tested | | ⭕️ ` savemsh.m ` | ⭕️ tested |
212
- | ✅ ` mesh2vol.m ` | ✅️ tested | | ⭕️ ` savevrml.m ` | ⭕️ tested |
213
+ | ✅ ` mesh2vol.m ` | ✅ tested | | ⭕️ ` savevrml.m ` | ⭕️ tested |
213
214
| > Iso2mesh main function backend| | | ✅ ` readasc.m ` | ⭕️ tested |
214
215
| ✅ ` binsurface.m ` | ✅ tested | | ⭕️ ` readinr.m ` | ⭕️ tested |
215
216
| ✅ ` cgalv2m.m ` | ✅ tested | | ✅ ` readmedit.m ` | ⭕️ tested |
216
217
| ✅ ` cgals2m.m ` | ✅ tested | | ✅ ` readoff.m ` | ✅ tested |
217
218
| ✅ ` vol2restrictedtri.m ` | ✅ tested | | ⭕️ ` readsmf.m ` | ⭕️ tested |
218
219
| ✅ ` surf2volz.m ` | ✅ tested | | ✅ ` readtetgen.m ` | ✅ tested |
219
- | ✅ ` mesh2mask.m ` | ✅️ tested | | ✅ ` deletemeshfile.m ` | ✅ tested |
220
- | > Iso2mesh primitive meshing| | | ✅ ` mcpath.m ` | ✅ tested |
220
+ | ✅ ` mesh2mask.m ` | ✅ tested | | ✅ ` deletemeshfile.m ` | ✅ tested |
221
+ | > Iso2mesh primitive meshing| | | ✅ ` mcpath.m ` | ✅ tested |
221
222
| ✅ ` meshabox.m ` | ✅ tested | | ✅ ` mwpath.m ` | ✅ tested |
222
223
| ✅ ` meshasphere.m ` | ✅ tested | | ✅ ` savemedit.m ` | ✅ tested |
223
224
| ✅ ` meshanellip.m ` | ✅ tested | | ⭕️ ` savejson.m ` | ⭕️ tested |
@@ -244,65 +245,87 @@ tracked in https://github.com/NeuroJSON/pyiso2mesh/issues/1
244
245
| ✅ ` maxsurf.m ` | ⭕️ tested | | ⭕️ ` loadjmesh.m ` | ⭕️ tested |
245
246
| ✅ ` flatsegment.m ` | ⭕️ tested | | ⭕️ ` readobjmesh.m ` | ⭕️ tested |
246
247
| ✅ ` orderloopedge.m ` | ⭕️ tested | | > Volumetric image pre-processing| |
247
- | ✅ ` mesheuler.m ` | ✅ tested | | ⭕️ ` bwislands .m` | ⭕️ tested |
248
- | ✅ ` bbxflatsegment.m ` | ⭕️ tested | | ⭕️ ` fillholes3d .m` | ⭕️ tested |
249
- | ✅ ` surfplane.m ` | ⭕️ tested | | ⭕️ ` deislands2d .m` | ⭕️ tested |
250
- | ✅ ` surfinterior.m ` | ⭕️ tested | | ⭕️ ` deislands3d .m` | ⭕️ tested |
251
- | ✅ ` surfpart.m ` | ⭕️ tested | | ⭕️ ` ndgaussian .m` | ⭕️ tested |
252
- | ✅ ` surfseeds.m ` | ⭕️ tested | | ⭕️ ` ndimfilter .m` | ⭕️ tested |
253
- | ✅ ` meshquality.m ` | ✅ tested | | ⭕️ ` imedge3d .m` | ⭕️ tested |
254
- | ✅ ` meshedge.m ` | ✅ tested | | ⭕️ ` internalpoint .m` | ⭕️ tested |
255
- | ✅ ` meshface.m ` | ✅ tested | | ⭕️ ` smoothbinvol .m` | ⭕️ tested |
256
- | ✅ ` surfacenorm.m ` | ✅ tested | | ⭕️ ` thickenbinvol .m` | ⭕️ tested |
257
- | ✅ ` nodesurfnorm.m ` | ✅ tested | | ⭕️ ` thinbinvol .m` | ⭕️ tested |
258
- | ✅ ` uniqedges.m ` | ✅ tested | | ⭕️ ` maskdist .m` | ⭕️ tested |
259
- | ✅ ` uniqfaces.m ` | ✅ tested | | > Mesh plotting | |
260
- | ✅ ` advancefront.m ` | ⭕️ tested | | ✅ ` plotmesh .m` | ✅ tested |
261
- | ✅ ` innersurf.m ` | ⭕️ tested | | ✅ ` plotsurf .m` | ✅ tested |
262
- | ✅ ` outersurf.m ` | ⭕️ tested | | ✅ ` plottetra .m` | ✅ tested |
263
- | ✅ ` surfvolume.m ` | ✅ tested | | ✅ ` plotedges .m` | ✅ tested |
264
- | ✅ ` insurface.m ` | ✅ tested | | ✅ ` qmeshcut.m ` | ✅ tested |
265
- | > Mesh processing and reparing| | | > Miscellaneous functions | |
266
- | ✅ ` meshcheckrepair.m ` | ✅ tested | | ⭕️ ` surfdiffuse .m` | ⭕️ tested |
267
- | ✅ ` meshreorient.m ` | ✅ tested | | ⭕️ ` volmap2mesh .m` | ⭕️ tested |
268
- | ✅ ` removedupelem.m ` | ✅ tested | | ⭕️ ` isoctavemesh .m` | ⭕️ tested |
269
- | ✅ ` removedupnodes.m ` | ✅ tested | | ⭕️ ` getvarfrom .m` | ⭕️ tested |
270
- | ✅ ` removeisolatednode.m ` | ✅ tested | | ✅ ` raytrace.m ` | ✅ tested |
271
- | ✅ ` removeisolatedsurf.m ` | ⭕️ tested | | ⭕️ ` linextriangle .m` | ⭕️ tested |
272
- | ✅ ` surfaceclean.m ` | ⭕️ tested | | ⭕️ ` getplanefrom3pt .m` | ⭕️ tested |
273
- | ✅ ` getintersecttri.m ` | ⭕️ tested | | ✅ ` getexeext .m` | ✅ tested |
274
- | ✅ ` delendelem.m ` | ⭕️ tested | | ✅ ` fallbackexeext .m` | ✅ tested |
275
- | ✅ ` surfreorient.m ` | ✅ tested | | ⭕️ ` iso2meshver .m` | ⭕️ tested |
276
- | > Mesh registration | | | ⭕️ ` raysurf .m` | ⭕️ tested |
277
- | ✅ ` proj2mesh.m ` | ⭕️ tested | | ⭕️ ` getoptkey .m` | ⭕️ tested |
278
- | ✅ ` dist2surf.m ` | ⭕️ tested | | ✅ ` rotatevec3d .m` | ⭕️ tested |
279
- | ✅ ` regpt2surf.m ` | ⭕️ tested | | ✅ ` rotmat2vec .m` | ⭕️ tested |
280
- | ✅ ` affinemap.m ` | ⭕️ tested | | ✅ ` varargin2struct .m` | ⭕️ tested |
281
- | > Polyline handling| | | ✅ ` jsonopt .m` | ⭕️ tested |
282
- | ✅️ ` slicesurf.m ` | ⭕️ tested | | ⭕️ ` mergestruct .m` | ⭕️ tested |
283
- | ✅️ ` slicesurf3.m ` | ⭕️ tested | | ⭕️ ` orthdisk .m` | ⭕️ tested |
284
- | ✅️ ` polylinelen.m ` | ⭕️ tested | | ⭕️ ` nestbracket2dim .m` | ⭕️ tested |
285
- | ✅️ ` polylinesimplify.m ` | ⭕️ tested | | ⭕️ ` memmapstream .m` | ⭕️ tested |
286
- | ✅️ ` polylineinterp.m ` | ⭕️ tested | | ⭕️ ` aos2soa .m` | ⭕️ tested |
287
- | ✅️ ` closestnode.m ` | ⭕️ tested | | ⭕️ ` soa2aos .m` | ⭕️ tested |
288
- | > Mesh resampling and optimization| |
289
- | ✅ ` meshresample.m ` | ✅ tested |
290
- | ✅ ` remeshsurf.m ` | ✅ tested |
291
- | ✅ ` smoothsurf.m ` | ✅ tested |
292
- | ✅ ` sortmesh.m ` | ⭕️ tested |
293
- | ✅ ` mergemesh.m ` | ✅ tested |
294
- | ✅ ` meshrefine.m ` | ✅ tested |
295
- | ✅ ` mergesurf.m ` | ⭕️ tested |
296
- | ✅ ` surfboolean.m ` | ✅ tested |
297
- | ✅ ` fillsurf.m ` | ⭕️ tested |
298
- | ✅ ` highordertet.m ` | ✅ tested |
248
+ | ✅ ` mesheuler.m ` | ✅ tested | | ✅ ` volgrow .m` | ✅ tested |
249
+ | ✅ ` bbxflatsegment.m ` | ⭕️ tested | | ✅ ` volshrink .m` | ✅ tested |
250
+ | ✅ ` surfplane.m ` | ⭕️ tested | | ✅ ` volopen .m` | ✅ tested |
251
+ | ✅ ` surfinterior.m ` | ⭕️ tested | | ✅ ` volclose .m` | ✅ tested |
252
+ | ✅ ` surfpart.m ` | ⭕️ tested | | ✅ ` fillholes3d .m` | ✅ tested |
253
+ | ✅ ` surfseeds.m ` | ⭕️ tested | | ⭕️ ` bwislands .m` | ⭕️ tested |
254
+ | ✅ ` meshquality.m ` | ✅ tested | | ⭕️ ` laplacefill .m` | ⭕️ tested |
255
+ | ✅ ` meshedge.m ` | ✅ tested | | ⭕️ ` deislands2d .m` | ⭕️ tested |
256
+ | ✅ ` meshface.m ` | ✅ tested | | ⭕️ ` deislands3d .m` | ⭕️ tested |
257
+ | ✅ ` surfacenorm.m ` | ✅ tested | | ⭕️ ` ndgaussian .m` | ⭕️ tested |
258
+ | ✅ ` nodesurfnorm.m ` | ✅ tested | | ⭕️ ` ndimfilter .m` | ⭕️ tested |
259
+ | ✅ ` uniqedges.m ` | ✅ tested | | ⭕️ ` imedge3d .m` | ⭕️ tested |
260
+ | ✅ ` uniqfaces.m ` | ✅ tested | | ⭕️ ` internalpoint.m ` | ⭕️ tested |
261
+ | ✅ ` advancefront.m ` | ⭕️ tested | | ⭕️ ` smoothbinvol .m` | ⭕️ tested |
262
+ | ✅ ` innersurf.m ` | ⭕️ tested | | ✅ ` thickenbinvol .m` | ✅ tested |
263
+ | ✅ ` outersurf.m ` | ⭕️ tested | | ✅ ` thinbinvol .m` | ✅ tested |
264
+ | ✅ ` surfvolume.m ` | ✅ tested | | ⭕️ ` maskdist .m` | ⭕️ tested |
265
+ | ✅ ` insurface.m ` | ✅ tested | | > Mesh plotting | |
266
+ | > Mesh processing and reparing| | | ✅ ` plotmesh.m ` | ✅ tested |
267
+ | ✅ ` meshcheckrepair.m ` | ✅ tested | | ✅ ` plotsurf .m` | ✅ tested |
268
+ | ✅ ` meshreorient.m ` | ✅ tested | | ✅ ` plottetra .m` | ✅ tested |
269
+ | ✅ ` removedupelem.m ` | ✅ tested | | ✅ ` plotedges .m` | ✅ tested |
270
+ | ✅ ` removedupnodes.m ` | ✅ tested | | ✅ ` qmeshcut .m` | ✅ tested |
271
+ | ✅ ` removeisolatednode.m ` | ✅ tested | | > Miscellaneous functions | |
272
+ | ✅ ` removeisolatedsurf.m ` | ⭕️ tested | | ⭕️ ` surfdiffuse .m` | ⭕️ tested |
273
+ | ✅ ` surfaceclean.m ` | ⭕️ tested | | ⭕️ ` volmap2mesh .m` | ⭕️ tested |
274
+ | ✅ ` getintersecttri.m ` | ⭕️ tested | | ⭕️ ` isoctavemesh .m` | ⭕️ tested |
275
+ | ✅ ` delendelem.m ` | ⭕️ tested | | ⭕️ ` getvarfrom .m` | ⭕️ tested |
276
+ | ✅ ` surfreorient.m ` | ✅ tested | | ✅ ` raytrace .m` | ✅ tested |
277
+ | > Mesh registration | | | ⭕️ ` linextriangle .m` | ⭕️ tested |
278
+ | ✅ ` proj2mesh.m ` | ⭕️ tested | | ⭕️ ` getplanefrom3pt .m` | ⭕️ tested |
279
+ | ✅ ` dist2surf.m ` | ⭕️ tested | | ✅ ` getexeext .m` | ✅ tested |
280
+ | ✅ ` regpt2surf.m ` | ⭕️ tested | | ✅ ` fallbackexeext .m` | ✅ tested |
281
+ | ✅ ` affinemap.m ` | ⭕️ tested | | ⭕️ ` iso2meshver .m` | ⭕️ tested |
282
+ | > Polyline handling| | | ⭕️ ` raysurf .m` | ⭕️ tested |
283
+ | ✅ ` slicesurf.m ` | ⭕️ tested | | ⭕️ ` getoptkey .m` | ⭕️ tested |
284
+ | ✅ ` slicesurf3.m ` | ⭕️ tested | | ✅ ` rotatevec3d .m` | ⭕️ tested |
285
+ | ✅ ` polylinelen.m ` | ⭕️ tested | | ✅ ` rotmat2vec .m` | ⭕️ tested |
286
+ | ✅ ` polylinesimplify.m ` | ⭕️ tested | | ✅ ` varargin2struct .m` | ⭕️ tested |
287
+ | ✅ ` polylineinterp.m ` | ⭕️ tested | | ✅ ` jsonopt .m` | ⭕️ tested |
288
+ | ✅ ` closestnode.m ` | ⭕️ tested | | ⭕️ ` mergestruct .m` | ⭕️ tested |
289
+ | > Mesh resampling and optimization| | | ⭕️ ` orthdisk.m ` | ⭕️ tested |
290
+ | ✅ ` meshresample.m ` | ✅ tested | | ⭕️ ` nestbracket2dim.m ` | ⭕️ tested |
291
+ | ✅ ` remeshsurf.m ` | ✅ tested | | ⭕️ ` memmapstream.m ` | ⭕️ tested |
292
+ | ✅ ` smoothsurf.m ` | ✅ tested | | ⭕️ ` aos2soa.m ` | ⭕️ tested |
293
+ | ✅ ` sortmesh.m ` | ⭕️ tested | | ⭕️ ` soa2aos.m ` | ⭕️ tested |
294
+ | ✅ ` mergemesh.m ` | ✅ tested | | > Brain2mesh toolbox | |
295
+ | ✅ ` meshrefine.m ` | ✅ tested | | ✅ ` brain2mesh.m ` | ⭕️ tested |
296
+ | ✅ ` mergesurf.m ` | ⭕️ tested | | ✅ ` brain1020.m ` | ⭕️ tested |
297
+ | ✅ ` surfboolean.m ` | ✅ tested | | ✅ ` intriangulation.m ` | ⭕️ tested |
298
+ | ✅ ` fillsurf.m ` | ⭕️ tested | | ✅ ` label2tpm.m ` | ⭕️ tested |
299
+ | ✅ ` highordertet.m ` | ✅ tested | | ✅ ` tpm2label.m ` | ⭕️ tested |
299
300
| ✅ ` elemfacecenter.m ` | ✅ tested |
300
301
| ✅ ` barydualmesh.m ` | ✅ tested |
301
302
| ✅ ` meshinterp.m ` | ⭕️ tested |
302
303
| ✅ ` meshremap.m ` | ⭕️ tested |
303
304
| ✅ ` extrudesurf.m ` | ⭕️ tested |
304
305
305
306
307
+ ## How to Cite
308
+
309
+ Users of the pyiso2mesh toolbox should consider citing the below publications related to iso2mesh.
310
+
311
+ The original conference paper that described the ** iso2mesh** toolbox workflow was published in 2009:
312
+
313
+ - Qianqian Fang and David Boas, "Tetrahedral mesh generation from volumetric binary and gray-scale images,"
314
+ Proceedings of IEEE International Symposium on Biomedical Imaging 2009, pp. 1142-1145, 2009
315
+
316
+ A journal paper, published in 2020 describing the ** brain2mesh** toolbox contains a much more
317
+ up-to-date description of iso2mesh in the context of complex brain mesh generation
318
+
319
+ - Anh Phong Tran, Shijie Yan and Qianqian Fang* , (2020) "Improving model-based fNIRS analysis using
320
+ mesh-based anatomical and light-transport models," Neurophotonics, 7(1), 015008
321
+
322
+ If one utilized the ` brain1020 ` function in your research, you should cite the below paper where
323
+ the workflow of this function was described
324
+
325
+ - Ashlyn McCann, Edward Xu, Fan-Yu Yen, Noah Joseph, Qianqian Fang, "Creating anatomically derived,
326
+ standardized, customizable, and three-dimensional printable head caps for functional neuroimaging,"
327
+ Neurophoton. 12(1) 015016 (18 March 2025) https://doi.org/10.1117/1.NPh.12.1.015016 , PMID: 39257741; PMCID: PMC11383710.
328
+
306
329
307
330
## Acknowledgement
308
331
0 commit comments