在ANSYS建模过程中,有时需要创建样条曲线,如曲杆、曲面、索等。HELP中的样条曲线命令BSPLIN为:BSPLIN,P1,P2,P3,P4,P5,P6,XV1,YV1,ZV1,XV6,YV6,ZV6,即只有6个关键点。然而,实际建模时往往会远大于6个关键点,如几十个、上百个等,此时如何创建样条线呢?
创建BSPLIN的几个注意事项:
第一:BSPLIN命令最多可以通过200个关键点创建样条线。
第二:只要选择集中关键点是无序的(如KSEL等命令),则从最小编号开始按最短距离原则依次拟合生成一条样条线。如采用随机整数创建,因每次运行的随机数否会变化,最小号位置和大小也不会相同,因此创建的样条线都不会相同。
第三:只要选择集中关键点编号有序,则均按顺序拟合生成样条线。如自然序列,即关键点编号由小到大顺序排列时,会按此序拟合样条线;再如入集顺序(即被选入当前选择集的先后顺序),则均按关键点入集的先后顺序拟合样条线。
入集方法:GUI点菜单点击拾取关键点时会在LOG文件中留下命令行,分析其拾取过程主要由命令FLST、FITEM和P51X组成,因此可以将GUI点击关键点拾取过程编制成命令流,从而形成入集的先后顺序。命令流中给出了两种拾取示例,可供参考。
随机不重复整数的生成:利用取整函数将随机数取整,排除重复数字。这几句程序不够精炼,但也只是为了表达和说明关键点编号凌乱而已(命令流最前面的几句)。
下面的命令流需根据需要选择运行,详见命令流中的注释。
!对数螺线 FINISH$/CLEAR$/PREP7 !生成500个不重复的随机数整数 *GET,XT,ACTIVE,,TIME,WALL XT=RAND(XT 1,XT 2)$XT= *DIM,AA,,500 DOS=1$JS=1 *DOWHILE,DOS IA=NINT(RAND(1,1000)) RS=0 *DO,I,1,JS *IF,IA,EQ,AA(I),THEN RS=1$*EXIT$*ENDIF *ENDDO *IF,RS,EQ,0,THEN AA(JS)=IA$JS=JS 1$*ENDIF *IF,JS,EQ,500,THEN *EXIT$*ENDIF$*ENDDO
!关键点编号有序时是“BSPLIN,ALL”正确。关键点编号无序时,从最小编号开始按最近距离选择关键点,样条线不一定是预期曲线
A=2$K=0.1$CSYS,1 *DO,I,1,100 FAID=(I-1)*10 FAIR=FAID/180*ACOS(-1) RI=A*EXP(K*FAIR) !关键点从小到大顺序创建 !K,I,RI,FAID !关键点编号随机编排 K,AA(I),RI,FAID *ENDDO! !直接创建样条曲线 !BSPLIN,ALL !有入集先后顺序,利用GUI的点选命令实现 FLST,3,100,3 *DO,I,1,100,1 FITEM,3,AA(I) *ENDDO!结束拾取 BSPLIN,,P51X !在如有不太多的关键点时可写成如下: !AA(I)是关键点号,因采用随机生成 !每次都不会相同,这里仅仅是用于关键点示意 FLST,3,5,3 FITEM,3,AA(2) FITEM,3,AA(40) FITEM,3,AA(180) FITEM,3,AA(53) FITEM,3,AA(35) BSPLIN,,P51X创建样条线
这里注意FLST命令的使用方法(“FLST,NFIELD,NARG,TYPE,Otype,LENG”)其第一个命令参数NFIELD对应后续命令(这里为BSPLIN)的项数,NFIELD数目包括BSPLIN命令本身,即命令本身为第1个,其后参数分别对应第2和第3个。如“FLST,3,5,3”解读:第一个3表示后续命令有3项(命令本身 两个参数),5表示共拾取5个图素,最后的3表示拾取的是关键点;而对应的“BSPLIN,,P51X”就共有3项,1是BSPLIN,2为空,3为P51X。
这与在GUI方式有关,首先执行的是要进行的操作命令BSPLIN,然后才是拾取;但在命令流中是先拾取,然后再执行后续命令。命令BSPLIN至少要两个关键点,因此FLST参数中的第一个必须等于3,用2太少无法执行BSPLIN,用4则BSPLIN的前两个为空不容许(BSPLIN,,,P51X)。
当多个关键点时,利用FLST拾取方式轻松实现200个关键点之内的样条线建模。