66"""
77from sciapp .action import Simple , Filter , Free
88from scipy .ndimage .filters import gaussian_filter
9- from sciapp .object import Surface , MarkText
10- from sciapp .util import surfutil
9+ from sciapp .object import Mesh , Scene , Surface2d , Surface3d , Volume3d
10+ from imagepy .app import ColorManager
11+ from sciapp .util import meshutil
1112
1213class Show (Free ):
1314 title = 'Show Viewer 3D'
15+ para = {'name' :'Scene' , 'bg' :(0 ,0 ,0 )}
16+ view = [(str , 'name' , 'name' , '' ),
17+ ('color' , 'bg' , 'background' , 'color' )]
18+
1419 def run (self , para ):
15- self .app .show_mesh ()
20+ scene = Scene (bg_color = [i / 255 for i in para ['bg' ]])
21+ self .app .show_mesh (scene , para ['name' ])
1622
1723class Surface2D (Simple ):
1824 title = '2D Surface'
1925 note = ['8-bit' , '16-bit' , 'float' ]
20- para = {'name' :'undifine' , 'scale ' :2 , 'sigma' :2 ,'h' :1 }
26+ para = {'name' :'undifine' , 'sample ' :2 , 'sigma' :2 ,'h' :0.3 , 'cm' : 'gray' }
2127 view = [(str , 'name' , 'Name' , '' ),
22- (int , 'scale ' , (1 ,5 ), 0 , 'down scale ' , 'pix' ),
28+ (int , 'sample ' , (1 ,10 ), 0 , 'down sample ' , 'pix' ),
2329 (int , 'sigma' , (0 ,30 ), 0 , 'sigma' , '' ),
24- (float , 'h' , (0.1 ,10 ), 1 , 'scale z' , '' )]
30+ (float , 'h' , (0.1 ,10 ), 1 , 'scale z' , '' ),
31+ ('cmap' , 'cm' , 'color map' )]
2532
2633 def run (self , ips , imgs , para = None ):
27- ds , sigma = para ['scale ' ], para ['sigma' ]
28- vts , fs , ns , cs = surfutil . build_surf2d (ips .img , ds = ds , sigma = para [ ' sigma' ] , k = para ['h' ])
29- self .app .show_mesh (Surface ( vts , fs , ns , cs ) , para ['name' ])
34+ ds , sigma , cm = para ['sample ' ], para ['sigma' ], ColorManager . get ( para [ 'cm' ])
35+ mesh = Surface2d (ips .img , sample = ds , sigma = sigma , k = para ['h' ], cmap = cm )
36+ self .app .show_mesh (mesh , para ['name' ])
3037
3138class Surface3D (Simple ):
3239 modal = False
@@ -54,8 +61,8 @@ def cancel(self, ips):
5461 def run (self , ips , imgs , para = None ):
5562 ips .lut = self .buflut
5663 cs = tuple ([int (i / 255.0 ) for i in para ['color' ]])
57- vts , fs , ns , cs = surfutil . build_surf3d ( ips .imgs , para ['ds ' ], para ['thr ' ], para ['step' ], cs )
58- self .app .show_mesh (Surface ( vts , fs , ns , cs ) , para ['name' ])
64+ surf3d = Surface3d ( imgs = ips .imgs , level = para ['thr ' ], sample = para ['ds ' ], step = para ['step' ], colors = cs )
65+ self .app .show_mesh (surf3d , para ['name' ])
5966
6067class ImageCube (Simple ):
6168 modal = False
@@ -76,4 +83,21 @@ def run(self, ips, imgs, para = None):
7683 vts , fs , ns , cs = surfutil .build_img_box (imgs , para ['color' ])
7784 self .app .show_mesh (Surface (vts , fs , ns , cs , mode = 'grid' ), para ['name' ]+ '-box' )
7885
79- plgs = [Show , Surface2D , Surface3D , ImageCube ]
86+ class Volume3D (Simple ):
87+ modal = False
88+ title = '3D Volume'
89+ note = ['8-bit' , 'stack3d' ]
90+ para = {'name' :'undifine' , 'step' :1 , 'cm' :'gray' , 'cube' :True }
91+ view = [(str , 'name' , 'Name' , '' ),
92+ (int , 'step' , (1 ,10 ), 0 , 'march step' , 'pix' ),
93+ ('cmap' , 'cm' , 'color map' ),
94+ (bool , 'cube' , 'draw outline cube' )]
95+
96+ def run (self , ips , imgs , para = None ):
97+ cmap = ColorManager .get (para ['cm' ])
98+ self .app .show_mesh (Volume3d (imgs , step = para ['step' ], cmap = cmap ), para ['name' ])
99+ if para ['cube' ]:
100+ vts , fs = meshutil .create_bound ((0 ,0 ,0 ), imgs .shape )
101+ self .app .show_mesh (Mesh (verts = vts , faces = fs , colors = (1 ,1 ,1 ), mode = 'grid' ), 'box' )
102+
103+ plgs = [Show , Surface2D , Surface3D , ImageCube , Volume3D ]
0 commit comments