EIDORS: Electrical Impedance Tomography and Diffuse Optical Tomography Reconstruction Software |
EIDORS
(mirror) Main Documentation Tutorials − Image Reconst − Data Structures − Applications − FEM Modelling − GREIT − Old tutorials − Workshop Download Contrib Data GREIT Browse Docs Browse SVN News Mailing list (archive) FAQ Developer
|
Using new ng_mk_geometric_models interfaceEIDORS can use Netgen to create sophisticated 2D and 3D modelsHere are some examples of the varity of models which can be generated using the function: ng_mk_geometric_models.
1: Simple 3D cylinder. Radius = 1 with no electrodesbody_geometry.cylinder = struct; fmdl = ng_mk_geometric_models(body_geometry); 2: Simple 3D cylinder. Radius = 1 with 16 spherical electrodes.body_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.sphere.center = [cos(theta(i)) sin(theta(i)) 0.5]; electrode_geometry{i}.sphere.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 3: Simple 3D cylinder. Radius = 1 with 16 cylindrical electrodes.body_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 4: 3D Cylinder with electrodes which stick out of bodybody_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; electrode_geometry{i}.keep_material_flag = 1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 5: 3D Cylinder with electrodes which stick out of bodybody_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; electrode_geometry{i}.enter_body_flag = 1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 6: 3D Cylinder with electrodes which stick out of bodybody_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; electrode_geometry{i}.keep_material_flag = 1; electrode_geometry{i}.enter_body_flag = 1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 7: 3D Cylinder and sphere with electrodesbody_geometry.cylinder = struct; body_geometry.sphere.center = [0 0 1]; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 8: 3D Cylinder and sphere with electrodesbody_geometry.cylinder = struct; body_geometry.sphere(1) = struct; body_geometry.sphere(2).center = [0 0 1]; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 9: 3D Cylinder with inner cylinderbody_geometry.intersection.cylinder(1) = struct; body_geometry.intersection.cylinder(2).radius = 0.5; body_geometry.intersection.cylinder(2).complement_flag = 1; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 10: 3D Cylinder and sphere with inner objectsbody_geometry.intersection(1).sphere(1).radius = 0.5; body_geometry.intersection(1).sphere(1).center = [0 0 2]; body_geometry.intersection(1).sphere(1).complement_flag = 1; body_geometry.intersection(1).sphere(2).center = [0 0 2]; body_geometry.intersection(2).cylinder(1).top_center = [0 0 2]; body_geometry.intersection(2).cylinder(2).radius = 0.5; body_geometry.intersection(2).cylinder(2).top_center = [0 0 2]; body_geometry.intersection(2).cylinder(2).complement_flag = 1; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 11: 3D Cylinder and sphere with inner objectsbody_geometry.intersection.union(1).sphere.radius = 0.5; body_geometry.intersection.union(1).sphere.center = [0 0 2]; body_geometry.intersection.union(1).cylinder.radius = 0.5; body_geometry.intersection.union(1).cylinder.top_center = [0 0 2]; body_geometry.intersection.union(1).complement_flag = 1; body_geometry.intersection.union(2).sphere.center = [0 0 2]; body_geometry.intersection.union(2).cylinder.top_center = [0 0 2]; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 12: 3D Cone with electrodesbody_geometry.cone = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [0.85*cos(theta(i)) 0.85*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.65*cos(theta(i)) 0.65*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 13: 3D Cone with electrodesbody_geometry.cone = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.sphere.center = [0.75*cos(theta(i)) 0.75*sin(theta(i)) 0.5]; electrode_geometry{i}.sphere.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 14: 3D Cones and cylinders with electrodesbody_geometry.cone(1).top_center = [0 0 1.5]; body_geometry.cone(1).bottom_center = [0 0 0.5]; body_geometry.cone(2).top_center = [0 0 -1.5]; body_geometry.cone(2).bottom_center = [0 0 -0.5]; body_geometry.cylinder.top_center = [0, 0, 0.5]; body_geometry.cylinder.bottom_center = [0, 0, -0.5]; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.sphere.center = [0.75*cos(theta(i)) 0.75*sin(theta(i)) 1.0]; electrode_geometry{i}.sphere.radius = 0.1; electrode_geometry{i + n_elect}.sphere.center = [cos(theta(i)) sin(theta(i)) 0]; electrode_geometry{i + n_elect}.sphere.radius = 0.15; electrode_geometry{i + 2*n_elect}.sphere.center = [0.75*cos(theta(i)) 0.75*sin(theta(i)) -1.0]; electrode_geometry{i + 2*n_elect}.sphere.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 15: 3D Cubebody_geometry.ortho_brick = struct; fmdl = ng_mk_geometric_models(body_geometry); 16: 3D Cube with holesbody_geometry.intersection.ortho_brick.opposite_corner_a = [0 0 0]; body_geometry.intersection.ortho_brick.opposite_corner_b = [5 5 4]; for i = 1:4; for j = 1:4; body_geometry.intersection.cylinder(i,j).radius = 0.15; body_geometry.intersection.cylinder(i,j).top_center = [i, j, 4]; body_geometry.intersection.cylinder(i,j).bottom_center = [i, j, 2]; body_geometry.intersection.cylinder(i,j).complement_flag = 1; end; end; fmdl = ng_mk_geometric_models(body_geometry); 17: 3D Cube with holes and electrodesbody_geometry.intersection.ortho_brick.opposite_corner_a = [0 0 0]; body_geometry.intersection.ortho_brick.opposite_corner_a = [0 0 0]; body_geometry.intersection.ortho_brick.opposite_corner_b = [5 5 4]; for i = 1:4; for j = 1:4; body_geometry.intersection.cylinder(i, j).radius = 0.15; body_geometry.intersection.cylinder(i, j).top_center = [i, j, 4]; body_geometry.intersection.cylinder(i, j).bottom_center = [i, j, 2]; body_geometry.intersection.cylinder(i, j).complement_flag = 1; electrode_geometry{i, j, 1}.cylinder.radius = 0.2; electrode_geometry{i, j, 1}.cylinder.top_center = [i, j, 3.1]; electrode_geometry{i, j, 1}.cylinder.bottom_center = [i, j, 2.9]; electrode_geometry{i, j, 2}.cylinder.radius = 0.2; electrode_geometry{i, j, 2}.cylinder.top_center = [i, j, 2.2]; electrode_geometry{i, j, 2}.cylinder.bottom_center = [i, j, 2.0]; end; end; fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 18: 3D Cube with max_edge_lengthbody_geometry.parallelepiped = struct; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 19: 3D Parallelepipedbody_geometry.parallelepiped.vertex = [ 0; 0; 0]; body_geometry.parallelepiped.vector_a = [ 1; 1; 0]; body_geometry.parallelepiped.vector_b = [ 0; 1; 1]; body_geometry.parallelepiped.vector_c = [ 1; 0; 1]; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 20: 3D Wedgebody_geometry.intersection.ortho_brick.opposite_corner_a = [-15, -15, 0]; body_geometry.intersection.ortho_brick.opposite_corner_b = [15, 15, 5]; body_geometry.intersection.half_space.point = [0, 0, 5]; body_geometry.intersection.half_space.outward_normal_vector = [-1, -1, 5]; fmdl = ng_mk_geometric_models(body_geometry); 21: ellipsoidbody_geometry.ellipsoid.axis_a = [1 0 0]; body_geometry.ellipsoid.axis_b = [0 2 0]; body_geometry.ellipsoid.axis_c = [0 0 3]; fmdl = ng_mk_geometric_models(body_geometry); 22: ellipsoidbody_geometry.ellipsoid.axis_a = [1 0 0]; body_geometry.ellipsoid.axis_b = [0 1 1]; body_geometry.ellipsoid.axis_c = [0 -2 2]; fmdl = ng_mk_geometric_models(body_geometry); 23: cropped cylinderbody_geometry.elliptic_cylinder.top_center = [0, 0, 10]; body_geometry.elliptic_cylinder.bottom_center = [0, 0, 0]; body_geometry.elliptic_cylinder.axis_a = [1 0 0]; body_geometry.elliptic_cylinder.axis_b = [0 2 0]; fmdl = ng_mk_geometric_models(body_geometry); 24: cropped cylinderbody_geometry.elliptic_cylinder.top_center = [0, 5, 5]; body_geometry.elliptic_cylinder.bottom_center = [0, 0, 0]; body_geometry.elliptic_cylinder.axis_a = [1 0 0]; body_geometry.elliptic_cylinder.axis_b = [0 -2 2]; fmdl = ng_mk_geometric_models(body_geometry); 25: cylinder with holebody_geometry.body_of_revolution = struct; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 26: cone with holebody_geometry.body_of_revolution.points = [1 1; 1 2; 2 1.5; 2 1]; body_geometry.body_of_revolution.segments = [1 2; 2 3; 3 4; 4 1]; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 27: torusn_points = 24; theta = linspace(0, 2*pi, n_points+1)'; theta(end) = []; body_geometry.body_of_revolution.points = 2 + [sin(theta) cos(theta)]; body_geometry.body_of_revolution.segments = [(1:n_points)' [(2:n_points) 1]']; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 28: torusn_points = 24; theta = linspace(0, 2*pi, n_points+1)'; theta(end) = []; body_geometry.body_of_revolution.points = 2 + [sin(theta) cos(theta)]; body_geometry.body_of_revolution.segments = [(1:2:n_points)' (2:2:n_points)' [(3:2:n_points) 1]']; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 29: Cylinder with electrodesbody_geometry{1}.cylinder(1).radius = 0.5; body_geometry{1}.cylinder(1).top_center = [0 0 0.75]; body_geometry{1}.cylinder(1).bottom_center = [0 0 0.25]; body_geometry{1}.name = 'Object'; body_geometry{2}.cylinder(2).radius = 1; body_geometry{2}.name = 'Tank'; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.cylinder.top_center = [1.03*cos(theta(i)) 1.03*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.bottom_center = [0.97*cos(theta(i)) 0.97*sin(theta(i)) 0.5]; electrode_geometry{i}.cylinder.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 30: Cylinder with ballbody_geometry{1}.sphere.radius = 0.25; body_geometry{1}.sphere.center = [0 0 0.5]; body_geometry{1}.name = 'Sphere'; body_geometry{2}.cylinder.radius = 1; body_geometry{2}.name = 'Tank'; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.sphere.center = [cos(theta(i)) sin(theta(i)) 0.5]; electrode_geometry{i}.sphere.radius = 0.1; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 31: Cylinder with many balln_sphere = 8; theta = linspace(0, 2*pi, n_sphere+1); theta(end) = []; for i = 1:n_sphere body_geometry{i}.sphere.radius = 0.2; body_geometry{i}.sphere.center = [0.65*cos(theta(i)) 0.65*sin(theta(i)) 0.5]; body_geometry{i}.max_edge_length = 0.025*(1 + rem(i,2)); body_geometry{i}.name = sprintf('Sphere%d', i); end body_geometry{n_sphere+1}.cylinder.radius = 1; body_geometry{n_sphere+1}.name = 'Tank'; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.sphere.center = [cos(theta(i)) sin(theta(i)) 0.5]; electrode_geometry{i}.sphere.radius = 0.1; electrode_geometry{i}.max_edge_length = 0.025*(1 + rem(i,2)); end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 32: Cylinder with point electrodesbody_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect electrode_geometry{i}.point = [cos(theta(i)) sin(theta(i)) 0.5]; end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 33: Cylinder with point and round electrodesbody_geometry.cylinder = struct; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect if (rem(i,2)) electrode_geometry{i}.point = [cos(theta(i)) sin(theta(i)) 0.5]; electrode_geometry{i}.name = sprintf('Point_Electrode%d', ceil(i/2)); else electrode_geometry{i}.sphere.center = [cos(theta(i)) sin(theta(i)) 0.5]; electrode_geometry{i}.sphere.radius = 0.1; electrode_geometry{i}.name = sprintf('Circular_Electrode%d', floor(i/2)); end end fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); 34: Extrusionbody_geometry.body_of_extrusion = struct; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 35: Extrusionbody_geometry.body_of_extrusion.path_points = [0 0 0; 0.25 0 1; 0.25 0 2; 0.25 0 3; 0 0 4]; body_geometry.body_of_extrusion.path_segments = [1 2; 2 3; 3 4; 4 5]; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 36: Extruded torusn_points = 16; theta = linspace(0, 2*pi, n_points+1)'; theta(end) = []; body_geometry.body_of_extrusion.profile_points = 0.2*(2 + [0.75*sin(theta) cos(theta)]); body_geometry.body_of_extrusion.profile_segments = [(1:n_points)' [(2:n_points) 1]']; n_points = 32; theta = linspace(0, 2*pi, n_points+1)'; theta(end) = []; body_geometry.body_of_extrusion.path_points = 1*(2 + [sin(theta) 1.5*cos(theta) zeros(n_points, 1)]); body_geometry.body_of_extrusion.path_segments = [(1:n_points)' [(2:n_points) 1]']; body_geometry.body_of_extrusion.vector_d = [0; 0; 1]; body_geometry.max_edge_length = 0.15; fmdl = ng_mk_geometric_models(body_geometry); 37: Lots of electrodesbody_geometry.ortho_brick.opposite_corner_a = [0 0 0]; body_geometry.ortho_brick.opposite_corner_b = [5 5 4]; body_geometry.max_edge_length = 3; electrode_geometry{1}.sphere.center = [4,4,0]; electrode_geometry{1}.sphere.radius = [0.3]; electrode_geometry{2}.sphere.center = [4,0,2]; electrode_geometry{2}.sphere.radius = [0.2]; electrode_geometry{3}.ortho_brick.opposite_corner_a = [3,4,-.1]; electrode_geometry{3}.ortho_brick.opposite_corner_b = [2,2,.1]; electrode_geometry{3}.max_edge_length = .1; electrode_geometry{4}.ortho_brick.opposite_corner_b = [3,5.1,2.5]; electrode_geometry{4}.ortho_brick.opposite_corner_a = [2,4.9,2]; fmdl = ng_mk_geometric_models(body_geometry,electrode_geometry); 38: Inclusion in an objectbody_geometry{1}.cylinder.radius = 1.0; % main body body_geometry{2}.sphere.radius = 0.2; % inclusion body_geometry{2}.sphere.center = [0.2,0.2,0.2]; n_elect = 16; theta = linspace(0, 2*pi, n_elect+1); theta(end) = []; for i = 1:n_elect; thi= theta(i); electrode_geometry{i}.sphere.center = [cos(thi),sin(thi),0.5]; electrode_geometry{i}.sphere.radius = 0.1; end electrode_geometry{i+1}.sphere.radius = 0.2; electrode_geometry{i+1}.sphere.center = [0.4,0.2,1.0]; electrode_geometry{i+2}.sphere.radius = 0.2; electrode_geometry{i+2}.sphere.center = [-0.4,-0.4,0.0]; fmdl = ng_mk_geometric_models(body_geometry, electrode_geometry); img = mk_image(fmdl,1); img.elem_data(fmdl.mat_idx{2}) = 1.1; |
Last Modified: $Date: 2018-04-16 11:28:52 -0400 (Mon, 16 Apr 2018) $ by $Author: aadler $