41 行
1.7 KiB
Python
41 行
1.7 KiB
Python
import sys, io, json
|
|
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace', write_through=True)
|
|
import pythoncom, win32com.client as wc
|
|
|
|
def prop(o, n):
|
|
v = getattr(o, n)
|
|
return v() if type(v).__name__ in ('method','function','builtin_function_or_method') else v
|
|
|
|
app = wc.GetActiveObject('SldWorks.Application')
|
|
doc = app.ActiveDoc
|
|
print('active:', prop(doc,'GetTitle'), '| docs', prop(app,'GetDocumentCount'))
|
|
rows = []
|
|
for c in doc.GetComponents(True):
|
|
nm = prop(c, 'Name2')
|
|
try:
|
|
b = [round(v*1000, 3) for v in c.GetBox(False, False)]
|
|
except Exception:
|
|
b = None
|
|
rows.append((nm, b))
|
|
rows.sort(key=lambda r: (r[1][0] if r[1] else 0))
|
|
print('top-level comps:', len(rows))
|
|
print('%-34s %8s %8s %8s %8s %8s %8s' % ('name','x0','x1','y0','y1','z0','z1'))
|
|
for nm, b in rows:
|
|
if b:
|
|
print('%-34s %8.2f %8.2f %8.2f %8.2f %8.2f %8.2f' % (nm[:34], b[0],b[3],b[1],b[4],b[2],b[5]))
|
|
else:
|
|
print('%-34s <no box>' % nm[:34])
|
|
blades = sorted([(b[1],b[4],nm) for nm,b in rows if b and 'BLADE' in nm.upper()])
|
|
print('\nblade y spans (%d):' % len(blades))
|
|
prev = None
|
|
for y0,y1,nm in blades:
|
|
gap = '' if prev is None else ' gap %.3f' % (y0-prev)
|
|
print(' y %8.3f ~ %8.3f centre %8.3f%s' % (y0, y1, (y0+y1)/2, gap))
|
|
prev = y1
|
|
fans = [(nm,b) for nm,b in rows if b and ('OD6025' in nm.upper() or 'FAN' in nm.upper())]
|
|
print('\nfans:')
|
|
for nm,b in fans:
|
|
print(' %-30s x %8.2f~%8.2f y %8.2f~%8.2f z %8.2f~%8.2f' % (nm[:30], b[0],b[3],b[1],b[4],b[2],b[5]))
|
|
json.dump([{'name':nm,'box':b} for nm,b in rows], open('_top.json','w',encoding='utf-8'), ensure_ascii=False, indent=1)
|
|
print('\nsaved _top.json')
|