基于GRIP语言的UG二次开发


2023年12月28日发(作者:亚洲杯日本vs韩国)

模具设计及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小时内删除。

下一篇:datagrip 技巧
标签:坐标系   实体   过渡   语言   确定   生成   程序   编程
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议