R2:底板 / 刀片布局布线脚本、快照、截图与规划文档更新(含外壳、打印件、布线归档)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
这个提交包含在:
@@ -0,0 +1,79 @@
|
||||
# -*- 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)
|
||||
在新工单中引用
屏蔽一个用户