$$ 获得 3d对象最长对角线
Gripsw / Declrv $$必须声明变量
Entity / Body(1),Pl(6)
Number / R(7),Array(1),P(6),Dx,Dy,Dz
Number / Resp,Xmin,Ymin,Zmin,Xmax,Ymax,Zmax
Number / Xmin1,Ymin1,Zmin1,Xmax1,Ymax1,Zmax1
Number / Xmin2,Ymin2,Zmin2,Xmax2,Ymax2,Zmax2
Entity / Pt(3)
Number / Dd
Entity / Ptd
Entity / Box
Entity / Ln
Number / Pt3D(2,3)
Number / D
Number / Gc
Ifthen/&Actprt==1
Messg/'UGapi提示!请打开一个部件。'
Jump/End:
Endif
Gc=&Distol
&Distol = 0.0000001 $$建模距离公差
L10:
Mask/70
Ident/'UGapi提示!请选择对象...',Body(1),Resp
Jump/L10:,End:,,,Resp
P=Solbox/Body(1) $$获得对象的坐标极点
Xmin1=Minf(P(1),P(4))
Xmax1=Maxf(P(1),P(4))
Ymin1=Minf(P(2),P(5))
Ymax1=Maxf(P(2),P(5))
Zmin1=Minf(P(3),P(6))
Zmax1=Maxf(P(3),P(6))
$$生成六个辅助平面
Plan:
Pl(1)=Plane/Yzplan,(Xmin1-20)
Pl(2)=Plane/Yzplan,(Xmax1+20)
Pl(3)=Plane/Xzplan,(Ymin1-20)
Pl(4)=Plane/Xzplan,(Ymax1+20)
Pl(5)=Plane/Xyplan,(Zmin1-20)
Pl(6)=Plane/Xyplan,(Zmax1+20)
$$测出六个辅助平面到所有体的距离
Dist:
R(1..7)=Reldst/Body(1),Pl(1)
Xmin2=R(7)+(Xmin1-20)
R(1..7)=Reldst/Body(1),Pl(2)
Xmax2=(Xmax1+20)-R(7)
R(1..7)=Reldst/Body(1),Pl(3)
Ymin2=R(7)+(Ymin1-20)
R(1..7)=Reldst/Body(1),Pl(4)
Ymax2=(Ymax1+20)-R(7)
R(1..7)=Reldst/Body(1),Pl(5)
Zmin2=R(7)+(Zmin1-20)
R(1..7)=Reldst/Body(1),Pl(6) $$测相对距离
Zmax2=(Zmax1+20)-R(7) $$取得距离值
Xmin=Xmin2
Xmax=Xmax2
Ymin=Ymin2
Ymax=Ymax2
Zmin=Zmin2
Zmax=Zmax2
Delete/Pl $$删除六个辅助面
Dx=Xmax-Xmin
Dy=Ymax-Ymin
Dz=Zmax-Zmin $$计算实体块的尺寸
$$对象最大外形 Dx,Dy,Dz
$$对象最小坐标 Xmin,Ymin,Zmin
$$对象最大坐标 Xmax,Ymax,Zmax
Dd=Intf(Dx+Dy+Dz+2)*2
P(1)=Xmin+Dx/2
P(2)=Ymin+Dy/2
P(3)=Zmin+Dz/2
Ptd=Point/P(1..3)
Box=Sphere/Center,Ptd,Radius,Dd
R(1..7)=Reldst/Body(1),Box
Delete/Ptd,Box
Pt3D(1,1..3)=R(1..3)
Ptd=Point/ Pt3D(1,1..3)
Box=Sphere/Center,Ptd,Radius,Dd
R(1..7)=Reldst/Body(1),Box
Delete/Ptd,Box
Pt3D(2,1..3)=R(1..3)
P(1..3)=Pt3D(1,1..3)
P(4..6)=Pt3D(2,1..3)
Dd=Absf(Sqrtf((P(1)-P(4))**2+(P(2)-P(5))**2+(P(3)-P(6))**2)) $$ 最长对角线长度
Ln=Line/Pt3D(1,1..3),Pt3D(2,1..3) $$ 最长对角线
End:
&Distol =Gc
Halt