-
Notifications
You must be signed in to change notification settings - Fork 7
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
Edge identity #240
Open
pasbi
wants to merge
180
commits into
main
Choose a base branch
from
edge-identity
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Edge identity #240
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Conflicts: # src/properties/splineproperty.cpp # src/properties/splineproperty.h # src/serializers/abstractserializer.h # src/serializers/jsonserializer.cpp # src/serializers/jsonserializer.h
That requires some re-implementation of QPainterPath features, like `constains`. The usage of `QPainterPath::operator-` has been replaced by `Face::operator^` because it's easier to implement and gives the same result if one path contains the other.
# Conflicts: # src/path/face.cpp # src/path/face.h # src/properties/CMakeLists.txt # src/properties/splineproperty.cpp # src/propertytypeenum.h # src/renderers/offscreenrenderer.cpp # src/variant.h
improves error messages if it's used in the wrong way.
don't expect options parameter, options are the same for all tests.
Face operator^ is principally impossible to implement because edges don't have an identity (there might be multiple indistinguishable edges between two points). Therefore, PathVector::faces is simpler now. It's still not correct, but the (now removed) complicated implementation (employing operator^) wouldn't make it better. Simple and wrong is better than complicated and wrong. Fixing it properly probably requires a complete change of paradigms (i.e., identifiable edges)
There is no straight forward way to compute similarity of two points wrt. their normals because points can have arbitrary number of tangents.
Open
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Until now, edges did not have an identity but were defined to be the connection between two unique points (instances of
PathPoint
).There was a class
Edge
, but it was merely a descriptor of a connection of two points that could be copied around.Such an edge descriptor is unique because
PathPoint
s are unique perPath
and because there could only be oneEdge
between twoPathPoint
s within aPath
.Things become tricky when introducing joined points (without which faces would be impossible).
When
PathPoint
s are joined, they act as the same point, i.e., they not only coincidentally have the same position, also their selection is synchronized and they are not distinguished by certain algorithms.In this graph, the points
0
,2
and3
are joined and1
and5
are joined.Hence the graph exhibits two faces:
0--1--2
and3--4--5--3
.Note that the blue face only exists if the blue path is closed, i.e., if considering the joined points
0
and2
"the same".This is okay in the first place.
After all, joined points were introduced to close paths.
However, if we consider
0
and2
the same, then we cannot distinguish the two edges of the blue face anymore.We might apply some tricks considering direction, which becomes very cumbersome quickly.
This PR proposes a fundamentally different approach:
A
Path
does not own a sequence ofPathPoint
s but a sequence ofEdge
s.Those edges are not descriptors but they carry an identity.
Edge
s share ownership of twoPathPoint
s.That is, a
PathPoint
can be owned by more than oneEdge
, which makes the concept of joined points superfluous (implementing joined points makes a lot of noise in many places).Roadmap:
Edge
, changePath
and related classesPathPoint
s now).Ellipse
,Rectangle
, etc. toPathObject