📄 radius-tiaowenmian.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 + -