point_pick Function

public function point_pick(cam, p, pixels, depth, extra) result(hit)

Point p (root frame) is within the tolerance (plus extra pixels, e.g. half a marker's size) of the cursor: its distance from it (pixels) and its depth.

Arguments

Type IntentOptional Attributes Name
type(PickCamera), intent(in) :: cam

the camera and cursor of the pick

real(kind=wp), intent(in) :: p(3)

the point (root frame)

real(kind=wp), intent(out) :: pixels

distance from the cursor (framebuffer pixels)

real(kind=wp), intent(out) :: depth

(scene units)

real(kind=wp), intent(in), optional :: extra

added to the tolerance (framebuffer pixels)

Return Value logical


Calls

proc~~point_pick~~CallsGraph proc~point_pick point_pick proc~project project proc~point_pick->proc~project

Called by

proc~~point_pick~~CalledByGraph proc~point_pick point_pick proc~curve_pick curve_pick proc~curve_pick->proc~point_pick proc~marker_pick marker_pick proc~marker_pick->proc~point_pick proc~pick ReferenceFrame%pick proc~pick->proc~point_pick proc~time_pick TimeHandle%time_pick proc~time_pick->proc~point_pick proc~time_pick->proc~pick proc~vector_pick VectorHandle%vector_pick proc~vector_pick->proc~point_pick proc~vector_pick->proc~pick proc~drawable_pick DrawableTrajectory%drawable_pick proc~drawable_pick->proc~curve_pick proc~drawable_pick->proc~marker_pick proc~drawable_pick->proc~pick proc~model_pick Model%model_pick proc~model_pick->proc~pick proc~sphere_pick Sphere%sphere_pick proc~sphere_pick->proc~pick proc~terrain_pick TerrainBody%terrain_pick proc~terrain_pick->proc~pick proc~window_pick WindowProxy%window_pick proc~window_pick->proc~pick proc~hover_handle hover_handle proc~hover_handle->proc~window_pick proc~dispatch_event dispatch_event proc~dispatch_event->proc~hover_handle proc~release_handle release_handle proc~dispatch_event->proc~release_handle proc~release_handle->proc~hover_handle proc~dispatch_events dispatch_events proc~dispatch_events->proc~dispatch_event proc~frame WindowProxy%frame proc~frame->proc~dispatch_events proc~resize WindowProxy%resize proc~resize->proc~frame proc~run WindowProxy%run proc~run->proc~frame

Source Code

    logical function point_pick(cam, p, pixels, depth, extra) result(hit)
        type(PickCamera), intent(in) :: cam                 !! the camera and cursor of the pick
        real(wp), intent(in) :: p(3)                        !! the point (root frame)
        real(wp), intent(out) :: pixels                     !! distance from the cursor (framebuffer pixels)
        real(wp), intent(out) :: depth                      !! (scene units)
        real(wp), intent(in), optional :: extra             !! added to the tolerance (framebuffer pixels)
        real(wp) :: sx, sy, reach
        hit = .false.
        pixels = huge(1.0_wp)
        if (.not. project(cam, p, sx, sy, depth)) return
        pixels = hypot(sx, sy)
        reach = cam%tolerance
        if (present(extra)) reach = reach + extra
        hit = pixels <= reach .and. depth <= cam%max_depth
    end function point_pick