fossil_aabb_tree_object Module

module~~fossil_aabb_tree_object~~UsesGraph module~fossil_aabb_tree_object fossil_aabb_tree_object module~fossil_aabb_node_object fossil_aabb_node_object module~fossil_aabb_node_object->module~fossil_aabb_tree_object penf penf penf->module~fossil_aabb_tree_object penf->module~fossil_aabb_node_object module~fossil_facet_object fossil_facet_object penf->module~fossil_facet_object module~fossil_aabb_object fossil_aabb_object penf->module~fossil_aabb_object module~fossil_utils fossil_utils penf->module~fossil_utils vecfor vecfor vecfor->module~fossil_aabb_tree_object vecfor->module~fossil_aabb_node_object vecfor->module~fossil_facet_object vecfor->module~fossil_aabb_object module~fossil_facet_object->module~fossil_aabb_tree_object module~fossil_facet_object->module~fossil_aabb_node_object module~fossil_facet_object->module~fossil_aabb_object iso_fortran_env iso_fortran_env iso_fortran_env->module~fossil_aabb_tree_object iso_fortran_env->module~fossil_aabb_node_object iso_fortran_env->module~fossil_facet_object iso_fortran_env->module~fossil_aabb_object module~fossil_aabb_object->module~fossil_aabb_tree_object module~fossil_aabb_object->module~fossil_aabb_node_object module~fossil_utils->module~fossil_facet_object module~fossil_utils->module~fossil_aabb_object
Help

FOSSIL, Axis-Aligned Bounding Box (AABB) tree class definition.

Used By

module~~fossil_aabb_tree_object~~UsedByGraph module~fossil_aabb_tree_object fossil_aabb_tree_object module~fossil_file_stl_object fossil_file_stl_object module~fossil_aabb_tree_object->module~fossil_file_stl_object module~fossil fossil module~fossil_file_stl_object->module~fossil program~fossil_test_distance fossil_test_distance module~fossil->program~fossil_test_distance program~fossil_test_sanitize_normals fossil_test_sanitize_normals module~fossil->program~fossil_test_sanitize_normals program~fossil_test_load_save_ascii fossil_test_load_save_ascii module~fossil->program~fossil_test_load_save_ascii program~fossil_test_load_save_binary fossil_test_load_save_binary module~fossil->program~fossil_test_load_save_binary program~fossil_test_rotate fossil_test_rotate module~fossil->program~fossil_test_rotate program~fossil_test_mirror fossil_test_mirror module~fossil->program~fossil_test_mirror program~fossil_test_translate fossil_test_translate module~fossil->program~fossil_test_translate program~fossil_test_resize fossil_test_resize module~fossil->program~fossil_test_resize
Help


Variables

TypeVisibility AttributesNameInitial
integer(kind=I4P), private, parameter:: TREE_RATIO =8

Tree refinement ratio, it is assumed to be an octree.


Derived Types

type, public :: aabb_tree_object

FOSSIL Axis-Aligned Bounding Box (AABB) tree class.

Components

TypeVisibility AttributesNameInitial
integer(kind=I4P), public :: refinement_levels =0

Total number of refinement levels used.

integer(kind=I4P), public :: nodes_number =0

Total number of tree nodes.

type(aabb_node_object), public, allocatable:: node(:)

AABB tree nodes [0:nodes_number-1].

logical, public :: is_initialized =.false.

Sentinel to check is AABB tree is initialized.

Type-Bound Procedures

procedure, public, pass(self) :: destroy

Destroy AABB tree.

procedure, public, pass(self) :: distance

Compute the (minimum) distance from point to triangulated surface.

procedure, public, pass(self) :: initialize

Initialize AABB tree.

procedure, public, pass(self) :: ray_intersections_number

Return ray intersections number.

procedure, public, pass(self) :: save_geometry_tecplot_ascii

Save AABB tree boxes geometry into Tecplot ascii file.

procedure, public, pass(self) :: save_into_file_stl

Save AABB tree boxes facets into files STL.

generic, public :: assignment(=) => aabb_tree_assign_aabb_tree

Overload =.

procedure, private, pass(lhs) :: aabb_tree_assign_aabb_tree

Operator =.


Functions

private pure function distance(self, point)

Compute the (minimum) distance from a point to the triangulated surface.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(in) :: self

AABB tree.

type(vector_R8P), intent(in) :: point

Point coordinates.

Return Value real(kind=R8P)

Minimum distance from point to the triangulated surface.

private pure function ray_intersections_number(self, ray_origin, ray_direction) result(intersections_number)

Return ray intersections number.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(in) :: self

AABB tree.

type(vector_R8P), intent(in) :: ray_origin

Ray origin.

type(vector_R8P), intent(in) :: ray_direction

Ray direction.

Return Value integer(kind=I4P)

Intersection number.

private pure function first_child_node(node)

Return first child tree node.

Arguments

Type IntentOptional AttributesName
integer(kind=I4P), intent(in) :: node

Node queried.

Return Value integer(kind=I4P)

First child tree node.

private pure function first_node(level)

Return first tree node at a given level.

Arguments

Type IntentOptional AttributesName
integer(kind=I4P), intent(in) :: level

Refinement level queried.

Return Value integer(kind=I4P)

Number of tree nodes at given level.

private pure function nodes_number(refinement_levels)

Return total number of tree nodes given the total number refinement levels used.

Arguments

Type IntentOptional AttributesName
integer(kind=I4P), intent(in) :: refinement_levels

Total number of refinement levels used.

Return Value integer(kind=I4P)

Total number of tree nodes.

private pure function nodes_number_at_level(level) result(nodes_number)

Return number of tree nodes at a given level.

Arguments

Type IntentOptional AttributesName
integer(kind=I4P), intent(in) :: level

Refinement level queried.

Return Value integer(kind=I4P)

Number of tree nodes at given level.

private pure function parent_node(node)

Return parent tree node.

Arguments

Type IntentOptional AttributesName
integer(kind=I4P), intent(in) :: node

Node queried.

Return Value integer(kind=I4P)

Parent tree node.


Subroutines

private elemental subroutine destroy(self)

Destroy AABB tree.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(inout) :: self

AABB tree.

private subroutine initialize(self, refinement_levels, facet, bmin, bmax)

Initialize AABB tree.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(inout) :: self

AABB tree.

integer(kind=I4P), intent(in) :: refinement_levels

Total number of refinement levels used.

type(facet_object), intent(in), optional :: facet(:)

Facets list.

type(vector_R8P), intent(in), optional :: bmin

Minimum point of AABB.

type(vector_R8P), intent(in), optional :: bmax

Maximum point of AABB.

private subroutine save_geometry_tecplot_ascii(self, file_name)

Save AABB tree boxes geometry into Tecplot ascii file.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(in) :: self

AABB tree.

character(len=*), intent(in) :: file_name

File name.

private subroutine save_into_file_stl(self, base_file_name, is_ascii)

Save AABB tree boxes facets into files STL.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(in) :: self

AABB tree.

character(len=*), intent(in) :: base_file_name

File name.

logical, intent(in), optional :: is_ascii

Sentinel to check if file is ASCII.

private pure subroutine aabb_tree_assign_aabb_tree(lhs, rhs)

Operator =.

Arguments

Type IntentOptional AttributesName
class(aabb_tree_object), intent(inout) :: lhs

Left hand side.

type(aabb_tree_object), intent(in) :: rhs

Right hand side.