Page 1 of 1

[Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Sun Jun 05, 2022 6:37 am
by jnxd
When deleting the geometry, internal geometries of (arcs of) ellipses, circles, and hyperbolas are also deleted. The case is different for Parabolas.
ellipse-vs-parabola-arc-delete.gif
ellipse-vs-parabola-arc-delete.gif (53.72 KiB) Viewed 2756 times
Found on (three additional commits not expected to change this behavior):

Code: Select all

OS: Manjaro Linux (GNOME/gnome)
Word size of FreeCAD: 64-bit
Version: 0.20.29035 +3 (Git)
Build type: Debug
Branch: sketcher-split-join-bsplines
Hash: 76d2847f5ce962f6a212c134fba0694d08a58e8d
Python 3.10.4, Qt 5.15.4, Coin 4.0.1, OCC 7.5.3
Locale: English/United States (en_US)
Installed mods: 
  * Curves 0.4.4
  * ProDarkThemePreferencePack 1.0.0

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Mon Jun 06, 2022 12:14 am
by chrisb
Confirmed.

Code: Select all

OS: macOS 10.16
Word size of FreeCAD: 64-bit
Version: 0.20.28774 (Git)
Build type: Release
Python 3.9.12, Qt 5.12.9, Coin 4.0.0, OCC 7.5.3
Locale: C/Default (C)

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Wed Jun 08, 2022 10:46 am
by openBrain
Confirmed.

As a side topic, is it me or arc of hyperbola creation is very weird ? I have strange behavior with some snapping to root on the 3rd click, then virtual segments (dark yellow ones) seem to be on the wrong side of the hyperbola ?
arcs.png
arcs.png (17.03 KiB) Viewed 2555 times

Code: Select all

OS: Ubuntu 21.04 (KDE/plasma)
Word size of FreeCAD: 64-bit
Version: 0.20.28838 (Git)
Build type: Debug
Branch: master
Hash: 8c984359ddef000f52b51ad70cd395f1a36629ee
Python 3.9.5, Qt 5.15.2, Coin 4.0.0, Vtk 7.1.1, OCC 7.5.2
Locale: French/France (fr_FR)

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Wed Jun 08, 2022 10:47 am
by openBrain
@abdullah may you have some insights on this ?

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Fri Jun 10, 2022 12:03 pm
by abdullah
jnxd wrote: Sun Jun 05, 2022 6:37 am The case is different for Parabolas.
There was a reason for this... out of the top of my head, I think it was related to the fact that (unlike the others), the line itself does not define the parabola beyond the points. In the others the endpoints of the line (major axis) cannot otherwise be constrained. In the parabola, you can delete the line and constraint the points. The line is not necessary (only a convenience).

However, it may well be not a good reason. I remember I doubted when deciding and decided not to. But I do not have a clear mind of ultimately why at this moment. Feel free to make an issue so that I can revisit it later (or if you want to take a look yourself, you are a very capable coder).
openBrain wrote: Wed Jun 08, 2022 10:46 am As a side topic, is it me or arc of hyperbola creation is very weird ? I have strange behavior with some snapping to root on the 3rd click, then virtual segments (dark yellow ones) seem to be on the wrong side of the hyperbola ?
I am not sure what you mean. The lines are the major axis (twice the major radius), from one branch of the hyperbola to where the other branch would be. The point is the center of the hyperbola. It looks like (a,b) here:

Image

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Fri Jun 10, 2022 12:44 pm
by jnxd
abdullah wrote: Fri Jun 10, 2022 12:03 pm However, it may well be not a good reason. I remember I doubted when deciding and decided not to. But I do not have a clear mind of ultimately why at this moment. Feel free to make an issue so that I can revisit it later (or if you want to take a look yourself, you are a very capable coder).
The issue is raised here: https://github.com/FreeCAD/FreeCAD/issues/6969.

Thing is: because the line is not technically part of "internal geometry" of the parabola, it doesn't get deleted if I delete the parabola. This is causing some malformed constraints when I try to split the parabolas like for any other curve. See https://github.com/FreeCAD/FreeCAD/pull/6971. If we do not want to remove this "axis", other alternatives are possible: we can add that axis to an internal geometry, or to search the edges for this geometry and manually delete this axis.

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Fri Jun 10, 2022 2:58 pm
by abdullah
jnxd wrote: Fri Jun 10, 2022 12:44 pm If we do not want to remove this "axis", other alternatives are possible: we can add that axis to an internal geometry, or to search the edges for this geometry and manually delete this axis.
Precisely that is the decision that needs to be made:
a) Delete the construction line (so that new parabolas are not created with this construction line); or
b) Add it to internal geometry, even when it is not (fully it).

Drawbacks
=========

The former has as a drawback that if the parabola axis needs to be constrained to an angle (for example), the user will have to create it. It is not convenient (I think).

The latter has as a drawback that then it will need to be checked everywhere where internal geometry is. We would need to ensure backward compatibility. Forward compatibility may be an issue (but I think that the next development cycle will have many of these forward compatibility issues).

Definitions
=========

While we can change definitions, it is important that we have actual definitions to call things consistently (and be able to understand each other, and manage the expectations of what we expect from FreeCAD). I think it is good to discuss about it.

Originally, "internal geometry" referred to implicitly constraining one complex geometry within another (so as to enable to constrain the complex one). There are no explicit constrains in internal geometry (well, there are those internal alignment constrains that are invisible to the user that does not change the corresponding checkbox in the constraint widget). This implicit hidden constraining, can generally not be (simply) achieved by conventional constraints.

A second consideration is the lifetime. Originally "internal geometry" was "construction geometry". It could be created and added and removed (very originally). This was unhandable and the "Expose/Hide internal geometry" toolbar button appeared. Then internal geometry was created directly with the shape.

One change I have in the pipeline is preventing deletion of internal geometry. This will also lead to the removal from the toolbar of the button to "Expose the internal geometry". After that, the internal geometry will match, from a user perspective, the definition "geometry that is created together with other geometry, and it is also only deleted when the other geometry is deleted".

So... soon internal geometry will meet two conditions:
1. Implicitly constrained into one (complex) geometry.
2. Matching the lifetime of the complex geometry.

Then in FreeCAD we have other compound geometries, which are formed by constraining together simple geometries, such as polygons. In that case:
1. We do not have a complex geometry.
2. Constraints are simple.
3. We use construction geometry that does not match the lifetime of the non-construction geometry (but without it the whole shape falls apart, if the shape is deleted the construction geometry makes no sense).

Here, making the construction geometry follow the compound (multiple elements) geometry would be overly complicated. I think this is the main reason to let it be as they are today.

The Parabola axis is somewhere in the middle. It is not implicitly constrained into one (complex geometry), because it is explicitly constrained to it. Yet, it refers to a complex geometry indirectly, and it does not create a major problem when treated as internal geometry... it is even helpful to constrain the Parabola...

... yet if we make an exception, are we discriminating the other geometries ? :lol: :lol: :lol: :lol:


Ok. It did not think it through, but there might be a third option. What if we stop enforcing the axis using normal sketcher constraints, we create a new implicit internal alignment constraint at sketcher level, then at solver level we internally use the solver constraints that would be used today. We could even call it FocalDistance...

... I need to think this through, but at least now you know what is in my mind.

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Fri Jun 10, 2022 3:39 pm
by jnxd
abdullah wrote: Fri Jun 10, 2022 2:58 pm Ok. It did not think it through, but there might be a third option. What if we stop enforcing the axis using normal sketcher constraints, we create a new implicit internal alignment constraint at sketcher level, then at solver level we internally use the solver constraints that would be used today. We could even call it FocalDistance...

... I need to think this through, but at least now you know what is in my mind.
Quite well elaborated, thanks. I'm going to steer along "remove the axis segment from constructrions" choice(s). The focus and the "midpoint" of the arc of parabola is always defined, so if we need any enforcement on axes we can simply create a line segment between those and go forward. This sounds like the least compatibility-breaking option I can think of.

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Fri Jun 10, 2022 5:11 pm
by abdullah
jnxd wrote: Fri Jun 10, 2022 3:39 pm
abdullah wrote: Fri Jun 10, 2022 2:58 pm Ok. It did not think it through, but there might be a third option. What if we stop enforcing the axis using normal sketcher constraints, we create a new implicit internal alignment constraint at sketcher level, then at solver level we internally use the solver constraints that would be used today. We could even call it FocalDistance...

... I need to think this through, but at least now you know what is in my mind.
Quite well elaborated, thanks. I'm going to steer along "remove the axis segment from constructrions" choice(s). The focus and the "midpoint" of the arc of parabola is always defined, so if we need any enforcement on axes we can simply create a line segment between those and go forward. This sounds like the least compatibility-breaking option I can think of.
That is ok as a first approximation that does not break anything. It also allows you to treat parabola uniformly with the other conics. If we end up implementing the "third option", then we adapt the code. Thanks!

Re: [Sketcher] Deleting arc of parabola doesn't delete internal geometry

Posted: Sun Jul 03, 2022 6:12 am
by abdullah
I did a short effort towards the "third option":
https://github.com/abdullahtahiriyo/Fre ... abola_axis

Caveats:
- There is no support to transform existing parabola construction axis to internal geometry. This can be done, but I am not sure it is better for forward compatibility or worse. Of course, it is backwards compatible.
- New parabolas are created with internal geometry axis (and constraints). There is no possible forward compatibility for this.

I think this gives consistency to the overall concept. Let me know your impressions.