RodTracker.ui.rodimagewidget

TBD

class RodImageWidget(*args, **kwargs)[source]

Bases: QLabel

A custom QLabel that displays an image and can overlay rods.

Parameters
  • *args (iterable) – Positional arguments for the QLabel superclass.

  • **kwargs (dict) – Keyword arguments for the QLabel superclass.

base_pixmap

A clean image in the correct scaled size.

Type

QPixmap

rod_pixmap

Image that is temporarily painted on when rod corrections are put in by the user.

Type

QPixmap

startPos

Start position for new rod position.

Type

QtCore.QPoint

property active_rod

Property that returns the currently activated rod, if applicable.

Returns

int | None

adjust_rod_length(amount: float = 1., only_selected: bool = True)[source]

Adjusts rod length(s) by a given amount in px.

Adds the length (in px) given in amount to the active rod or all rods. Negative values shorten the rod(s).

Parameters
  • amount (float, optional) – Amount in px by which the lenght will be adjusted. By default 1.

  • only_selected (bool, optional) – Whether to only adjust the currently active rod’s length. By default True.

adjust_rod_position(rod: RodNumberWidget) List[int][source]

Adjusts a rod number position to be on the right side of its rod.

The position of the RodNumberWidget is adjusted, such that it is displayed to the right side and in the middle of its corresponding rod. This adjustment is mainly due to scaling of the image. It also returns the rods position in the image associated with the moved RodNumberWidget.

Parameters

rod (RodNumberWidget) –

Returns

List[int]

autoselect: bool = True
property cam_id: str

Property that holds a string used as and ID for logging and data selection.

It must be human readable as it is used for labelling the performed actions displayed in the GUI.

Returns

str

catch_rodnumber_change(new_rod: RodNumberWidget, last_id: int) ChangedRodNumberAction[source]

Handles the number/ID change of rods for logging.

Constructs an Action for a number/ID change of a rod that can be used for logging with an ActionLogger.

Parameters
  • new_rod (RodNumberWidget) – The rod in its new (changed) state.

  • last_id (int) – The rod’s previous ID, i.e. directly prior to the change.

Returns

ChangedRodNumberAction

check_exchange(drop_position)[source]

Evaluates, whether a position is on top of a RodNumberWidget.

Evaluates, whether a position is on top of a RodNumberWidget maintained by this object.

check_rod_conflicts(set_rod: RodNumberWidget, last_id: int) None[source]

Checks whether a new/changed rod has a number conflict with others.

Checks whether a new/changed rod has an ID that conflicts with is already occupied by one/multiple other rods in this widget. The user is displayed multiple options for resolving these conflicts.

Parameters
  • set_rod (RodNumberWidget) – The rod in its new (changed) state.

  • last_id (int) – The rod’s previous ID, i.e. directly prior to the change.

Returns

None

Hint

Emits:

clear_screen() None[source]

Removes the displayed rods and deletes them.

Returns

None

create_rod(number: int, new_position: list)[source]

Create a new rod, display it and log this action.

Parameters
  • number (int) –

  • new_position (list) – Positon coordinates: [x1, y1, x2, y2]

delete_rod(rod: RodNumberWidget) None[source]

Deletes the given rod, thus sets its position to (-1, -1).

Parameters

rod (RodNumberWidget) –

Returns

None

draw_rods() Optional[QPixmap][source]

Updates the visual display of overlayed rods in the widget.

Updates the visual appearance of all rods that are overlaying the original image. It specifically handles the different visual states a rod can be assigned.

Returns

Union[QPixmap, None]

eventFilter(source: QObject, event: QEvent) bool[source]

Intercepts events, here QKeyEvents for frame switching and edit aborting.

Parameters
  • source (QObject) –

  • event (QEvent) –

Returns

boolTrue, if the event shall not be propagated further. False, if the event shall be passed to the next object to be handled.

Hint

Emits:

extract_rods(data: DataFrame, color: str) None[source]

Extract rod positions for a color and create the RodNumberWidget (s).

Extracts the rod position data one color in one frame from data. It creates the RodNumberWidget that is associated with each rod. If a rod has been activated previously, it is attempted to activate a rod with the same number again.

Parameters
  • data (DataFrame) – Data from which to extract the 2D rod positions relevant to this camera view. Required columns: "x1_{self.cam_id}", "x2_{self.cam_id}", "y1_{self.cam_id}", "y2_{self.cam_id}", "seen_{self.cam_id}", "particle", "frame"

  • color (str) – Color of the rods given in data.

Returns

None

Hint

Emits:

frame(frame: int)[source]

Set the frame number information about the displayed image.

Parameters

frame (int) – Frame number that is associated with the currently displayed image.

image(new_image: QImage)[source]

Show a new image in this widget.

Parameters

new_image (QImage) –

Raises

ValueError – If the image is Null.

loaded_rods

Notifies objects, how many rods have just been loaded for display.

Type

pyqtSignal(int)

property logger: ActionLogger

Property that holds a logger object keeping track of users’ actions performed on this widget and its contents.

Returns

ActionLogger

mouseMoveEvent(mouse_event: QMouseEvent) None[source]

Reimplements QLabel.mouseMoveEvent(event).

Handles the drawing and updating of a draft rod during start and end point selection.

Parameters

mouse_event (QMouseEvent) –

Returns

None

mousePressEvent(event: QMouseEvent) None[source]

Reimplements QLabel.mousePressEvent(event).

Handles the beginning and ending actions for rod corrections by the user.

Parameters

event (QMouseEvent) –

Returns

None

normal_frame_change

Requests a normal change of frame.

The payload is the index of the desired frame, relative to the current one, e.g. -1 to request the previous image.

Type

pyqtSignal(int)

notify_undone

Notifies objects, that the Action in the payload has been reverted.

Type

pyqtSignal(Action)

number_switches

Indicates switches of numbers between rods.

  • [NumberChangeActions, int, int, str]:

    Notifies data maintainance objects, that the user attempts to change rod IDs in more than just the frame displayed by this RodImageWidget.

    Payload: type of the attempted change, previous rod ID, new rod ID, and camera ID

  • [NumberChangeActions, int, int, str, str, int]:

    The second version of this signal will be obsolete.

    Payload: type of the attempted change, previous rod ID, new rod ID, camera ID, rod color, and frame

Type

pyqtSignal

request_color_change

Request to change the displayed colors.

Currently this is used to revert actions performed on a color other than the displayed one.

Type

pyqtSignal(str)

request_frame_change

Request to change the displayed frames.

Currently this is used to revert actions performed on a frame other than the displayed one.

Type

pyqtSignal(int)

resizeEvent(a0: QResizeEvent) None[source]

Adjust rod positions after resizing of the widget happened, e.g. the slider was actuated or the image was scaled.

Parameters

a0 (QResizeEvent) –

Returns

None

rod_activated(rod_id: int) None[source]

Changes the rod state of the one given to active.

The rod state of the rod, which ID is given to active and deactivates all other rods maintained by this widget.

Parameters

rod_id (int) – ID of the rod that shall be activated.

Returns

None

property rods: List[RodNumberWidget]

Property that hold RodNumberWidget representing rods that are displayable on the Widget.

Returns

List[RodNumberWidget]

save_line(start: QPoint, end: QPoint)[source]

Saves a line selected by the user to be a rod with a rod number.

The user’s selected start and end point are saved in a RodNumberWidget. Either in one that was activated prior to the point selection, or that is selected by the user post point selection as part of this function.

Parameters
  • start (QPoint) –

  • end (QPoint) –

Returns

None

property scale_factor: float

Property that holds the scaling factor by which the original image is scaled when displayed.

Returns

float

scale_to_size(new_size: QSize)[source]

Scales the image to a specified size.

Scales the image to a specified size, while retaining the image’s aspect ratio.

Parameters

new_size (QSize) –

Returns

None

set_autoselect(state: bool)[source]

En-/Disable autoselection of rods based on the mouse distance.

Parameters

state (bool) – New state of the autoselection.

static subtract_offset(point: QPoint, offset: List[int]) QPoint[source]

Subtracts a given offset from a point and returns the new point.

Parameters
  • point (QPoint) –

  • offset (List[int]) –

Returns

QPoint

undo_action(action: Union[Action, ChangeRodPositionAction, ChangedRodNumberAction, DeleteRodAction])[source]

Reverts an Action performed on a rod.

Reverts the Action given this function, if it was constructed by the object. It can handle actions performed on a rod. This includes position changes, number changes and deletions. It returns without further actions, if the Action was not originally performed on this object or if it has is of an unknown type.

Parameters

action (Union[Action, ChangeRodPositionAction, ChangedRodNumberAction,) – DeleteRodAction] An Action that was logged previously. It will only be reverted, if it associated with this object.

Returns

None

Hint

Emits:

update_settings(settings: dict) None[source]

Catches updates of the settings from a Settings class.

Checks for the keys relevant to itself and updates the corresponding attributes. Redraws itself with the new settings in place.

Parameters

settings (dict) –

Returns

None

line_segment_distance(p1: ndarray, p2: ndarray, p: ndarray) float[source]