Skip to content

Conversation

@lbartoletti
Copy link
Member

@lbartoletti lbartoletti commented Jan 12, 2026

Description

This PR is the extraction of the CORE part of the free-forms/NURBS functionality. I have made clean commits again, incorporating comments from @nyalldawson and @rouault . I hope I haven't made any mistakes in my multiple rebases/conflicts...

The other parts will be opened after.

Thank you again for your reviews and positive comments on the previous PR 🙏 💗 .

I am leaving #64358 open for overview and documentation purposes.

Sponsored by Stadt Frankfurt am Main

@github-actions github-actions bot added this to the 4.0.0 milestone Jan 12, 2026
@nyalldawson
Copy link
Collaborator

@lbartoletti

This PR is the extraction of the CORE part of the free-forms/NURBS functionality

Thank you! I'll review ASAP

@nyalldawson
Copy link
Collaborator

Ok, I've re-reviewed and copied over the outstanding comments from the original PR which still need action.

@github-actions
Copy link
Contributor

github-actions bot commented Jan 12, 2026

🪟 Windows Qt6 builds

Download Windows Qt6 builds of this PR for testing.
(Built from commit 141805e)

🍎 MacOS Qt6 builds

Download MacOS Qt6 builds of this PR for testing.
This installer is not signed, control+click > open the app to avoid the warning
(Built from commit 141805e)

@lbartoletti lbartoletti force-pushed the feature/add_nurbscurve_core_part branch from 0113519 to 95e2aeb Compare January 13, 2026 13:03
@github-actions
Copy link
Contributor

Tests failed for Qt 6 (ALL_BUT_PROVIDERS - fedora)

One or more tests failed using the build from commit 95e2aeb

layout_export

layout_export

Test failed at test_layout_export at tests/src/python/test_selective_masking.py:1161

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export/layout_export.png (found 8 pixels different)

layout_export_2_sources_masking

layout_export_2_sources_masking

Test failed at test_layout_export_2_sources_masking at tests/src/python/test_selective_masking.py:1533

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_2_sources_masking/layout_export_2_sources_masking.png (found 6 pixels different)

layout_export_w_blend_mode

layout_export_w_blend_mode

Test failed at test_layout_export_w_label_blend_mode at tests/src/python/test_selective_masking.py:1236

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_w_blend_mode/layout_export_w_blend_mode.png (found 287 pixels different)

layout_export_w_raster

layout_export_w_raster

Test failed at test_layout_export_w_raster at tests/src/python/test_selective_masking.py:1327

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_w_raster/layout_export_w_raster.png (found 6 pixels different)

layout_export_markerline_masked

layout_export_markerline_masked

Test failed at test_markerline_masked at tests/src/python/test_selective_masking.py:1817

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked.png (found 8 pixels different)

The full test report (included comparison of rendered vs expected images) can be found here.

Further documentation on the QGIS test infrastructure can be found in the Developer's Guide.

@github-actions
Copy link
Contributor

Tests failed for Qt 6 (ALL_BUT_PROVIDERS - ubuntu)

One or more tests failed using the build from commit 95e2aeb

layout_export

layout_export

Test failed at test_layout_export at tests/src/python/test_selective_masking.py:1161

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export/layout_export.png (found 8 pixels different)

layout_export_2_sources_masking

layout_export_2_sources_masking

Test failed at test_layout_export_2_sources_masking at tests/src/python/test_selective_masking.py:1533

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_2_sources_masking/layout_export_2_sources_masking.png (found 6 pixels different)

layout_export_w_blend_mode

layout_export_w_blend_mode

Test failed at test_layout_export_w_label_blend_mode at tests/src/python/test_selective_masking.py:1236

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_w_blend_mode/layout_export_w_blend_mode.png (found 287 pixels different)

layout_export_w_raster

layout_export_w_raster

Test failed at test_layout_export_w_raster at tests/src/python/test_selective_masking.py:1327

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_w_raster/layout_export_w_raster.png (found 6 pixels different)

layout_export_markerline_masked

layout_export_markerline_masked

Test failed at test_markerline_masked at tests/src/python/test_selective_masking.py:1817

Rendered image did not match tests/testdata/control_images/selective_masking/layout_export_markerline_masked/layout_export_markerline_masked.png (found 8 pixels different)

The full test report (included comparison of rendered vs expected images) can be found here.

Further documentation on the QGIS test infrastructure can be found in the Developer's Guide.

@lbartoletti lbartoletti force-pushed the feature/add_nurbscurve_core_part branch 4 times, most recently from 269b5fa to 6fea194 Compare January 13, 2026 17:15
@nyalldawson
Copy link
Collaborator

LGTM -- except for one last comment, and the selective masking control image changes. Can you replace with the images with test mask updates instead?

@lbartoletti lbartoletti force-pushed the feature/add_nurbscurve_core_part branch from 6fea194 to 48c735d Compare January 14, 2026 10:43
@uclaros
Copy link
Contributor

uclaros commented Jan 14, 2026

It seems to me that the changes in

qgis.h
qgspointlocator.h
qgspointlocator.cpp
qgssnappingconfig.cpp
qgssnappingutils.cpp
qgssettingsregistrycore.h
qgssettingsregistrycore.cpp

should go in a follow up PR related to digitizing, also subject to discussion on the promised upcoming QEP.

It would also be helpful for fellow reviewers if you refrained from force pushing during the review process.

@lbartoletti
Copy link
Member Author

LGTM -- except for one last comment, and the selective masking control image changes. Can you replace with the images with test mask updates instead?

I did it, I think, it's ok with my last commits.

@lbartoletti
Copy link
Member Author

Many thanks to both of you @nyalldawson @rouault, for your careful review.

I’m sorry I missed some of your remarks and for the mess I created while juggling merges and conflicts.

@nyalldawson
Copy link
Collaborator

@lbartoletti

I did it, I think, it's ok with my last commits.

Was this commit pushed? I still see the replacement control images, not masks.

Otherwise it's a +1 to merge from me. Lovely work here, adding a new geometry class like this is very tricky 💯

@nyalldawson
Copy link
Collaborator

@lbartoletti looks like the control image changes are still here -- can you revert those and leave JUST the mask updates?

@lbartoletti lbartoletti force-pushed the feature/add_nurbscurve_core_part branch from 9cbaa81 to 6d70287 Compare January 15, 2026 06:43
@nyalldawson
Copy link
Collaborator

Thanks @lbartoletti -- nothing else from me!

@lbartoletti
Copy link
Member Author

@lbartoletti

I did it, I think, it's ok with my last commits.

Was this commit pushed? I still see the replacement control images, not masks.

@lbartoletti looks like the control image changes are still here -- can you revert those and leave JUST the mask updates?

Ah, indeed! it's fixup. Thanks!

Otherwise it's a +1 to merge from me. Lovely work here, adding a new geometry class like this is very tricky 💯

Many thanks 😊

And thanks again for your review with even!

@uclaros
Copy link
Contributor

uclaros commented Jan 15, 2026

It seems to me that the changes in

qgis.h
qgspointlocator.h
qgspointlocator.cpp
qgssnappingconfig.cpp
qgssnappingutils.cpp
qgssettingsregistrycore.h
qgssettingsregistrycore.cpp

should go in a follow up PR related to digitizing, also subject to discussion on the promised upcoming QEP.

Can I please have a comment regarding this?

@lbartoletti
Copy link
Member Author

It seems to me that the changes in

qgis.h
qgspointlocator.h
qgspointlocator.cpp
qgssnappingconfig.cpp
qgssnappingutils.cpp
qgssettingsregistrycore.h
qgssettingsregistrycore.cpp

should go in a follow up PR related to digitizing, also subject to discussion on the promised upcoming QEP.

Can I please have a comment regarding this?

Sure!
Just to clarify the scope: I committed to separating the core from the GUI. This PR covers the core part.

Unfortunately, some parts are "intertwined". But after looking at the commits, I can remove these two,
cb584ff and b03f273, and remove enum class NurbsMode and CaptureTechnique::NurbsCurve from qgis.h.
This will change other parts as well.
I let nyall ask me what to do since he have made a constructive review and already have validated the PR

@uclaros
Copy link
Contributor

uclaros commented Jan 16, 2026

Unfortunately, some parts are "intertwined". But after looking at the commits, I can remove these two,
cb584ff and b03f273, and remove enum class NurbsMode and CaptureTechnique::NurbsCurve from qgis.h.

I'm sorry I was not clear regarding qgis.h, obviously the changes to Qgis::WkbType are absolutely required. To clarify, let's limit this to enum class NurbsMode, CaptureTechnique::NurbsCurve and SnappingType::ControlPoint and their usages. I don't think the changes to the rest of the files mentioned are "intertwined" with other parts and could be removed.
It would be great if you could handle this!

@lbartoletti
Copy link
Member Author

ok, done

@lbartoletti lbartoletti self-assigned this Jan 19, 2026
@lbartoletti lbartoletti merged commit e905ef7 into qgis:master Jan 20, 2026
28 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants