A2plus Workbench/it: Difference between revisions

From FreeCAD Documentation
No edit summary
No edit summary
Line 222: Line 222:
=== Archiviazione dei file ===
=== Archiviazione dei file ===


; Use relative paths for imported parts : Utilizza i percorsi dei file relativi ai file delle parti.
<div class="mw-translate-fuzzy">
* '''Use relative paths for imported parts'''<br/> Utilizza i percorsi dei file relativi ai file delle parti.
; Use absolute paths for imported parts : Utilizza i percorsi di file assoluti per i file delle parti.
; All files are in this project folder : Tutti i file del progetto devono trovarsi nella cartella specificata. Non importa se si trovano in sottocartelle di questa cartella. '''Nota:''' Nessun file può esistere più volte nella cartella (ad esempio in diverse sottocartelle). <br/> Questa opzione è utile per lavorare su macchine diverse perché in questo caso è sufficiente copiare la cartella del progetto.
* '''Use absolute paths for imported parts'''<br/> Utilizza i percorsi di file assoluti per i file delle parti.
* '''All files are in this project folder:'''<br/> Tutti i file del progetto devono trovarsi nella cartella specificata. Non importa se si trovano in sottocartelle di questa cartella. '''Nota:''' Nessun file può esistere più volte nella cartella (ad esempio in diverse sottocartelle). <br/> Questa opzione è utile per lavorare su macchine diverse perché in questo caso è sufficiente copiare la cartella del progetto.
</div>


== Risoluzione dei problemi ==
== Risoluzione dei problemi ==

Revision as of 16:52, 3 April 2020

A2plus workbench icon

Introduzione

A2plus è un ambiente complementare per assemblare varie parti in FreeCAD.

Questa documentazione descrive la versione A2plus 0.4.45 o più recente.

Installazione

L'ambiente A2plus è un componente aggiuntivo di FreeCAD. Può essere facilmente installato tramite il menu Strumenti → Addon Manager. A2plus è in sviluppo attivo e riceve frequentemente nuove funzioni. Pertanto si dovrebbe aggiornarlo regolarmente usando sempre il menu Strumenti → Addon Manager. Il codice A2plus è ospitato e sviluppato in su GitHub e può anche essere installato manualmente copiandolo nella directory MOD di FreeCAD.

Per iniziare

Passare sulla barra degli strumenti di A2plus in FreeCAD. Per creare un assieme, creare un nuovo file. All'inizio questo file deve essere salvato. Si consiglia (ma non è necessario) di salvarlo nella stessa cartella delle parti che si desidera assemblare.

Ora è possibile aggiungere parti all'assieme utilizzando il pulsante della barra degli strumenti o . Il pulsante aggiunge tutti i corpi nel file selezionato come una singola parte. Quando si usa il pulsante si può scegliere quale parte di un file deve essere importato come parte. In questo modo si può ad esempio importare solo uno schizzo per assemblare ulteriori parti usando lo schizzo per determinare le posizioni delle parti.

La prima parte aggiunta ottiene una posizione fissa per impostazione predefinita. (in seguito è possibile modificare questo tramite la proprietà della parte Datifixed Position.)

Le parti già presenti nell'assieme possono essere clonate con il pulsante della barra degli strumenti.

Per modificare una parte dall'assieme, selezionarla nell'albero del modello e utilizzare il pulsante della barra degli strumenti . Questo apre la parte in una nuova scheda in FreeCAD o passa alla sua scheda se il file è già aperto.

Per aggiornare le parti modificate negli assemblaggi fare clic sul pulsante della barra degli strumenti. Il pulsante della barra degli strumenti importa anch'esso le parti ma ricorsivamente su possibili sottoassiemi. Se si selezionano una o più parti nella vista ad albero di FreeCAD, A2plus chiederà se aggiornare solo le parti selezionate.

Le parti importate mantengono le loro dipendenze esterne e possono essere modificate. Per parti ben definite, come le viti, è comunque utile che la loro forma non possa essere modificata. Questo può essere ottenuto con il pulsante della barra degli strumenti che converte la parte selezionata in una copia statica della parte originale.

Per salvare l'assemblaggio e in seguito chiuderlo, è possibile utilizzare il pulsante della barra degli strumenti.

Assemblaggio

L'assemblaggio delle parti viene effettuato aggiungendo dei vincoli tra le parti. Dopo l'applicazione di un vincolo, A2plus sposta le parti in base al vincolo, se possibile.

Per creare un vincolo tra le parti, tenere premuto il tasto Ctrl e selezionare un bordo o una faccia di due parti. Quindi cliccare il bottone del vincolo desiderato nella barra degli strumenti. Apparirà la finestra di dialogo descritta nella sezione Vincoli. Il vincolo viene aggiunto nell'albero del modello allegato alle parti interessate.

Per i vincoli complessi tra le parti A2plus potrebbe non riuscire a risolvere i vincoli. Pertanto, dare un'occhiata anche alla sezione Risoluzione dei problemi per le strategie su come risolvere tali casi.

Tenere traccia

Più parti si aggiungono, più è importante mantenere la traccia. A2plus offre quindi questi strumenti per spostare e visualizzare le parti:

  • Per spostare una parte nell'assieme, selezionarla nell'albero del modello e utilizzare il pulsante . Quando la parte è posizionato dove si desidera, fare clic con il tasto sinistro del mouse. Se la parte spostata ha già dei vincoli, la parte viene posizionata di conseguenza premendo il pulsante perché questo innesca la risoluzione di tutti i vincoli dell'assieme.
  • Per mostrare un vincolo selezionarlo nell'albero del modello e utilizzare il pulsante . Ciò rende l'intero assemblaggio trasparente e evidenzia i due elementi che sono connessi nel vincolo. Per tornare alla visualizzazione normale, fare clic con il tasto sinistro sull'assieme.
  • Per mostrare solo alcune parti nell'assieme, selezionare queste parti nell'albero del modello e utilizzare il pulsante . In alternativa si può nascondere una certa parte selezionandola nell'albero del modello e premendo Spazio per commutare la sua visibilità.
  • Per attivare la vista trasparenza dell'intero assieme, si può utilizzare il pulsante .
  • Ogni parte può essere resa trasparente utilizzando la normale modalità di FreeCAD. Tuttavia a volte l'impostazione della trasparenza per le parti viene persa quando si riapre l'assieme a causa di un bug in FreeCAD. Per risolvere il problema, si può utilizzare il pulsante della barra degli strumenti per ripristinare le impostazioni di trasparenza.

Vincoli

Quando si crea un vincolo, dopo aver premuto un pulsante della barra degli strumenti dei vincoli, viene visualizzata questa finestra di dialogo:

.

Per alcuni vincoli, consente di modificare la direzione del vincolo. Con il pulsante Solve si può verificare in anteprima se questo nuovo vincolo può essere risolto con A2plus. In caso contrario, dare un'occhiata alla sezione Risoluzione dei problemi.

I vincoli possono essere disabilitati cambiando la loro visibilità. Questo si ottiene selezionando il vincolo nella vista ad albero e premendo Space. Ciò attiva la proprietà DatiSuppressed. Un vincolo soppresso non è preso in considerazione quando l'assemblaggio viene risolto.

A2plus fornisce i seguenti vincoli:

Punto su punto

Selezionare un vertice (punto) su ciascuna parte. Il pulsante della barra degli strumenti aggiunge il vincolo pointIdentity. Rende i vertici coincidenti.

Punto sul linea

Selezionare un vertice (punto), o bordo circolare (seleziona il suo punto centrale), o una faccia sferica (seleziona anche il suo punto centrale) su una parte e un bordo sull'altra parte. Il pulsante della barra degli strumenti aggiunge il vincolo pointOnLine. Posiziona il vertice sul bordo.

Punto su piano

Selezionare un vertice (punto), o bordo circolare (seleziona il suo punto centrale), o una faccia sferica (seleziona anche il suo punto centrale) su una parte e un piano sull'altra parte. Il pulsante aggiunge il vincolo pointOnPlane. La finestra di dialogo dei vincoli consente di specificare uno scostamento tra il punto e il piano. Questo offset può anche essere capovolto su entrambi i lati del piano. Se l'offset è zero, il vincolo posiziona il punto sul piano.

Sfera su sfera

Selezionare una faccia sferica o una vertice (punto) su entrambe le parti. Il pulsante aggiunge il vincolo sphereCenterIdent. Rende il centro delle sfere, o il centro della sfera e il vertice, o i vertici coincidenti.

Bordo circolare sul bordo circolare

Selezionare un bordo circolare su entrambe le parti. Il pulsante aggiunge il vincolo circularEdge. La finestra di dialogo dei vincoli consente di specificare un offset tra i bordi. Questo offset può anche essere invertito. È inoltre possibile impostare la direzione del vincolo e bloccare la rotazione delle parti. Se l'offset è zero, il vincolo posiziona i bordi concentrici sullo stesso piano.

Asse coincidente

Selezionare una faccia cilindrica o un bordo lineare su entrambe le parti. Il pulsante aggiunge il vincolo axisCoincident. La finestra di dialogo dei vincoli consente di specificare la direzione dell'asse. La finestra di dialogo consente inoltre di bloccare la rotazione delle parti. Il vincolo rende coincidenti gli assi o le linee.

Asse parallelo

Selezionare una faccia cilindrica o un bordo lineare su entrambe le parti. Il pulsante aggiunge il vincolo axisParallel. La finestra di dialogo dei vincoli consente di specificare la direzione dell'asse. Il vincolo rende paralleli gli assi o le linee.

Asse su piano parallelo

Selezionare una faccia cilindrica o un bordo lineare su una parte e un piano sull'altra parte. Il pulsante aggiunge il vincolo axisPlaneParallel. Il vincolo rende l'asse o la linea paralleli al piano.

Asse su piano normale

Selezionare una faccia cilindrica o un bordo lineare su una parte e un piano sull'altra parte. Il pulsante aggiunge il vincolo axisPlaneNormal. Il vincolo rende l'asse o la linea normale rispetto al piano.

Asse su angolo piano

Selezionare una faccia cilindrica o un bordo lineare su una parte e un piano sull'altra parte. Il pulsante aggiunge il vincolo axisPlaneAngle. Il vincolo rende innanzitutto l'asse parallelo al piano. Poi si può aggiustare l'angolo dell'asse nelle impostazioni di vincolo della finestra di dialogo che appare.

Piano parallelo

Selezionare un piano su entrambe le parti. Il pulsante della barra degli strumenti aggiunge il vincolo planesParallel. La finestra di dialogo dei vincoli consente di specificare la direzione del vincolo. Il vincolo rende paralleli i piani.

Piano su piano

Selezionare un piano su entrambe le parti. Il pulsante della barra degli strumenti aggiunge il vincolo planeCoincident. La finestra di dialogo dei vincoli consente di specificare una direzione del vincolo e un offset tra i piani. Questo offset può anche essere capovolto. Se l'offset è zero, il vincolo rende i piani coincidenti.

Angolo tra i piani

Selezionare un piano su entrambe le parti. Il pulsante aggiunge il vincolo angledPlanes. La finestra di dialogo dei vincoli consente di specificare un angolo tra i piani. Il vincolo rende i piani paralleli e imposta l'angolo specificato.

Coincidenza al centro di massa

Selezionare un bordo chiuso o un piano su entrambe le parti. Il pulsante aggiunge il vincolo centerOfMass. La finestra di dialogo dei vincoli consente di specificare un offset tra i bordi o i piani. Questo offset può anche essere capovolto. È inoltre possibile impostare la direzione del vincolo e bloccare la rotazione delle parti. Se l'offset è zero, il vincolo mette i bordi o i piani nello stesso piano.

Sottoassiemi

Un assieme può contenere altri assiemi. Vengono aggiunti come parti premendo il pulsante della barra degli strumenti e selezionando un file *.FCStd contenente un assemblaggio. Tali sottoassiemi possono anche essere modificati come parti utilizzando il pulsante . Per fasi di assemblaggio più elevate, e in caso di modifiche, accertarsi di aggiornare l'assieme tramite il pulsante .

Gestione dei vincoli

I vincoli che possono essere selezionati vengono visualizzati nella barra degli strumenti e nella finestra di dialogo Constraint Tools attivando i pulsanti corrispondenti. La finestra di dialogo Constraint Tools si apre tramite il pulsante . È previsto che rimanga aperto per poter aggiungere rapidamente diversi vincoli all'assieme.

I vincoli esistenti possono essere modificati selezionandoli nell'albero del modello e quindi facendo doppio clic su di essi o utilizzando il pulsante della . Questo apre la finestra di dialogo Constraint Properties.

I vincoli possono essere soppressi temporaneamente selezionandoli nell'albero del modello e cambiando la proprietà DatiSuppressed dell'elemento dell'albero.

È possibile eliminare i vincoli selezionandoli nell'albero del modello e premendo Canc o selezionando una parte con i vincoli nell'albero del modello e utilizzando il pulsante .

Tutti i vincoli possono essere risolti in qualsiasi momento con il pulsante . Se il pulsante della barra degli strumenti è attivato, viene eseguita automaticamente una risoluzione dopo ogni modifica di un vincolo.

Il pulsante ha effetto sull'ultimo vincolo aggiunto. Capovolge la direzione del vincolo.

Elenchi delle parti

Per creare degli elenchi di parti di assiemi, le diverse parti dell'assieme devono ottenere informazioni sulla parte che possano essere lette da A2plus. Questo viene fatto modificando la parte con il pulsante . Nella parte aperta premere il pulsante per creare un foglio di calcolo con il nome #PARTINFO#.

La struttura del foglio di calcolo è come questa:

Compilare i campi grigi con le informazioni che si hanno e che si vuole avere nella lista delle parti finali.

Nell'assemblaggio o nel sottoassieme, utilizzare il pulsante . Viene chiesto se si vuole fare una iterazione ricorsiva su tutti i sottoassiemi. Cliccare su "Sì". Questo crea un nuovo foglio di calcolo con il nome #PARTSLIST# . Contiene le informazioni dei diversi fogli di calcolo "#PARTSINFO#" delle parti in una lista come questa:

La posizione (POS) viene automaticamente impostata in base alla posizione delle parti nell'albero del modello. La parte di livello superiore ottiene POS 1.

La quantità (QTY) viene calcolata automaticamente dall'assieme. Se una parte è presente due volte nell'assieme, ottiene QTY 2.

Se si sono aggiornate delle informazioni sulla parte, è possibile aggiornare di nuovo l'elenco delle parti premendo nuovamente il pulsante .

Per i sottoassiemi è anche possibile creare un foglio di calcolo delle informazioni utilizzando il pulsante . Quando si crea o si aggiorna l'elenco delle parti dell'assieme principale, queste informazioni vengono utilizzate se si clicca su "No" alla domanda se si desidera ripetere l'iterazione ricorsiva su tutti i sottoassiemi. Quindi le diverse parti non sono nell'elenco delle parti ma solo nei sottoassiemi.

Funzioni speciali

Struttura dell'assemblaggio

Il pulsante crea un file HTML con la struttura dell'assieme. Per impostazione predefinita il file viene creato nella cartella del file dell'assemblaggio. La struttura assomiglia a questa:

Gradi di libertà

Il pulsante etichetta tutte le parti dell'assieme con i loro gradi di libertà. Inoltre genera una lista con tutte le parti e le loro dipendenze. L'elenco viene visualizzato nel widget di FreeCAD Vista Report. Se questo widget non è visibile, può essere mostrato facendo clic con il pulsante destro del mouse su una parte vuota dell'area della barra degli strumenti di FreeCAD e quindi selezionandolo nel menu di scelta rapida visualizzato o con il menu Visualizza → Pannelli → Report.

Le etichette dei gradi di libertà possono essere rimosse facendo nuovamente clic sul pulsante .

Etichette delle parti

Il pulsante contrassegna nella vista 3D ogni parte dell'assieme con il proprio nome. Le etichette delle parti possono essere rimosse facendo nuovamente clic sul pulsante .

Forma dell'intero assemblaggio

A volte è necessario avere l'intero assemblaggio combinato in una unica forma. Questa forma può quindi essere utilizzata ad esempio per la stampa 3D nell'ambiente Mesh o per i disegni nell'ambiente TechDraw. Viene creata utilizzando il pulsante della barra degli strumenti . Di default la forma non è visibile. Utilizzare lo stesso pulsante della barra degli strumenti per aggiornare la forma in caso di modifiche all'assieme.

Convert absolute Paths to relative Ones

With the menu A2plus → Misc → Convert absolute paths of imported parts to relative ones you can convert absolute paths of imported parts to relative ones.

Preferenze

Le preferenze di A2plus sono accessibili tramite il menu di FreeCAD Modifica → Preferenze, nella sezione A2plus. È possibile impostare le seguenti opzioni:

Metodo di risoluzione predefinito

Use solving of partial systems
Il risolutore inizia con una parte che ha la proprietà Datifixed Position impostata su "true" e una parte vincolata ad essa. Tutte le altre parti non sono calcolate. Se è possibile trovare una soluzione, la successiva parte vincolata viene aggiunta e calcolata e così via.
Use "magnetic" solver, solving all parts at once
Il risolutore cerca di spostare tutte le parti contemporaneamente in direzione di una parte che ha la proprietà Datifixed Position impostata su "true". Notare che nella maggior parte dei casi questo richiede più tempo per il calcolo di una soluzione.
Force fixed position
Questo imposta per tutte le parti dell'assieme la proprietà Datifixed Position su true. Quindi non viene praticamente eseguito nessun calcolo poiché tutte le parti sono sempre fissate nelle posizioni in cui sono state create.

Comportamento predefinito del risolutore

Solve automatically if a constraint property is changed
Il risolutore viene avviato automaticamente. Equivale ad attivare la funzione premendo il pulsante .

Comportamento durante l'aggiornamento delle parti importate

Recalculate imported parts before updating them
Tutte le parti dell'assieme, compresi i sottoassiemi, vengono aperte in FreeCAD per essere ricostruite utilizzando i valori dei fogli di calcolo.
Questa funzione è progettata per vincolare in modo completamente parametrico. Nota: Questa funzione è molto sperimentale e non è consigliata per progetti importanti.
Problemi noti:
  • L'assemblaggio può essere distrutto a causa di riferimenti errati ai nomi topologici nelle parti.
  • I fogli di calcolo Master possono rompersi quando vengono modificati mentre un file di una parte di riferimento è già stato chiuso. Questo può causare un arresto anomalo di FreeCAD.
Enable recursive update of imported parts
Apre tutti i sottoassiemi in modo ricorsivo per aggiornarli.
Use experimental topological naming
Durante l'importazione di parti nell'assieme, un algoritmo genera dei nomi topologici per ciascun sottoelemento della forma importata. I nomi topologici sono scritti in Datimux Info. Quando è necessario aggiornare una parte importata, questi nomi topologici vengono utilizzati per aggiornare i sottoelementi dei vincoli. Quindi gli assemblaggi diventano più robusti rispetto ai numeri volatili dei sottoelementi di FreeCAD.
Nota: Questo aumenta però le dimensioni dei file e il tempo di calcolo durante l'importazione delle parti. Se è necessario utilizzare la denominazione topologica, bisogna attivarla prima di creare l'assemblaggio.
Inherit per face transparency from parts and subassemblies
Usa le impostazioni di colore e la trasparenza delle parti importate.
Nota: Questa funzione è ancora molto sperimentale e non consigliata per progetti importanti.
Do not import invisible shapes
Questo nasconde le forme di costruzione o di riferimento invisibili. Nota: Nessun vincolo deve essere collegato alle origini o agli oggetti di costruzione in sottoinsiemi o in insiemi superiori, altrimenti l'assemblaggio puoi rompersi.
Use solid union for importing parts and subassemblies
Tutte le parti importate vengono create direttamente come unione.
Questa funzione è utile per le FEM o per la stampa 3D se è consentito un solo solido. L'alternativa è creare in seguito una Forma dell'intero assemblaggio.

Impostazioni dell'interfaccia utente

Show constraints in toolbar
Per risparmiare spazio, se questa opzione non viene utilizzata, i pulsanti della barra degli strumenti per i diversi vincoli non sono visibili. È comunque possibile impostare dei nuovi vincoli utilizzando la finestra di dialogo Constraint Tools (il pulsante ) della barra degli strumenti.
Use native file manager of your OS
Se questa opzione è usata, viene visualizzato la finestra di dialogo dei file del proprio sistema operativo quando si selezionano i file per gli assemblaggi.

Archiviazione dei file

Use relative paths for imported parts
Utilizza i percorsi dei file relativi ai file delle parti.
Use absolute paths for imported parts
Utilizza i percorsi di file assoluti per i file delle parti.
All files are in this project folder
Tutti i file del progetto devono trovarsi nella cartella specificata. Non importa se si trovano in sottocartelle di questa cartella. Nota: Nessun file può esistere più volte nella cartella (ad esempio in diverse sottocartelle).
Questa opzione è utile per lavorare su macchine diverse perché in questo caso è sufficiente copiare la cartella del progetto.

Risoluzione dei problemi

Prima o poi si incontrano dei problema che A2plus non può risolvere i vincoli che sono stati imposti. Per superare questo, ci sono diverse strategie:

Controllo della direzione dei vincoli

Talvolta i vincoli sembrano essere coerentemente definiti, tuttavia non possono essere risolti. Un esempio: si supponga di avere un set di vincoli planesParallel per due piani. Ora si vuole impostare per gli stessi piani il vincolo planeCoincident e A2plus non può risolverlo. Questo succede perchè le direzioni dei vincoli di planesParallel e di planeCoincident sono diverse. Utilizzare la stessa direzione per entrambi i vincoli per risolvere questo problema.

Eliminazione dei vincoli

La maggior parte dei casi di vincoli irrisolvibili si verifica direttamente quando si aggiunge un nuovo vincolo. La soluzione è quindi eliminare il vincolo aggiunto per ultimo. A2plus lo propone anche.

A volte la strategia di cancellazione dei vincoli è l'unica applicabile, ad esempio quando si modifica una parte in FreeCAD in modo che dopo mancano facce o spigoli collegati a vincoli. Si dovrebbe quindi eliminare uno dopo l'altro i vincoli che sono collegati alla parte modificata. Usare il pulsante della barra degli strumenti dopo ogni cancellazione per vedere se si è raggiunto uno stato risolvibile.

Quando si ottiene un assemblaggio che può essere risolto, aggiungere passo dopo passo i vincoli necessari.

Parti mobili

In alcuni casi, il risolutore necessita solo di valori di avvio migliori per risolvere i vincoli. Prendiamo ad esempio il caso che si abbia una parte asse e una parte ruota. Si aggiunge un vincolo axisCoincident e non si ottiene alcuna informazione che il risolutore abbia avuto esito negativo, ma le parti non vengono spostate di conseguenza e nel widget Vista Report di FreeCAD viene visualizzato "REACHED POS-ACCURACY :0.0". Una soluzione per questo è spostare le parti più vicino alla posizione che si desidera ottenere dal vincolo.

Nota: Assicurarsi che almeno una parte del vincolo abbia la proprietà Datifixed Position impostata su false.

Impostazione della proprietà Tip - Entità finale

Se dopo l'importazione in un assieme di A2plus, mancano alcune funzioni della parte controllare la proprietà DatiTip - Entità finale.
A2plus importa i corpi delle parti con tutte le loro funzioni fino alla funzione finale, la funzione Tip. Questo è sensato perché impostare la funzione finale su una determinata funzione significa che tutte le funzioni sottostanti la funzione finale non dovrebbero apparire nell'entità finale. Quindi se in A2plus si perde una parte di funzioni, aprire la parte tramite il pulsante , selezionare un corpo e guardare la sua proprietà DatiTip. Se l'entità finale non è nella funzione in cui la si desidera, fare clic con il pulsante destro del mouse sulla funzione in cui dovrebbe trovarsi e scegliere Set tip. Infine salvare la parte e ricaricare l'assieme usando il pulsante .

A2plus imports bodies of parts with all their features up to the tip feature. This is sensible because setting the tip to a certain feature means that all features behind the tip should not appear in the final part. So if you miss a part feature in A2plus, open the part via the toolbar button , then select a body and look at its property DatiTip. If the tip is not at the feature where you want it, right-click on the feature where the tip should be and choose Set tip. Finally save the part and reload the assembly using the toolbar button .

Riparare l'albero dell'assieme

Se non si riesce a trovare una ragione chiara per cui alcuni vincoli non possono essere risolti, si può provare a utilizzare il pulsante . Questo risolve tutti i vincoli e li raggruppa di nuovo sotto le diverse parti.

Migrating old A2plus assemblies

Assemblies created with A2plus older than March 2019 do not show the correct icons for imported parts and have obsolete properties. These assemblies can be migrated to A2plus version 0.4.35 and newer using the menu A2plus → Misc → Migrate proxies of imported parts. After doing this, you must save and reopen your assembly file.

Evitare i caratteri accentati

This strategy is not necessary for Windows.

Su alcuni sistemi operativi si possono avere problemi se i nomi dei file o i percorsi dei file delle parti o dell'assieme contengono caratteri accentati. Quindi evitare tali caratteri e tutti i caratteri speciali in generale.

Posizione di fissaggio

Questa strategia non è più necessaria per gli assemblaggi creati con A2plus 0.3.11 o successivi perché ora A2plus presenta un avvertimento per le posizioni fisse mancanti.

Quando si imposta un vincolo tra due parti e nessuna parte ha la proprietà Datifixed Position impostata su true o è connessa da un vincolo a un'altra parte con Datifixed Position impostato su true, il vincolo non può essere risolto. Lo stesso accade se entrambe le parti del vincolo hanno Datifixed Position impostata su true.

In questi casi A2plus restituisce l'informazione che la soluzione non è possibile, ma a volte si vede solo che le parti non vengono spostate di conseguenza e nel widget Report di FreeCAD viene visualizzato "REACHED POS-ACCURACY :0.0". Ciò significa che il risolutore ha completato la risoluzione senza errori, ma che in realtà non è stato in grado di risolvere i vincoli.

Pertanto, verificare che almeno una delle parti nell'assieme abbia Datifixed Position impostata su "true". Quindi assicurarsi di impostare solo i vincoli su una parte che è in qualche modo collegata alla parte fissa. Per visualizzare queste dipendenze, vedere la sezione Struttura dell'assemblaggio.

Parti rotanti

Questa strategia non è più necessaria per gli assiemi creati con A2plus 0.4.0 o successivi perché ora A2plus ruota le parti automaticamente un po' in background per ottenere un angolo iniziale sufficiente per il risolutore.

Il risolutore spesso fallisce con il vincolo angledPlanes se i due piani selezionati hanno un angolo attuale di 0 ° o 180 °. (Le parti non vengono spostate di conseguenza e nel widget Report di FreeCAD si vede "REACHED POS-ACCURACY :0.0".) Una soluzione per questo è di ruotare una parte di alcuni gradi usando la funzione Trasforma di FreeCAD (fare clic con il tasto destro sulla parte nell'albero del modello e selezionare Transform nel menu di scelta rapida).

Nota: Assicurarsi che almeno una parte del vincolo abbia la proprietà Datifixed Position impostata su false.

Animazione

A2plus offers animations via dragging and via Python scripts.

Dragging

Dragging animations are interactive since you trigger it by dragging a part of the assembly. To get these kind of animations:

  1. Fully constrain the part whose movement or rotation should be animated
  2. Click on the toolbar button . This enables the dragging mode.
  3. Click on the desired part in the assembly.
  4. Now you can move the mouse and the part will follow the movement of the mouse within the defined constraints.
  5. To end the dragging mode, left click in the assembly or press ESC.

Here is an example assembly to try out the dragging animation: A2p_example-for-dragging-animation.FCStd

This is the dragging animation using the example assembly:

Scripting

Despite the dragging mode offers nice interactive animations, they are sometimes not precise enough for screencasts or videos. Scripted animations have the advantage that they animate movements and rotations in a defined way. You can for example rotate a part by exactly 10° back and forth. The following examples use an assembly where a part should be rotated. If you try to animate this using the dragging mode, you will see how hard it is to get a back and forth rotation that you can e.g. show your boss in a presentation. With the interactive example script, however, this is an easy task.

A scripted animation works usually this way:

  1. The assembly is fully constrained
  2. The script changes a parameter, for example the position or rotation angle of a part
  3. After the parameter change, the assembly constraints are solved
  4. Step 2. and 3. are repeated to get the animation

It is also possible to change instead of a placement parameter a constraint, for example the distance between 2 planes.

Simple Script Example

The simplest way to script an animation is a non-interactive animation that follows a defined movement. Here is an example: First download this assembly file: A2p_animated-example.FCStd and also this Python script: A2p_animation-example-script.py.

This is the content of the script and the lines beginning with a '#' describe what the different script lines do:

# import libraries
import time, math, PySide
import A2plus.a2p_solversystem as a2p_solver

# we use steps of 1 degree
step = 1
# wait 1 ms between every step
timeout = 0.001
# initial angle is 0 degree
angle = 0
# we take the currently opened document
document = FreeCAD.activeDocument()
# we want later change the rotation angle of the part "star_wheel_001"
starWheel = document.getObject("star_wheel_001")
# define a progress dialog running from 0 to 360
progressDialog = PySide.QtGui.QProgressDialog(u"Animation progress", u"Stop", 0, 360)

# the while block is the main loop to change the angle and solve
# the assembly constraints subsequently
while angle < 360: # run this loop until we have one full turn (360 degrees)
    # increase the rotation angle
    angle += step
    # set the new angle to the progress dialog
    progressDialog.setValue(angle)
    # change the rotation angle of the part "star_wheel_001"
    starWheel.Placement.Rotation.Angle = math.radians(angle)
    # solve the constraints 
    a2p_solver.solveConstraints(document, useTransaction=True)
    # update the view after the solving ('Gui' stands for 'graphical user interface')
    FreeCADGui.updateGui()
    # bring the progress dialog to front
    PySide.QtGui.QWidget.raise_(progressDialog)
    # if 'Stop' was pressed in the dialog, exit the loop
    if progressDialog.wasCanceled():
        angle = 360
    # wait some time before performing the next step
    time.sleep(timeout)

To use the script to perform the animation, we must

  1. Open the assembly file in FreeCAD.
  2. Open the script file in FreeCAD.
  3. Click on the toolbar button to execute the script (also called macro).
  4. Change to the tab of the assembly to see the rotation.

To practice, just change something in the script and execute it afterwards. For example increase step to 5.

This is the result of the example animation:

Interactive Script Example

The first script example demonstrated how to create an animation without any user feedback. For most applications you need to interact with the animation. For example the interesting issue in the example is to see how the driving pins cross the center groove of the wheel. To have a closer look you might present this detail to your colleagues or boss. Therefore you need an interactive solution.

This can be done by using a custom animation dialog with a slider. By moving the slider you can set the rotation angle and therefore rotate back and forth at interesting position.

We use the same assembly file: A2p_animated-example.FCStd and this Python script: A2p_animation-example-script.py.

This is the content of the script to get the interactive animation dialog:

# import libraries
import time, math, PySide, sys
import FreeCAD.A2plus.a2p_solversystem as a2p_solver
from FreeCAD import Units
from PySide import QtCore, QtGui

# wait 1 ms after every calculation
timeout = 0.001
# we take the currently opened document
document = FreeCAD.activeDocument()
# we want later change the rotation angle of the part "star_wheel_001"
starWheel = document.getObject("star_wheel_001")

class AnimationDlg(QtGui.QWidget): # the animation dialog

    def __init__(self): # to initialize the dialog
        super(AnimationDlg, self).__init__()
        self.initUI()

    def initUI(self): # the definition of the dialog components
        self.setMinimumSize(self.minimumSizeHint()) # set the minimal dialog size to minimum
        self.setWindowTitle('Animation Dialog')
        # use a grid layout for the whole form
        self.mainLayout = QtGui.QGridLayout()
        self.lineNo = 0 # first dialog grid line
        # add description label
        DescriptionLabel = QtGui.QLabel(self)
        DescriptionLabel.setText("Change slider to change rotation angle")
        self.mainLayout.addWidget(DescriptionLabel,self.lineNo,0,1,4)
         # next dialog grid line
        self.lineNo += 1
        # add a label; there is no need for the "self." prefix because we don't want to change the label later
        LabelMin = QtGui.QLabel(self)
        LabelMin.setText("Min")
        LabelMin.setFixedHeight(32)
        self.mainLayout.addWidget(LabelMin,self.lineNo,0)
        # add a spin edit to define the slider minimum
        self.MinEdit = QtGui.QSpinBox(self)
        # get the angle unit as string
        self.MinEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
        self.MinEdit.setMaximum(999)
        self.MinEdit.setMinimum(0)
        self.MinEdit.setSingleStep(10)
        self.MinEdit.setValue(0)
        self.MinEdit.setFixedHeight(32)
        self.MinEdit.setToolTip("Minimal angle for the slider")
        QtCore.QObject.connect(self.MinEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMinEdit)
        self.mainLayout.addWidget(self.MinEdit,self.lineNo,1)
        # add the slider
        self.slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
        self.slider.setRange(0, 360)
        self.slider.setValue(0)
        self.slider.setFixedHeight(32)
        self.slider.setToolTip("Move the slider to change the rotation angle")
        QtCore.QObject.connect(self.slider, QtCore.SIGNAL("sliderMoved(int)"), self.handleSliderValue)
        self.mainLayout.addWidget(self.slider,self.lineNo,2)
        # add a label
        LabelMax = QtGui.QLabel(self)
        LabelMax.setText("Max")
        LabelMax.setFixedHeight(32)
        self.mainLayout.addWidget(LabelMax,self.lineNo,3)
        # add a spin edit to define the slider maximum
        self.MaxEdit = QtGui.QSpinBox(self)
        # get the angle unit as string
        self.MaxEdit.setSuffix(" " + str(FreeCAD.Units.Quantity(1, FreeCAD.Units.Angle))[2:])
        self.MaxEdit.setMaximum(999)
        self.MaxEdit.setMinimum(1)
        self.MaxEdit.setSingleStep(10)
        self.MaxEdit.setValue(360)
        self.MaxEdit.setFixedHeight(32)
        self.MaxEdit.setToolTip("Maximal angle for the slider")
        QtCore.QObject.connect(self.MaxEdit, QtCore.SIGNAL("valueChanged(int)"), self.setMaxEdit)
        self.mainLayout.addWidget(self.MaxEdit,self.lineNo,4)
         # next dialog grid line
        self.lineNo += 1
        # add a spacer
        self.mainLayout.addItem(QtGui.QSpacerItem(10,10), 0, 0)
        # add a label
        LabelCurrent = QtGui.QLabel(self)
        LabelCurrent.setText("Current angle:")
        LabelCurrent.setFixedHeight(32)
        self.mainLayout.addWidget(LabelCurrent,self.lineNo,1)
        # output the current angle
        self.CurrentAngle = QtGui.QLineEdit(self)
        self.CurrentAngle.setText(str(0))
        self.CurrentAngle.setFixedHeight(32)
        self.CurrentAngle.setToolTip("Current rotation angle")
        self.CurrentAngle.isReadOnly()
        self.mainLayout.addWidget(self.CurrentAngle,self.lineNo,2)
        # add label for the unit
        LabelUnit = QtGui.QLabel(self)
        LabelUnit.setText("deg")
        LabelUnit.setFixedHeight(32)
        self.mainLayout.addWidget(LabelUnit,self.lineNo,3)
        # button to close the dialog
        self.Close = QtGui.QPushButton(self)
        self.Close.setText("Close")
        self.Close.setFixedHeight(32)
        self.Close.setToolTip("Closes the dialog")
        QtCore.QObject.connect(self.Close, QtCore.SIGNAL("clicked()"), self.CloseClicked)
        self.mainLayout.addWidget(self.Close,self.lineNo,4)
        # place the defined grid layout to the dialog
        self.setLayout(self.mainLayout)
        self.update()

    def handleSliderValue(self):
        # set slider value as angle
        starWheel.Placement.Rotation.Angle = math.radians(self.slider.value())
        # output current angle
        self.CurrentAngle.setText(str(self.slider.value()))
        # solve the constraints 
        a2p_solver.solveConstraints(document)
        # update the view after the solving ('Gui' stands for 'graphical user interface')
        FreeCADGui.updateGui()
        # wait some time, important to give time to perform calculations
        time.sleep(timeout)

    def setMinEdit(self):
        # assure that the minimum is samller than the maximum
        if self.MinEdit.value() >=  self.MaxEdit.value():
            self.MaxEdit.setValue(self.MinEdit.value() + 1)
        self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())

    def setMaxEdit(self):
        # assure that the minimum is samller than the maximum
        if self.MinEdit.value() >=  self.MaxEdit.value():
            self.MinEdit.setValue(self.MaxEdit.value() - 1)
        self.slider.setRange(self.MinEdit.value(), self.MaxEdit.value())

    def CloseClicked(self):
        AnimationDialog.close()

# create and show the defined dialog
AnimationDialog = AnimationDlg()
AnimationDialog.show()

# run this loop when the dialog is visible
while AnimationDialog.isVisible():
    # update the view; important to give the OS feedback the dialog is alive
    FreeCADGui.updateGui()
    # bring the dialog to front, so that the dialog is always visible
    QtGui.QWidget.raise_(AnimationDialog)
    # output slider value here too because during the calculation the slider might have been moved
    AnimationDialog.CurrentAngle.setText(str(AnimationDialog.slider.value()))

The dialog defined in the script looks like this:

Script Commands

To understand the script syntax better, here is some command info:

The command

starWheel.Placement.Rotation.Angle = math.radians(angle)

means, we change the placement property Rotation.Angle of the part get got previously as "starWheel". This property gets the angle as radian. The function radians() from the library math converts the angle from degree to radian.


The property Rotation.Angle uses the current placement axis of the part (in our example the x-axis). To rotate the part e.g. around the z-axis one can set the rotation axis (before calling the rotation command) using the command

starWheel.Placement.Rotation.Axis = FreeCAD.Vector(0,0,1)

Instead of rotating, parts can also be moved. To change for example the placement in y-direction of the wheel, the command would be

starWheel.Placement.Base.y = PositionShift

In this case we would not define the variable angle but PositionShift that we change on every loop run.

There are different ways to set the placement of a part. Some are documented here. Unfortunately there is no list with all possible placement commands.


The command

a2p_solver.solveConstraints(document, useTransaction=False/True)

is a A2plus-specific command. It solves the assembly constraints of the assembly we previously got as "document". The option useTransaction specifies if FreeCAD should store every change in the undo/redo stack. For large animations you might therefore set it to False.