建立方向盘项目初始版本

This commit is contained in:
2026-10-29 22:04:55 +08:00
commit 9962cbfbce
834 changed files with 1519203 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
from pathlib import Path
import FreeCAD as A,Part,FreeCADGui as G,time,json,traceback
from pivy import coin
folder=Path(r'C:\projects\wheel\models\70_m4_threaded')
try:
d=A.openDocument(str(folder/'70_M4_threaded.FCStd'));d.recompute()
src=Part.read(r'C:\projects\wheel\models\70转接板.step'); dst=d.getObject('OuterChamfer').Shape
sections=[]
for z in (0.2,1.,2.,4.,6.,7.,7.8):
w1=max(src.slice(A.Vector(0,0,1),z),key=lambda w:w.Length)
w2=max(dst.slice(A.Vector(0,0,1),z),key=lambda w:w.Length)
w1=Part.Wire(Part.sortEdges(w1.Edges)[0]);w2=Part.Wire(Part.sortEdges(w2.Edges)[0])
if not w1.isClosed() or not w2.isClosed(): raise RuntimeError('section wire not closed at '+str(z))
f1,f2=Part.Face(w1),Part.Face(w2)
if not f1.isValid() or not f2.isValid(): raise RuntimeError('section face invalid at '+str(z))
sections.append({'z':z,'symmetric_difference_area':f1.cut(f2).Area+f2.cut(f1).Area,'source_area':f1.Area,'new_area':f2.Area})
(folder/'outline_check.json').write_text(json.dumps(sections,indent=2),encoding='utf-8')
v=G.activeDocument().activeView();v.viewAxonometric();v.fitAll();G.updateGui();time.sleep(2)
v.saveImage(str(folder/'70_M4_isometric.png'),1600,1200,'White')
c=v.getCameraNode();rot=c.orientation.getValue();zvec=rot.multVec(coin.SbVec3f(0,0,1));dist=c.focalDistance.getValue();target=coin.SbVec3f(30.310889,17.5,8)
c.position.setValue(target+zvec*dist);c.height.setValue(15);G.updateGui();time.sleep(2)
v.saveImage(str(folder/'70_M4_thread_detail.png'),1600,1200,'White')
except:
(folder/'outline_error.txt').write_text(traceback.format_exc(),encoding='utf-8')
for name in list(A.listDocuments()): A.closeDocument(name)
Gui.getMainWindow().close()