# RFC - Unified Modeling Workbench The goal of this document is to explore way of providing one modeling workbench to end users, instead of current situation where FreeCAD has two workbenches (Part and Part Design) that can achieve similar, but not quite exact things. ## Understanding the differences While offering users similar features the workbenches differ substantially in presented workflows. From user perspective we can list two most important differences: ### Feature organization Part workbench uses generic tree structure to organize features. This is very powerful but has some drawbacks like having deeply nested structures that can cause issues (see https://github.com/FreeCAD/FreeCAD/issues/7606). Part design on the other hand uses linear, timeline-like way of presenting features. The linear structure is special case of tree and hence can be easily represented in Part structure, the other way is non-trivial and may not always be possible. ![image](https://hackmd.io/_uploads/H1OIwD6-yx.png) ### Multi solid support Part allows working with compound (multi solid) shapes without an issue. Pard Design has it disabled by default enforcing so called "Single Body Rule". This is an artificial limitation used to enforce certain workflow, it can turned off since 1.0. ### Implicit operations Part is very explicit in the nature, every operation must be defined by the user. In order to have two shapes fused together you must first create them and then join using explicit boolean operation. While simple and powerful it can become quite tidious for larger projects. However it ensures that user always have full control and each boolean is done intentionally. Part Design on the other hand does provide users with automatic boolean operations. It is possible becuse each Part Design feature does have reference to previous one and the result of operation is implicitly booleaned with result of previous operation. Optionally Part Design also provides automatic refine operation which is applied to the boolean result. For now Part Design does only union of shapes, but it is artificial limitation that can be lifted. ## Requirements for unified workbench 1. All features will have to work with both generic and linearized feature organization. In order to assure that each feature must have optional reference to predecessor. Chain of ancestry in that case will form the backbone for the linear timeline. 2. All features will also need to be able to do implicit boolean and refine operations. For boolean operations the previous feature will become the base (object) of operation and result of current feature will be used as tool. User should be able to turn off the implicit boolean op if needed, the result then should be compound shape with two solids that can be then combined together with help of explicit boolean operator. 3. Features must not be duplicated, i.e. there should be one tool for making fillets, extrusions etc. ## What needs to be done 1. Linearized workflow implemented in Part Design must be extended to fully support compound shapes and all boolean operations. This will effectively require merging Additive / Subtractive into one feature. From the UI perspective they can stay separated. 2. `PartDesign::Feature` should be merged into `Part::Feature` so all deriving features can be used in linear workflow. 3. Duplicated features must be merged together in a way that resulting feature has full feature set of every merged part. - Pad / Extrude -> Extrude must be capable of everything that Pad can do now - Chamfers, Fillets -> Part counterpart is more capable - it should replace ones from Part Design - ... 4. Features should be placed in one workbench, either Part or newely created "Modeling" workbench that will replace both.