模具设计及UG二次开发课程作业之二次开发
基于GRIP语言的UG二次开发
一、总述
UG/Open GRIP 是UG软件包中的一个重要模块,是EDS公司提供的用于UG二次开发的软件工具。GRIP语言具备完整的语法规则、程序结构、内部函数、GRIP程序必须经过编译、连接、生成可执行文件之后才能运行。利用GRIP程序能够实现与Unigraphicsde 各种交互操作,例如几何体的创建、文件的管理、系统参数的控制、UG数据库的存取等。
与其他二次开发语言相比,GRIP具备简单易学、交互性能强的优点。GRIP语言是面向工程师的语言,它不需要具备专业的编程知识,但必须具备一定程度的三维建模基础。通过GRIP编程,用户将专业知识与Unigraphics系统融合,就能更好地发挥Unigraphics软件的功能。
在本次的开发设计中将运用GRIP语言编程实现UG中的实体复制。在三维造型过程中,有时需要将某个实体从一个坐标系复制到另一个坐标系,实体在两个坐标系中的相对位置相同。利用UG命令执行此操作的步骤十分繁琐,因此若能将这一过程实现程序化,则将大大提供三维造型的效率。
但GRIP语言只提供实体平移、实体沿某个坐标轴旋转的函数,因此此程序的难点在于如何确定实体在坐标系中的旋转角度和旋转方向才能实现其在此坐标系中的相对位置与原始坐标系的相对位置保持一致。
二、程序的编程步骤
(1)首先选择需要复制的实体pickent;
(2)然后选择新坐标系的原点和坐标轴的确定方式;
(3)将实体pickent和原始坐标系precsys平移到新坐标系fincsys的原点cenpt,生成过渡实体ent1和过渡坐标系movecsys;
(4)计算过渡坐标系movecsys的X轴和坐标系fincsys的X轴之间的角度ang1;
(5)过渡坐标系movecsys的X轴和坐标系fincsys的X轴生成过渡坐标系chancsys,并在此坐标系下沿Z轴将过渡实体ent1和过渡坐标系movecsys分别旋转ang1角度,生成过渡实体ent2和过渡坐标系workcsys;
(6)计算过渡坐标系movecsys的Z轴和坐标系workcsys的Z轴之间的角度ang2;
(7)过渡坐标系workcsys的Z轴和坐标系fincsys的Z轴生成另一过渡坐标系chancsys,并在此坐标系下沿Z轴将过渡实体ent2旋转ang2角度,最终生成实体copyent。
三、具体操作步骤
模具设计及UG二次开发课程作业之二次开发
(1)在C盘下新建名为grip的文件夹
(2)在Windows环境下,依次单击【开始】——【程序】——Unigraphics NX
6.0——Unigraphics Tools——UG Open GRIP 来调用GRIP开发环境。
(3)进入GRIP开发环境界面
模具设计及UG二次开发课程作业之二次开发
四、程序源代码
$$
模具设计及UG二次开发课程作业之二次开发
$$ 主程序,调用的子程序:set-wcs,anglf。
$$
$$实体变量和数组变量声明。
entity/pickent,cenpt,precsys,fincsys,copyent,pt(3)
entity/ent1,ent2,movecsys,chancsys,chancsys,workcsys
entity/ln1,ln2,ln3,ln4,ln5,ln6,ln7
entity/stpt1,endpt1,stpt2,endpt2
number/a(3),mat1(12),b(3),c(7)
$$确定原始坐标系实体 precsys
l10:
pt(1)=point/0,0,0
blank/pt(1)
pt(2)=point/1,0,0
blank/pt(2)
pt(3)=point/0,1,0
blank/pt(3)
precsys=csys/pt(1),pt(2),pt(3)
delete/pt(1..3)
$$选择需要复制的实体 pickent
l20:
ident/'select the entity to copy',pickent,resp
jump/l20:,trm:,,resp
$$确定新坐标系的原点。
l30:
gpos/'pick origin point of the new coordinate',x,y,z,resp
jump/l30:trm:,,resp
$$调用子程序fincsys确定新坐标系实体fincsys。
l40:
cenpt=point/x,y,z
blank/cenpt
call/'set-wcs',rc,fincsys
if/rc==-1,jump/l40:
fincsys=csys/fincsys,origin,cenpt
$$将实体pickent和原始坐标系precsys平移到新坐标系fincsys的原点cenpt,生成过渡实体
$$ent1和过渡坐标系movecsys。
l50:
&wcs=precsys
a(1..3)=&point(cenpt)
mat1=matrix/transl,a(1..3)
ent1=transf/mat1,pickent
movecsys=transf/mat1,precsys
$$调用子程序anglf计算过渡坐标系movecsys的X轴和坐标系fincsys的X轴之间的角度
模具设计及UG二次开发课程作业之二次开发
$$angl。
l60:
&wcs=movecsys
ln1=line/0,0,0,2,0,0
blank/ln1
ln2=line/0,0,0,0,4,0
blank/ln2
ln3=line/0,0,0,0,0,6
blank/ln3
ln4=line/0,0,0,8,0,0
blank/ln4
ln5=line/0,0,0,0,10,0
blank/ln5
ln6=line/0,0,0,0,0,12
blank/ln6
call/'anglf',ln1,ln4,ang1
$$过渡坐标系movecsys的X轴和坐标系fincsys的X轴生成过渡坐标系chancsys,并在此
$$坐标系下沿Z轴将过渡实体ent1和过渡坐标系movecsys分别旋转ang1角度,生成过渡
$$实体ent2和过渡坐标系workcsys。
l70:
chancsys=csys/ln1,ln4
&wcs=chancsys
mat1=matrix/xyrot,ang1
ent2=transf/mat1,ent1
workcsys=transf/mat1,movecsys
$$调用子程序anglf计算坐标系fincsys的Z轴和过渡坐标系workcsys的Z轴之间的角度
$$ang2。
l80:
&wcs=workcsys
ln7=line/0,0,0,0,0,14
blank/ln7
call/'anglf',ln6,ln7,ang2
$$过渡坐标系workcsys的Z轴和坐标系fincsys的Z轴生成另一过渡坐标系chancsys,并在
$$此坐标系下沿Z轴将过渡实体ent2旋转ang2角度,最终生成实体copyent。
l90:
chancsys=csys/ln7,ln6
&wcs=chancys
mat1=matrix/xyrot,ang2
模具设计及UG二次开发课程作业之二次开发
l100:
delete/ln1,ln2,ln3,ln4,ln5,ln6,ln7
delete/ent1,ent2
&wcs=fincsys
ubnum=&blank(copyent)
if/ubnum==1,unblnk/copyent
$$程序结束
trm:
halt
$$
$$ 子程序anglf,用于计算两条拥有共同端点的直线之间的夹角。
$$ 输入参数:ln1,ln2。
$$ 输出参数:ang。
$$ 输入文件:无
$$ 输出文件:无
$$
proc/ln1,ln2,ang
entity/ln1,ln2,pt1,pt2,pt3
number/a(3),b(3),c(3)
l10:
pt1=point/intof,ln1,ln2
a(1..3)=&point(pt1)
l20:
b(1..3)=&spoint(ln1)
c(1..3)=&epoint(ln1)
ifthen/a(1)==c(1)and a(2)==c(2) and a(3)==c(3)
pt2=point/b(1..3)
elseif/a(1)==b(1) and a(2)==b(2) and a(3)==b(3)
pt2=point/c(1..3)
else
jump/trm:
endif
l40:
dis1=distf(pt1,pt2)
dis2=distf(pt1,pt3)
dis3=distf(pt3,pt2)
l50:
arg=(dis1*dis1+dis2*dis2-dis3*dis3)/(2*dis1*dis2)
ang=acosf(arg)
delete/pt1,pt2,pt3
模具设计及UG二次开发课程作业之二次开发
trm:
return
$$
$$ 子程序set-wcs,用于确定坐标系。调用的子程序orient-line。
$$ 输入参数:无。
$$ 输出参数:rc,workcsys。
$$ 输入文件:无。
$$ 输出文件:无。
$$
$$实体变量和数组变量声明。
pro/rc,workcsys
entity/pnt1,pnt2,pnt3
entity/ln1,ln2
entity/cir1
entity/entcsys
entity/workcsys
number/pt1(3),pt2(3),pt3(3),cp(3),resp,rc
rc=-1
$$ 选择坐标系确定方式: 三个点、两条直线、圆或圆弧、坐标系平面。
rjt010:
choose/'选择确定工作坐标系的方法',‘三个点’,‘两条直线’,$
'圆或圆弧',‘坐标系平面’,resp
jump/rjt010:term:,,,,two020:,arc030:,csy050:,resp
$$三个点确定坐标系
rjt020:
gpos/'提取第一个点',pt1,resp
jump/rjt020:,term:,,,,resp
rjt030:
gpos/'提取第二个点',pt2,resp
jump/rjt020:,term:,,,,resp
rjt040:
gpos/'提取第三个点',pt3,resp
jump/rjt030:,term:,,,,resp
rjt050:
pnt1=point/pt1
pnt2=point/pt2
pnt3=point/pt3
workcsys=csys/pnt1,pnt2,pnt3
&wcs=workcsys
delete/pnt1,pnt2,pnt3
模具设计及UG二次开发课程作业之二次开发
rc=1
jump/term:
$$两条直线确定坐标系
two020:
mask/3
ident/'选择第一条直线',ln1,cursor,cp,member,off,resp
call/'orient-line',ln1,cp
jump/two020:,term:,,resp
two030:
ident/'选择第二条直线',ln2,cursor,cp,member,off,resp
call/'orient-line',ln2,cp
jump/two020:,term:,,resp
workcsys=csys/ln1,ln2
&wcs=workcsys
rc=1
jump/term:
$$圆或圆弧生成坐标系。
arc030:
mask/5,6
ident/'选择圆或圆弧',cir1,resp
jump/arc030:,term:,,,,resp
workcsys=csys/cir1
&wcs=works
rc=1
jump/term:
$$选择存在的坐标系
csy050:
mask/45
ident/'选择存在的坐标系',entcsys,resp
jump/csy050:,term:,,,,resp
csy060:
if/&type(entcsys)<>45,jump/csy050:
workcsys=csys/entcsys
&wcs=workcsys
rc=1
jump/term:
$$程序返回。
term:
mask/all
return
$$
模具设计及UG二次开发课程作业之二次开发
$$ 子程序orient-line,用于确定直线的方向。
$$ 输入参数:ln、cp。
$$ 输出参数:ln。
$$ 输入文件:无。
$$ 输出文件:无。
$$
proc/ln,cp
entity/ln,pt1,pt2,ptc
number/cp(3),sp(3),ep(3)
l10:
obtain/ln,sp,ep
pt1=point/sp(1..3)
pt2=point/ep(1..3)
pt3=point/cp(1..3)
l20:
ifthen/distf(pt1,ptc) delete/ln ln=line/pt2,pt1 endif delete/pt1,pt2,ptc trm; return
本文发布于:2024-09-21 01:30:31,感谢您对本站的认可!
本文链接:https://www.17tex.com/fanyi/40019.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |