99 行
4.3 KiB
Python
99 行
4.3 KiB
Python
# -*- coding: utf-8 -*-
|
||
u"""由 topshell_v1.py 派生 topshell_v2.py(加西端滤网导轨 + 内联倒角),只做文本补丁,不碰 SolidWorks。"""
|
||
import io
|
||
import sys
|
||
|
||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', write_through=True)
|
||
SRC = r'C:\Users\35138\.claude\jobs\11836093\tmp\topshell_v1.py'
|
||
DST = r'C:\Users\35138\.claude\jobs\11836093\tmp\topshell_v2.py'
|
||
s = open(SRC, encoding='utf-8').read()
|
||
|
||
|
||
def rep(old, new, count=1):
|
||
global s
|
||
n = s.count(old)
|
||
if n != count:
|
||
raise SystemExit(u'锚点 %r 出现 %d 次(期望 %d)' % (old[:40], n, count))
|
||
s = s.replace(old, new)
|
||
|
||
|
||
rep(u'# -*- coding: utf-8 -*-\nu"""**一体顶盖** TopShell_v1',
|
||
u'# -*- coding: utf-8 -*-\nu"""**v2 = v1 + 西端插拔式滤网导轨 + 建模内倒角**(2026-09-13)。\n'
|
||
u'导轨让包围盒西界变成唇边 x −43.8,add_fillets 的「包围盒角」判据会漏掉西侧两角 ⇒ 圆角在加导轨之前做。\n\n'
|
||
u'(以下为 v1 说明)**一体顶盖** TopShell_v1')
|
||
rep(u"TopShell_v1.SLDPRT'", u"TopShell_v2.SLDPRT'")
|
||
rep(u"'TOPSHELL_V1'", u"'TOPSHELL_V2'")
|
||
|
||
FILLET = u'''
|
||
# ── [3b] 外轮廓 4 条竖边倒 R3(此时包围盒 = 盒体本身,导轨还没加)─────────
|
||
P(u'\\n[3b] 外轮廓竖边倒 R3')
|
||
_bx = bbox()
|
||
_cand = []
|
||
for _e in prop(D(bodies()[0]), 'GetEdges'):
|
||
_E = D(_e)
|
||
try:
|
||
_p0 = [v * 1000 for v in prop(D(prop(_E, 'GetStartVertex')), 'GetPoint')]
|
||
_p1 = [v * 1000 for v in prop(D(prop(_E, 'GetEndVertex')), 'GetPoint')]
|
||
except Exception:
|
||
continue
|
||
if abs(_p0[0] - _p1[0]) > 1e-6 or abs(_p0[1] - _p1[1]) > 1e-6 or abs(_p0[2] - _p1[2]) < 1e-6:
|
||
continue
|
||
if all(min(abs(_p[i] - _bx[i]), abs(_p[i] - _bx[i + 3])) < 0.01 for _p in (_p0, _p1) for i in (0, 1)):
|
||
_cand.append(_E)
|
||
_done = 0
|
||
for _E in _cand:
|
||
for _r in (3.0, 2.0, 1.5):
|
||
part.ClearSelection2(True)
|
||
_E.Select4(False, EMPTY)
|
||
try:
|
||
_f = fm.FeatureFillet3(195, M(_r), 0, 0, 0, 0, 0, None, None, None, None, None, None, None)
|
||
except Exception:
|
||
_f = None
|
||
if _f:
|
||
_done += 1
|
||
break
|
||
P(u' 候选 %d 条,成功 %d 条;直方图 %s' % (len(_cand), _done, hist()))
|
||
if _done != 4 or hist().get(3.0, 0) != 4:
|
||
P(u'⛔ 圆角没做全,停手'); sys.exit(8)
|
||
|
||
'''
|
||
rep(u'\n# ── 面上草图切除(带候选映射)', FILLET + u'\n# ── 面上草图切除(带候选映射)')
|
||
|
||
RAILS = u'''
|
||
# ── [6b] 西端插拔式滤网导轨(前视面草图 L 形轮廓,向 −z 拉满高)───────────
|
||
FW, CLR, SLOT_T, LIP_T, SPACER, LIP = 70.0, 0.3, 3.4, 2.0, 4.0, 3.0
|
||
XO = X0 - SLOT_T - LIP_T # 唇边外表面 −43.8
|
||
YS0, YS1 = FAN_CY - FW / 2 - CLR, FAN_CY + FW / 2 + CLR # 滑槽 y 16.045 ~ 86.645
|
||
P(u'\\n[6b] 滤网导轨:滑槽 x %.1f~%.1f(厚 %.1f)、y %.3f~%.3f;唇边 x %.1f~%.1f 压边 %.1f'
|
||
% (X0 - SLOT_T, X0, SLOT_T, YS0, YS1, XO, X0 - SLOT_T, LIP))
|
||
rails = [
|
||
[(X0, YS0 - SPACER), (XO, YS0 - SPACER), (XO, YS0 + LIP), (X0 - SLOT_T, YS0 + LIP),
|
||
(X0 - SLOT_T, YS0), (X0, YS0)],
|
||
[(X0, YS1 + SPACER), (XO, YS1 + SPACER), (XO, YS1 - LIP), (X0 - SLOT_T, YS1 - LIP),
|
||
(X0 - SLOT_T, YS1), (X0, YS1)],
|
||
]
|
||
pick(u'前视基准面', 'PLANE')
|
||
sm.InsertSketch(True)
|
||
sm.AddToDB = True
|
||
for poly in rails:
|
||
for i in range(len(poly)):
|
||
a, b = poly[i], poly[(i + 1) % len(poly)]
|
||
sm.CreateLine(M(a[0]), M(a[1]), 0.0, M(b[0]), M(b[1]), 0.0)
|
||
sm.AddToDB = False
|
||
sm.InsertSketch(True)
|
||
boss(H, True)
|
||
lips = [(fb[1], fb[4]) for ax, sg, fb, a, _ in planes()
|
||
if ax == 0 and sg == -1 and abs(fb[0] - XO) < 0.02 and abs(fb[3] - XO) < 0.02]
|
||
P(u' 唇边外表面 %d 个(期望 2):%s' % (len(lips), [(round(a, 3), round(b, 3)) for a, b in sorted(lips)]))
|
||
want_l = [(YS0 - SPACER, YS0 + LIP), (YS1 - LIP, YS1 + SPACER)]
|
||
if len(lips) != 2 or any(abs(a - c) > 0.02 or abs(b - d) > 0.02 for (a, b), (c, d) in zip(sorted(lips), want_l)):
|
||
P(u'⛔ 导轨不对,停手'); sys.exit(9)
|
||
|
||
'''
|
||
rep(u'\n# ── 验收 ──', RAILS + u'\n# ── 验收 ──')
|
||
rep(u"check(u'最终', [X0, Y0, -H, X1, Y1, 0.0])", u"check(u'最终', [XO, Y0, -H, X1, Y1, 0.0])")
|
||
rep(u"(期望 {1.7: 8, 2.1: 4, 30.0: 2})", u"(期望 {1.7: 8, 2.1: 4, 3.0: 4, 30.0: 2})")
|
||
|
||
open(DST, 'w', encoding='utf-8').write(s)
|
||
print(u'写出', DST)
|