make_name_node Subroutine

private subroutine make_name_node(self)

The star names node for the current names and settings, in place of the old one: a label per named star drawn up to the names' magnitude, under the stars' switch (shown with them), turned by the sky's attitude.

Arguments

Type IntentOptional Attributes Name
type(SkySphere), intent(inout) :: self

Calls

proc~~make_name_node~~CallsGraph proc~make_name_node make_name_node interface~vkf_compile_node vkf_compile_node proc~make_name_node->interface~vkf_compile_node interface~vkf_label_set_at_infinity vkf_label_set_at_infinity proc~make_name_node->interface~vkf_label_set_at_infinity interface~vkf_node_add_child vkf_node_add_child proc~make_name_node->interface~vkf_node_add_child interface~vkf_node_delete vkf_node_delete proc~make_name_node->interface~vkf_node_delete interface~vkf_node_remove_child vkf_node_remove_child proc~make_name_node->interface~vkf_node_remove_child interface~vkf_transform_create vkf_transform_create proc~make_name_node->interface~vkf_transform_create proc~apply_mode apply_mode proc~make_name_node->proc~apply_mode proc~apply_name_attitude apply_name_attitude proc~make_name_node->proc~apply_name_attitude proc~check_status check_status proc~make_name_node->proc~check_status proc~label_create label_create proc~make_name_node->proc~label_create proc~apply_mode->proc~check_status interface~vkf_switch_set vkf_switch_set proc~apply_mode->interface~vkf_switch_set proc~apply_name_attitude->proc~check_status interface~vkf_transform_set_matrix vkf_transform_set_matrix proc~apply_name_attitude->interface~vkf_transform_set_matrix proc~quat_to_matrix quat_to_matrix proc~apply_name_attitude->proc~quat_to_matrix interface~vkf_label_create vkf_label_create proc~label_create->interface~vkf_label_create proc~get_font get_font proc~label_create->proc~get_font proc~vsg_alignment vsg_alignment proc~label_create->proc~vsg_alignment interface~vkf_font_read vkf_font_read proc~get_font->interface~vkf_font_read proc~find_font find_font proc~get_font->proc~find_font proc~find_in_dirs find_in_dirs proc~find_font->proc~find_in_dirs

Called by

proc~~make_name_node~~CalledByGraph proc~make_name_node make_name_node proc~make_star_node make_star_node proc~make_star_node->proc~make_name_node proc~set_star_names SkySphere%set_star_names proc~set_star_names->proc~make_name_node proc~node~2 SkySphere%node proc~node~2->proc~make_star_node proc~set_star_data SkySphere%set_star_data proc~set_star_data->proc~make_star_node proc~set_sky WindowProxy%set_sky proc~set_sky->proc~node~2

Source Code

    subroutine make_name_node(self)
        type(SkySphere), intent(inout) :: self
        type(c_ptr) :: label
        integer :: i
        if (c_associated(self%name_node)) then
            call check_status(vkf_node_remove_child(self%star_switch, self%name_node), 'SkySphere')
            call vkf_node_delete(self%name_node)
            self%name_node = c_null_ptr
        end if
        self%n_labels = 0
        if (.not. self%names_shown .or. self%n_names == 0) return
        if (.not. allocated(self%names_font)) self%names_font = ''
        self%name_node = vkf_transform_create()
        if (.not. c_associated(self%name_node)) return
        do i = 1, self%n_names
            if (self%names(i)%mag > self%names_max_mag) cycle
            ! (two spaces: beside the star, not over it)
            label = label_create('  '//self%names(i)%text, real(self%stars(1:3, self%names(i)%star), wp), &
                                 self%names_rgba, self%names_size, 0.0_wp, NAME_ALIGNMENT, self%names_font)
            if (.not. c_associated(label)) exit                ! (no font: said)
            call check_status(vkf_label_set_at_infinity(label, 1_c_int), 'SkySphere')
            call check_status(vkf_node_add_child(self%name_node, label), 'SkySphere')
            call vkf_node_delete(label)                        ! (held by the node)
            self%n_labels = self%n_labels + 1
        end do
        call apply_name_attitude(self)
        if (self%shown) call check_status(vkf_compile_node(self%name_node), 'SkySphere')
        call check_status(vkf_node_add_child(self%star_switch, self%name_node), 'SkySphere')
        call apply_mode(self)
    end subroutine make_name_node