I am honoured that you have given my name to a posting style
DevJohan wrote: I have my favorite way of writing code, as I think every programmer has, and mine involves using a lot of variadic templates
Cool!! I will order a brain upgrade to understand that code!!
DevJohan wrote:To make this possible I added an interface to the solver called SketchSolver which is common to both freegcs and freegcs_exp.
Then, regarding FreeCADCGS (we could also call it CCGS (i.e. Community CGS)), I guess, it is more of a matter of making any change compatible with that interface.
A separate issue is then with respect to what you compare your improvements. I would preliminarily suggest that you compare your exp performance against the new FreeCADCGS. DeepSOIC's modifications, deal mainly, afaiu, with simplifying the calling of the constraints by using polymorphism, and a new constraint. From my standpoint, it seems to me that this concrete aspect should not collide much as you are centered on the solver and he is centered in the constraints, where one constraint more is added. It might require that you update your "exp" version to account for that extra constraint.
AFAIU, this "two solver" thing is a development step more than a definitive one. You are trying to measure the improvement of your implementation with respect to that one existing. So at the end, when your changes to master are ready, you will add all your improvements to the "FreeCADCGS" (or CCGS or whatever), and in master only one solver/CGS architecture will be present.
DevJohan wrote:DeepSOIC, my current idea of how the expressions are supposed to work from a user standpoint is when you enter a datum for some constraint you can use not only quantity values but also variable names. Named variables are automatically created once referred and if you enter the same variable name in multiple constraints those data are implicitly related. In the task section named variables should be displayed along with their definition (if given) and the value they currently evaluate to. I guess along with the constraints and element widgets we would have an expressions widget which organizes the extra expressions of the sketch.
I quite agree on the approach. It goes in the same direction I had in mind. A wrapper of Quantity+A manager that apart from organization also arbitrates/decides on the order on how to apply changes (solving order). Mine is just an idea in my head without a well-defined form yet.
DeepSOIC, at the end that is a "Constraint on constraints", but trying to keep it flexible and not overload the UI with specific operations. Here I am more for an approach of "string parsing" than a defined number of UI operations. When you go to this level, I think you generally would like to rely on mathematics more than in "mechanical" approaches (though this can be abstracted in some UI implementation if necessary). Just an opinion.
DevJohan wrote:Unfortunately I have yet to go through the changes made by DeepSOIC in his branch. Which leaves me with a question which branch I sholud rebase to if I were to do that?
So, all in all:
A. DevJohan does not have code to contribute at this time (unless I missed something). So the objective of all the modifications we do from his point of view would be to simplify his rebasing as much as possible.
B. Ellipse is in pull request state, but it needs the change in naming to comply with the naming requirements.
C. DeepSOIC's work needs the Ellipse implementation merged.
The changes to be made (renaming) affect to Ellipse and DeepSOIC's work. Given that A is not ready, and B and C are ready and share a common starting point, my proposal would be to:
PROPOSAL
========
1. Integrate DeepSOIC modifications into Ellipse, and then change the name to the library to the new name. Then DevJohan would need to rebase on master after that is pushed.
If someone has a better approach please tell us.
2. Change the name: I propose CGCS for shortness (Community Geometric Constraint Solver).
If you vote positively to this proposal (please vote either negatively or positively and propose alternatives where it applies), I will dedicate all my free time next week to do the integration (with your help DeepSOIC
).
Does this sound reasonable? If it is not, please say it now before I invest more time in it.