?? mutiface-create-curve.grs
字號:
proc/face,num,pl,joincurve,refcur
entity/face(50) $$條狀配光紋的曲面
entity/pl $$與條狀配光紋曲面相交的平面
entity/pt $$參考點
entity/joincurve $$最終生成的曲線
entity/refcur $$參考實體
entity/intercurve(50) $$曲面face(i)與平面pl的相交曲線組
entity/uninter(100) $$曲面face(i)與平面pl的相交曲線組解組后的曲線
entity/result(100) $$對曲線組uninter(i)進行提取之后的曲線組
entity/referance $$參考點
entity/trypt(50) $$所有連接曲線起點和終點中坐標值未重合的點集
entity/startpt $$最終所有連接曲線的起點
entity/stref $$距離參考實體refcur最近的曲線uninter(indx)的起點
entity/endref $$距離參考實體refcur最近的曲線uninter(indx)的終點
entity/cur(100) $$最終得到的曲線組
number/a(200,3),b(7),dist(50),flag(100),c(3)
$$實體數組賦空值。
l10:
do/l20:,i,1,num
intercurve(i)=&nulent
$$求曲面face(1..num)與平面pl的所有相交曲線uninter(1..unnum)。
l20:
i=0
unnum=0
l30:
i=i+1
intercurve(i)=intsec/face(i),with,pl,toler,0.0005,iferr,err1:
$$判斷曲線組intercurve(i)的曲線數量。
curnum=&gcount(intercurve(i))
if/curnum==1,jump/l40:
if/curnum<>1,jump/l50:
l40:
unnum=unnum+1
uninter(unnum)=&gent(intercurve(i),1)
blank/uninter(unnum)
jump/l80:
l50:
j=0
l60:
j=j+1
unnum=unnum+1
uninter(unnum)=&gent(intercurve(i),j)
blank/uninter(unnum)
l70:
if/j<curnum,jump/l60:
if/j==curnum,jump/l80:
l80:
ungrp/intercurve(i)
if/i<num,jump/l30:
if/i==num,jump/l90:
l90:
$$判斷曲線組解組之后曲線的數量。
if/unnum==1,jump/l590:
if/unnum<>1,jump/l100:
$$若曲線數量unnum<>1,則執行以下程序。
$$計算曲線uninter(i)與參考實體的距離,尋找離參考實體最近的曲線uninter(indx)。
l100:
do/l110:,i,1,unnum
b(1..7)=reldst/refcur,uninter(i)
dist(i)=b(7)
l110:
i=1
compare=dist(1)
indx=1
l120:
i=i+1
drt=compare-dist(i)
ifthen/drt>0
compare=dist(i)
indx=i
else
jump/l130:
endif
l130:
if/i<unnum,jump/l120:
if/i==unnum,jump/l150:
l150:
$$將尋找到的曲線uninter(indx)放入曲線數組result(1)。
result(1)=uninter(indx)
$$給旗幟數組賦為0值。
do/l160:,i,1,unnum
flag(i)=0
$$提取曲線uninter(indx)的起點stref,尋找與stref相連接的所有曲線。
l160:
flag(indx)=1
$$提取曲線uninter(indx)的起點stref,并將它作為參考點。
c(1..3)=&spoint(uninter(indx))
stref=point/c(1..3)
referance=stref
n=1
l170:
$$設置judge值。
i=0
judge=0
l180:
i=i+1
$$判斷曲線是否已被提取到曲線組result(i)。
if/flag(i)==0,jump/l190:
if/flag(i)<>0,jump/err2:
l190:
$$計算參考實體與曲線uninter(i)的距離。
b(1..7)=reldst/referance,uninter(i)
if/b(7)<0.01,jump/l200:
if/b(7)>=0.01,jump/l210:
l200:
$$若曲線uninter(i)與參考實體相聯接,則旗幟數組相應位置設置為1,并將此曲線
$$提取到曲線組result(n),同時將此曲線設置為參考實體,修改judge值。
judge=1
flag(i)=1
n=n+1
result(n)=uninter(i)
referance=uninter(i)
jump/l220:
l210:
if/i<unnum,jump/l180:
if/i==unnum,jump/l220:
l220:
$$若judge==1,則繼續循環查找連接的曲線;若judege<>1,則終止此循環。
if/judge==1,jump/l170:
if/judge<>1,jump/l230:
l230:
$$重新設置旗幟數組flag(i)為零。
do/l240:,i,1,unnum
flag(i)=0
l240:
$$提取曲線uninter(indx)的終點endref,并將它作為參考點。
flag(indx)=1
c(1..3)=&epoint(uninter(indx))
endref=point/c(1..3)
referance=endref
l250:
i=0
judge=0
l260:
i=i+1
$$判斷曲線是否已被提取到曲線組result(i)。
if/flag(i)==0,jump/l270:
if/flag(i)<>0,jump/err3:
l270:
$$計算參考實體與曲線uninter(i)的距離。
b(1..7)=reldst/referance,uninter(i)
if/b(7)<0.01,jump/l280:
if/b(7)>=0.01,jump/l290:
l280:
$$若曲線uninter(i)與參考實體相聯接,則旗幟數組相應位置設置為1,并將此曲線
$$提取到曲線組result(n),同時將此曲線設置為參考實體,修改judge值。
judge=1
flag(i)=1
n=n+1
result(n)=uninter(i)
referance=uninter(i)
jump/l300:
l290:
if/i<unnum,jump/l260:
if/i==unnum,jump/l300:
l300:
$$若judge==1,則繼續循環查找連接的曲線;若judege<>1,則終止此循環。
if/judge==1,jump/l250:
if/judge<>1,jump/l310:
$$刪除曲線uninter(indx)的起點和終點。
l310:
delete/stref,endref
l320:
$$判斷連接的曲線的數量
if/n==1,jump/l580:
if/n<>1,jump/l330:
$$若連接的曲線數量大于1,則執行以下程序。
$$提取所有連接曲線起點和終點的三維坐標值。
l330:
i=0
l340:
i=i+1
x=2*i-1
y=2*i
a(x,1..3)=&spoint(result(i))
a(y,1..3)=&epoint(result(i))
l350:
if/i<n,jump/l340:
if/i==n,jump/l360:
$$提取所有連接曲線起點和終點中坐標值未重合的點trypt(i)。
l360:
i=0
m=0
l370:
sameptnum=0
i=i+1
j=0
xref=a(i,1)
yref=a(i,2)
zref=a(i,3)
l380:
j=j+1
tol1=absf(xref-a(j,1))
tol2=absf(yref-a(j,2))
tol3=absf(zref-a(j,3))
if/tol1<0.01 and tol2<0.01 and tol3<0.01,sameptnum=sameptnum+1
l390:
if/j<y,jump/l380:
if/j==y,jump/l400:
l400:
ifthen/sameptnum==1
m=m+1
trypt(m)=point/a(i,1..3)
else
jump/l410:
endif
l410:
if/i<y,jump/l370:
if/i==y,jump/l420:
$$尋找點集trypt(i)中距離參考點refcur最近的點trypt(indx)。
l420:
do/l430:,i,1,m
b(1..7)=reldst/trypt(i),refcur
dist(i)=b(7)
l430:
i=1
compare=dist(1)
indx=1
l440:
i=i+1
drt=compare-dist(i)
ifthen/drt>0
compare=dist(i)
indx=i
else
jump/l450:
endif
l450:
if/i<m,jump/l440:
if/i==m,jump/l460:
l460:
$$將點trypt(indx)設置為起始點。
startpt=trypt(indx)
$$刪除點集trypt(i)中除trypt(indx)之外的所有點。
i=0
l470:
i=i+1
if/i<>indx,delete/trypt(i)
l480:
if/i<m,jump/l470:
if/i==m,jump/l490:
$$旗幟數組重新賦0。
l490:
do/l500:,i,1,n
flag(i)=0
l500:
$$將起始點設置為參考實體。
referance=startpt
m=0
l510:
judge=0
i=0
l520:
i=i+1
$$判斷曲線result(i)是否被提取到曲線組cur(i)中。
if/flag(i)==0,jump/l530:
if/flag(i)<>0,jump/err4:
l530:
$$計算參考實體與曲線result(i)的距離。
b(1..7)=reldst/referance,result(i)
if/b(7)>0.01,jump/l550:
if/b(7)<=0.01,jump/l540:
l540:
$$若曲線result(i)與參考實體相聯接,則旗幟數組相應位置設置為1,并將此曲線
$$提取到曲線組cur(m),同時將此曲線設置為參考實體,修改judge值。
judge=1
flag(i)=1
referance=result(i)
m=m+1
cur(m)=result(i)
jump/l560:
l550:
if/i<n,jump/l520:
if/i==n,jump/l560:
l560:
$$若judge==1,則繼續循環查找連接的曲線;若judege<>1,則終止此循環。
if/judge==1,jump/l510:
if/judge<>1,jump/l570:
l570:
$$擬合曲線組cur(1..m)生成目標曲線。
joincurve=spline/approx,toler,0.0005,cur(1..m)
delete/startpt
delete/uninter(1..unnum)
jump/l600:
l580:
$$若連接的曲線數量等于1,則執行以下程序。
unblnk/result(1)
joincurve=result(1)
jump/l600:
$$若曲線數量unnum==1,則執行以下程序。
l590:
unblnk/uninter(1)
joincurve=uninter(1)
jump/l600:
l600:
jump/trm:
trm:
return
$$halt
err1:
if/i<num,jump/l30:
if/i==num,jump/l90:
err2:
if/i<unnum,jump/l180:
if/i==unnum,jump/l220:
err3:
if/i<unnum,jump/l260:
if/i==unnum,jump/l300:
err4:
if/i<n,jump/l520:
if/i==n,jump/l560:
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -