⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radius-tiaowenmian.grs

📁 UG二次开发很好的东西 需要的朋友可以下载来看看 很好用啊
💻 GRS
字号:
proc/face,facenum,draftcurve,leftcurve,rightcurve,tiaowen,stradius,endradius,$
  workcsys
entity/face(50)               $$条状配光纹的曲面
entity/draftcurve             $$条状配光纹的脊线
entity/leftcurve              $$条状配光纹的左侧曲线
entity/rightcurve             $$条状配光纹的右侧曲线
entity/pts(50)                $$脊线离散形成的点集
entity/pls(50)                $$过点pts(i)且垂直于脊线的平面
entity/workcsys               $$工作坐标系
entity/ptcsys                 $$临时坐标系
entity/interline(50)          $$条状配光纹曲面与平面pls(i)的相交曲线
entity/rightpoint(50)         $$条状配光纹右侧曲线与interline(i)的交点
entity/leftpoint(50)          $$条状配光纹左侧曲线与interline(i)的交点
entity/rightresult(50)        $$点集rightpoint(i)提取之后的点集
entity/leftresult(50)         $$点集leftpoint(i)提取之后的点集
entity/interresult(50)        $$曲线组interline(i)提取之后的曲线组
entity/cenpoint(50)           $$点rightresult(i)与leftresult(i)的中点
entity/upcenpoint(50)         $$点cenpoint(i)偏置一段距离后生成的圆弧顶点
entity/arc(50)                $$圆弧曲线组
entity/tiaowen                $$生成的条纹面
entity/refpt                  $$参考点
entity/refcir(3)              $$圆数组
entity/cenpt(2)               $$圆心数组
entity/joincen                $$连接圆心的直线
number/c(10,7),a(7)



$$将脊线离散成50个点,形成点集。
l10:
cpset/earcl,draftcurve,50,pts
blank/pts(1..50)

$$过脊线上每一个点pts(i)作垂直于脊线的平面pls(i)。
l20:
do/l30:,i,1,50
pls(i)=plane/perpto,draftcurve,thru,pts(i)
blank/pls(i)

$$给rightpoint(i),leftpoint(i),interline(i),arc(i)赋空值。
l30:
do/l40:,i,1,50
rightpoint(i)=&nulent
leftpoint(i)=&nulent
interline(i)=&nulent
arc(i)=&nulent

l40:
if/facenum==1,jump/l80:
if/facenum<>1,jump/l50:

$$若灯花曲面个数facnum<>1,则调用子程序mutiface-create-curve求灯花曲
$$面face(1..facenum)与平面pls(i)的相交曲线interline(i)。
l50:
i=0

l60:
i=i+1
call/'mutiface-create-curve',face,facenum,pls(i),interline(i),pts(i)

l70:
if/i<50,jump/l60:
if/i==50,jump/l110:

$$若灯花曲面facenum==1,则调用子程序singleface-create-curve求灯花曲
$$面face(1..facenum)与平面pls(i)的相交曲线interline(i)。
l80:
i=0

l90:
i=i+1
call/'singleface-create-curve',face(1),pls(i),interline(i),pts(i)

l100:
if/i<50,jump/l90:
if/i==50,jump/l110:

l110:
i=0
count=0

l120:
i=i+1
$$计算条状配光纹右侧曲线与脊线的距离。
a(1..7)=reldst/rightcurve,interline(i)
$$若距离<0.05,则执行以下程序;若距离>=0.05则跳过此段程序。
ifthen/a(7)<0.05
$$调用子程序create-wcs,以曲线rightcurve和interline(i)生成临时坐标系。
  call/'create-wcs',rightcurve,interline(i),ptcsys
$$将当前坐标系转换为临时坐标系。
  &wcs=ptcsys
$$在临时坐标系下求曲线rightcurve和interline(i)的交点rightpoint(i)。
  rightpoint(i)=point/intof,rightcurve,interline(i)
  blank/rightpoint(i)
else
  jump/l130:
endif

l130:
$$计算条状配光纹左侧曲线与脊线的距离。
a(1..7)=reldst/leftcurve,interline(i)
$$若距离<0.05,则执行以下程序;若距离>=0.05则跳过此段程序。
ifthen/a(7)<0.05
$$调用子程序create-wcs,以曲线leftcurve和interline(i)生成临时坐标系。
  call/'create-wcs',leftcurve,interline(i),ptcsys
$$将当前坐标系转换为临时坐标系。
  &wcs=ptcsys
$$在临时坐标系下求曲线leftcurve,interline(i)的交线leftpoint(i)。
  leftpoint(i)=point/intof,leftcurve,interline(i)
  blank/leftpoint(i)
else
  jump/l140:
endif

$$提取点集和曲线组。
l140:
ifthen/rightpoint(i)<>&nulent and leftpoint(i)<>&nulent
  count=count+1
  rightresult(count)=rightpoint(i)
  leftresult(count)=leftpoint(i)
  interresult(count)=interline(i)
else
  jump/l150:
endif


l150:
if/i<50,jump/l120:
if/i==50,jump/l160:

l160:
i=0

l170:
i=i+1
$$调用子程序create-center求点rightresult(i)和leftresult(i)的中点cenpoint(i)。
call/'create-center',face,facenum,interresult(i),rightresult(i),$
  leftresult(i),cenpoint(i)
$$将当前坐标系转换成工作坐标系。
&wcs=workcsys
perradius=stradius+(endradius-stradius)*(i-1)/(count-1)
$$调用子程序2-points-dis求点rightresult(i)和leftresult(i)的距离。
call/'2-points-dis',rightresult(i),leftresult(i),ppdist
hight=perradius-sqrtf(perradius*perradius-ppdist*ppdist/4)
$$调用子程序create-upcenter求与点cenpoint(i)相距hight的参考点。
call/'create-upcenter',face,facenum,cenpoint(i),refpt,hight
blank/refpt
$$由rightresult(i),leftresult(i),refpt三点生成临时坐标系。
ptcsys=csys/rightresult(i),leftresult(i),refpt
&wcs=ptcsys

$$过点rightresult(i)作半径为perradis的圆refcir(1)。
refcir(1)=circle/center,rightresult(i),radius,perradius
$$过点leftresult(i)作半径为perradis的圆refcir(2)。
refcir(2)=circle/center,leftresult(i),radius,perradius
$$求圆refcir(1)和refcir(2)的交点cenpt(1)和cenpt(2)。
cenpt(1)=point/ysmall,intof,refcir(1),refcir(2)
cenpt(2)=point/ylarge,intof,refcir(1),refcir(2)
$$连接交点cenpt(1)和cenpt(2)成直线joincen。
joincen=line/cenpt(1),cenpt(2)
delete/refcir(1),refcir(2),refpt
$$过点cenpt(1)作半径为perradis的圆refcir(3)。
refcir(3)=circle/center,cenpt(1),radius,perradius
$$生成圆弧顶点upcenpoint(i)。
upcenpoint(i)=point/intof,refcir(3),joincen
delete/refcir(3),joincen,cenpt(1),cenpt(2)
$$由rightresult(i),upcenpoint(i),leftresult(i)三点形成圆弧。
arc(i)=circle/rightresult(i),upcenpoint(i),leftresult(i)
blank/cenpoint(i),upcenpoint(i)
$$计算圆弧arc(i)与圆弧顶点upcenpoint(i)的距离。
a(1..7)=reldst/arc(i),upcenpoint(i)
if/a(7)>0.1,jump/l180:
if/a(7)<=0.1,jump/l190:

l180:
$$若距离大于0.1mm,则删除这个圆弧,并通过点
$$leftresult(i),upcenpoint(i),rightresult(i)重新生成圆弧arc(i)
delete/arc(i)
arc(i)=circle/leftresult(i),upcenpoint(i),rightresult(i)

l190:
$$隐藏圆弧arc(i)。
blank/arc(i)
if/i<count,jump/l170:
if/i==count,jump/l200:

$$删除点rightpoint(i),leftpoint(i),cenpoint(i),upcenpoint(i)以及曲线
$$interline(i)。

l200:
i=0

l210:
i=i+1
delete/pts(i),pls(i)
if/rightpoint(i)<>&nulent,delete/rightpoint(i)
if/leftpoint(i)<>&nulent,delete/leftpoint(i)
if/cenpoint(i)<>&nulent,delete/cenpoint(i)
if/upcenpoint(i)<>&nulent,delete/upcenpoint(i)
if/interline(i)<>&nulent,delete/interline(i)

l220:
if/i<50,jump/l210:
if/i==50,jump/l230:

$$生成条纹。
l230:
tiaowen=bsurf/mesh,rightcurve,leftcurve,with,arc(1..count)

l240:
jump/trm:

trm:
return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -