主要思路是按给定的尺寸在指定的位置画出长方体
首先定义一个函数,在给定的位置(x,y,z)画出给定尺寸(长,宽,高)的长方体,另外给它指定一个名字:
Code: Select all
def makebox(doc,boxname,length,width,height,x,y,z):
box = doc.addObject("Part::Box",boxname)
doc.recompute()
box.Length,box.Width,box.Height = length, width, height
box.Placement.Base = FreeCAD.Vector(x,y,z)
Code: Select all
def makepallet(name,x,y,z,dx,xn,dy,yn,dz):
if xn < 1 : i=1
else: i=xn
while i>0:
if yn < 1 : j=1
else: j=yn
while j>0:
makebox(name+str(i)+str(j),x,y,z,dx*(i-1),dy*(j-1),dz)
j -= 1
i -= 1
Code: Select all
list_title=["Pallet Length(PX)",
"Pallet Width(PY)",
"Pallet Height",
"Broad Thickness",
"Support Length",
"Support Width",
"Panel Width",
"Quantity of Panel",
"Quantity of Bridge",
"Quantity of Bottom"]
list_data=[1200,1000,120,12,90,90,100,5,3,3 ]
L_pallet = list_data[0]
W_pallet = list_data[1]
H_pallet = list_data[2]
T_wood = list_data[3]
L_support = list_data[4]
W_support = list_data[5]
W_panel = list_data[6]
n_panel = list_data[7]
n_bridge = list_data[8]
n_bottom = list_data[9]
Code: Select all
list_bottom =[n_bottom,L_pallet,W_support,T_wood]
list_support=[int(n_bottom*n_bridge),L_support,
W_support,H_pallet-3*T_wood]
list_bridge =[n_bridge,L_support,W_pallet,T_wood]
list_panel =[n_panel,L_pallet,W_panel,T_wood]
Code: Select all
mylist=list_bottom
makepallet("bottom",mylist[1],mylist[2],mylist[3],
0,0,(W_pallet-mylist[2])/(n_bottom-1),
n_bottom,0)
mylist=list_support
makepallet("support",mylist[1],mylist[2],mylist[3],
(L_pallet-mylist[1])/(n_bridge-1),
n_bridge,
(W_pallet-mylist[2])/(n_bottom-1),
n_bottom,
list_bottom[3])
mylist=list_bridge
makepallet("bridge",mylist[1],mylist[2],mylist[3],
(L_pallet-mylist[1])/(n_bridge-1),
n_bridge,
0,0,
list_bottom[3]+list_support[3])
mylist=list_panel
makepallet("panel",mylist[1],mylist[2],mylist[3],
0,0,
(W_pallet-mylist[2])/(n_panel-1) ,
n_panel,
list_bottom[3]+list_support[3]+list_bridge[3])
再下来就是GUI的部分,一些简单的label,textinput,button组合,可以看附件代码
装箱模拟部分和上面类似,无非就是在栈板上堆长方体
还可以加些其他的小功能, 如交换箱子的长宽,可以通过按钮实现免去模拟时再次手工输入。
声明:
本文及附件随便用,引用时请注明出处。
实际用于生产时请用FEA校核强度,任何由本文引起的安全问题概不负责!