version 0.6.0
Loading...
Searching...
No Matches
mod_shape_surface_mesh::t_shape_surface_mesh Type Reference

Surface mesh shape.

+ 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_polyhedronmesh
 Surface mesh stored as a polyhedron.
 
type(t_distance_list), dimension(:,:), allocatable z_buffer
 List of z-buffers used for sampling.
 
type(t_octreeoctree
 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_transformationtransformation
 Transformation matrix.
 
logical is_reversed = .false.
 Swap interior/exterior sides of the shape.
 

Member Function/Subroutine Documentation

◆ copy()

procedure mod_shape_surface_mesh::t_shape_surface_mesh::copy ( class(t_shape_surface_mesh), intent(in) shape,
class(t_shape), allocatable copy )
Parameters
[in]shapesurface mesh shape
[out]copycopied surface mesh shape

◆ get_distance()

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 )

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.

Parameters
[in]shapesurface mesh shape
[in]pointany point
[out]distancesigned closest distance from the point to the surface mesh
[out]directionsigned direction from the point to the closest point on the surface mesh

◆ get_samples_inside()

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 )

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
   !!      ┏━━━━━━━┓       ×━━━×━━━×       ×━×━×━×━×
   !!      ┃       ┃       ┃       ┃       × × × × ×
   !!      ┃   ×   ┃       ×   ×   ×       × × × × ×    ...
   !!      ┃       ┃       ┃       ┃       × × × × ×
   !!      ┗━━━━━━━┛       ×━━━×━━━×       ×━×━×━×━×
   !! 
Parameters
[in,out]shapesurface mesh shape
[in]i,j,kcoordinates of the cell
[in]nvalue to put where the sample is inside the surface mesh
[in]n_samplessampling level (see description)
[in,out]samplesarray of the (2*n_sammples+1)^d samples

◆ initialize()

procedure mod_shape_surface_mesh::t_shape_surface_mesh::initialize ( class(t_shape_surface_mesh), intent(inout) shape)
Parameters
[in,out]shapesurface mesh shape

◆ is_inside()

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 )
Parameters
[in]shapesurface mesh shape
[in]pointany point

◆ ray_trace()

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 )
Parameters
[in]shapesurface mesh shape
[in]rayray to intersect the surface mesh
[in]has_normallist of intersections between the ray and the surface mesh
[in,out]intersection_listlist of intersections between the ray and the surface mesh

The documentation for this type was generated from the following file: