realthunder/FreeCAD_assembly3

very large assemblies without solver

wsteffe opened this issue · 0 comments

Hi RT,
this issue is related with my use case explained in post:
https://forum.freecad.org/viewtopic.php?t=79123

The usage case is also similar to that one addressed by tool layout2fc
https://github.com/wsteffe/layout2fc that you already know.

But here I would like to be able to design a hierarchical circuit all inside FC without using external layout editors (such klayout or KiCAD). The kind of parametrization offered by FC is more user friendly that scripted based parametrization (pcells) offered by layout editors. (you may have an idea looking at see https://www.youtube.com/watch?v=kwq98fq1OuI).

As you know electrical circuits may be very large and can not be efficiently handled by constraint solver. I have seen that Assembly3 alraedy provides an attachment constraint that (when applied to faces) fixes all 6 degree of freedom between involved objects.
This eliminates the need of a constraint solver but I have found that in the present implementation this kind of constraint may produce unpredictable results. Therefore I would like to have an elarged set of full-constraints working with different kinds of input data. The solver should never been invoked when the assembly is built using only the subset of full constraints .

For the circuit case, I am mainly concerned with a small set of 2d constraints (actually working in 3d but being essentially 2d because z direction is assumed to be fixed).
As a first example I would like to have a simple constraint requiring the selection of two linear edges. The result should be the alignement of edge directions and of edge centers. With this constraint it would be very easy to place and align, in example, a microstrip component in such a way that the input port (an edge on the input stripline) is connected with a stripline port of the master circuit.

A similar apprach could work also in 3d. In example it could be useful to combine in a single constraint (PlaneCoincident+pointInPlane).

I know that this approach is already implemented in assembly 4 but I do not like that I have to define many LCSs in each part to use it. And also I do not like to have two use two different WBs for the two approaches (with solver and solverless).