3D axes rendering module for projecting 3D axis frames to 2D
Provides routines for generating 3D bounding boxes, axis lines, tick positions and projecting them to 2D coordinates
Generate 8 corners of 3D bounding box
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | x_min | |||
real(kind=wp), | intent(in) | :: | x_max | |||
real(kind=wp), | intent(in) | :: | y_min | |||
real(kind=wp), | intent(in) | :: | y_max | |||
real(kind=wp), | intent(in) | :: | z_min | |||
real(kind=wp), | intent(in) | :: | z_max | |||
real(kind=wp), | intent(out) | :: | corners_3d(3,8) |
Project 8 3D corners to 2D screen coordinates
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | corners_3d(3,8) | |||
real(kind=wp), | intent(in) | :: | azim | |||
real(kind=wp), | intent(in) | :: | elev | |||
real(kind=wp), | intent(in) | :: | dist | |||
real(kind=wp), | intent(out) | :: | corners_2d(2,8) |
Generate 3D axis lines (X, Y, Z axes)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | x_min | |||
real(kind=wp), | intent(in) | :: | x_max | |||
real(kind=wp), | intent(in) | :: | y_min | |||
real(kind=wp), | intent(in) | :: | y_max | |||
real(kind=wp), | intent(in) | :: | z_min | |||
real(kind=wp), | intent(in) | :: | z_max | |||
real(kind=wp), | intent(out) | :: | axis_lines_3d(3,6) |
Project 3D axis lines to 2D screen coordinates
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | axis_lines_3d(3,6) | |||
real(kind=wp), | intent(in) | :: | azim | |||
real(kind=wp), | intent(in) | :: | elev | |||
real(kind=wp), | intent(in) | :: | dist | |||
real(kind=wp), | intent(out) | :: | axis_lines_2d(2,6) |
Generate 3D tick mark positions on axes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(in) | :: | x_min | |||
real(kind=wp), | intent(in) | :: | x_max | |||
real(kind=wp), | intent(in) | :: | y_min | |||
real(kind=wp), | intent(in) | :: | y_max | |||
real(kind=wp), | intent(in) | :: | z_min | |||
real(kind=wp), | intent(in) | :: | z_max | |||
real(kind=wp), | intent(out) | :: | tick_3d(3,10) | |||
integer, | intent(out) | :: | n_ticks |
Draw 3D axes frame to raster backend - matplotlib style
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(plot_context), | intent(inout) | :: | ctx | |||
real(kind=wp), | intent(in) | :: | x_min | |||
real(kind=wp), | intent(in) | :: | x_max | |||
real(kind=wp), | intent(in) | :: | y_min | |||
real(kind=wp), | intent(in) | :: | y_max | |||
real(kind=wp), | intent(in) | :: | z_min | |||
real(kind=wp), | intent(in) | :: | z_max |
Transform projected corners from data space to screen space
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | intent(inout) | :: | corners_2d(:,:) | |||
class(plot_context), | intent(in) | :: | ctx | |||
real(kind=wp), | intent(in) | :: | x_min | |||
real(kind=wp), | intent(in) | :: | x_max | |||
real(kind=wp), | intent(in) | :: | y_min | |||
real(kind=wp), | intent(in) | :: | y_max | |||
real(kind=wp), | intent(in) | :: | z_min | |||
real(kind=wp), | intent(in) | :: | z_max |