文件
phonerail/.claude/r2/shell/render_v10.py
T

80 行
2.8 KiB
Python
原始文件 Blame 文件历史

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# -*- coding: utf-8 -*-
u"""按**读回的相机视线方向**挑视图再截图(视图 id 与方向的对应在本机会变,NOTES §35 那张表这次就不成立)。"""
import io
import os
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', write_through=True)
import win32com.client as wc
OUT = r'C:\Users\35138\.claude\jobs\11836093\tmp'
def prop(o, n):
v = getattr(o, n)
return v() if type(v).__name__ in ('method', 'function', 'builtin_function_or_method') else v
def D(x):
return x if hasattr(x, '_oleobj_') else wc.Dispatch(x)
app = wc.GetActiveObject('SldWorks.Application')
doc = [d for d in app.GetDocuments if 'PhoneRail_5blades' in (prop(d, 'GetTitle') or '')][0]
e0 = wc.VARIANT(16387, 0)
app.ActivateDoc3(prop(doc, 'GetTitle'), False, 0, e0)
doc = app.ActiveDoc
views = {}
for vid in range(0, 9):
try:
doc.ShowNamedView2('', vid)
arr = list(prop(D(prop(doc, 'ActiveView')), 'Transform').ArrayData)
dirv = tuple(round(v, 3) for v in (arr[2], arr[5], arr[8]))
views[vid] = dirv
print(u' vid %d 视线 %s' % (vid, dirv))
except Exception as ex:
print(u' vid %d 失败 %s' % (vid, str(ex)[:40]))
def find(want):
for vid, d in views.items():
if all(abs(d[i] - want[i]) < 0.01 for i in range(3)):
return vid
return None
# 想要的「相机视线指向」:看西端墙 = 从 −x 往 +x 看 ⇒ 视线 (+1,0,0);以此类推
wanted = [(u'v10_west', (1.0, 0.0, 0.0)), (u'v10_south', (0.0, 1.0, 0.0)),
(u'v10_bottom', (0.0, 0.0, 1.0)), (u'v10_top', (0.0, 0.0, -1.0))]
for name, want in wanted:
vid = find(want)
if vid is None:
# 视线可能以相反号记录:再试反向(相机在另一侧)
vid2 = find(tuple(-v for v in want))
print(u' %s:没有视线 %s 的视图%s' % (name, want, u'(反向 vid %s)' % vid2 if vid2 is not None else u''))
continue
doc.ShowNamedView2('', vid)
doc.ViewZoomtofit2
doc.SaveBMP(os.path.join(OUT, name + '.bmp'), 1600, 1100)
print(u' %s ← vid %d' % (name, vid))
doc.ShowNamedView2('', 7)
doc.ViewZoomtofit2
doc.SaveBMP(os.path.join(OUT, 'v10_iso.bmp'), 1600, 1100)
vid = find((0.0, 1.0, 0.0))
if vid is not None:
doc.ShowNamedView2('', vid)
# 拉近到南墙 Type-C 与标识那一段(装配坐标,米)
doc.ViewZoomTo2(0.000, -0.005, -0.012, 0.100, -0.005, 0.008)
doc.SaveBMP(os.path.join(OUT, 'v10_south_zoom.bmp'), 1600, 1100)
print(u' v10_south_zoom ← vid %d + ViewZoomTo2' % vid)
vid = find((1.0, 0.0, 0.0))
if vid is not None:
doc.ShowNamedView2('', vid)
doc.ViewZoomTo2(-0.0184, 0.015, 0.002, -0.0184, 0.088, 0.074) # 拉近西端格栅
doc.SaveBMP(os.path.join(OUT, 'v10_west_zoom.bmp'), 1600, 1100)
print(u' v10_west_zoom ← vid %d + ViewZoomTo2' % vid)