26 lines
1.5 KiB
Plaintext
26 lines
1.5 KiB
Plaintext
from pathlib import Path
|
|
import os,traceback, FreeCAD as A, Part
|
|
R=Path(r'C:\projects\wheel');O=R/'models'/'switch_2020_raise10_concept'
|
|
ok=False
|
|
try:
|
|
d=A.openDocument(str(O/'Assembly.FCStd'));d.recompute();lines=[]
|
|
names=['SwitchCross2020','SwitchAngleA','SwitchAngleB','SwitchCrossJoint0','SwitchCrossJoint1','MotorShim0','MotorShim1','MotorBaseCorner0','MotorBaseCorner1','CompactPlate0','CompactPlate1']
|
|
for name in names:
|
|
o=d.getObject(name);assert o and not o.Shape.isNull() and o.Shape.isValid(),name
|
|
lines.append('%s valid=%s bound=%s'%(name,o.Shape.isValid(),o.Shape.BoundBox))
|
|
pairs=[('SwitchCross2020','SwitchEnvelope')]
|
|
for i in (0,1):
|
|
pairs += [('MotorShim%d'%i,'NewRail%d'%i),('MotorShim%d'%i,'Rail%d'%i),('MotorShim%d'%i,'MotorBaseCorner%d'%i)]
|
|
for j in (0,1):pairs += [('CompactPlate%d'%i,'PurchasedAngle%d%d'%(i,j)),('BoardM5_%d%d'%(i,j),'PurchasedAngle%d%d'%(i,j)),('BoardM5_%d%d'%(i,j),'CompactPlate%d'%i)]
|
|
for aa,bb in pairs:
|
|
a=d.getObject(aa).Shape;b=d.getObject(bb).Shape
|
|
v=a.common(b).Volume if a.BoundBox.intersect(b.BoundBox) else 0.
|
|
dist=a.distToShape(b)[0]
|
|
lines.append('%s / %s overlap=%.6f distance=%.6f'%(aa,bb,v,dist))
|
|
A.closeDocument(d.Name)
|
|
s=Part.read(str(O/'Assembly.step'));assert not s.isNull() and s.isValid()
|
|
lines.append('STEP valid=%s solids=%d'%(s.isValid(),len(s.Solids)))
|
|
(O/'validation.txt').write_text('\n'.join(lines)+'\n',encoding='utf8');ok=True
|
|
except Exception:(O/'VERIFY_ERROR.txt').write_text(traceback.format_exc(),encoding='utf8')
|
|
finally:os._exit(0 if ok else 1)
|