MATLAB-dxf文件的绘制

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.转换器显示的图形不是真实图形模样。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值