Sorry for being less involved recently. There is a chance I'll have to step down from active involvement due to very big changes in my business that will require all of my time for some period.
For now, I was playing with the code to try my rotations theory...
With the experimental code any 3 parts assembly connected as a chain with 1 part fixed takes exactly 4 steps:
1 step to move 2'nd part + 1 step to understand that there is nothing should be moved any more
1 step to move 3'rd part + 1 step to understand that there is nothing should be moved any more
To compare, my chain assembly (1 constraint between every part) took 200-300 steps to resolve, the bigplate assembly (2 constraints between every part) took thousands (or 10s thousands?) of steps. Both need only 4 steps as I wrote.
Every step performs move, rotate to align axis and rotate based on constraints refPoints. The code calculates the exact spin point and angle based on the refPoints.
I've tried it on 6DOF model, but it didn't work well. The piston started to jump around the needed point, probably due to looped connection between the pistons and cylinders. Didn't have the time to debug it further. CrankShaft didn't assemble at all, didn't debug it yet.
That code could work only with the chained parts and with proper DOF analysis it might help alot if we will be able to recognize the chains that should be moved all together.
I hope I will still have some time to debug the code and bring it to the level that it will work with all the assemblies we have. If not, I'll clean it abit and push to GitHub so you could use it as a reference and hopefully make it work.
Thinking while writing the post, its possible that there is a bug somewhere around the tempfixed flag since when 3'rd part added to the scene, I didn't see the second part move toward the 3'rd part, but only the 3'rd part moved toward the second...
But I still think the code will improve the solver speed.