Assembly3 Workbench/it

Introduzione
Assembly3 è un banco di lavoro esterno che viene utilizzato per eseguire l'assemblaggio di diversi corpi contenuti in un unico file o in più documenti. Il banco da lavoro si basa su diverse modifiche delle funzioni principali effettuate per la versione di FreeCAD 0.19 (ad es. App Link), quindi il banco da lavoro Assembly3 non può essere utilizzato con le versioni precedenti.

Le caratteristiche principali del banco da lavoro Assembly3 sono
 * dynamic/interactive solver. Ciò significa che è possibile spostare le parti con il mouse mentre il risolutore limita il movimento. Ciò consente, ad esempio, di collegare una ruota ad un asse e di ruotare la ruota in modo interattivo con il mouse.
 * links. Ciò significa che è possibile utilizzare un solo pezzo, ad es. una vite più volte in un assemblaggio (in luoghi diversi) senza duplicare la geometria.
 * external links. E' possibile avere un documento freecad che contiene solo un assemblaggio e non parti. Tutte le parti potrebbero essere in file singoli. I file potrebbero anche essere in una libreria o in qualsiasi altra parte del file system. L'unico requisito è che il file deve essere caricato al momento del collegamento. Dopo che il collegamento è stato fatto, il file deve essere aperto per fare gli aggiornamenti ai collegamenti che coinvolgono il file. Assembly3 risolve questo problema aprendo i file in background.
 * hierarchical assemblies. Come nella vita reale, un assemblaggio meccanico può essere costituito da sottoinsiemi. Questi potrebbero consistere di nuovo in sottoinsiemi e così via.
 * assembly freeze. Poiché la CPU può gestire solo un numero limitato di vincoli simultanei in tempo reale, il congelamento di un assieme permette di utilizzare i vincoli anche per assiemi di grandi dimensioni. Congelando gli assiemi finiti o i vincoli che non devono rimanere dinamici (ad es. parti saldate, bullonate o incollate), questi vengono esclusi dai calcoli di aggiornamento e considerati geometria fissa dal solutore Assembly3.
 * Si noti che altri approcci offrono soluzioni diverse a questo problema, per esempio Assembly4_workbench_icon.svg Assembly4 Workbench.

Torna all'inizio

Barre degli strumenti
A partire dal 2020 il banco da lavoro Assembly3 è dotato delle seguenti barre degli strumenti.


 * Assembly3_ToolbarMain.png
 * Barra degli strumenti principale


 * La barra degli strumenti principale contiene strumenti per
 * Aggiungere una cartella assembly
 * Importare file STEP
 * Strumenti per spostare le parti in 3D
 * Controlli per l'aspetto e il solutore.
 * Strumenti per ordinare gli elementi dell'albero


 * Assembly3_ToolbarConstraints_1.jpg
 * Barra dei vincoli principali. Alcuni strumenti sono di fatto un menu per altri strumenti.


 * Assembly3_ToolbarConstraints_2.jpg
 * Barra dei vincoli supplementari. È possibile abilitare questa funzione selezionando l'icona "..." nella barra dei vincoli principale.


 * Le Barre dei vincoli saranno l'interfaccia principale utilizzata per l'assemblaggio delle parti. Sono grigie di default, ma vengono attivate una volta selezionata almeno una faccia, una linea o un punto di una parte. Generalmente si selezionano gli elementi che devono essere uniti e poi si seleziona il tipo di vincolo. Le diverse cornici colorate contrassegnano le diverse caratteristiche dei vincoli: se è possibile aggiungere più di 2 elementi in 2D/3D. Una descrizione dettagliata si trova nel wiki di Gibhub.


 * "Bloccare" il primissimo vincolo. In ogni assemblaggio una parte deve essere bloccata per agire come parte base. Bloccare non significa altro che vincolare questa parte in 6DOF alla sua posizione e orientamento attuali.


 * Assembly3_ToolbarNavigation.jpg
 * Barra degli strumenti di navigazione
 * Queste funzioni sono utili quando si lavora con un assemblaggio con una gerarchia di file esterni collegati
 * Selezionare l'oggetto pezzo corrispondente nel gruppo di relazioni
 * Selezionare l'oggetto collegato
 * Selezionare l'oggetto link più profondo


 * Assembly3_ToolbarMeasurement.jpg
 * Barra degli strumenti di misura
 * La Barra degli strumenti di misura aggiunge funzioni per misurare le distanze tra due punti, un punto e una retta o un punto e una faccia. Lo strumento Misura angolo traccia l'angolo tra due facce o rette. Non esiste una funzione per misurare un raggio o un diametro.
 * Gli strumenti di misura sopravvivono ai cambiamenti del pezzo, ad esempio la distanza tra i bordi di un cubo quando il cubo viene ridimensionato. Come i vincoli, i calcoli sono fatti in tempo reale e aggiornati ad ogni cambiamento. Dietro le quinte, la funzione è molto simile alla funzione vincoli. La distanza o l'angolo viene calcolata tra elementi come per ivincoli. Il visualizzatore nell'albero funziona allo stesso modo.

Come al solito è possibile modificare le barre degli strumenti e aggiungere o rimuovere singoli strumenti. Accertarsi di controllare nel menu Assembly3 le funzioni che potrebbero non essere presenti nelle barre degli strumenti.

Torna all'inizio

Vincoli
Il progettista utilizza i vincoli per ottenere il risultato desiderato nella relazione tra due parti. L'arte è la selezione dei giusti vincoli più adatti ad affrontare ogni problema. Ogni DOF eliminato dovrebbe in teoria essere eliminato solo una volta tra due oggetti, ma in pratica con molti strumenti CAD i vincoli selezionati causano combinazioni di vincoli eccessivi, spesso compensati da algoritmi complessi, a volte no. Assembly3 utilizza algoritmi per rilevare e compensare gli eccessi di vincoli, ma chiaramente non sono ancora molto maturi. Quindi in pratica per i vincoli di Assembly3 si evitano problemi essendo consapevoli di quanti gradi di libertà (DOF) sono stati utilizzati e quali devono ancora essere bloccati dai vincoli. Nessuna parte dovrebbe avere una connessione di vincoli utilizzati maggiore di 6DOF.


 * Nota: Se il risolutore incontra una combinazione che non può essere risolta, darà un errore. È molto difficile per il risolutore scoprire cosa ha causato il problema, quindi tipicamente da questo errore dato non sarà chiaro dove è il problema. In assemblaggi più grandi questo può portare a ricerche complesse del problema. Purtroppo non c'è un modo semplice per evitarlo. Tuttavia, aiuta essere pienamente consapevoli di come funziona il sistema (.e.g. vedi Elementi qui sotto), utilizzare nomi chiari per tutti i componenti coinvolti e aggiungere vincoli aggiuntivi solo quando il risolutore risolve l'assemblaggio corrente. Molto utile per rintracciare un problema è la funzione "ContexMenu/Deactivate" di ogni Vincolo.

Assembly3 I vincoli definiscono le restrizioni nella posizione o nell'orientamento tra due Elementi. Alcuni vincoli funzionano anche con più di due Elementi. Un Elemento può essere una faccia, una linea o un bordo o un punto di una parte. Generalmente i vincoli sono definiti selezionando gli Elementi e poi selezionare il vincolo dai Vincoli toolbar.

Altro
 * Fissa 6 DOF, lascia 0 DOF:
 * Lock: Il blocco del vincolo fissa tutti i DOF per una faccia. Dovrebbe essere usato per una parte di base in ogni assemblaggio. Si può anche attivare la funzione "MoveLock" (nella barra degli strumenti) in modo che il pezzo non possa essere spostato accidentalmente. Normalmente non importa quale faccia/linea/punto si usa per fissare un pezzo. Si noti inoltre che il blocco è valido solo per l'assemblaggio diretto, cioè nel caso di un sottoinsieme l'assemblaggio principale richiederebbe comunque una parte bloccata.
 * Attachment: Rende i sistemi di coordinate di entrambi gli elementi uguali per tutti gli assi. Questa è la funzione più comoda per il calcolo e dovrebbe essere usata dove possibile. Si noti che si potrebbero usare le proprietà degli elementi per compensare gli offset e gli angoli se i due elementi non sono perfettamente allineati.
 * Fissa 5 DOF, lascia 1 DOF:
 * Plane Coincident: fissa Tx,Ty,Tz, Rx,Ry. Solo Rz è libero. Rimane la rotazione intorno al normale che passa attraverso il centro del piano.
 * Fissa 4 DOF, lascia 2 DOF:
 * Axial Alignment: fissa Tx,Ty, Rx,Ry. Solo Tz, Rz sono liberi. Rimangono la rotazione intorno all'asse della figura e la traslazione lungo questo stesso asse. Due vincoli PointOnLine (se i due punti sono diversi) danno lo stesso risultato. Come anche i vincoli'‘Colinear'’.
 * PointOnLine: In questo modo si elimina la traslazione e la rotazione lungo le normali verso la linea di riferimento. Sono consentite solo la traslazione e la rotazione lungo l'asse della linea.
 * Fissa 3 DOF, lascia 3 DOF:
 * Same Orientation: fissa Rx,Rz,Rz. Tutte le T rimangono libere.
 * Points Coincident: fissa Tx,Ty,Tz. Tutte le R rimangono libere.
 * PointOnPoint Il vincolo elimina le 3 traslazioni.
 * Plane Alignment: fissa Tz, Rx,Ry. In movimento il piano e Rz. Questo elimina la traslazione lungo il piano normale verso il piano di riferimento e le due rotazioni intorno agli assi di questo piano.
 * Fissa 2 DOF, lascia 4 DOF:
 * Multi Parallel: fissa Rx,Ry. rimangono tutte le T e le Rz. Questo elimina le due rotazioni intorno agli assi del piano di riferimento.
 * Fissa 1 DOF, lascia 5 DOF:
 * Points in Plane: Fissa Tz. Questo elimina la traslazione lungo il piano normale verso il piano di riferimento.
 * Points Distance: fissa la distanza tra le origini dell'elemento.
 * Questo ti dà più libertà rispetto a Points in Plane
 * Points on Circle: fissa Tz e parzialmente Tx,Ty. Congela la traslazione del punto (o più punti) su un cerchio o su un'area del disco. Devi scegliere il cerchio per secondo. Questo lascia tutte le rotazioni libere e dà una traslazione limitata nel piano di riferimento del cerchio.

'': Nota: Nella seguente lista Tx,Ty,Tz e Rx,Ry,Rz sono usati per descrivere le traslazioni e le rotazioni dei sistemi di coordinate di riferimento dell'elemento interessato. Questo non è sempre esatto o completamente definito, ad esempio quando è coinvolta una linea non è definito se corre in X, Y o qualsiasi altro angolo in mezzo. Il sistema è usato per un breve e facile comparazione a favore di una definizione corretta ma più complessa. Quindi Z è generalmente la direzione normale di tutte le facce coinvolte. Sentitevi liberi di modificarla con un approccio migliore con una migliore leggibilità".

Torna all'inizio

Elements è un termine specifico usato nel banco di lavoro Assembly3 ed è importante capire Elements per capire come Assembly3 deve essere usato.

È utile pensare a un elemento come parola generale per un "elemento selezionabile" di una parte, cioè una faccia, un bordo, un cerchio o un angolo o un altro punto. Gli elementi che si selezionano per vincolarli, sono quegli elementi. Nell'albero una cartella Assembly ha tre sottocartelle. Accanto a 'Parts' e 'Constraints' c'è una cartella chiamata 'Elements', che è vuota finché non vengono aggiunti vincoli. Quando si aggiunge un vincolo il vincolo stesso ottiene due (o più) linee, questi sono gli 'Elementi' selezionati. Anche questi vengono aggiunti nella cartella 'Elements' che è solo un elenco di tutti gli elementi utilizzati nell'assieme. E' una buona idea cambiare i loro nomi (con il tasto F2), specialmente negli assemblaggi più grandi.

Vediamo un esempio
 * Creare un nuovo file e aggiungere dal banco di lavoro Part un cubo e un cilindro.Impileremo il cilindro sul cubo. Prima fissiamo la parte base, nel nostro caso il cubo. Selezioniamo la faccia inferiore del cubo e selezioniamo i vincoli "Bloccato" (prima icona nei Vincoli barra degli strumenti). Selezionare la faccia superiore del cilindro e la faccia superiore del cubo. Quindi selezionare il vincolo "Plane Coincident". Ora il cilindro viene spostato nel cubo e nell'albero è stata aggiunta una nuova foglia con due nodi figli sotto "Constraints". Inoltre gli stessi due nodi figli sono stati aggiunti sotto "Elements". Se il cilindro si trova all'interno del cubo invece che sopra il cubo, correggiamo prima questo: sotto 'Constraints' selezionate il nodo figlio che mostra la faccia del cilindro e con un clic destro del mouse nel menu contestuale selezionate 'Flip Part'. Ora il cilindro è impilato sul cubo.

La chiave per capire è che il vincolo opera sui collegamenti agli elementi nella lista della cartella ad albero 'Elements'. Questo permette di mantenere intatta la struttura del vincolo mentre si cambiano le parti. Questo è molto difficile da comprendere senza un esempio.

Torniamo all'esempio precedente
 * Nota: assicurarsi di aver aggiunto il vincolo "Lock" al cubo o questo sembrerà disorientante
 * Nella finestra CAD selezionare un'altra faccia del cubo. Ora lavoriamo solo nella vista ad albero. Andate con il mouse nell'albero dove il cubo deve apparire selezionato. Trascinare il cubo nella cartella "Elements". Trascinatelo sul nome 'Elements', in nessun altro punto della cartella vedremo in seguito il motivo. Dovreste vedere che un altro Elemento viene aggiunto alla lista degli 'Elementi'. Ora selezionate nella cartella 'Constraints' il nodo figlio della faccia del cubo nel vincolo "Plane Coincident" e cancellatelo. Il Vincolo mostrerà un punto esclamativo poiché manca un elemento. Si noti che cancellando l'elemento in Constraint non lo abbiamo cancellato dalla lista. Questo perché nel vincolo c'era solo un link all'Elemento. Ora prendiamo l'Elemento appena aggiunto nella lista 'Elements' e lo trasciniamo sul vincolo "Plane Coincident". Ora il cilidro si sposta sull'altra faccia che abbiamo selezionato. Potremmo aver bisogno di selezionare di nuovo 'Flip Part nel menu contestuale' se il cilindro è di nuovo all'interno del cubo.

The example showed that without removing the constraint we can change the Elements that are used for the constraint. The same way we can move the cylinder to a totally different part. After playing around with this example a bit more, you will note some additional things as
 * If you rename an Element in the list, the name will be changed in all Constraints.
 * you can use one Element in the list in several constraints.
 * You can use the Property Window of an Element to add Offsets. In the example this could move the cylinder around on the cube face.
 * you can use the "Show Element Coordinate System" button in the main toolbar to see what 'ContextMenu/Flip Part' and 'ContextMenu/Flip Element' are doing. Be sure to look what happens in the Property Window.
 * you can add a constraint in a totally different order: First add some Elements to the 'Elements List' (naming is useful, e.g. "Cube Top Face" or "Cube Front Face"), then add a constraint without selecting anything - it will be an empty constraint. Then drag Elements from the 'Elements' list. The result is the same than what we did in the first example. After doing that exercise the nature of how constraints work with Elements should be clear.
 * you can change an existing constraint between existing elements by just select a different item in the PropertyWindow/ConstraintType property.

top

Compatibility
Assembly3 was inspired by Assembly2, but it is not compatible with it. If you have older models made in Assembly2, you should stay with FreeCAD 0.16 and use Assembly2 there.

New models developed with Assembly3 should only be opened and edited with this workbench.

Although they may have similar tools, Assembly3 is not compatible with A2plus nor Assembly4. Models created with these workbenches should be opened only with their respective workbench.

top

Testing
The Assembly3 Workbench is under development and is not yet available (April 2020) through the Addon Manager, but it is expected that this will happen at some point.

You can test it in two ways:
 * A special fork of FreeCAD made by realthunder; see FreeCAD_assembly3 releases. This fork is based on a particular commit of the master branch of FreeCAD, but it also has additional features currently not present in the master branch. Due to this fork being based on a particular development snapshot, it does not have the latest features merged daily to the master branch.
 * The development AppImage; this is based on the current master branch, and includes the dependencies needed for working with Assembly3 such as the SolveSpace solver.

Since the AppImage only works for Linux, for Windows users at the moment the only option to test Assembly3 is the first option (realthunder's fork).

top

Get Started
There are many ways to create an assembly with Assembly3. Here is the most simple one you can do.


 * Assembly3_Example-GettingStarted.jpg
 * Final Result of the Getting Started Example. In the image the Assembly3 Worksbench is selected, so its multiple toolbars are visible. Note that the vertical "TabBar" left of the tree view is an AddOn Workbench that is not contained in standard FreeCAD (but can be installed with the Addon-Manager).


 * Create a new FreeCAD file
 * Select assembly Workbench. Select CreateAssembly (first icon)
 * Select Part Workbench and add a cylinder and a cube
 * Save the file with any filename you like. Close and open and the file.
 * The tree view should look like this


 * Now Draw&Drop with the mouse both Cylinder and Cube onto the Parts folder. They are moved into that folder.
 * That is the quickest way. Please note that a better way is to open the Context menu on both and select ContetxMenu/LinkActions/MakeLink. This adds two link files. Then Drag/Drop the link files to the Parts folder. For simple cases like this it does not really matter.
 * Click both top surfaces of Cylinder and Cube (keep Ctrl pressed)
 * Select assembly Workbench. Select "PlaceCoincident" from the Constraint Toolbar.
 * Now the parts should be joined into each other and your tree should look like this

We omitted one important step that should be done in larger assemblies: locking a base part. That means define one part that should not be moved by constraints. In your case we use the cube for that: Done. If you like you can move the "Locked" constraint upwards in the tree. Use the "MoveItemUp" button on the Main Toolbar for that.
 * Right click "_Element" (any of the two) and select "Flip Part".
 * Now the Cylinder should be on top of the box. If the whole thing is upside down, go back and select "Flip Part" on the other Element.
 * Select the lower face of the cube. Only the lower face, not the whole cube.
 * select the "Lock" constraint from the constraint tool bar
 * The finished assembly tree should look like in the image above

Note: all new external files must be saved, closed and re-opend at least once, so that Assembly3 can find it. Without doing that FreeCAD can not give a file handle to the Assembly3 Workbench and it can not find the new part. When all parts are in the same file, you should save and re-open the file.

top

Add an Offset
Assembly3 does not offer Offset with the constaints in the way the A2plus Workbench or other CAD tools do. Instead it offers a more general and flexible system to add offsets translations but also angles.


 * Add the offset in the properties of one Elements of a Constraint.
 * you can choose which one of the two you want to use.

Example:
 * Add 2 cubes to an assembly and select their side faces.
 * select "PlaneCoincident". The cubes will be attached inside each other.
 * select one Element and ContextMenu/Flip Part. The cubes will be attached side-by-side.
 * select one Element property Offset/Position/Zz and set to 5mm. The cubes will be 5mm apart.
 * Test with other axes or the angle/axis fields. Also verify that you get the same result when using the other Element.

This is the same approach for all other constraints.

top

Solve a Solver Failure
This often happens when parts are over-constraints, i.e. more than 6 DOF are locked.

The easiest way to find the problem is to click relevant constraints in the tree and select ContextMenu/Disable and re-calculate. It is helpful to know the last added constraints before the solver failed and just undo them.

Note: as Assembly3 tries to compensate for over-constraint parts behind the scenes, sometimes the problem is just triggered by a new constraint but the root cause is somewhere different. Before deleting all and starting again, remember that you can re-use Elements. If you named them you can identify the required elements and re-build the constraints without using the 3D view at all. See Elements seciton above.

top

Tips & Tricks

 * Using hierarchical assemblies helps in avoiding solver issues and keeping you model fluid. You can freeze a subassembly with one click and save CPU resources easily. Also note that Assembly3 does not need to keep external files for frozes subassemblies open. For large assemblies with large MB files this can be a severe advantage.
 * Using external files makes it easier to re-use a parts or do part versioning with systems like git or subversion. The workflow in FreeCAD with Assembly feels quite the same as with files that have all parts in the same file. For exchanging files often with other parties, single files might be more convenient.
 * Multiply linked parts. If you added a link into the assembly, it will have a property value named "Element Count", default 0. If you set this to 3 you get 3 instances of that part. They will be added into a subfolder and can be used like fully separte parts. Use this feature to keep the data footprint of your file low, because the part is saved only once. Each instance only contain the differences.
 * Insert multiple Screws with one click. Check out the Assembly3 Wiki on the Github site. This is not only a stunning function (even a bit magic), but really really useful.


 * Using the TabBar Workbench speeds up working with assembly. This adds a Toolbar with one button for each workbench. You can sort the toolbar and can put it where every you want it. Many people put it vertically on the left side just beside the tree view. Of you have Assembly3, Part, PartDesign and other often used workbenches close to the top switching between them becomes extremely easy.

top

Links

 * App Link object that makes Assembly3 work.
 * FreeCAD_assembly3 repository and documentation.
 * Assembly3 preview, big discussion thread.
 * Test tutorial for Assembly 3 WB by jpg87.
 * Current Assembly Status
 * External workbenches
 * External workbench list
 * Old Assembly project development plan, to get acquainted with the history of the issue.