matlab官网有dxflib解压包可以下载,可以绘制:点、直线、圆、字母、简单形状等。
但是没有圆弧、椭圆弧的文件。下面是我自己写的函数,可以运行。
若要画多个圆弧,在dxf_arc外面加一个循环即可。程序内容自行根据组码理解。
画圆弧:
FID = dxf_open('example.dxf');%打开
FID = dxf_set(FID,'Layer',1,'Color',[1 1 1]);%定义图层及颜色
dxf_arc(FID, center, radius, angle);%dxf以度数为单位
dxf_close(FID);%关闭
function FID = dxf_arc(FID, center, radius, angle)
try
if FID.dump
fprintf(FID.fid,'0\n');%开始或者结束
fprintf(FID.fid,'ARC\n');
dxf_print_layer(FID);% 8 图层0 62 图层颜色255
fprintf(FID.fid,'66\n'); % entities follow (not necessary)
fprintf(FID.fid,'1\n');
fprintf(FID.fid,'10\n');%原心坐标x
fprintf(FID.fid,[num2str(center(1)),'\n']);
fprintf(FID.fid,'20\n');%原心坐标y
fprintf(FID.fid,[num2str(center(2)),'\n']);
fprintf(FID.fid,'30\n');%原心坐标z
fprintf(FID.fid,[num2str(center(3)),'\n']);
fprintf(FID.fid,'40\n');%半径
fprintf(FID.fid,[num2str(radius),'\n']);
fprintf(FID.fid,'50\n');%起始角度
fprintf(FID.fid,[num2str(angle(1)),'\n']);
fprintf(FID.fid,'51\n');%终止角度
fprintf(FID.fid,[num2str(angle(2)),'\n']);
end
catch exception
if FID.fid >= 0
fclose(FID.fid);
end
rethrow(exception);
end
画椭圆弧:
function FID = dxf_ellipse(FID, center, major_axis, ratio, angle)
try
if FID.dump
fprintf(FID.fid,'0\n');%开始或者结束
fprintf(FID.fid,'ELLIPSE\n');
dxf_print_layer(FID);% 8 图层0 62 图层颜色255
fprintf(FID.fid,'66\n'); % entities follow (not necessary)
fprintf(FID.fid,'1\n');
fprintf(FID.fid,'10\n');%椭圆心坐标x
fprintf(FID.fid,[num2str(center(1)),'\n']);
fprintf(FID.fid,'20\n');%椭圆心坐标y
fprintf(FID.fid,[num2str(center(2)),'\n']);
fprintf(FID.fid,'30\n');%椭圆心坐标z
fprintf(FID.fid,[num2str(center(3)),'\n']);
fprintf(FID.fid,'11\n');%长轴端点x'
fprintf(FID.fid,[num2str(major_axis(1)),'\n']);
fprintf(FID.fid,'21\n');%长轴端点y'
fprintf(FID.fid,[num2str(major_axis(2)),'\n']);
fprintf(FID.fid,'31\n');%长轴端点z'
fprintf(FID.fid,[num2str(major_axis(3)),'\n']);
fprintf(FID.fid,'40\n');%椭圆短长轴比例 <0.1
fprintf(FID.fid,[num2str(ratio),'\n']);
fprintf(FID.fid,'41\n');%椭圆起始弧度
fprintf(FID.fid,[num2str(angle(1)),'\n']);
fprintf(FID.fid,'42\n');%椭圆结束弧度
fprintf(FID.fid,[num2str(angle(2)),'\n']);
end
catch exception
if FID.fid >= 0
fclose(FID.fid);
end
rethrow(exception);
end
另外,网上说黑色为[0 0 0],但是这个颜色画出来是暗红色,真正的黑色是[1 1 1]。
[1 0 0]红色、 [0 1 0]绿色、 [0 0 1]蓝色、 [1 0 1]洋红色、 [1 1 0]黄色。
dxf文件的打开:
由matlab绘制出来的dxf文件,可以在matlab里双击打开,内容为组码。
dxf文件也可以用CAD打开,若显示文件失效(打不开),需要先将dxf文件用转换器“Acme CAD Converter”另存为dwg文件,然后再用CAD打开即可。
注意:1.绘制文件不能总是覆盖某个dxf文件,会出错;
2.转换器显示的图形不是真实图形模样。