File indexing completed on 2026-04-09 07:48:58
0001
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))
0018 ax.add_line(mlines.Line2D([self.x0, self.x0], [self.z0, self.z1], c=c, linestyle=l))
0019 ax.add_line(mlines.Line2D([self.x1, self.x1], [self.z0, self.z1], c=c, linestyle=l))
0020 ax.add_line(mlines.Line2D([self.x0, self.x1], [self.z1, self.z1], c=c, linestyle=l))
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
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)
0061 pbb.plot_xz(axs[1+i], c=c)
0062
0063 if pnbb:
0064 l = ":"
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