Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Align viewbox center with vacuum map center #433

Merged
merged 6 commits into from
May 30, 2024

Conversation

philek
Copy link
Contributor

@philek philek commented Feb 21, 2024

This is an alternative approach for supporting the Vacuum Map card calibration from DeebotUniverse/Deebot-4-Home-Assistant#321. This will make the calibration much simpler. Object coordinates inside the SVG are vacuum coordinates divided by 50 with y axis flipped. That information, combined with the viewbox, will be enough to translate the vacuum coordinates to a position on even a scaled image on the frontend.

This has the benefit over my previous PR of not changing the interface. The calibration points can be static and added outside of this library.

Summary by CodeRabbit

  • New Features

    • Improved map visualization with enhanced precision using the new ViewBoxFloat class.
  • Bug Fixes

    • Enhanced accuracy in map subset, trace, and position calculations.
  • Tests

    • Added and updated tests to cover new methods and ensure reliability of map functionality.
  • Refactor

    • Streamlined code for better performance and maintainability in map-related operations.

Copy link

codecov bot commented Feb 21, 2024

Codecov Report

Attention: Patch coverage is 86.66667% with 2 lines in your changes are missing coverage. Please review.

Project coverage is 86.33%. Comparing base (d12ef19) to head (6cca195).
Report is 3 commits behind head on dev.

Files Patch % Lines
deebot_client/map.py 86.66% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##              dev     #433      +/-   ##
==========================================
+ Coverage   85.71%   86.33%   +0.61%     
==========================================
  Files          87       87              
  Lines        3262     3270       +8     
  Branches      530      532       +2     
==========================================
+ Hits         2796     2823      +27     
+ Misses        414      395      -19     
  Partials       52       52              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@edenhaus
Copy link
Contributor

Thanks for the PR. I like this more than your previous one :)
Can you please link to the PR, which implements the calibration points in the custom card?

@philek
Copy link
Contributor Author

philek commented Feb 28, 2024

Added a couple more tests.

@philek philek force-pushed the feature/align_viewbox_to_map branch from 93748e5 to 7d3231b Compare May 8, 2024 16:38
Filip Rutkowski added 2 commits May 11, 2024 20:22
This removes the need to adjust all the coordinates by the bounding box. It is enough to divide by 50.
@philek philek force-pushed the feature/align_viewbox_to_map branch from 7d3231b to 07ee8f3 Compare May 11, 2024 20:34
@philek
Copy link
Contributor Author

philek commented May 11, 2024

Rebased on latest dev.

@philek
Copy link
Contributor Author

philek commented May 18, 2024

I'm not familiar with Codecov. Does that failure require a re-run?

@edenhaus
Copy link
Contributor

As this PR is only needed for PiotrMachowski/lovelace-xiaomi-vacuum-map-card. What's the status there? Can the card used with these changes only, or does the card itself need changes?

@edenhaus
Copy link
Contributor

@coderabbitai review

Copy link
Contributor

coderabbitai bot commented May 20, 2024

Actions Performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Contributor

coderabbitai bot commented May 20, 2024

Warning

Rate limit exceeded

@edenhaus has exceeded the limit for the number of commits or files that can be reviewed per hour. Please wait 22 minutes and 56 seconds before requesting another review.

How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

Commits

Files that changed from the base of the PR and between cd1d35e and 6cca195.

Walkthrough

The recent updates to the deebot_client/map.py and its corresponding tests involve significant refactoring and restructuring for better code clarity and efficiency. Key changes include the introduction of the ViewBoxFloat class for consistent float value conversion, splitting the _calc_value function into more specific functions, and removing redundant classes and parameters. The tests have been updated to reflect these changes, ensuring robust validation of the new code structure.

Changes

Files Change Summaries
deebot_client/map.py Refactored map manipulation and visualization, introduced ViewBoxFloat, split _calc_value function, removed redundant classes and parameters, updated SVG handling functions.
tests/test_map.py Updated tests to align with refactored code, added new test functions, and modified existing test parameters and logic.

Sequence Diagram(s) (Beta)

sequenceDiagram
    participant User
    participant MapClient
    participant ViewBoxFloat
    participant Util

    User->>MapClient: Request map visualization
    MapClient->>ViewBoxFloat: Convert values to float
    ViewBoxFloat-->>MapClient: Return float values
    MapClient->>Util: Decompress data
    Util-->>MapClient: Return decompressed data
    MapClient->>User: Return SVG map visualization
Loading

Poem

In code's vast land, a rabbit hops with glee,
Refactoring maps, making them float like the sea.
Classes trimmed, functions split anew,
Tests now stronger, like morning dew.
With SVGs clear, and logic bright,
The map's path shines in digital light. 🚀


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai generate interesting stats about this repository and render them as a table.
    • @coderabbitai show all the console.log statements in this repository.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (invoked as PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Additionally, you can add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.

CodeRabbit Configration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Out of diff range and nitpick comments (1)
deebot_client/map.py (1)

Line range hint 420-430: The function _get_svg_traces_path needs test coverage for the added line.

- if len(self._map_data.trace_values) > 0:
+ if self._map_data.trace_values:

Ensure this line is covered by unit tests to verify correct functionality.

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 4d6617d and 07ee8f3.
Files selected for processing (2)
  • deebot_client/map.py (11 hunks)
  • tests/test_map.py (8 hunks)
Additional Context Used
GitHub Check Runs (1)
codecov/patch failure (2)

deebot_client/map.py: [warning] 562-562: deebot_client/map.py#L562
Added line #L562 was not covered by tests


deebot_client/map.py: [warning] 615-615: deebot_client/map.py#L615
Added line #L615 was not covered by tests

Additional comments not posted (16)
tests/test_map.py (9)

56-56: Good simplification of the _calc_point function test.


77-78: The test for _calc_point_in_viewbox correctly asserts the expected results.


177-183: The test for compact_path correctly verifies the SVG path compacting logic.


263-263: The test for _get_svg_subset correctly handles different types of map subsets.


305-311: The test for _get_svg_positions effectively checks the SVG element creation based on positions.


44-46: Ensure test coverage for edge cases in _calc_point.


61-65: Consider adding more diverse scenarios to _test_calc_point_in_viewbox_data to cover edge cases.


Line range hint 198-219: Consider adding more test cases to cover additional scenarios in test_points_to_svg_path.


144-170: Ensure that the mock for decompress_7z_base64_data is correctly utilized in the test for _get_svg_traces_path.

Verification successful

The mock for decompress_7z_base64_data is correctly utilized in the test for _get_svg_traces_path. The method _update_trace_points within the Map class calls decompress_7z_base64_data, and this method is invoked in the test function test_Map_svg_traces_path.

  • tests/test_map.py: The mock setup for decompress_7z_base64_data is present in the test function test_Map_svg_traces_path.
  • deebot_client/map.py: The method _update_trace_points calls decompress_7z_base64_data.
Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct usage of the mock in `_get_svg_traces_path`.

# Test: Search for the mock usage in the test. Expect: Correct setup and utilization of the mock.
rg --type python $'decompress_7z_base64_data'

Length of output: 75



Script:

#!/bin/bash
# Description: Verify the correct usage of the mock in `_get_svg_traces_path`.

# Test: Search for the mock usage in the test. Expect: Correct setup and utilization of the mock.
rg --type py 'decompress_7z_base64_data'

Length of output: 680



Script:

#!/bin/bash
# Description: Verify the correct usage of the mock in `_get_svg_traces_path`.

# Step 1: Search for the `_get_svg_traces_path` method implementation.
ast-grep --lang python --pattern $'def _get_svg_traces_path($_) {
  $$$
}' --json

# Step 2: Search for the usage of `decompress_7z_base64_data` within the `_get_svg_traces_path` method.
rg '_get_svg_traces_path' --context 10 --type py

Length of output: 4049



Script:

#!/bin/bash
# Description: Verify the correct usage of the mock in `_get_svg_traces_path`.

# Step 1: Search for the `Map` class implementation.
ast-grep --lang python --pattern $'class Map($_) {
  $$$
}' --json

# Step 2: Search for the usage of `decompress_7z_base64_data` within the `Map` class methods.
rg 'decompress_7z_base64_data' --context 10 --type py

Length of output: 9204

deebot_client/map.py (7)

219-221: The refactoring of _calc_point simplifies the function and improves readability.


224-234: The implementation of _calc_point_in_viewbox correctly handles the bounding of points within the specified viewbox.


266-276: The function _get_svg_positions effectively translates positions into SVG elements.


537-549: The setup of the SVG map's viewBox and background image is well-implemented.


566-566: The placement of positions within the SVG map is correctly handled.


615-615: The update logic in update_points for MapPiece needs test coverage for the added line.

- if self._crc32 != old_crc32:
+ if self._crc32 != old_crc32 and self.in_use:

Ensure this line is covered by unit tests to verify correct functionality.


557-562: Ensure that the subsets are correctly transformed into SVG elements.

Verification successful

The _get_svg_subset function correctly transforms subsets into SVG elements by converting the subset coordinates into points and then creating either a Path or a Polygon based on the number of points. This ensures that the subsets are properly represented as SVG elements.

  • The function handles subsets with exactly two points by creating a Path with specific stroke properties.
  • For subsets with more than two points, it creates a Polygon with appropriate fill and stroke properties.

This confirms that the subsets are correctly transformed into SVG elements.

Scripts Executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the correct transformation of subsets into SVG elements.

# Test: Search for the transformation logic in the code. Expect: Correct handling and transformation logic.
rg --type python $'_get_svg_subset'

Length of output: 65



Script:

#!/bin/bash
# Description: Verify the correct transformation of subsets into SVG elements.

# Test: Search for the transformation logic in the code. Expect: Correct handling and transformation logic.
rg '_get_svg_subset'

Length of output: 380



Script:

#!/bin/bash
# Description: Extract the definition of `_get_svg_subset` to verify its transformation logic.

# Extract the function definition from the codebase.
rg --multiline --multiline-dotall --context 10 'def _get_svg_subset' deebot_client/map.py

Length of output: 603



Script:

#!/bin/bash
# Description: Extract the complete definition of `_get_svg_subset` to verify its transformation logic.

# Extract the complete function definition from the codebase.
rg --multiline --multiline-dotall --context 50 'def _get_svg_subset' deebot_client/map.py

Length of output: 3276

@edenhaus edenhaus added the pr: refactor PR with code refactoring label May 21, 2024
tests/test_map.py Outdated Show resolved Hide resolved
@philek philek force-pushed the feature/align_viewbox_to_map branch from 07ee8f3 to 4ce9449 Compare May 27, 2024 20:03
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Outside diff range and nitpick comments (2)
deebot_client/map.py (2)

20-20: Ensure consistent import organization.

Organize imports in a consistent manner. Group and alphabetize them to improve readability.


Line range hint 388-420: Improve logging for trace updates.

Enhance the logging in _update_trace_points to include more detailed information about the trace points being processed, which could be useful for debugging.

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 07ee8f3 and 4ce9449.
Files selected for processing (2)
  • deebot_client/map.py (11 hunks)
  • tests/test_map.py (7 hunks)
Additional Context Used
Path-based Instructions (1)
tests/test_map.py (1)

Pattern tests/**.py: Use pytest as the test framework, not unittest.

Additional comments not posted (7)
tests/test_map.py (5)

65-71: Ensure test coverage for edge cases.

Consider adding more test cases to cover edge cases and null values for the test_calc_point function to ensure robustness.


83-93: Good use of parameterized tests.

The use of pytest.mark.parametrize for test_calc_point_in_viewbox is effective for testing multiple scenarios efficiently.


159-186: Mocking external dependencies correctly.

The use of patch to mock decompress_7z_base64_data in test_Map_svg_traces_path is appropriate to isolate the test environment from external dependencies.


Line range hint 257-272: Clarify the expected behavior in test cases.

The test test_get_svg_subset should include comments or documentation to clarify the expected behavior, especially how the coordinates translate to SVG paths or polygons.


311-326: Validate the structure of SVG elements.

In test_get_svg_positions, consider adding assertions to validate the structure and attributes of the SVG elements being created, not just their count and type.

deebot_client/map.py (2)

266-276: Validate SVG element creation.

In _get_svg_positions, ensure that the SVG elements created are correctly formatted and contain all necessary attributes for proper rendering.


537-566: Ensure accurate SVG map generation.

Verify that the SVG map generated in get_svg_map accurately represents the map data, especially the viewBox calculations and element placements.

tests/test_map.py Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
@philek
Copy link
Contributor Author

philek commented May 28, 2024

As this PR is only needed for PiotrMachowski/lovelace-xiaomi-vacuum-map-card. What's the status there? Can the card used with these changes only, or does the card itself need changes?

In its current state it's very hard to calibrate the card correctly. With these changes it can be done quite easily by taking the min_x, min_y from the viewbox, even if done manually. I'm focusing on this part first.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review Details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits Files that changed from the base of the PR and between 4ce9449 and de7a37e.
Files selected for processing (1)
  • tests/test_map.py (7 hunks)
Files skipped from review as they are similar to previous changes (1)
  • tests/test_map.py

tests/test_map.py Outdated Show resolved Hide resolved
tests/test_map.py Outdated Show resolved Hide resolved
tests/test_map.py Outdated Show resolved Hide resolved
tests/test_map.py Outdated Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
deebot_client/map.py Outdated Show resolved Hide resolved
tests/test_map.py Outdated Show resolved Hide resolved
@edenhaus
Copy link
Contributor

I tested your change successfully, and the map looks correct :) Waiting for the last tweaks so I can merge it

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Outside diff range and nitpick comments (1)
deebot_client/map.py (1)

Line range hint 384-384: Define or import decompress_7z_base64_data.

+ from deebot_client.util import decompress_7z_base64_data

Also applies to: 611-611

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between de7a37e and d6463b5.

Files selected for processing (2)
  • deebot_client/map.py (10 hunks)
  • tests/test_map.py (7 hunks)
Files skipped from review as they are similar to previous changes (1)
  • tests/test_map.py
Additional context used
Ruff
deebot_client/map.py

20-20: deebot_client.util imported but unused


384-384: Undefined name decompress_7z_base64_data


611-611: Undefined name decompress_7z_base64_data

Additional comments not posted (5)
deebot_client/map.py (5)

219-221: The logic for calculating points aligns well with the PR objectives.


266-270: The function effectively uses the viewbox to position SVG elements, supporting the PR's calibration simplification.


Line range hint 416-426: The function correctly handles the generation of SVG paths for trace points, including appropriate scaling.


533-562: The function effectively compiles the SVG map, aligning the viewbox with the map's center as intended in the PR.


20-20: Remove unused import.

- from deebot_client import util

Likely invalid or redundant comment.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Review details

Configuration used: CodeRabbit UI
Review profile: CHILL

Commits

Files that changed from the base of the PR and between d6463b5 and cd1d35e.

Files selected for processing (2)
  • deebot_client/map.py (9 hunks)
  • tests/test_map.py (7 hunks)
Files not reviewed due to errors (1)
  • deebot_client/map.py (no review received)
Additional context used
Path-based instructions (1)
tests/test_map.py (1)

Pattern tests/**.py: Use pytest as the test framework, not unittest.

Learnings (1)
tests/test_map.py (1)
User: edenhaus
PR: DeebotUniverse/client.py#433
File: tests/test_map.py:5-5
Timestamp: 2024-05-28T11:23:47.409Z
Learning: Mocks from `unittest.mock` are allowed in the `tests/test_map.py` file as per user preference.
Additional comments not posted (5)
tests/test_map.py (5)

18-18: Ensure the Scale class is used appropriately in the tests.

Verification successful

The Scale class is used in the tests/test_map.py file, specifically on lines 18 and 20. The usage appears to be appropriate within the context of the tests.

  • tests/test_map.py:
    • Line 18: Scale,
    • Line 20: Scale(0.2, -0.2),
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the usage of the `Scale` class in the tests.

# Test: Search for the `Scale` class usage. Expect: Proper usage in context.
rg --type python $'Scale'

Length of output: 55



Script:

#!/bin/bash
# Description: Verify the usage of the `Scale` class in the tests.

# Test: Search for the `Scale` class usage. Expect: Proper usage in context.
rg 'Scale' --glob '*.py'

Length of output: 164


22-22: Ensure the ViewBoxSpec class is used appropriately in the tests.

Verification successful

The ViewBoxSpec class is used appropriately in the tests, as evidenced by multiple instances in tests/test_map.py.

  • tests/test_map.py: Multiple lines show the usage of ViewBoxSpec.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the usage of the `ViewBoxSpec` class in the tests.

# Test: Search for the `ViewBoxSpec` class usage. Expect: Proper usage in context.
rg --type python $'ViewBoxSpec'

Length of output: 61



Script:

#!/bin/bash
# Description: Verify the usage of the `ViewBoxSpec` class in the tests.

# Test: Search for the `ViewBoxSpec` class usage. Expect: Proper usage in context.
rg --type py 'ViewBoxSpec'

Length of output: 906


43-43: Ensure the ViewBoxFloat class is used appropriately in the tests.

Verification successful

The ViewBoxFloat class is used appropriately in the tests and other parts of the codebase.

  • tests/test_map.py: The class is used in test cases to calculate points and get SVG positions.
  • deebot_client/map.py: The class is defined and used in functions to handle view box calculations.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the usage of the `ViewBoxFloat` class in the tests.

# Test: Search for the `ViewBoxFloat` class usage. Expect: Proper usage in context.
rg --type python $'ViewBoxFloat'

Length of output: 62



Script:

#!/bin/bash
# Description: Verify the usage of the `ViewBoxFloat` class in the tests.

# Test: Search for the `ViewBoxFloat` class usage. Expect: Proper usage in context.
rg --type py 'ViewBoxFloat'

Length of output: 559


45-45: Ensure the _calc_point_in_viewbox function is used appropriately in the tests.

Verification successful

Ensure the _calc_point_in_viewbox function is used appropriately in the tests.

  • tests/test_map.py contains multiple references to _calc_point_in_viewbox, including its usage in a test function.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the usage of the `_calc_point_in_viewbox` function in the tests.

# Test: Search for the `_calc_point_in_viewbox` function usage. Expect: Proper usage in context.
rg --type python $'_calc_point_in_viewbox'

Length of output: 72



Script:

#!/bin/bash
# Description: Verify the usage of the `_calc_point_in_viewbox` function in the tests.

# Test: Search for the `_calc_point_in_viewbox` function usage. Expect: Proper usage in context.
rg --type py '_calc_point_in_viewbox'

Length of output: 557


20-20: Ensure the Use class is used appropriately in the tests.

Verification successful

Ensure the Use class is used appropriately in the tests.

  • The Use class is utilized in tests/test_map.py in various contexts, such as initializing instances with different parameters and being part of expected lists.
Scripts executed

The following scripts were executed for the analysis:


Script:

#!/bin/bash
# Description: Verify the usage of the `Use` class in the tests.

# Test: Search for the `Use` class usage. Expect: Proper usage in context.
rg --type python $'Use'

Length of output: 53



Script:

#!/bin/bash
# Description: Verify the usage of the `Use` class in the tests.

# Test: Search for the `Use` class usage. Expect: Proper usage in context.
rg --type py 'Use'

Length of output: 710

@edenhaus edenhaus force-pushed the feature/align_viewbox_to_map branch from cd1d35e to 6cca195 Compare May 30, 2024 07:46
Copy link
Contributor

@edenhaus edenhaus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @philek 👍

@edenhaus edenhaus merged commit cd36fab into DeebotUniverse:dev May 30, 2024
8 checks passed
@philek
Copy link
Contributor Author

philek commented May 31, 2024

Thank you for finishing it off :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr: refactor PR with code refactoring
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants