fossil_aabb_object Module

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

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

Used By

module~~fossil_aabb_object~~UsedByGraph module~fossil_aabb_object fossil_aabb_object module~fossil_aabb_tree_object fossil_aabb_tree_object module~fossil_aabb_object->module~fossil_aabb_tree_object module~fossil_aabb_node_object fossil_aabb_node_object module~fossil_aabb_object->module~fossil_aabb_node_object module~fossil_file_stl_object fossil_file_stl_object module~fossil_aabb_tree_object->module~fossil_file_stl_object module~fossil_aabb_node_object->module~fossil_aabb_tree_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


Derived Types

type, public :: aabb_object

FOSSIL Axis-Aligned Bounding Box (AABB) class.

Components

TypeVisibility AttributesNameInitial
type(vector_R8P), public :: bmin

Minimum point of AABB.

type(vector_R8P), public :: bmax

Maximum point of AABB.

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

Facets number.

type(facet_object), public, allocatable:: facet(:)

Facets.

Type-Bound Procedures

procedure, public, pass(self) :: add_facets

Add facets to AABB.

procedure, public, pass(self) :: closest_point

Return closest point on AABB from point reference.

procedure, public, pass(self) :: compute_octants

Compute AABB octants.

procedure, public, pass(self) :: destroy

Destroy AABB.

procedure, public, pass(self) :: distance

Return the (square) distance from point to AABB.

procedure, public, pass(self) :: distance_from_facets

Return the (square) distance from point to AABB's facets.

procedure, public, pass(self) :: do_ray_intersect

Return true if AABB is intersected by ray.

procedure, public, pass(self) :: has_facets

Return true if AABB has facets.

procedure, public, pass(self) :: initialize

Initialize AABB.

procedure, public, pass(self) :: is_inside

Return the true if point is inside ABB.

procedure, public, pass(self) :: ray_intersections_number

Return ray intersections number.

procedure, public, pass(self) :: save_geometry_tecplot_ascii

Save AABB geometry into Tecplot ascii file.

procedure, public, pass(self) :: save_facets_into_file_stl

Save facets into file STL.

procedure, public, pass(self) :: update_extents

Update AABB bounding box extents.

procedure, public, pass(self) :: vertex

Return AABB vertices.

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

Overload =.

procedure, private, pass(lhs) :: aabb_assign_aabb

Operator =.


Functions

private pure function closest_point(self, point) result(closest)

Return closest point on (or in) AABB from point reference.

Arguments

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

AABB.

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

Point reference.

Return Value type(vector_R8P)

Closest point on (on in) aabb to point.

private pure function distance(self, point)

Return the (square) distance from point to AABB.

Arguments

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

AABB.

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

Point reference.

Return Value real(kind=R8P)

Distance from point to AABB.

private pure function distance_from_facets(self, point) result(distance)

Return the (square) distance from point to AABB's facets.

Arguments

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

AABB.

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

Point reference.

Return Value real(kind=R8P)

Distance from point to AABB's facets.

private pure function do_ray_intersect(self, ray_origin, ray_direction) result(do_intersect)

Return true if AABB is intersected by ray from origin and oriented as ray direction vector.

Arguments

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

AABB box.

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

Ray origin.

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

Ray direction.

Return Value logical

Test result.

private pure function has_facets(self)

Return true if AABB has facets.

Arguments

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

AABB box.

Return Value logical

Check result.

private pure function is_inside(self, point)

Return the true if point is inside ABB.

Arguments

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

AABB.

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

Point reference.

Return Value logical

Check result.

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

Return ray intersections number.

Arguments

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

AABB.

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 vertex(self)

Return AABB vertices.

Arguments

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

AABB.

Return Value type(vector_R8P) (8)

AABB vertices.


Subroutines

private subroutine add_facets(self, facet)

Add facets to AABB.

Arguments

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

AABB.

type(facet_object), intent(inout), allocatable:: facet(:)

Facets list.

private pure subroutine compute_octants(self, octant)

Return AABB octants.

Arguments

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

AABB.

type(aabb_object), intent(out) :: octant(8)

AABB octants.

private elemental subroutine destroy(self)

Destroy AABB.

Arguments

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

AABB.

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

Initialize AABB.

Arguments

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

AABB.

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_unit, aabb_name)

Save AABB geometry into Tecplot ascii file.

Arguments

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

AABB.

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

File unit.

character(len=*), intent(in), optional :: aabb_name

Name of AABB.

private subroutine save_facets_into_file_stl(self, file_name, is_ascii)

Save facets into file STL.

Arguments

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

AABB.

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

File name.

logical, intent(in) :: is_ascii

Sentinel to check if file is ASCII.

private pure subroutine update_extents(self)

Update AABB bounding box extents.

Arguments

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

AABB.

private pure subroutine aabb_assign_aabb(lhs, rhs)

Operator =.

Arguments

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

Left hand side.

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

Right hand side.

private pure subroutine compute_bb_from_facets(facet, bmin, bmax)

Compute AABB extents (minimum and maximum bounding box) from facets list.

Arguments

Type IntentOptional AttributesName
type(facet_object), intent(in) :: facet(:)

Facets list.

type(vector_R8P), intent(inout) :: bmin

Minimum point of AABB.

type(vector_R8P), intent(inout) :: bmax

Maximum point of AABB.