发现有人也在研究IGES文件格式,那就把之前编写的Matlab将数据写入IGES文件的代码上传吧,供大家参考。之前博客见
CAD/CAM软件与Matlab基于IGES文件的数据通讯http://blog.sina.com.cn/s/blog_6163bdeb0100o85m.html
代码转载请注明作者。
代码如下,看看当初写的代码,好稚嫩啊
main脚本文件
%产生数据并写入iges文件
clc
clear
issearch=2;%0表示只写点,1表示只写线,2表示点线都写
fprintf('正在写文件。。。\n');
%产生正弦波文件
x=0:0.1:10;
x=x';
y=sin(x);
Data=[x y];
Data(1,3)=0;
write_iges('iges_sin.igs',Data,issearch)
%产生peaks文件
[x,y,z]=peaks(30);
xx=x(:);
yy=y(:);
zz=z(:);
Data=[xx zz yy];
write_iges('iges_peaks.igs',Data,issearch)
%产生抛物线文件
[x,y]=meshgrid(-1:0.1:1);
z=x.^2+y.^2;
xx=x(:);
yy=y(:);
zz=z(:);
Data=[xx yy zz];
write_iges('iges_paowu.igs',Data,issearch)
%产生解释文件
xx=[10;0];
yy=[0;10];
zz=[0;0];
Data=[xx yy zz];
write_iges('igesforexplain.igs',Data,0)
%产生Matlab图标
[x,y]=meshgrid(linspace(-1,1,16));
z=membrane;
z=z(1:2:end,1:2:end,1:2:end);
xx=x(:);
yy=y(:);
zz=z(:);
Data=[xx zz yy];
write_iges('iges_matlab.igs',Data,issearch)
fprintf('写文件结束。\n');
add_start_global函数文件:
%构造开始段和全局段字符串
function [filename,file_str]=add_start_global(FileName)
%开始段信息
start='Matlab-IGES-UG,Proe';
%全局段信息
timedata=clock;
Time=sprintf('%4s%2s%2s.%2s%2s%2s',num2str(timedata(1)),num2str(timedata(2)),num2str(timedata(3)),num2str(timedata(4)),num2str(timedata(5)),num2str(floor(timedata(6))));
Author='USTC
GJ_QSQ';
G_1='1H,';
G_2='1H;';
G_3='7HPRT0001';
G_4=strcat(num2str(length(FileName)),'H',FileName);
%FileName
G_5='49HPro/ENGINEER by Parametric Technology Corporation';
G_6='7H2007170';
G_7='32';
G_8='38';
G_9='7';
G_10='38';
G_11='15';
G_12='7HPRT0001';
G_13='1.';
G_14='2';
G_15='2HMM';
G_16='32768';
G_17='0.5';
G_18=strcat(num2str(length(Time)),'H',Time);
%Time;
G_19='0.0865991';
G_20='866.025';
G_21=strcat(num2str(length(Author)),'H',Author);
%Author;
G_22='4HUSTC';
G_23='10';
G_24='0';
G_25=strcat(num2str(length(Time)),'H',Time);
%Time;
%构造字符串
file_str='';
%start
start=add_section_index(start,'S',1);
file_str=strcat(file_str,start,'\n');
%global
rowstr='';
count=0;
for
i=1:25
if i==25
temp=strcat((['G_',num2str(i)]),';');
else
temp=strcat((['G_',num2str(i)]),',');
end
if length(rowstr)+length(temp)>72
count=count+1;
rowstr=add_section_index(rowstr,'G',count);
file_str=strcat(file_str,rowstr,'\n');
rowstr=temp;
else
rowstr=strcat(rowstr,temp);
if i==25
count=count+1;
rowstr=add_section_index(rowstr,'G',count);
file_str=strcat(file_str,rowstr,'\n');
end
end
end
filename=FileName;
end
function result=add_section_index(str,section,index)
result=sprintf('%-72s%s}',str,section,index);
end
write_iges函数文件:
%写igs文件
%FileName为写入的文件名,Data为待写入的数据
function write_iges(FileName,Data,PointOrLine)
Index=0;
%构造开始段和全局段字符串
[filename,file_str]=add_start_global(FileName);
%构造索引段和参数段
if nargin==2
pointorline=2;%0表示只写点,1表示只写线,2表示点线都写
else
pointorline=PointOrLine;
end
if pointorline==0
%写点
[strDir2 strPara2 Index]=
writePoint(Data(1:end,1),Data(1:end,2),Data(1:end,3),Index);
file_str=strcat(file_str,strDir2);
file_str=strcat(file_str,strPara2);
elseif pointorline==1
%写线
[strDir1 strPara1 Index]=
writeLine(Data(1:end-1,1),Data(1:end-1,2),Data(1:end-1,3),Data(2:end,1),Data(2:end,2),Data(2:end,3),Index);
file_str=strcat(file_str,strDir1);
file_str=strcat(file_str,strPara1);
elseif pointorline==2
%写线
[strDir1 strPara1 Index]=
writeLine(Data(1:end-1,1),Data(1:end-1,2),Data(1:end-1,3),Data(2:end,1),Data(2:end,2),Data(2:end,3),Index);
file_str=strcat(file_str,strDir1);
%写点