一、边界节点的自动划分
1.节点的设置
利用AutoCAD为用户提供的“PointStyle”菜单命令,设置节点的显示状态和尺寸大小,设置对话框如图1所示。执行键盘输入命令格式如下:Command:Ddptype(键盘输入)。
图1PointStyle设定对话框
选择点的类型可以通过选择图形菜单中的点,并且在“PointSize”编辑框中设定点的大小。
2.等分对象
使用“Divide”命令实现等分对象。
Command:_divide(或键盘输入Divide命令);
Selectobjecttodivide:(选择等分对象);
Enterthenumberofsegmentsor[block]:(用户输入等分数);
可等分对象包括直线、圆、圆弧、椭圆、椭圆弧、多义线和样条曲线。为了控制网格密度,可以在图形上加入控制点,如图2所示。
图2边界线等分及设置网格密度控制点
3.文件保存
将图形文件保存为DXF文件。
Command:Dxfout(键盘输入)
将弹出“SaveDrawingAs”对话框,输入文件名即可。
二、获取边界节点坐标的接口程序
#include
#include
#include
#include
voidextract(void);
voidextpoint(void);
voidoutput(void);
floatdotx[1000],doty[1000];存储节点坐标的数组
FILE*dxf,*wf;文件指针说明
intnl=0,nd=1;
charvalue[64];
intcode;
main()
{
extract(); 获取节点坐标的子程序
output(); 输出节点信息的子程序
}
voidoutput()
{inti;
wf=fopen("shuju.dat","w");节点信息保存在文件“shuju.dat”里
fprintf(wf,"floatdotx[1000]={0,"};依照C语言格式输出数据
printf(" thepoints'numberis%d",nd-1);
for(i=1;i<=(nd-1);i++)
{fprintf(wf,"%f",dotx[i]);
if(i<(nd-1))fprintf(wf,",");
}
fprintf(wf,"};");
fprintf(wf," floatdoty[1000]={0,");
for(i=1;i<=(nd-1);i++)
{fprintf(wf,"%f",doty[i]);
if(i<(nd-1))fprintf(wf,",");
}
fprintf(wf,"};");
fclose(wf);
}
voidextract()
{
charfname[24];
printf(" inputthenameofDXF:");输入dxf文件名
scanf("%s",fname);
strcat(fname,".dxf");
if((dxf=fopen(fname,"r"))==NULL)
{printf("fail ");
exit(0);}
printf(" ok! ");
do{
do{
fscanf(dxf,"%d",&code);
fscanf(dxf,"%s",value);
}while((code!=0)||strcmp(value,"SECTION")!=0);说明实体段开始
fscanf(dxf,"%d",&code);
fscanf(dxf,"%s",value);
}while((code!=2)||strcmp(value,"ENTITIES")!=0);
do{
fscanf(dxf,"%d",&code);
fscanf(dxf,"%s",value);
if(code==0&&strcmp(value,"POINT")==0) extpoint();“code”和“POINT”为说明点的组代码及跟随值
}while((code!=0)||(strcmp(value,"ENDSEC")!=0));说明实体段结束
fclose(dxf);
}
voidextpoint(void) 获取节点的坐标
{do{
fscanf(dxf,"%d",&code);
if(code==10)获取X轴坐标
fscanf(dxf,"%f",&dotx[nd]);
else {if(code==20){fscanf(dxf,"%f",&doty[nd]);nd++;}获取Y轴坐标
elsefscanf(dxf,"%s",value);
}
}while(code!=20);
}
三、在AutoCAD平台上显示网格的接口程序
#include
#include"shuju.h"
main()
{FILE*fp;
inti1,i2;
fp=fopen("drawout.dxf","w"); 建立一个图形交互文件
fprintf(fp," 0 SECTION 2 ENTITIES ");写入实体开始段
for(i1=1;i1<=nsan;i1++)
{
for(i2=0;i2<=2;i2++)
{fprintf(fp," 0 LINE 8 0 ");
fprintf(fp,"10 %f ",dotx[sanjiao[i1][i2]-1]);
fprintf(fp,"20 %f ",doty[sanjiao[i1][i2]-1]);
fprintf(fp,"11 %f ",dotx[sanjiao[i1][i2+1]-1]);
fprintf(fp,"21 %f ",doty[sanjiao[i1][i2+1]-1]);
}
}
fprintf(fp," 0 ENDSEC 0 EOF ");写入DXF文件结束段
fclose(fp);
}
四、程序说明
AutoCAD可以接受缺少任意一些表、段的DXF文件,因此,编写只生成“ENTITIES”段和文件结尾的DXF文件,可以方便地写入显示三角形网格的DXF文件。头文件shuju.h里包含有已生成的网格各三角形单元的的顶点编号,它们保存在数组sanjiao[1000][4]以及三角形单元的总数nsan,各节点的坐标dotx[1000],doty[1000]。程序运行后生成AutoCAD能够识别的DXF文件,文件名为”drawout.dxf”。
在AutoCAD的“Command:”提示下,调用DXFIN命令,导入drawout.dxf,即可得到生成网格的图形,如图3所示。
图3在AutoCAD平台上显示生成的网格
五、结论
从实际应用情况看,本文给出的程序能够方便准确地完成有限元网格生成中边界节点的设置以及显示已生成网格的图形。
模具之家为您提供最全面的塑胶,塑料,模具,模具设计,塑胶模具品牌的装修知识点和各种塑胶模具的导购与在线购买服务,拥有最便宜的塑胶模具价格和最优质的售后服务,敬请登陆模具之家:http://muju.jc68.com/