function tet_mesh_display ( input_node_filename, input_tetra_filename ) %% TET_MESH_DISPLAY displays a tet mesh. % % Discussion: % % Note that, for the 10 node case, we assume that the tetra file lists % the node indices in the following order: % % P1 P2 P3 P4 P12 P13 P14 P23 P24 P34 % % Modified: % % 18 January 2007 % % Author: % % John Burkardt % % Usage: % % tet_mesh_display ( 'node_file', 'tetra_file' ) % % Parameters: % % Input, character INPUT_NODE_FILENAME, the name of the node file. % % Input, character INPUT_TETRA_FILENAME, the name of the tetrahedron file. % fprintf ( 1, '\n' ); timestamp; fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY:\n' ); fprintf ( 1, ' MATLAB version:\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' Display a wireframe plot of a tet mesh.\n' ); % % First argument is the node file. % if ( nargin < 1 ) fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY:\n' ); input_node_filename = input ( ' Enter the name of the node file.' ); end % % Second argument is the tet mesh file. % if ( nargin < 2 ) fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY:\n' ); input_tetra_filename = input ( ... ' Enter the name of the tetrahedron file.' ); end % % Read the node data. % [ dim_num, node_num ] = dtable_header_read ( input_node_filename ); fprintf ( 1, '\n' ); fprintf ( 1, ' Read the header of "%s".\n', input_node_filename ); fprintf ( 1, '\n' ); fprintf ( 1, ' Spatial dimension DIM_NUM = %d\n', dim_num ); fprintf ( 1, ' Number of points NODE_NUM = %d\n', node_num ); if ( dim_num ~= 3 ) fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY - Fatal error!\n' ); fprintf ( 1, ' Dataset must have spatial dimension 3.\n' ); error ( 'TET_MESH_DISPLAY - Fatal error!' ); end node_xyz = dtable_data_read ( input_node_filename, dim_num, node_num ); fprintf ( 1, '\n' ); fprintf ( 1, ' Read the data in "%s".\n', input_node_filename ); r8mat_transpose_print_some ( dim_num, node_num, node_xyz, 1, 1, dim_num, 5, ... ' First 5 Nodes:' ); % % Read the tetra data. % [ tetra_order, tetra_num ] = itable_header_read ( input_tetra_filename ); if ( tetra_order ~= 4 & tetra_order ~= 10) fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY - Fatal error!\n' ); fprintf ( 1, ' Data is not for a 4 node or 10 node tet mesh.\n' ); error ( 'TET_MESH_DISPLAY - Fatal error!' ); end fprintf ( 1, '\n' ); fprintf ( 1, ' Read the header of "%s".\n', input_tetra_filename ); fprintf ( 1, '\n' ); fprintf ( 1, ' Tetrahedron order = %d\n', tetra_order ); fprintf ( 1, ' Number of tetras = %d\n', tetra_num ); tetra_node = itable_data_read ( input_tetra_filename, tetra_order, ... tetra_num ); fprintf ( 1, '\n' ); fprintf ( 1, ' Read the data in "%s".\n', input_tetra_filename ); i4mat_transpose_print_some ( tetra_order, tetra_num, ... tetra_node, 1, 1, tetra_order, 5, ' First 5 tetrahedrons:' ); % % Make the plot. % size = 40; color = 'r'; scatter3 ( node_xyz(1,:), node_xyz(2,:), node_xyz(3,:), size, ... color, 'filled' ) for tetra = 1 : tetra_num if ( tetra_order == 4 ) t = [ tetra_node(1,tetra), tetra_node(2,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(1,tetra), tetra_node(3,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(1,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(2,tetra), tetra_node(3,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(2,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(3,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); elseif ( tetra_order == 10 ) t = [ tetra_node(1,tetra), tetra_node(5,tetra), tetra_node(2,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(1,tetra), tetra_node(6,tetra), tetra_node(3,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(1,tetra), tetra_node(7,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(2,tetra), tetra_node(8,tetra), tetra_node(3,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(2,tetra), tetra_node(9,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); t = [ tetra_node(3,tetra), tetra_node(10,tetra), tetra_node(4,tetra) ]; line ( node_xyz(1,t), node_xyz(2,t), node_xyz(3,t) ); end end xlabel ( '--X axis--' ) ylabel ( '--Y axis--' ) zlabel ( '--Z axis--' ) % % The TITLE function will interpret underscores in the title. % We need to unescape such escape sequences! % title_string = s_escape_tex ( input_tetra_filename ); title ( title_string ) fprintf ( 1, '\n' ); fprintf ( 1, 'TET_MESH_DISPLAY:\n' ); fprintf ( 1, ' Normal end of execution.\n' ); fprintf ( 1, '\n' ); timestamp;