📄 6.1.grs
字号:
entity/cur(100) $$曲线组
entity/startpt $$连接曲线的起点
entity/result(100) $$排列之后的曲线组
entity/joincurve $$拟合曲线组形成的曲线
entity/referance $$参考点
number/a(200,3),b(7),c(3),flag(100)
l10:
mask/3,6,9
ident/'pick curves',cur,cnt,num,resp
jump/l10:,trm:,,resp
mask/all
$$提取曲线组的起点和终点形成点集。
l20:
i=0
l30:
i=i+1
m=2*i-1
n=2*i
a(m,1..3)=&spoint(cur(i))
a(n,1..3)=&epoint(cur(i))
l40:
if/i<num,jump/l30:
if/i==num,jump/l50:
$$计算点集中坐标值不同的点的个数。
l50:
i=1
count=1
l60:
i=i+1
dif=0
j=0
l70:
j=j+1
tol1=absf(a(i,1)-a(j,1))
tol2=absf(a(i,2)-a(j,2))
tol3=absf(a(i,3)-a(j,3))
if/tol1>0.1 or tol2>0.1 or tol3>0.1,dif=dif+1
l80:
if/j<(i-1),jump/l70:
if/j==(i-1),jump/l90:
l90:
if/j==dif,count=count+1
l100:
if/i<n,jump/l60:
if/i==n,jump/l105:
l105:
$$若count==num+1,则曲线组不闭合。
if/count==num+1,jump/l110:
$$若count==num,则曲线组闭合。
if/count==num,jump/l170:
$$若曲线组不闭合,则执行以下程序以确定连接曲线的起点。
l110:
i=0
l120:
sameptnum=0
i=i+1
j=0
xref=a(i,1)
yref=a(i,2)
zref=a(i,3)
l130:
j=j+1
tol1=absf(xref-a(j,1))
tol2=absf(yref-a(j,2))
tol3=absf(zref-a(j,3))
if/tol1<0.1 and tol2<0.1 and tol3<0.1,sameptnum=sameptnum+1
l140:
if/j<n,jump/l130:
if/j==n,jump/l150:
l150:
if/sameptnum==2,jump/l120:
if/sameptnum==1,jump/l160:
l160:
indx=i
startpt=point/a(indx,1..3)
jump/l180:
$$若曲线组闭合,则第一条曲线的起点作为连接曲线的起点。
l170:
c(1..3)=&spoint(cur(1))
startpt=point/c(1..3)
jump/l180:
$$将旗帜数组赋零。
l180:
do/l190:,i,1,num
flag(i)=0
l190:
referance=startpt
m=1
l200:
k=0
l210:
k=k+1
$$判断曲线是否被访问。
if/flag(k)==0,jump/l220:
if/flag(k)<>0,jump/l210:
l220:
$$计算参考点referance和曲线cur(k)的距离
b(1..7)=reldst/referance,cur(k)
if/b(7)>0.1,jump/l210:
if/b(7)<=0.1,jump/l230:
l230:
$$若距离<0.1,则执行以下程序。
flag(k)=1
referance=cur(k)
result(m)=cur(k)
m=m+1
l240:
if/m<(num+1),jump/l200:
if/m==num+1,jump/l250:
l250:
$$将曲线组拟合成一条曲线。
joincurve=spline/approx,result(1..num)
blank/startpt
trm:
halt
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -