GRIP获得3d对象最长对角线源代码

$$ 获得 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





你可能感兴趣的:(GRIP获得3d对象最长对角线源代码)