Surface mesh shape. More...
Inheritance diagram for mod_shape_surface_mesh::t_shape_surface_mesh:Public Member Functions | |
| procedure | initialize (shape) |
| Initialize the shape. | |
| procedure | copy (shape, copy) |
| Copy the shape. | |
| procedure | is_inside (shape, point) |
| Check if a point lies inside the shape. | |
| procedure | get_samples_inside (shape, i, j, k, n, n_samples, samples) |
| Check if a given number of point lies in a shape. | |
| procedure | get_distance (shape, point, distance, direction) |
| Compute the distance and the direction from a point to the shape. | |
| procedure | ray_trace (shape, ray, has_normal, intersection_list) |
| Compute the intersection between the shape and a ray. | |
Public Member Functions inherited from type_shape::t_shape | |
| procedure(abs_initialize_shape), deferred | initialize (shape) |
| Initialize the shape. | |
| procedure(abs_copy_shape), deferred | copy (shape, copy) |
| Copy the shape. | |
| procedure(abs_shape_is_inside), deferred | is_inside (shape, point) |
| Check if a point lies inside the shape. | |
| procedure(abs_shape_get_samples_inside), deferred | get_samples_inside (shape, i, j, k, n, n_samples, samples) |
| Check if a given number of point lies in a shape. | |
| procedure(abs_shape_get_distance), deferred | get_distance (shape, point, distance, direction) |
| Compute the distance and the direction from a point to the shape. | |
| procedure(abs_shape_ray_trace), deferred | ray_trace (shape, ray, has_normal, intersection_list) |
| Compute the intersection between the shape and a ray. | |
Public Attributes | |
| type(t_polyhedron) | mesh |
| Surface mesh stored as a polyhedron. | |
| type(t_distance_list), dimension(:,:), allocatable | z_buffer |
| List of z-buffers used for sampling. | |
| type(t_octree) | octree |
| Octree of the mesh. | |
| double precision, dimension(3, 2) | bounding_box |
| Aligned-axis bounding box. | |
| double precision, dimension(3) | thickness |
| Thickness of the shape. | |
| integer | n_samples = -1 |
| Backup of samples number used for the rasterization. | |
Public Attributes inherited from type_shape::t_shape | |
| integer | dimension = 2 |
| Dimension of the shape. | |
| type(t_cg_transformation) | transformation |
| Transformation matrix. | |
| logical | is_reversed = .false. |
| Swap interior/exterior sides of the shape. | |
Surface mesh shape.
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::copy | ( | class(t_shape_surface_mesh), intent(in) | shape, |
| class(t_shape), allocatable | copy ) |
Copy the shape.
| [in] | shape | surface mesh shape |
| [out] | copy | copied surface mesh shape |
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::get_distance | ( | class(t_shape_surface_mesh), intent(in) | shape, |
| double precision, dimension(3), intent(in) | point, | ||
| double precision, intent(out) | distance, | ||
| double precision, dimension(3), intent(out) | direction ) |
Compute the distance and the direction from a point to the shape.
If the point lies inside the surface mesh, the distance is negative and the direction points to the closest point on the surface mesh. If the point lies outiside the surface mesh, the distance is positive and the direction points in the opposite direction to the closest point on the surface mesh.
| [in] | shape | surface mesh shape |
| [in] | point | any point |
| [out] | distance | signed closest distance from the point to the surface mesh |
| [out] | direction | signed direction from the point to the closest point on the surface mesh |
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::get_samples_inside | ( | class(t_shape_surface_mesh), intent(inout) | shape, |
| integer, intent(in) | i, | ||
| integer, intent(in) | j, | ||
| integer, intent(in) | k, | ||
| integer, intent(in) | n, | ||
| integer, intent(in) | n_samples, | ||
| integer, dimension(:,:,:), intent(inout) | samples ) |
Check if a given number of point lies in a shape.
Sample a cell of coordinates (i,j,k) with (2*n_samples+1)^d samples, where d denotes the dimension of the cell. Return a integer array samples containing the value n where the sample is inside the shape.
n_samples is called the sampling level and can take its value in range [0,∞].
Example of sampling for various sampling level:
!! n_samples = 0 n_samples = 1 n_samples = 2 !! ┏━━━━━━━┓ ×━━━×━━━× ×━×━×━×━× !! ┃ ┃ ┃ ┃ × × × × × !! ┃ × ┃ × × × × × × × × ... !! ┃ ┃ ┃ ┃ × × × × × !! ┗━━━━━━━┛ ×━━━×━━━× ×━×━×━×━× !!
| [in,out] | shape | surface mesh shape |
| [in] | i,j,k | coordinates of the cell |
| [in] | n | value to put where the sample is inside the surface mesh |
| [in] | n_samples | sampling level (see description) |
| [in,out] | samples | array of the (2*n_sammples+1)^d samples |
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::initialize | ( | class(t_shape_surface_mesh), intent(inout) | shape | ) |
Initialize the shape.
| [in,out] | shape | surface mesh shape |
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::is_inside | ( | class(t_shape_surface_mesh), intent(in) | shape, |
| double precision, dimension(3), intent(in) | point ) |
Check if a point lies inside the shape.
| [in] | shape | surface mesh shape |
| [in] | point | any point |
| procedure mod_shape_surface_mesh::t_shape_surface_mesh::ray_trace | ( | class(t_shape_surface_mesh), intent(in) | shape, |
| type(t_ray), intent(in) | ray, | ||
| logical, intent(in) | has_normal, | ||
| type(t_intersection_list), intent(inout) | intersection_list ) |
Compute the intersection between the shape and a ray.
| [in] | shape | surface mesh shape |
| [in] | ray | ray to intersect the surface mesh |
| [in] | has_normal | list of intersections between the ray and the surface mesh |
| [in,out] | intersection_list | list of intersections between the ray and the surface mesh |
| double precision, dimension(3,2) mod_shape_surface_mesh::t_shape_surface_mesh::bounding_box |
Aligned-axis bounding box.
| type(t_polyhedron) mod_shape_surface_mesh::t_shape_surface_mesh::mesh |
Surface mesh stored as a polyhedron.
| integer mod_shape_surface_mesh::t_shape_surface_mesh::n_samples = -1 |
Backup of samples number used for the rasterization.
| type(t_octree) mod_shape_surface_mesh::t_shape_surface_mesh::octree |
Octree of the mesh.
| double precision, dimension(3) mod_shape_surface_mesh::t_shape_surface_mesh::thickness |
Thickness of the shape.
| type(t_distance_list), dimension(:,:), allocatable mod_shape_surface_mesh::t_shape_surface_mesh::z_buffer |
List of z-buffers used for sampling.