zoukankan      html  css  js  c++  java
  • 用matlab在dxf文件中画圆和弧(对DXFLib的补充)

    DXFLib的地址如下:

    https://www.mathworks.com/matlabcentral/fileexchange/33884-dxflib?s_tid=srchtitle_DXFLib_1

    多亏了它,使得我们可以方便地使用matlab生成想要的dxf文件,实现简单图纸的自动化

    但是……它好像没有画圆和弧线的功能:

    于是,我简单参考了以下链接,仿照dxf_polyline写了以下两个函数,原理非常简单,实现我个人所需的必要功能即可

    https://blog.csdn.net/sanqima/article/details/37743773

    https://www.cnblogs.com/xyb930826/p/4493373.html

    dxf_circle.m

    function FID = dxf_circle(FID, center, radius)
    try
        if FID.dump
            fprintf(FID.fid,'0
    ');
            fprintf(FID.fid,'CIRCLE
    ');
            
            dxf_print_layer(FID);
            fprintf(FID.fid,'66
    ');  % entities follow (not necessary)
            fprintf(FID.fid,'1
    ');
            
            fprintf(FID.fid,'10
    ');
            fprintf(FID.fid,[num2str(center(1)),'
    ']);
            fprintf(FID.fid,'20
    ');
            fprintf(FID.fid,[num2str(center(2)),'
    ']);
            fprintf(FID.fid,'30
    ');
            fprintf(FID.fid,[num2str(center(3)),'
    ']);
            fprintf(FID.fid,'40
    ');
            fprintf(FID.fid,[num2str(radius),'
    ']);
        end
    
    catch exception
      if FID.fid >= 0
        fclose(FID.fid);
      end
      rethrow(exception);
    end
    

    dxf_arc.m

    function FID = dxf_arc(FID, center, radius, angle)
    try
        if FID.dump
            fprintf(FID.fid,'0
    ');
            fprintf(FID.fid,'ARC
    ');
            
            dxf_print_layer(FID);
            fprintf(FID.fid,'66
    ');  % entities follow (not necessary)
            fprintf(FID.fid,'1
    ');
            
            fprintf(FID.fid,'10
    ');
            fprintf(FID.fid,[num2str(center(1)),'
    ']);
            fprintf(FID.fid,'20
    ');
            fprintf(FID.fid,[num2str(center(2)),'
    ']);
            fprintf(FID.fid,'30
    ');
            fprintf(FID.fid,[num2str(center(3)),'
    ']);
            fprintf(FID.fid,'40
    ');
            fprintf(FID.fid,[num2str(radius),'
    ']);
            fprintf(FID.fid,'50
    ');
            fprintf(FID.fid,[num2str(angle(1)),'
    ']);
            fprintf(FID.fid,'51
    ');
            fprintf(FID.fid,[num2str(angle(2)),'
    ']);
        end
    
    catch exception
      if FID.fid >= 0
        fclose(FID.fid);
      end
      rethrow(exception);
    end
    

    测试如下(随便画了一个图):

    FID = dxf_open('mytest.dxf');
    dxf_polyline(FID,[1,0,-1]',[0,1,0]',[0,0,0]');
    dxf_arc(FID, [0,0,0], 1, [0,135]);
    dxf_circle(FID, [0,1,0], 0.5);
    dxf_close(FID);
    

    得到结果如下:

    这样用起来就方便了。

  • 相关阅读:
    计蒜客 跳跃游戏2
    计蒜客 跳跃游戏
    2018 计蒜之道-初赛 第一场 A-百度无人车
    poj 3625 (最小生成树算法)
    poj 3623(贪心)
    poj2386(dfs搜索水题)
    poj 2761 主席树的应用(查询区间第k小值)
    POJ 2456 编程技巧之------二分查找思想的巧妙应用
    POJ 1995(有关快速幂运算的一道水题)
    1441:【例题2】生日蛋糕
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/15505750.html
Copyright © 2011-2022 走看看