make_axes Subroutine

private subroutine make_axes(self)

Make the axes' lines and tick marks, in place of the old (nothing before build_contents).

Arguments

Type IntentOptional Attributes Name
class(CoordinateAxes), intent(inout) :: self

Calls

proc~~make_axes~~CallsGraph proc~make_axes make_axes interface~vkf_switch_create vkf_switch_create proc~make_axes->interface~vkf_switch_create proc~add add proc~make_axes->proc~add proc~append append proc~make_axes->proc~append proc~color~2 ReferenceFrame%color proc~make_axes->proc~color~2 proc~line_node line_node proc~make_axes->proc~line_node proc~marker_node marker_node proc~make_axes->proc~marker_node proc~replace ShapeNodes%replace proc~make_axes->proc~replace interface~vkf_node_add_child vkf_node_add_child proc~add->interface~vkf_node_add_child interface~vkf_node_delete vkf_node_delete proc~add->interface~vkf_node_delete proc~check_status check_status proc~add->proc~check_status interface~vkf_line_create vkf_line_create proc~line_node->interface~vkf_line_create proc~line_node->proc~check_status proc~line_set_points line_set_points proc~line_node->proc~line_set_points proc~line_set_segments line_set_segments proc~line_node->proc~line_set_segments proc~line_set_style line_set_style proc~line_node->proc~line_set_style interface~vkf_marker_create vkf_marker_create proc~marker_node->interface~vkf_marker_create proc~marker_node->proc~check_status proc~marker_node->proc~line_set_points proc~marker_set_style marker_set_style proc~marker_node->proc~marker_set_style interface~vkf_compile_node vkf_compile_node proc~replace->interface~vkf_compile_node proc~replace->interface~vkf_node_add_child proc~replace->interface~vkf_node_delete interface~vkf_node_remove_child vkf_node_remove_child proc~replace->interface~vkf_node_remove_child proc~replace->proc~check_status interface~vkf_line_points vkf_line_points proc~line_set_points->interface~vkf_line_points interface~vkf_line_points_changed vkf_line_points_changed proc~line_set_points->interface~vkf_line_points_changed interface~vkf_line_style vkf_line_style proc~line_set_segments->interface~vkf_line_style interface~vkf_line_style_changed vkf_line_style_changed proc~line_set_segments->interface~vkf_line_style_changed proc~line_set_style->interface~vkf_line_style proc~line_set_style->interface~vkf_line_style_changed proc~marker_set_style->interface~vkf_line_style proc~marker_set_style->interface~vkf_line_style_changed

Called by

proc~~make_axes~~CalledByGraph proc~make_axes make_axes proc~axes_build_contents CoordinateAxes%axes_build_contents proc~axes_build_contents->proc~make_axes proc~axes_set_color CoordinateAxes%axes_set_color proc~axes_set_color->proc~make_axes proc~set_axis_length CoordinateAxes%set_axis_length proc~set_axis_length->proc~make_axes proc~set_axis_width CoordinateAxes%set_axis_width proc~set_axis_width->proc~make_axes proc~set_draw_axes CoordinateAxes%set_draw_axes proc~set_draw_axes->proc~make_axes proc~set_tick_image CoordinateAxes%set_tick_image proc~set_tick_image->proc~make_axes proc~set_tick_shape CoordinateAxes%set_tick_shape proc~set_tick_shape->proc~make_axes proc~set_tick_size CoordinateAxes%set_tick_size proc~set_tick_size->proc~make_axes proc~set_tick_spacing CoordinateAxes%set_tick_spacing proc~set_tick_spacing->proc~make_axes

Source Code

    subroutine make_axes(self)
        class(CoordinateAxes), intent(inout) :: self
        real(wp), allocatable :: lines(:,:), major(:,:), minor(:,:)
        real(wp) :: e(3), mark, f
        type(c_ptr) :: group
        integer :: k, i
        if (.not. c_associated(self%nodes%contents)) return
        allocate(lines(3, 0), major(3, 0), minor(3, 0))
        do k = 1, 3
            if (iand(self%drawn, 2**(k-1)) == 0) cycle
            e = 0.0_wp
            e(k) = 1.0_wp
            call append(lines, reshape([0.0_wp, 0.0_wp, 0.0_wp, self%length_ * e], [3, 2]))
            if (self%major > 0.0_wp) then
                do i = 1, int(self%length_ / self%major + 1.0e-9_wp)
                    call append(major, reshape(i * self%major * e, [3, 1]))
                end do
            end if
            if (self%minor > 0.0_wp) then
                do i = 1, int(self%length_ / self%minor + 1.0e-9_wp)
                    mark = i * self%minor
                    if (self%major > 0.0_wp) then                   ! not where a major tick is
                        f = mark / self%major
                        if (abs(f - nint(f)) < 1.0e-6_wp) cycle
                    end if
                    call append(minor, reshape(mark * e, [3, 1]))
                end do
            end if
        end do
        group = vkf_switch_create()
        call add(group, line_node(lines, self%color(), self%width_, .true.))
        call add(group, marker_node(major, self%color(), self%major_size, self%shape_, self%length_, self%image))
        call add(group, marker_node(minor, self%color(), self%minor_size, self%shape_, self%length_, self%image))
        call self%nodes%replace(group)
    end subroutine make_axes