-
Notifications
You must be signed in to change notification settings - Fork 91
Rohit Prasad: Mission Support System: Improve multiple flightpath docking widget : GSOC2024
- Name - Rohit Prasad (@rohit2p)
- Organisation - Python Software Foundation
- Sub-Organisation - MSS
- Mentors - Joern Ungermann, Reimar Bauer, Matthias Riße, Christian Rolf and Sreelakshmi Jayarajan
- Project - Mission Support System: Improve multiple flightpath docking widget
- Project Branch - GSOC2024-RohitPrasad
- You can checkout my weekly blogs on Mastodon and my complete proposal!
The primary goal of this project was to enhance the functionality and user experience of the Multiple Flightpath Docking Widget within the Mission Support System (MSS). This widget is responsible for displaying multiple flight tracks simultaneously, but it lacked several key features that could improve its usability and efficiency. Throughout the project, I focused on adding and refining various features to make the docking widget more powerful and user-friendly. Additionally, I contributed to improving some functionalities within the SideView and TopView Option Widgets.
This feature enhances both the Side View and Top View Option Widgets by introducing customization options for flight track line visualization. Users can now modify the appearance of flight tracks line through several new controls:
-
Line Thickness: This allows users to adjust the thickness of the flight track lines. The default thickness is set to 2.00, but users can increase or decrease it as needed.
-
Line Style: A dropdown menu has been added to let users select between different line styles, including dashed, dotted, and dash-dot patterns. By default, the line style is set to solid, but it changes according to the user's selection, allowing how flight paths are displayed.
-
Line Transparency: Users can now adjust the transparency of flight track lines, with the default value set to 100% opacity. This feature allows for better visualization, especially when multiple flight tracks overlap.
Additionally, QSettings is used to store and restore the user’s preferences. This ensures that after the window is closed and reopened, the selected line thickness, style, and transparency are retained, providing a more seamless user experience.
I introduced a new custom color palette to improve the user experience when selecting colors for flight tracks, etc. Previously, the MSS application relied on the default PyQt color picker, which provided a wide range of colors but lacked distinct and easily distinguishable options. Many of the colors were too similar, making it difficult to differentiate between multiple flight paths.
The new custom color palette addresses this issue by offering a set of distinct, visually separated colors. In addition to improving functionality, the color picker now features a more minimalist and modern design, enhancing the overall aesthetics of the application. This is implemented in different widgets such as option widget of Topview and sideview also in multiple flightpath docking widget.
Feature 3: Enhanced Flight Track Control and Customization In the Multiple Flightpath Docking Widget
In the Multiple Flightpath Docking Widget, I introduced several key features to enhance control and customization of flight tracks:
-
Select/Deselect All Checkbox: I added two checkboxes that allow users to quickly select or deselect all flight tracks or operations with a single click, excluding the currently active flight track/operation. This feature improves efficiency, especially when working with multiple tracks at once.
-
Line Thickness Control: Users can adjust the thickness of the flight track lines, with a default value set to 2.00.
-
Line Style Selection: A dropdown menu enables users to choose between different line styles, including dashed, dotted, and dash-dot. The default style is solid, but it automatically changes based on user preference, allowing for more personalized visualization.
-
Line Transparency Adjustment: This feature allows users to control the transparency of flight track lines. The default is set to 100% opacity, but users can reduce it for better visibility when multiple tracks overlap.
Previously, when creating new flight tracks in the Multiple Flightpath Docking Widget, the default color was always blue. Since the widget allows for plotting multiple flight tracks simultaneously, this often led to confusion in distinguishing between tracks. To solve this, I implemented an automatic distinct color selection feature.
Now, whenever a new flight track or operation is created, it is automatically assigned a different color from a predefined list of RGB color tuples. This ensures that each flight track is visually distinct, eliminating the confusion caused by multiple tracks sharing the same color.
The mechanism also prevents color repetition, ensuring that no two flight tracks have the same color. If all the colors in the list are used, a reset mechanism is triggered, allowing the color assignment to begin again without causing overlaps.
In the previous implementation, users were unable to change the line style of the active flight track via the docking widget—this functionality was restricted to the Top View Option Widget. However, when users attempted to change the active flight track's line style through the docking widget, the UI would hide and unhide buttons without any clear feedback, leading to confusion.
I resolved this issue by implementing a more intuitive behavior. Now, the buttons in the docking widget are automatically disabled for the active flight track, making them unclickable. Additionally, a clear message is displayed to inform users that the line style for the active flight track can only be modified via the Top View Option Widget. This ensures that users understand why the controls are disabled and guides them to the correct location for making changes, improving both functionality and user experience.
Previously, the Multiple Flightpath Docking Widget did not have a legend to help users easily identify flight tracks and their properties. I implemented a comprehensive legend that displays key details about each flight track or operation, such as the flight track name, its corresponding color, and the selected line style.
The legend only shows the checked, non-active flight tracks, ensuring it remains uncluttered and focused on relevant operations. It was implemented using Matplotlib, allowing for seamless inclusion in printouts and SVG exports of the plot, providing a visually consistent experience across different formats.
Building on the previously implemented legend feature, I introduced clickable functionality to the legend, allowing for dynamic interaction. This enhancement enables users to click on a flight track's entry in the legend, which opens a Qt input box where they can enter a custom label. The input label then replaces the flight track's name in the legend.
Additionally, this label is used to annotate the corresponding flight track line on the plot, with an arrow pointing to the line to visually link the annotation and the track. If no custom label is provided, the default flight track or operation name is used as the annotation. Their is a toggle to enable annotation on the plot only if its checked then the annotation will plot on the map.
While MSS already had a category-based filtering system to manage MSColab operations, it lacked flexibility in more complex filtering scenarios. To address this, I implemented a regex-based filtering system. This feature allows users to apply regular expressions to filter MSColab operations more effectively, giving them fine-grained control over the operations they want to display.
The filtered data is then sent directly to the Multiple Flightpath Docking Widget, ensuring that only the relevant operations are shown.
I plan to continue contributing to the MSS project beyond the GSoC period. Specifically, I will focus on refining and improving the features I’ve developed:
-
Feature 7: Clickable Legend and Annotations on the Plot – While the clickable legend and annotation feature is functional, there are some bugs that need to be addressed to ensure smoother interaction and better performance. I’ll work on fixing these issues to make the feature more robust.
-
Feature 8: Regex Filtering System for MSColab Operations – My future work will involve fully integrating the regex filtering system. This includes connecting the main window with the Multiple Flightpath Docking Widget and ensuring the filtered operations are properly sent from the main window to the docking widget for a seamless user experience.
I would like to extend my deepest thanks to my mentors Joern Ungermann, Reimar Bauer, Matthias Riße, Christian Rolf and Sreelakshmi Jayarajan for their guidance and support throughout this journey. Their feedback on my code and their willingness to help whenever I got stuck made all the difference. I’ve learned so much this summer—from mastering Git to communicating effectively with my mentors, planning my days, and reading and understanding other people's code to writing. It’s been an incredible experience.
The most important lesson I take away from this is that no matter how challenging or stuck you may feel, if you remain consistent, ask for help, and really put in the effort, you will figure it out. Looking back now, it feels rewarding to have pushed through.
I’d also like to thank the Python Software Foundation and the Mission Support System for providing this amazing opportunity, and Google Summer of Code for organizing such a fantastic program.