This refactors a single solid rule checking code from using the solid
count directly to using well abstracted `isSingleSolidRuleSatisfied`
method. This makes code easier to read and is the basis for next step
which is allowing users to disable this checks.
* [PartDesign] Still a helix fix
If we don't break the helix path at each turns we get a vaild path for
MakePipe (solid) even with an angle.
* Decrease helix tests requirements
* Cleanup and switch to using MakePipe
* Cleanup unused include
* Use Frenet mode in building pipe
* Restore original code, add a control property
* Hide property, and init on new objects
* Restore prior behavior for legacy objects
* Clean up git blame; add missing move to keep helix same with new makePipe call
* Remove debug include
* Use doxygen syntax for deprecation comment
* Add unit tests; restore code for angled helixes; optimize zero angle helixes
* Lower test precision to accept platform variations
* Loosen more
* Correct restoration
* Tweak test volumes to match restored helix creation
* Restore helix generation parameter
* Fix test; delint
* Correct precision issue in PartDesign::AdditiveHelix
* Simplify getting the end wires
* Remove extraneous loop per @FlachyJoe
* Switch to using mkPS.Shape per @FlachyJoe
* Incorporate guarded efficiency improvement
Found via `codespell -q 3 -L aci,ake,aline,alle,alledges,alocation,als,ang,anid,apoints,ba,beginn,behaviour,bloaded,bottome,byteorder,calculater,cancelled,cancelling,cas,cascade,centimetre,childrens,childs,colour,colours,commen,connexion,currenty,dof,doubleclick,dum,eiter,elemente,ende,feld,finde,findf,freez,hist,iff,indicies,initialisation,initialise,initialised,initialises,initialisiert,inout,ist,kilometre,lod,mantatory,methode,metres,millimetre,modell,nd,noe,normale,normaly,nto,numer,oce,oder,ontop,orgin,orginx,orginy,ot,pard,parm,parms,pres,programm,que,rady,recurrance,rougly,seperator,serie,sinc,strack,substraction,te,thist,thru,tread,uint,unter,vertexes,wallthickness,whitespaces -S ./.git,*.po,*.ts,./ChangeLog.txt,./src/3rdParty,./src/Mod/Assembly/App/opendcm,./src/CXX,./src/zipios++,./src/Base/swig*,./src/Mod/Robot/App/kdl_cp,./src/Mod/Import/App/SCL,./src/WindowsInstaller,./src/Doc/FreeCAD.uml,./build/doc/SourceDocu`
* PartDesign: Improve orientation behavior for conical helices
As identified in the forum
https://forum.freecadweb.org/viewtopic.php?f=3&t=65136
The Freenet orientation mode does not give expected results for helices with cone angle.
By using an auxiliary helix that is axially offset it is guaranteed that the orientation frame
is always consistent with a cylindrical coordinate system.
Results will be the same as before when cone angle is 0.
By reusing the property docs as tooltip we avoid maintaining the same
information in two places. The propery descriptions have been made
translatable, too, to ensure a fully translatable UI.
The ground work for this was layed by the work on Issue 0002524, long
time ago: https://tracker.freecadweb.org/view.php?id=0002524
[PD]: Fix helix property visibility/writeability
* Hide irrelevant and internal helix properties
- The `HasBeenEdited` property is only used internally to check whether to
fill certain other parameters with initial values. So there is no need
show it in the property grid at all.
- The `Outside` property is only used in the subtractive helix and thus
hidden for the additive helix.
* Make derived helix properties read-only
Depending on the input mode, some properties are primary input, others
are derived. Prior to this change, also the derived properties have been
writable but their values are ignored and overwritten on the next
recompute. Now, when changing the input mode, only the primary input
props are writable.
* Reorder some helix properties
This change puts the reference axis and input mode at the top to become
more prominent. Only "Base" and "Axis" are higher in the list for
consistency with the other axis-based features.
Depending on the input mode, either `Growth` or `Angle` is used to create
a conical or flat spiral. The respective other can easily be calculated
to give consistent view. This is already done for the other properties,
e.g. `Height` is calculated from `Pitch` and `Turns`.
With this patch, the same is done for `Angle` and `Growth`.
Introduce an enum to verify the axis depending on the used context.
* For helix no restriction is needed
* For Pad/Pocket the axis must not be parallel with the sketch plane
* For Revolve/Groove the axis must not be perpendicular with the sketch plane
Helices that become smaller with every turn are geometrically perfectly valid. Therefore we cannot forbid this.
(For example when creating a helix from a face you often cannot move it so that you can apply a positive growth.)
Previously, only the vertical and horizontal axis of the profile was
selectable in the task panel of the additive/subtractive helix. Now the
profile's normal axis can be selected, too. This now allows to create
helical extrusions or "twisted pockets".
The order of the GUI entries was chosen to be in line with the order of
axis selection of the multi-transform parameters.
The actual feature's implementation needed adaption for this special case
as in some places a unit vector (`gp_Dir`) was derived from the cross-
product of axis and profile normal -- a null-vector when the axis *is*
the normal. This caused the gp_Dir's ctor to throw.
- Helix: the property Turns has the App::PropertyFloatConstraint thus also the pointer to it must have the same property
- LinearPattern and Helix: make constraints static class member (forgot this in commit 3704ad68)
- Draft: make the constraint const
- PolarPattern and LinearPattern assure that the header file is loaded at last to avoid potential troubles