[Paraview] Paraview crashes when reading binary VTK file
Petr Krysl
pkrysl at ucsd.edu
Thu Jul 26 23:27:36 EDT 2012
Hello,
Paraview crashes when reading a binary VTK file. I am writing out that
file using the Matlab function below. When written out in ASCII the file
is read and interpreted correctly; when written out in binary paraview just
crashes without giving any details as to where and why it crashed. I hope
someone has an idea: after several hours of debugging I am at a loss.
% Export mesh to a VTK 1.0 file as an unstructured grid.
%
% function vtk_export_mesh (theFile,Connectivity,Points,Cell_types,options)
%
% theFile= File name as a string,
% Connectivity= connectivity array, one row per cell,
% Points= Coordinate array, one row per point,
% Cell_types= Cell type code: L2=3, T3=5, Q4=9, T4=10, H8=12
function vtk_export_mesh (theFile,Connectivity,Points,Cell_types,options)
binary= ~true;
scalars=[]; scalars_name= ['Data'];
if ( exist ( 'options', 'var') )
if (isfield(options, 'binary'))
binary= options.binary;
end
if (isfield(options, 'scalars'))
scalars= options.scalars;
end
if (isfield(options, 'scalars_name'))
scalars_name= options.scalars_name;
end
end
if (~iscell(Connectivity))
Connectivity={Connectivity};
end
if (~iscell(Cell_types))
Cell_types={Cell_types};
end
[pathstr, name, ext] = fileparts(theFile);
if (~strcmp(ext,'vtk'))
theFile = [theFile '.vtk'];
end
fid=fopen(theFile,'w');
if (fid==-1)
warning (['Could not open ' theFile])
return
end
fprintf(fid,'# vtk DataFile Version 3.0\n');
fprintf(fid,'Really cool data\n');
if (~binary)
fprintf(fid,'ASCII\n');
else
fprintf(fid,'BINARY\n');
end
fprintf(fid,'\n');
fprintf(fid,'DATASET UNSTRUCTURED_GRID\n');
fprintf(fid,'POINTS %d double\n',size(Points,1));%
if (~binary)
for i= 1:size(Points, 1)
fprintf(fid,'%g %g %g\n',Points(i,:));
end
else
fwrite(fid,cast(Points,'double'),'double');
end
fprintf(fid,'\n');
fprintf(fid,'\n');
for k=1:length(Connectivity)
f=Connectivity{k};
ctype=zeros(size(f, 1),1)+Cell_types{k};
fprintf(fid,'CELLS %d %d\n',size(f,1),(size(f,1)*(size(f,2)+1)));%
if (~binary)
for i= 1:size(f, 1)
fprintf(fid,'%d ',size(f,2));
for j= 1: size(f,2)
fprintf(fid,'%d ',f(i,j)-1);
end
fprintf(fid,'\n');
end
else
fwrite(fid,cast([zeros(size(f,1),1)+size(f,2),f-1],'int32'),'int32');
end
fprintf(fid,'\n');
fprintf(fid,'\n');
fprintf(fid,'CELL_TYPES %d\n',size(f,1));%
if (~binary)
for i= 1:size(f, 1)
fprintf(fid,'%d\n',ctype(i));
end
else
fwrite(fid,cast(ctype,'int32'),'int32');
end
fprintf(fid,'\n');
fprintf(fid,'\n');
end
if (~isempty(scalars))
fprintf(fid,'point_data %d\n',length(scalars));%
fprintf(fid,'SCALARS %s float\n',scalars_name);%
fprintf(fid,'LOOKUP_TABLE default\n');%
if (~binary)
for j= 1:length(scalars)
fprintf(fid,'%s\n',scalars(j));
end
else
fwrite(fid,cast(scalars,'single'),'single');
end
end
fprintf(fid,'\n');
fid=fclose(fid);
end
--
Petr Krysl
University of California, San Diego
Skype: Petr.Krysl.UCSD.EDU
http://hogwarts.ucsd.edu/~pkrysl/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20120726/df5ec9f2/attachment.htm>
More information about the ParaView
mailing list