Immediately resolve complement operators for regions #3145
Merged
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.
Description
This PR changes how the the
~
operator works on regions. By implementing the__invert__
method on theIntersection
andUnion
classes, De Morgan's laws are always immediately applied, which means that you won't end up with~
inside an XML file.Along with this change, I've simplified the handling of the unary
-
and+
operators on some composite surfaces. For example, forXConeOneSided
the__neg__
and__pos__
methods were both implemented. However,CompositeSurface
has a default__pos__
method that just takes the complement of whatever__neg__
returns. With the improvement in how complements are handled, this means that we don't need to implement__pos__
for composite surfaces and we still end up with an expression that doesn't have~
in it.Checklist
I have run clang-format (version 15) on any C++ source files (if applicable)