用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\n');
        fprintf(FID.fid,'CIRCLE\n');
        
        dxf_print_layer(FID);
        fprintf(FID.fid,'66\n');  % entities follow (not necessary)
        fprintf(FID.fid,'1\n');
        
        fprintf(FID.fid,'10\n');
        fprintf(FID.fid,[num2str(center(1)),'\n']);
        fprintf(FID.fid,'20\n');
        fprintf(FID.fid,[num2str(center(2)),'\n']);
        fprintf(FID.fid,'30\n');
        fprintf(FID.fid,[num2str(center(3)),'\n']);
        fprintf(FID.fid,'40\n');
        fprintf(FID.fid,[num2str(radius),'\n']);
    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\n');
        fprintf(FID.fid,'ARC\n');
        
        dxf_print_layer(FID);
        fprintf(FID.fid,'66\n');  % entities follow (not necessary)
        fprintf(FID.fid,'1\n');
        
        fprintf(FID.fid,'10\n');
        fprintf(FID.fid,[num2str(center(1)),'\n']);
        fprintf(FID.fid,'20\n');
        fprintf(FID.fid,[num2str(center(2)),'\n']);
        fprintf(FID.fid,'30\n');
        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

測試如下(隨便畫了一個圖):

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);

得到結果如下:

這樣用起來就方便了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM