Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:48:53

0001 #!/usr/bin/env python
0002 """
0003 CSGSignedDistanceFieldTest.py
0004 ===============================
0005 
0006 see env/graphics/pyvista_/sdContour.py
0007 
0008 """
0009 import os 
0010 import pyvista as pv 
0011 import numpy as np
0012 from opticks.ana.fold import Fold
0013 from opticks.ana.gridspec import CrossHairs
0014 from opticks.ana.npmeta import NPMeta
0015 
0016 SIZE = np.array([1280, 720])
0017 
0018 class CSGSignedDistanceFieldTest(object):
0019     BASE = "$TMP/CSG/CSGSignedDistanceFieldTest" ; 
0020     def __init__(self, geom):
0021         fold = Fold.Load( self.BASE, geom )
0022         self.geom = geom
0023         self.fold = fold
0024         self.sdf = fold.sdf 
0025         self.xyzd = fold.xyzd 
0026 
0027 
0028 
0029 if __name__ == '__main__':
0030     geom = os.environ.get("GEOM", "UnionBoxSphere")
0031     t = CSGSignedDistanceFieldTest(geom)
0032 
0033     sdf = t.sdf
0034     xyzd = t.xyzd
0035 
0036 
0037     sdf_meta = t.fold.sdf_meta 
0038     pm = NPMeta(t.fold.sdf_meta)  
0039 
0040     ox = float(pm.find("ox:"))
0041     oy = float(pm.find("oy:"))
0042     oz = float(pm.find("oz:"))
0043 
0044     sx = float(pm.find("sx:"))
0045     sy = float(pm.find("sy:"))
0046     sz = float(pm.find("sz:"))
0047 
0048     assert len(sdf.shape) == 3, "unexpected sdf.shape %s " % str(sdf.shape)  
0049     ni, nj, nk = sdf.shape
0050 
0051 
0052     dims=(ni, nj, nk)
0053     spacing=(sx,sy,sz)
0054     origin=(ox,oy,oz)
0055 
0056     grid = pv.UniformGrid(dims, spacing, origin)
0057     print(grid)
0058 
0059     #x, y, z = grid.points.T
0060 
0061     values = sdf.ravel()
0062     values_2 = xyzd.reshape(-1,4)[:,3]
0063     assert np.all( values == values_2 )
0064 
0065     grid.point_arrays["values"] = values
0066 
0067     method = ['marching_cubes','contour','flying_edges'][1]
0068     isovalue = 0 
0069     num_isosurfaces = 1 
0070     mesh = grid.contour(num_isosurfaces, scalars="values", rng=[isovalue, isovalue], method=method )
0071 
0072     show_edges = "EDGES" in os.environ   
0073     pl = pv.Plotter(window_size=SIZE*2)
0074     pl.add_mesh(mesh, smooth_shading=False, color='tan', show_edges=show_edges  )   # style='wireframe' 
0075     pl.show_grid()
0076 
0077     CrossHairs.draw(pl)
0078 
0079     pl.show()
0080 
0081 
0082 
0083 
0084