trajectopy 5.1.1__tar.gz → 5.1.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {trajectopy-5.1.1 → trajectopy-5.1.2}/PKG-INFO +1 -1
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_kml.py +14 -5
- trajectopy-5.1.2/trajectopy/__version__.py +1 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/file_manager.py +13 -1
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/requests.py +2 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/ui_manager.py +10 -8
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/preview_plot_3d.py +4 -1
- trajectopy-5.1.1/trajectopy/__version__.py +0 -1
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.gitattributes +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.github/workflows/ci.yml +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.github/workflows/release.yml +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.gitignore +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.pre-commit-config.yaml +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/.pylintrc +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/CITATION.cff +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/LICENSE +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/README.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_data/KITTI_ORB.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_data/KITTI_SPTAM.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_data/KITTI_gt.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/align.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/alignment.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/ate.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/deviation_plots.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/rpe.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/example_scripts/trajectory_plot.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/installer/trajectopy.iss +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/pyproject.toml +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/requirements.txt +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/abs_dev.result +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/align_entry.result +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/generated_trajectory.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/noisy_trajectory.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/open_loop_trajectory.traj +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/rel_dev_meter.result +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/data/rel_dev_second.result +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_alignment.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_approximation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_architecture.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_comparison.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_context_menus.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_fast_reading.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_gui_models.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_gui_smoke.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_inplace_contract.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_io.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_manual_alignment.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_matching.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_merging.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_pipeline.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_positions_rotations.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_processing_edge_cases.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_processing_errors.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_project.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_readers_edge_cases.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_readers_errors.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_regressions.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_settings.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_settings_edge_cases.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_settings_serialization.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_settings_validation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_sorting.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_trajectory.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_trajectory_validation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_update_check.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/test_visualization.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/testdata.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/test/util.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/LICENSE +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/__main__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/cli/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/cli/main.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/parameters.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/positions.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/rotations.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/settings.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/core/trajectory.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/exceptions.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/app.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/plot_manager.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/project_manager.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/managers/trajectory_manager.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/entries.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/property_model.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/result_model.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/selection.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/table_model.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/models/trajectory_model.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/project.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/resources/full-icon-poppins.png +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/resources/icon-bg.ico +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/resources/icon-bg.png +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/resources/icon.png +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/themes.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/update_check.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/utils.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/about_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/alignment_edit_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/dof_organizer.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/entry_table_view.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/json_settings_view.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/kml_dialog.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/main_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/manual_alignment_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/menu_helpers.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/playback_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/preview_plot.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/progress_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/properties_panel.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/result_context_menu.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/result_selection_window.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/result_table_view.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/timeline_widget.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/trajectory_context_menu.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/views/trajectory_table_view.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/gui/worker.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/ascii.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/header.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/kml.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/results_io.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/rosbag.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/rosmsg.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/trajectory_io.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/io/utils.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/alignment.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/approximation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/evaluation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/interpolation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/data.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/direct.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/egrad_interface.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/equations.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/estimation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/parameters.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/cubic_approximation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/line_approximation.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/voxelizer.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/matching.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/merging.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/sorting.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/py.typed +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/readers/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/readers/ascii.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/readers/rosbag.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/readers/rosmsg.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/readers/utils.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/results/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/results/alignment_result.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/results/ate_result.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/results/rpe_result.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/colors.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/common.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/definitions.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/formatting.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/geometry.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/linalg.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/numeric.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/utils/resources.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/__init__.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/_svg_export.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/axes.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/figure.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/plots.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/visualization/style.py +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/core/parameters.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/core/positions.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/core/rotations.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/core/settings.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/core/trajectory.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/index.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/io/kml.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/io/results_io.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/io/rosbag.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/io/trajectory_io.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/alignment.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/approximation.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/evaluation.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/interpolation.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/matching.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/merging.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/processing/sorting.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/results/alignment_result.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/results/ate_result.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/results/rpe_result.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/visualization/display.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/api/visualization/figures.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/assets/icon.png +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/file_formats.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/index.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/javascripts/mathjax.js +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/settings.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/stylesheets/extra.css +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/docs/user_guide.md +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy-docs/mkdocs.yml +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy.spec +0 -0
- {trajectopy-5.1.1 → trajectopy-5.1.2}/uv.lock +0 -0
|
@@ -269,13 +269,23 @@ class TestAteKml(unittest.TestCase):
|
|
|
269
269
|
_export_ate(_ate_result(), field="speed")
|
|
270
270
|
|
|
271
271
|
|
|
272
|
+
def _ui_manager():
|
|
273
|
+
"""UI manager whose file requests are written synchronously by a file manager, as wired in the main window."""
|
|
274
|
+
from trajectopy.gui.managers.file_manager import FileManager
|
|
275
|
+
from trajectopy.gui.managers.ui_manager import UIManager
|
|
276
|
+
|
|
277
|
+
ui_manager, file_manager = UIManager(), FileManager()
|
|
278
|
+
ui_manager.file_request.connect(file_manager.handle_request)
|
|
279
|
+
ui_manager.file_manager = file_manager # keeps it alive with the UI manager
|
|
280
|
+
return ui_manager
|
|
281
|
+
|
|
282
|
+
|
|
272
283
|
class TestKmlGui(unittest.TestCase):
|
|
273
284
|
def test_trajectory_export_uses_the_dialog_options(self):
|
|
274
285
|
QtWidgets, settings = _gui()
|
|
275
286
|
from PySide6 import QtGui
|
|
276
287
|
|
|
277
288
|
from trajectopy.gui.managers.requests import UIRequest, UIRequestType
|
|
278
|
-
from trajectopy.gui.managers.ui_manager import UIManager
|
|
279
289
|
from trajectopy.gui.models.entries import TrajectoryEntry
|
|
280
290
|
from trajectopy.gui.models.selection import TrajectorySelection
|
|
281
291
|
from trajectopy.gui.views import kml_dialog
|
|
@@ -297,7 +307,7 @@ class TestKmlGui(unittest.TestCase):
|
|
|
297
307
|
mock.patch.object(kml_dialog.KmlExportDialog, "exec", new=choose),
|
|
298
308
|
mock.patch("trajectopy.gui.managers.ui_manager.save_file_dialog", return_value=path),
|
|
299
309
|
):
|
|
300
|
-
|
|
310
|
+
_ui_manager().handle_request(request)
|
|
301
311
|
root = ET.parse(path).getroot()
|
|
302
312
|
self.assertEqual(root.find(".//kml:LineStyle/kml:color", NS).text, "ff00ff00")
|
|
303
313
|
self.assertEqual(root.find(".//gx:Track/kml:altitudeMode", NS).text, "relativeToGround")
|
|
@@ -310,14 +320,13 @@ class TestKmlGui(unittest.TestCase):
|
|
|
310
320
|
),
|
|
311
321
|
mock.patch("trajectopy.gui.managers.ui_manager.save_file_dialog", return_value=path) as save,
|
|
312
322
|
):
|
|
313
|
-
|
|
323
|
+
_ui_manager().handle_request(request)
|
|
314
324
|
save.assert_not_called()
|
|
315
325
|
self.assertFalse(os.path.exists(path))
|
|
316
326
|
|
|
317
327
|
def test_ate_export_uses_the_chosen_field(self):
|
|
318
328
|
QtWidgets, settings = _gui()
|
|
319
329
|
from trajectopy.gui.managers.requests import UIRequest, UIRequestType
|
|
320
|
-
from trajectopy.gui.managers.ui_manager import UIManager
|
|
321
330
|
from trajectopy.gui.models.entries import AbsoluteDeviationEntry
|
|
322
331
|
from trajectopy.gui.models.selection import ResultSelection
|
|
323
332
|
from trajectopy.gui.views import kml_dialog
|
|
@@ -338,7 +347,7 @@ class TestKmlGui(unittest.TestCase):
|
|
|
338
347
|
mock.patch.object(kml_dialog.KmlExportDialog, "exec", new=choose),
|
|
339
348
|
mock.patch("trajectopy.gui.managers.ui_manager.save_file_dialog", return_value=path),
|
|
340
349
|
):
|
|
341
|
-
|
|
350
|
+
_ui_manager().handle_request(request)
|
|
342
351
|
legend = ET.parse(path).getroot().find("kml:Document/kml:Folder/kml:name", NS)
|
|
343
352
|
self.assertEqual(legend.text, "Yaw deviation [°]")
|
|
344
353
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "5.1.2"
|
|
@@ -14,7 +14,7 @@ from trajectopy.gui.managers.requests import (
|
|
|
14
14
|
UIRequest,
|
|
15
15
|
generic_request_handler,
|
|
16
16
|
)
|
|
17
|
-
from trajectopy.gui.models.entries import ResultEntry, TrajectoryEntry
|
|
17
|
+
from trajectopy.gui.models.entries import AbsoluteDeviationEntry, ResultEntry, TrajectoryEntry
|
|
18
18
|
from trajectopy.gui.models.selection import ResultSelection, TrajectorySelection
|
|
19
19
|
from trajectopy.gui.worker import BackgroundWorker
|
|
20
20
|
from trajectopy.io.rosbag import trajectories_from_rosbag
|
|
@@ -31,6 +31,7 @@ class FileManager(QObject):
|
|
|
31
31
|
- Write trajectory files
|
|
32
32
|
- Read result files
|
|
33
33
|
- Write result files
|
|
34
|
+
- Write KML files (trajectory or ATE result)
|
|
34
35
|
|
|
35
36
|
"""
|
|
36
37
|
|
|
@@ -48,6 +49,7 @@ class FileManager(QObject):
|
|
|
48
49
|
FileRequestType.WRITE_TRAJ: self.write_trajectory,
|
|
49
50
|
FileRequestType.READ_RES: self.read_result_files,
|
|
50
51
|
FileRequestType.WRITE_RES: self.write_result,
|
|
52
|
+
FileRequestType.WRITE_KML: self.write_kml,
|
|
51
53
|
}
|
|
52
54
|
|
|
53
55
|
@Slot(FileRequest)
|
|
@@ -113,3 +115,13 @@ class FileManager(QObject):
|
|
|
113
115
|
def write_result(self, request: FileRequest) -> None:
|
|
114
116
|
result_entry = request.result_selection.entries[0]
|
|
115
117
|
result_entry.to_file(request.file_list[0])
|
|
118
|
+
|
|
119
|
+
def write_kml(self, request: FileRequest) -> None:
|
|
120
|
+
"""Google Earth export of the selected ATE result, or of the selected trajectory if no result is selected."""
|
|
121
|
+
if request.result_selection.entries:
|
|
122
|
+
ate_entry = request.result_selection.entries[0]
|
|
123
|
+
if not isinstance(ate_entry, AbsoluteDeviationEntry):
|
|
124
|
+
raise TypeError("Only ATE results can be exported to Google Earth.")
|
|
125
|
+
ate_entry.deviations.to_kml(request.file_list[0], **request.kml_options)
|
|
126
|
+
else:
|
|
127
|
+
request.trajectory_selection.entries[0].trajectory.to_kml(request.file_list[0], **request.kml_options)
|
|
@@ -21,6 +21,7 @@ class FileRequestType(Enum):
|
|
|
21
21
|
WRITE_TRAJ = auto()
|
|
22
22
|
READ_RES = auto()
|
|
23
23
|
WRITE_RES = auto()
|
|
24
|
+
WRITE_KML = auto()
|
|
24
25
|
|
|
25
26
|
|
|
26
27
|
class PlotRequestType(Enum):
|
|
@@ -125,6 +126,7 @@ class FileRequest(DeepCopyRequest):
|
|
|
125
126
|
trajectory_selection: TrajectorySelection = field(default_factory=TrajectorySelection)
|
|
126
127
|
result_selection: ResultSelection = field(default_factory=ResultSelection)
|
|
127
128
|
id_list: list[str] = field(default_factory=list)
|
|
129
|
+
kml_options: dict[str, Any] = field(default_factory=dict) # WRITE_KML, see trajectopy.io.kml.write_kml
|
|
128
130
|
|
|
129
131
|
|
|
130
132
|
@dataclass
|
|
@@ -18,7 +18,7 @@ from trajectopy.gui.managers.requests import (
|
|
|
18
18
|
generic_request_handler,
|
|
19
19
|
)
|
|
20
20
|
from trajectopy.gui.models.entries import AbsoluteDeviationEntry, AlignmentEntry
|
|
21
|
-
from trajectopy.gui.models.selection import TrajectorySelection
|
|
21
|
+
from trajectopy.gui.models.selection import ResultSelection, TrajectorySelection
|
|
22
22
|
from trajectopy.gui.utils import (
|
|
23
23
|
read_file_dialog,
|
|
24
24
|
save_file_dialog,
|
|
@@ -229,13 +229,15 @@ class UIManager(QObject):
|
|
|
229
229
|
return
|
|
230
230
|
if not (selected_file := save_file_dialog(self._dialog_parent(), file_filter="Google Earth (*.kml)")):
|
|
231
231
|
return
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
request.trajectory_selection
|
|
237
|
-
|
|
238
|
-
|
|
232
|
+
self.file_request.emit(
|
|
233
|
+
FileRequest(
|
|
234
|
+
type=FileRequestType.WRITE_KML,
|
|
235
|
+
file_list=[selected_file],
|
|
236
|
+
trajectory_selection=request.trajectory_selection if ate_entry is None else TrajectorySelection(),
|
|
237
|
+
result_selection=ResultSelection(entries=[ate_entry]) if ate_entry is not None else ResultSelection(),
|
|
238
|
+
kml_options=dialog.options(),
|
|
239
|
+
)
|
|
240
|
+
)
|
|
239
241
|
|
|
240
242
|
def _dialog_parent(self) -> QtWidgets.QWidget | None:
|
|
241
243
|
parent = self.parent()
|
|
@@ -104,7 +104,10 @@ class PreviewPlot3D(QtWidgets.QWidget):
|
|
|
104
104
|
all_xyz.append(xyz)
|
|
105
105
|
levels = np.nan_to_num(np.clip((ate - lower) / (upper - lower), 0.0, 1.0))
|
|
106
106
|
colors = style.VALUE_COLORMAP.map(levels, mode=pg.ColorMap.FLOAT)
|
|
107
|
-
|
|
107
|
+
# opaque instead of the default additive blending, which saturates stacked points to white
|
|
108
|
+
self._view.addItem(
|
|
109
|
+
gl.GLScatterPlotItem(pos=xyz, color=colors, size=MARKER_SIZE, pxMode=True, glOptions="opaque")
|
|
110
|
+
)
|
|
108
111
|
|
|
109
112
|
self._colorbar.setLevels(values=(lower, upper))
|
|
110
113
|
fit_colorbar_axis(self._colorbar, lower, upper)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "5.1.1"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/alignment/egrad_interface.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/cubic_approximation.py
RENAMED
|
File without changes
|
{trajectopy-5.1.1 → trajectopy-5.1.2}/trajectopy/processing/lib/approximation/line_approximation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|