Back to home page

EIC code displayed by LXR

 
 

    


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

0001 #!/usr/bin/env python
0002 
0003 import os, sys, logging, numpy as np
0004 log = logging.getLogger(__name__)
0005 
0006 from foundry import Foundry, BB
0007 
0008 try:
0009     import matplotlib.pyplot as plt 
0010     import matplotlib.lines as mlines
0011 except ImportError:
0012     plt = None
0013 pass
0014 
0015 
0016 def plot_xz(self, ax, c="r", l="-"):
0017     ax.add_line(mlines.Line2D([self.x0, self.x1], [self.z0, self.z0], c=c, linestyle=l))  # bottom horizonal
0018     ax.add_line(mlines.Line2D([self.x0, self.x0], [self.z0, self.z1], c=c, linestyle=l))  # left vertical
0019     ax.add_line(mlines.Line2D([self.x1, self.x1], [self.z0, self.z1], c=c, linestyle=l))  # right vertical
0020     ax.add_line(mlines.Line2D([self.x0, self.x1], [self.z1, self.z1], c=c, linestyle=l))  # top horizonal
0021 
0022 def adjust_xz(self, ax, scale=1.2):
0023     ax.set_aspect('equal')
0024     ax.set_xlim(scale*self.x0, scale*self.x1) 
0025     ax.set_ylim(scale*self.z0, scale*self.z1) 
0026 
0027 # dynamic addition of methods to BB class
0028 setattr(BB, 'plot_xz', plot_xz )
0029 setattr(BB, 'adjust_xz', adjust_xz )
0030 
0031 
0032 
0033 def plot_solid_bb(s, pnbb = True):
0034     numPrim = len(s.prim)
0035     log.info("s %s " % repr(s)) 
0036     log.info("numPrim %d " % numPrim) 
0037 
0038     if numPrim <= 5:
0039        layout = (2,3)
0040     else:
0041        layout = (2,4)
0042     pass
0043     plt.ion()
0044 
0045     fig, axs = plt.subplots(*layout)
0046     if not type(axs) is np.ndarray: axs = [axs]
0047     plt.suptitle("foundry_plt.py %s " % s.label)
0048 
0049     axs = axs.ravel() 
0050     color = "rgbcmyk"
0051     sbb = BB()
0052     for i in range(numPrim): 
0053         c = color[i % len(color)]
0054         p = s.prim[i]
0055         pbb = p.bb
0056         sbb.include(pbb)
0057 
0058         log.info("primIdx %4d pbb %s " % (i,str(pbb))) 
0059 
0060         pbb.plot_xz(axs[0], c=c)     # collect all onto first 
0061         pbb.plot_xz(axs[1+i], c=c) 
0062 
0063         if pnbb:
0064             l = ":" # '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
0065             for nodeIdx, n in enumerate(p.node):
0066                 nbb = n.bb
0067                 nbb.plot_xz(axs[1+i], c=c, l=l)   
0068                 log.info("nodeIdx %4d n %s " % (nodeIdx,str(n))) 
0069             pass 
0070         pass
0071     pass
0072     for ax in axs:
0073         sbb.adjust_xz(ax)
0074     pass
0075     fig.show()
0076 
0077 
0078 
0079 
0080 if __name__ == '__main__':
0081     logging.basicConfig(level=logging.INFO)
0082     fd = Foundry()
0083     args = sys.argv[1:] if len(sys.argv) > 1 else "r1".split() 
0084     for arg in args:
0085         s = fd[arg]
0086         plot_solid_bb(s)
0087     pass
0088 
0089