[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