9891 lines
816 KiB
HTML
9891 lines
816 KiB
HTML
<html><head><title>Manual/it</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><link type='text/css' href='wiki.css' rel='stylesheet'></head><body><h1>Manual/it</h1></div>
|
||
|
||
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="mw-parser-output"><h1 align="center"><span class="mw-headline" id="Manuale_di_FreeCAD">Manuale di FreeCAD</span></h1>
|
||
<p>Questo è il manuale FreeCAD. Comprende le parti essenziali del <a href="https://www.freecadweb.org/wiki/index.php?title=Main_Page/it" title="Main Page/it">Wiki della documentazione di FreeCAD</a>.
|
||
</p><p>Questa versione è stata creata principalmente per essere stampata come un unico grande documento.
|
||
</p><p>Se si sta leggendo questo online, si consiglia di andare direttamente alla <a href="https://www.freecadweb.org/wiki/index.php?title=Online_Help_Toc/it" title="Online Help Toc/it">Guida in linea</a>, che è più facile da esplorare.
|
||
</p>
|
||
<div class="floatright"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Crystal_Clear_app_tutorials.png" class="image" title="150"><img alt="150" src="Crystal_Clear_app_tutorials.png" width="128" height="128" /></a></div>
|
||
<h3><span class="mw-headline" id="Benvenuti_nelle_pagine_dell.27aiuto_in_linea_di_FreeCAD">Benvenuti nelle pagine dell'aiuto in linea di FreeCAD</span></h3>
|
||
<p>Questa documentazione è stata creata automaticamente a partire dai contenuti del wiki ufficiale di FreeCAD, raggiungibile anche attraverso l'indirizzo <a rel="nofollow" class="external free" href="https://www.freecadweb.org/wiki/index.php?title=Main_Page">http://www.freecadweb.org/wiki/index.php?title=Main_Page</a>. Poiché il wiki on-line è aggiornato e revisionato con continuità dalla community di FreeCAD, è possibile che la documentazione disponibile on-line sia più esaustiva e completa. In ogni caso crediamo che questa documentazione contenga tutte le informazioni che possono essere utili. Se così non fosse è possibile consultare il <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/index.php">forum</a> di FreeCAD, dove qualcuno sarà sicuramente in grado di aiutarvi.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Come_utilizzare_FreeCAD">Come utilizzare FreeCAD</span></h3>
|
||
<p>Questo manuale è diviso in varie sezioni: Introduzione, utilizzo, scripting e sviluppo. Le ultime tre sezioni sono rivolte a diverse tipologie di utenti: utilizzatore, interessato al semplice utilizzo del programma; power-user, interessato allo sviluppo di script ed a personalizzazioni avanzate dell'ambiente; sviluppatore, che considera FreeCAD una base di partenza per la stesura di applicazioni personali per gli scopi più disparati. Se siete del tutto nuovi in FreeCAD vi consigliamo di partire dalla sezione: Introduzione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Contribuire">Contribuire</span></h3>
|
||
<p>Come sicuramente vi sarà capitato di constatare, i programmatori sono pessimi scrittori di guide e di help! Per loro, naturalmente, è tutto estremamente chiaro, avendo sviluppato personalmente tutte le caratteristiche del programma. E' quindi fondamentale, che gli utenti più esperti diano una mano nella stesura degli help e nella loro correzione. Già, ci riferiamo proprio a te! Ti stai chiedendo come? Semplice, accedi alla home del wiki dall'indirizzo <a rel="nofollow" class="external free" href="http://www.freecadweb.org/wiki/index.php">http://www.freecadweb.org/wiki/index.php</a> nella sezione User. Avrai bisogno di un <a rel="nofollow" class="external text" href="http://sourceforge.net/">account di sourceforge</a> per loggarti, dopodiché puoi iniziare a dare il tuo contributo! Inoltre, guarda nella pagina <a rel="nofollow" class="external free" href="https://www.freecadweb.org/wiki/index.php?title=Help_FreeCAD/it">http://www.freecadweb.org/wiki/index.php?title=Help_FreeCAD/it</a> per vedere in quali altri modi si può aiutare FreeCAD.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Introduzione">Introduzione</span></h2>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Freecad_default.jpg" class="image"><img alt="Freecad default.jpg" src="1024px-Freecad_default.jpg" width="1024" height="604" srcset="/wiki/images/thumb/2/2a/Freecad_default.jpg/1536px-Freecad_default.jpg 1.5x, /wiki/images/2/2a/Freecad_default.jpg 2x" /></a></div></div>
|
||
<p><b>FreeCAD</b> è un software <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/CAD"><b>CAD</b></a> di modellazione parametrica 3D. Lo sviluppo ed il codice sorgente vengono portati aventi tramite la filosofia <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Open_source">Open Source</a> (Licenza LGPL). FreeCAD è studiato per l'<a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Ingegneria_meccanica">ingegneria meccanica</a> e per il <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Product_design">product design</a> (progettazione del prodotto) ma è sfruttabile per un'ampia gamma di applicazioni, che vanno dall'architettura ad altre discipline ingegneristiche.
|
||
</p><p>L'utilizzo e le funzioni di FreeCAD sono simili a quelle di <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Catia">Catia</a>, <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Solidworks">SolidWorks</a> o <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Solid_Edge">Solid Edge</a>, e rientra anche nella categoria di <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/CAD"><b>MCAD</b></a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Product_Lifecycle_Management"><b>PLM</b></a>, <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/CAx"><b>CAx</b></a> e <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Computer-aided_engineering"><b>CAE</b></a>. È un <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Parametric_feature_based_modeler">Modellatore parametrico di solidi</a> con una architettura modulare che permette l'aggiunta e lo sviluppo di nuove funzioni con estrema facilità, senza modificare il "cuore" del software.
|
||
</p><p>Come ogni moderno strumento di modellazione 3D <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/CAD">CAD</a> è provvisto di uno strumento di visualizzazione in 2D a partire dal modello spaziale, ma il disegno in 2D di tipo <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/AutoCAD#AutoCAD_LT">AutoCAD LT</a> non è lo scopo del software, e non rientrano negli interessi principali neanche le animazioni come <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Maya_(software)">Maya</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/3ds_Max">3ds Max</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Blender_%28software%29">Blender</a> o <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/CINEMA_4D">Cinema 4D</a>, anche se, grazie alla sua estrema flessibilità, FreeCAD può essere molto utile in numerosi altri campi che non fanno parte dei suoi interessi attuali.
|
||
</p><p>FreeCAD fa abbondante uso delle eccellenti librerie open-source disponibili nel campo della <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Scientific_Computation">computazione scientifica</a>. Tra questi <a rel="nofollow" class="external text" href="http://OpenCascade.org">OpenCascade</a>, un potente kernel CAD, <a rel="nofollow" class="external text" href="http:///www.Coin3D.org">Coin3D</a>, che incarna gli intenti di <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_Inventor">Open Inventor</a>, <a rel="nofollow" class="external text" href="http://www.qtsoftware.com/">Qt</a>, il framework per lo sviluppo di Interfacce Utente, e <a rel="nofollow" class="external text" href="http://www.python.org">Python</a>, uno dei migliori linguaggi di script attualmente disponibili. FreeCAD può anche essere utilizzato come libreria per altri software.
|
||
</p><p>Inoltre, FreeCAD è totalmente <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Cross-platform">multi-piattaforma</a>, ed allo stato attuale è in grado di funzionare senza problemi su Windows, Linux/Unix e Mac OSX, conservando inalterate le caratteristiche e le funzionalità su ognuna di queste piattaforme.
|
||
</p><p>Per ulteriori informazioni sulle funzionalità di FreeCAD, date un'occhiata alle <a href="https://www.freecadweb.org/wiki/index.php?title=Feature_list/it" title="Feature list/it">caratteristiche</a>, muovete i <a href="https://www.freecadweb.org/wiki/index.php?title=Getting_started/it" title="Getting started/it">primi passi</a>, oppure accedete direttamente al <a href="https://www.freecadweb.org/wiki/index.php?title=User_hub/it" title="User hub/it">Centro utente</a>, o vedere gli <a href="https://www.freecadweb.org/wiki/index.php?title=Screenshots/it" title="Screenshots/it">screenshot</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Informazioni_sul_progetto_FreeCAD">Informazioni sul progetto FreeCAD</span></h3>
|
||
<p>Il progetto FreeCAD è stato avviato fino al 2001, come descritto nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=History/it" title="History/it">Storia di FreeCAD</a>.
|
||
</p><p>FreeCAD è mantenuto e sviluppato da una comunità di sviluppatori appassionati e utenti (vedere la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Contributors/it" title="Contributors/it">credits</a>). Essi lavorano su FreeCAD volontariamente, nel loro tempo libero. Non possono garantire che FreeCAD contenga o conterrà tutto ciò che si potrebbe desiderare, ma di solito fanno del loro meglio! La comunità si ritrova sul <a rel="nofollow" class="external text" href="http://forum.freecadweb.org">FreeCAD forum</a>, dove sono discusse la maggior parte delle idee e delle decisioni. Sentitevi liberi di unirvi a noi!
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Caratteristiche_di_FreeCAD">Caratteristiche di FreeCAD</span></h2>
|
||
<p><br />
|
||
Questa è una lista estesa, ma non completa, delle funzionalità (caratteristiche) già implementate in FreeCAD.
|
||
Se siete interessati a conoscere gli sviluppi futuri è possibile consultare il <a href="https://www.freecadweb.org/wiki/index.php?title=Development_roadmap/it" title="Development roadmap/it">Piano di sviluppo</a>.
|
||
Per un approccio sommario alle caratteristiche sono anche disponibili gli <a href="https://www.freecadweb.org/wiki/index.php?title=Screenshots/it" title="Screenshots/it">screenshot</a>.
|
||
</p>
|
||
<div style="clear:right; margin-bottom: .5em; float: right; padding: .5em 0 .8em 1.4em; background: none;"><div id="toc" class="toc"><div class="toctitle"><h2>Contents</h2></div>
|
||
<ul>
|
||
<li class="toclevel-1"><a href="#Manuale_di_FreeCAD"><span class="tocnumber">1</span> <span class="toctext">Manuale di FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-2"><a href="#Benvenuti_nelle_pagine_dell.27aiuto_in_linea_di_FreeCAD"><span class="tocnumber">1.1</span> <span class="toctext">Benvenuti nelle pagine dell'aiuto in linea di FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Come_utilizzare_FreeCAD"><span class="tocnumber">1.2</span> <span class="toctext">Come utilizzare FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Contribuire"><span class="tocnumber">1.3</span> <span class="toctext">Contribuire</span></a></li>
|
||
<li class="toclevel-2"><a href="#Introduzione"><span class="tocnumber">1.4</span> <span class="toctext">Introduzione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Informazioni_sul_progetto_FreeCAD"><span class="tocnumber">1.4.1</span> <span class="toctext">Informazioni sul progetto FreeCAD</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Caratteristiche_di_FreeCAD"><span class="tocnumber">1.5</span> <span class="toctext">Caratteristiche di FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Note_di_sviluppo"><span class="tocnumber">1.6</span> <span class="toctext">Note di sviluppo</span></a></li>
|
||
<li class="toclevel-2"><a href="#Funzioni_principali"><span class="tocnumber">1.7</span> <span class="toctext">Funzioni principali</span></a></li>
|
||
<li class="toclevel-2"><a href="#Funzioni_Generali"><span class="tocnumber">1.8</span> <span class="toctext">Funzioni Generali</span></a></li>
|
||
<li class="toclevel-2"><a href="#Funzioni_in_fase_di_sviluppo"><span class="tocnumber">1.9</span> <span class="toctext">Funzioni in fase di sviluppo</span></a></li>
|
||
<li class="toclevel-2"><a href="#Ambienti_complementari"><span class="tocnumber">1.10</span> <span class="toctext">Ambienti complementari</span></a></li>
|
||
<li class="toclevel-2"><a href="#Installazione"><span class="tocnumber">1.11</span> <span class="toctext">Installazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Semplice_installazione_con_Microsoft_Installer"><span class="tocnumber">1.11.1</span> <span class="toctext">Semplice installazione con Microsoft Installer</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_da_riga_di_comando"><span class="tocnumber">1.11.2</span> <span class="toctext">Installazione da riga di comando</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Installazione_non_interattiva"><span class="tocnumber">1.11.2.1</span> <span class="toctext">Installazione non interattiva</span></a></li>
|
||
<li class="toclevel-4"><a href="#Limitazione_dell.27interfaccia_utente"><span class="tocnumber">1.11.2.2</span> <span class="toctext">Limitazione dell'interfaccia utente</span></a></li>
|
||
<li class="toclevel-4"><a href="#Directory_di_destinazione"><span class="tocnumber">1.11.2.3</span> <span class="toctext">Directory di destinazione</span></a></li>
|
||
<li class="toclevel-4"><a href="#Installazione_per_tutti_gli_utenti"><span class="tocnumber">1.11.2.4</span> <span class="toctext">Installazione per tutti gli utenti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Selezione_delle_caratteristiche"><span class="tocnumber">1.11.2.5</span> <span class="toctext">Selezione delle caratteristiche</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Disinstallazione"><span class="tocnumber">1.11.3</span> <span class="toctext">Disinstallazione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_Amministrativa"><span class="tocnumber">1.11.4</span> <span class="toctext">Installazione Amministrativa</span></a></li>
|
||
<li class="toclevel-3"><a href="#Advertisement_-_Annunciare_FreeCAD"><span class="tocnumber">1.11.5</span> <span class="toctext">Advertisement - Annunciare FreeCAD</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_automatica_su_un_gruppo_di_macchine"><span class="tocnumber">1.11.6</span> <span class="toctext">Installazione automatica su un gruppo di macchine</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_su_Linux_con_Crossover_Office"><span class="tocnumber">1.11.7</span> <span class="toctext">Installazione su Linux con Crossover Office</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Ubuntu_e_sistemi_basati_su_Ubuntu"><span class="tocnumber">1.12</span> <span class="toctext">Ubuntu e sistemi basati su Ubuntu</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Repository_ufficiale_di_Ubuntu"><span class="tocnumber">1.12.1</span> <span class="toctext">Repository ufficiale di Ubuntu</span></a></li>
|
||
<li class="toclevel-3"><a href="#Versione_stabile_da_PPA_tramite_GUI"><span class="tocnumber">1.12.2</span> <span class="toctext">Versione stabile da PPA tramite GUI</span></a></li>
|
||
<li class="toclevel-3"><a href="#Versione_stabile_da_PPA_tramite_console"><span class="tocnumber">1.12.3</span> <span class="toctext">Versione stabile da PPA tramite console</span></a></li>
|
||
<li class="toclevel-3"><a href="#Versione_daily_da_PPA_tramite_console"><span class="tocnumber">1.12.4</span> <span class="toctext">Versione daily da PPA tramite console</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Debian_e_altri_sistemi_basati_su_Debian"><span class="tocnumber">1.13</span> <span class="toctext">Debian e altri sistemi basati su Debian</span></a></li>
|
||
<li class="toclevel-2"><a href="#OpenSUSE"><span class="tocnumber">1.14</span> <span class="toctext">OpenSUSE</span></a></li>
|
||
<li class="toclevel-2"><a href="#Gentoo"><span class="tocnumber">1.15</span> <span class="toctext">Gentoo</span></a></li>
|
||
<li class="toclevel-2"><a href="#Altri"><span class="tocnumber">1.16</span> <span class="toctext">Altri</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Installazione_manuale_in_sistemi_basati_su_.deb"><span class="tocnumber">1.16.1</span> <span class="toctext">Installazione manuale in sistemi basati su .deb</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_in_altri_sistemi_Linux.2FUnix"><span class="tocnumber">1.16.2</span> <span class="toctext">Installazione in altri sistemi Linux/Unix</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installare_le_versioni_per_Windows_in_Linux"><span class="tocnumber">1.16.3</span> <span class="toctext">Installare le versioni per Windows in Linux</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_semplice"><span class="tocnumber">1.16.4</span> <span class="toctext">Installazione semplice</span></a></li>
|
||
<li class="toclevel-3"><a href="#Disinstallazione_2"><span class="tocnumber">1.16.5</span> <span class="toctext">Disinstallazione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Informazioni_su_FreeCAD"><span class="tocnumber">1.17</span> <span class="toctext">Informazioni su FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Aggiornamenti"><span class="tocnumber">1.18</span> <span class="toctext">Aggiornamenti</span></a></li>
|
||
<li class="toclevel-2"><a href="#Prefazione"><span class="tocnumber">1.19</span> <span class="toctext">Prefazione</span></a></li>
|
||
<li class="toclevel-2"><a href="#Installazione_2"><span class="tocnumber">1.20</span> <span class="toctext">Installazione</span></a></li>
|
||
<li class="toclevel-2"><a href="#Esplorare_FreeCAD"><span class="tocnumber">1.21</span> <span class="toctext">Esplorare FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Navigare_nello_spazio_3D"><span class="tocnumber">1.22</span> <span class="toctext">Navigare nello spazio 3D</span></a></li>
|
||
<li class="toclevel-2"><a href="#Primi_passi_con_FreeCAD"><span class="tocnumber">1.23</span> <span class="toctext">Primi passi con FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Lavorare_con_gli_ambienti_PartDesign_e_Sketcher"><span class="tocnumber">1.24</span> <span class="toctext">Lavorare con gli ambienti PartDesign e Sketcher</span></a></li>
|
||
<li class="toclevel-2"><a href="#Lavorare_con_gli_ambienti_Draft_e_Arch"><span class="tocnumber">1.25</span> <span class="toctext">Lavorare con gli ambienti Draft e Arch</span></a></li>
|
||
<li class="toclevel-2"><a href="#Script"><span class="tocnumber">1.26</span> <span class="toctext">Script</span></a></li>
|
||
<li class="toclevel-2"><a href="#Lavorare_con_FreeCAD"><span class="tocnumber">1.27</span> <span class="toctext">Lavorare con FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Navigazione"><span class="tocnumber">1.28</span> <span class="toctext">Navigazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Navigazione_CAD_.28default.29"><span class="tocnumber">1.28.1</span> <span class="toctext">Navigazione CAD (default)</span></a></li>
|
||
<li class="toclevel-3"><a href="#Navigazione_OpenInventor"><span class="tocnumber">1.28.2</span> <span class="toctext">Navigazione OpenInventor</span></a></li>
|
||
<li class="toclevel-3"><a href="#Navigazione_Blender"><span class="tocnumber">1.28.3</span> <span class="toctext">Navigazione Blender</span></a></li>
|
||
<li class="toclevel-3"><a href="#Navigazione_Touchpad"><span class="tocnumber">1.28.4</span> <span class="toctext">Navigazione Touchpad</span></a></li>
|
||
<li class="toclevel-3"><a href="#Navigazione_Gesture_.28Gesture_Navigation.29_.28v0.16.29"><span class="tocnumber">1.28.5</span> <span class="toctext">Navigazione Gesture (Gesture Navigation) (v0.16)</span></a></li>
|
||
<li class="toclevel-3"><a href="#Navigazione_Maya-Gesture"><span class="tocnumber">1.28.6</span> <span class="toctext">Navigazione Maya-Gesture</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#La_selezione_degli_oggetti"><span class="tocnumber">1.29</span> <span class="toctext">La selezione degli oggetti</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Selezione_semplice"><span class="tocnumber">1.29.1</span> <span class="toctext">Selezione semplice</span></a></li>
|
||
<li class="toclevel-3"><a href="#Preselezione"><span class="tocnumber">1.29.2</span> <span class="toctext">Preselezione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#La_manipolazione_degli_oggetti"><span class="tocnumber">1.30</span> <span class="toctext">La manipolazione degli oggetti</span></a></li>
|
||
<li class="toclevel-2"><a href="#Supporto_Hardware"><span class="tocnumber">1.31</span> <span class="toctext">Supporto Hardware</span></a></li>
|
||
<li class="toclevel-2"><a href="#Problemi_con_Mac_OS_X"><span class="tocnumber">1.32</span> <span class="toctext">Problemi con Mac OS X</span></a></li>
|
||
<li class="toclevel-2"><a href="#I_documenti_di_FreeCAD"><span class="tocnumber">1.33</span> <span class="toctext">I documenti di FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Applicazione_e_Interfaccia_utente"><span class="tocnumber">1.33.1</span> <span class="toctext">Applicazione e Interfaccia utente</span></a></li>
|
||
<li class="toclevel-3"><a href="#Script_2"><span class="tocnumber">1.33.2</span> <span class="toctext">Script</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Le_impostazioni_generali"><span class="tocnumber">1.34</span> <span class="toctext">Le impostazioni generali</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Generale"><span class="tocnumber">1.34.1</span> <span class="toctext">Generale</span></a></li>
|
||
<li class="toclevel-3"><a href="#Documento"><span class="tocnumber">1.34.2</span> <span class="toctext">Documento</span></a></li>
|
||
<li class="toclevel-3"><a href="#Editore"><span class="tocnumber">1.34.3</span> <span class="toctext">Editore</span></a></li>
|
||
<li class="toclevel-3"><a href="#Finestra_di_output"><span class="tocnumber">1.34.4</span> <span class="toctext">Finestra di output</span></a></li>
|
||
<li class="toclevel-3"><a href="#Macro"><span class="tocnumber">1.34.5</span> <span class="toctext">Macro</span></a></li>
|
||
<li class="toclevel-3"><a href="#Unit.C3.A0"><span class="tocnumber">1.34.6</span> <span class="toctext">Unità</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Le_impostazioni_di_visualizzazione"><span class="tocnumber">1.35</span> <span class="toctext">Le impostazioni di visualizzazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Vista_3D"><span class="tocnumber">1.35.1</span> <span class="toctext">Vista 3D</span></a></li>
|
||
<li class="toclevel-3"><a href="#Colori"><span class="tocnumber">1.35.2</span> <span class="toctext">Colori</span></a></li>
|
||
<li class="toclevel-3"><a href="#Colori_parte"><span class="tocnumber">1.35.3</span> <span class="toctext">Colori parte</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Ambienti_incorporati"><span class="tocnumber">1.36</span> <span class="toctext">Ambienti incorporati</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Ambienti_di_lavoro"><span class="tocnumber">1.36.1</span> <span class="toctext">Ambienti di lavoro</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Ambienti_aggiuntivi"><span class="tocnumber">1.37</span> <span class="toctext">Ambienti aggiuntivi</span></a></li>
|
||
<li class="toclevel-2"><a href="#Utilizzare_il_modulo_mesh"><span class="tocnumber">1.38</span> <span class="toctext">Utilizzare il modulo mesh</span></a></li>
|
||
<li class="toclevel-2"><a href="#Link"><span class="tocnumber">1.39</span> <span class="toctext">Link</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Gli_strumenti"><span class="tocnumber">1.39.1</span> <span class="toctext">Gli strumenti</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Primitive"><span class="tocnumber">1.39.1.1</span> <span class="toctext">Primitive</span></a></li>
|
||
<li class="toclevel-4"><a href="#Modificare_gli_oggetti"><span class="tocnumber">1.39.1.2</span> <span class="toctext">Modificare gli oggetti</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Altri_strumenti"><span class="tocnumber">1.39.2</span> <span class="toctext">Altri strumenti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Operazioni_booleane"><span class="tocnumber">1.39.3</span> <span class="toctext">Operazioni booleane</span></a></li>
|
||
<li class="toclevel-3"><a href="#Concetti_base"><span class="tocnumber">1.39.4</span> <span class="toctext">Concetti base</span></a></li>
|
||
<li class="toclevel-3"><a href="#Script_3"><span class="tocnumber">1.39.5</span> <span class="toctext">Script</span></a></li>
|
||
<li class="toclevel-3"><a href="#Esempi"><span class="tocnumber">1.39.6</span> <span class="toctext">Esempi</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tutorial"><span class="tocnumber">1.39.7</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-3"><a href="#Strumenti_dell.27interfaccia_grafica"><span class="tocnumber">1.39.8</span> <span class="toctext">Strumenti dell'interfaccia grafica</span></a></li>
|
||
<li class="toclevel-3"><a href="#Script_4"><span class="tocnumber">1.39.9</span> <span class="toctext">Script</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Esempio_semplice"><span class="tocnumber">1.39.9.1</span> <span class="toctext">Esempio semplice</span></a></li>
|
||
<li class="toclevel-4"><a href="#Il_metodo_parametrico"><span class="tocnumber">1.39.9.2</span> <span class="toctext">Il metodo parametrico</span></a></li>
|
||
<li class="toclevel-4"><a href="#Ottenere_porzioni_e_parti"><span class="tocnumber">1.39.9.3</span> <span class="toctext">Ottenere porzioni e parti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Dimensionamento_generale_e_tolleranze_geometriche"><span class="tocnumber">1.39.9.4</span> <span class="toctext">Dimensionamento generale e tolleranze geometriche</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Modelli_di_squadrature"><span class="tocnumber">1.39.10</span> <span class="toctext">Modelli di squadrature</span></a></li>
|
||
<li class="toclevel-3"><a href="#Estendere_il_modulo_Drawing"><span class="tocnumber">1.39.11</span> <span class="toctext">Estendere il modulo Drawing</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Tutorial_2"><span class="tocnumber">1.40</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-2"><a href="#Link_esterni"><span class="tocnumber">1.41</span> <span class="toctext">Link esterni</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Strumenti"><span class="tocnumber">1.41.1</span> <span class="toctext">Strumenti</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Gli_strumenti_di_un_progetto_Raytracing"><span class="tocnumber">1.41.1.1</span> <span class="toctext">Gli strumenti di un progetto Raytracing</span></a></li>
|
||
<li class="toclevel-4"><a href="#Utilit.C3.A0"><span class="tocnumber">1.41.1.2</span> <span class="toctext">Utilità</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Flusso_di_lavoro_tipico"><span class="tocnumber">1.41.2</span> <span class="toctext">Flusso di lavoro tipico</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_manualmente_un_file_povray"><span class="tocnumber">1.41.3</span> <span class="toctext">Creare manualmente un file povray</span></a></li>
|
||
<li class="toclevel-3"><a href="#Script_5"><span class="tocnumber">1.41.4</span> <span class="toctext">Script</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Output_dei_file_di_rendering"><span class="tocnumber">1.41.4.1</span> <span class="toctext">Output dei file di rendering</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_oggetto_rendering_personalizzato"><span class="tocnumber">1.41.4.2</span> <span class="toctext">Creare un oggetto rendering personalizzato</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Link_2"><span class="tocnumber">1.41.5</span> <span class="toctext">Link</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#POVRay"><span class="tocnumber">1.41.5.1</span> <span class="toctext">POVRay</span></a></li>
|
||
<li class="toclevel-4"><a href="#Luxrender"><span class="tocnumber">1.41.5.2</span> <span class="toctext">Luxrender</span></a></li>
|
||
<li class="toclevel-4"><a href="#Render_per_future_implementazioni"><span class="tocnumber">1.41.5.3</span> <span class="toctext">Render per future implementazioni</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Modelli"><span class="tocnumber">1.41.6</span> <span class="toctext">Modelli</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Povray_2"><span class="tocnumber">1.41.6.1</span> <span class="toctext">Povray</span></a></li>
|
||
<li class="toclevel-4"><a href="#Luxrender_2"><span class="tocnumber">1.41.6.2</span> <span class="toctext">Luxrender</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Esportare_in_Kerkythea"><span class="tocnumber">1.42</span> <span class="toctext">Esportare in Kerkythea</span></a></li>
|
||
<li class="toclevel-2"><a href="#Links"><span class="tocnumber">1.43</span> <span class="toctext">Links</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Strumenti_per_disegnare_oggetti"><span class="tocnumber">1.43.1</span> <span class="toctext">Strumenti per disegnare oggetti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Strumenti_per_modificare_gli_oggetti"><span class="tocnumber">1.43.2</span> <span class="toctext">Strumenti per modificare gli oggetti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Strumenti_di_utilit.C3.A0"><span class="tocnumber">1.43.3</span> <span class="toctext">Strumenti di utilità</span></a></li>
|
||
<li class="toclevel-3"><a href="#Preferenze"><span class="tocnumber">1.43.4</span> <span class="toctext">Preferenze</span></a></li>
|
||
<li class="toclevel-3"><a href="#Formato_dei_file"><span class="tocnumber">1.43.5</span> <span class="toctext">Formato dei file</span></a></li>
|
||
<li class="toclevel-3"><a href="#Ulteriori_funzioni"><span class="tocnumber">1.43.6</span> <span class="toctext">Ulteriori funzioni</span></a></li>
|
||
<li class="toclevel-3"><a href="#API"><span class="tocnumber">1.43.7</span> <span class="toctext">API</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tutorial_3"><span class="tocnumber">1.43.8</span> <span class="toctext">Tutorial</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Script_e_Macro"><span class="tocnumber">1.44</span> <span class="toctext">Script e Macro</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Come_funzionano"><span class="tocnumber">1.44.1</span> <span class="toctext">Come funzionano</span></a></li>
|
||
<li class="toclevel-3"><a href="#Esempio"><span class="tocnumber">1.44.2</span> <span class="toctext">Esempio</span></a></li>
|
||
<li class="toclevel-3"><a href="#Personalizzazione"><span class="tocnumber">1.44.3</span> <span class="toctext">Personalizzazione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Gli_strumenti_del_menu_Macro"><span class="tocnumber">1.44.4</span> <span class="toctext">Gli strumenti del menu Macro</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_delle_macro_senza_registrarle"><span class="tocnumber">1.44.5</span> <span class="toctext">Creare delle macro senza registrarle</span></a></li>
|
||
<li class="toclevel-3"><a href="#Repositorio_di_macro"><span class="tocnumber">1.44.6</span> <span class="toctext">Repositorio di macro</span></a></li>
|
||
<li class="toclevel-3"><a href="#Link_3"><span class="tocnumber">1.44.7</span> <span class="toctext">Link</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tutorial_4"><span class="tocnumber">1.44.8</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-3"><a href="#L.27interprete"><span class="tocnumber">1.44.9</span> <span class="toctext">L'interprete</span></a></li>
|
||
<li class="toclevel-3"><a href="#Variabili"><span class="tocnumber">1.44.10</span> <span class="toctext">Variabili</span></a></li>
|
||
<li class="toclevel-3"><a href="#Numeri"><span class="tocnumber">1.44.11</span> <span class="toctext">Numeri</span></a></li>
|
||
<li class="toclevel-3"><a href="#Liste"><span class="tocnumber">1.44.12</span> <span class="toctext">Liste</span></a></li>
|
||
<li class="toclevel-3"><a href="#Indentazione"><span class="tocnumber">1.44.13</span> <span class="toctext">Indentazione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Funzioni"><span class="tocnumber">1.44.14</span> <span class="toctext">Funzioni</span></a></li>
|
||
<li class="toclevel-3"><a href="#Moduli"><span class="tocnumber">1.44.15</span> <span class="toctext">Moduli</span></a></li>
|
||
<li class="toclevel-3"><a href="#Iniziare_con_FreeCAD"><span class="tocnumber">1.44.16</span> <span class="toctext">Iniziare con FreeCAD</span></a></li>
|
||
<li class="toclevel-3"><a href="#Script_Python_in_FreeCAD"><span class="tocnumber">1.44.17</span> <span class="toctext">Script Python in FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#L.27interprete_2"><span class="tocnumber">1.44.17.1</span> <span class="toctext">L'interprete</span></a></li>
|
||
<li class="toclevel-4"><a href="#Aiuti_di_Python"><span class="tocnumber">1.44.17.2</span> <span class="toctext">Aiuti di Python</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Moduli_incorporati_.28Built-in.29"><span class="tocnumber">1.44.18</span> <span class="toctext">Moduli incorporati (Built-in)</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Gli_oggetti_App_e_gli_oggetti_GUI"><span class="tocnumber">1.44.18.1</span> <span class="toctext">Gli oggetti App e gli oggetti GUI</span></a></li>
|
||
<li class="toclevel-4"><a href="#Gli_oggetti_del_documento"><span class="tocnumber">1.44.18.2</span> <span class="toctext">Gli oggetti del documento</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Utilizzo_di_moduli_aggiuntivi"><span class="tocnumber">1.44.19</span> <span class="toctext">Utilizzo di moduli aggiuntivi</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Creare_degli_oggetti"><span class="tocnumber">1.44.19.1</span> <span class="toctext">Creare degli oggetti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Modificare_gli_oggetti_2"><span class="tocnumber">1.44.19.2</span> <span class="toctext">Modificare gli oggetti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Interrogare_gli_oggetti"><span class="tocnumber">1.44.19.3</span> <span class="toctext">Interrogare gli oggetti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Introduzione_2"><span class="tocnumber">1.44.19.4</span> <span class="toctext">Introduzione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Creazione_e_caricamento"><span class="tocnumber">1.44.20</span> <span class="toctext">Creazione e caricamento</span></a></li>
|
||
<li class="toclevel-3"><a href="#Modellazione"><span class="tocnumber">1.44.21</span> <span class="toctext">Modellazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Analisi_e_Test"><span class="tocnumber">1.44.21.1</span> <span class="toctext">Analisi e Test</span></a></li>
|
||
<li class="toclevel-4"><a href="#Scrivere_i_propri_algoritmi"><span class="tocnumber">1.44.21.2</span> <span class="toctext">Scrivere i propri algoritmi</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Esportazione"><span class="tocnumber">1.44.22</span> <span class="toctext">Esportazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Aspetti_correlati_alla_GUI"><span class="tocnumber">1.44.22.1</span> <span class="toctext">Aspetti correlati alla GUI</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Prove"><span class="tocnumber">1.44.23</span> <span class="toctext">Prove</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tutorial_5"><span class="tocnumber">1.44.24</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-3"><a href="#Introduzione_3"><span class="tocnumber">1.44.25</span> <span class="toctext">Introduzione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Diagramma_delle_classi"><span class="tocnumber">1.44.25.1</span> <span class="toctext">Diagramma delle classi</span></a></li>
|
||
<li class="toclevel-4"><a href="#Geometria"><span class="tocnumber">1.44.25.2</span> <span class="toctext">Geometria</span></a></li>
|
||
<li class="toclevel-4"><a href="#Topologia"><span class="tocnumber">1.44.25.3</span> <span class="toctext">Topologia</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Veloce_esempio:_Creare_una_topologia_base"><span class="tocnumber">1.44.26</span> <span class="toctext">Veloce esempio: Creare una topologia base</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Creare_la_geometria"><span class="tocnumber">1.44.26.1</span> <span class="toctext">Creare la geometria</span></a></li>
|
||
<li class="toclevel-4"><a href="#Arco"><span class="tocnumber">1.44.26.2</span> <span class="toctext">Arco</span></a></li>
|
||
<li class="toclevel-4"><a href="#Linea"><span class="tocnumber">1.44.26.3</span> <span class="toctext">Linea</span></a></li>
|
||
<li class="toclevel-4"><a href="#Unire_tutto"><span class="tocnumber">1.44.26.4</span> <span class="toctext">Unire tutto</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_prisma"><span class="tocnumber">1.44.26.5</span> <span class="toctext">Creare un prisma</span></a></li>
|
||
<li class="toclevel-4"><a href="#Mostrare_il_risultato"><span class="tocnumber">1.44.26.6</span> <span class="toctext">Mostrare il risultato</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Creare_forme_di_base"><span class="tocnumber">1.44.27</span> <span class="toctext">Creare forme di base</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Importare_i_moduli_necessari"><span class="tocnumber">1.44.27.1</span> <span class="toctext">Importare i moduli necessari</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_vettore"><span class="tocnumber">1.44.27.2</span> <span class="toctext">Creare un vettore</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_bordo"><span class="tocnumber">1.44.27.3</span> <span class="toctext">Creare un bordo</span></a></li>
|
||
<li class="toclevel-4"><a href="#Mostrare_la_forma_sullo_schermo"><span class="tocnumber">1.44.27.4</span> <span class="toctext">Mostrare la forma sullo schermo</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_contorno"><span class="tocnumber">1.44.27.5</span> <span class="toctext">Creare un contorno</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_una_faccia"><span class="tocnumber">1.44.27.6</span> <span class="toctext">Creare una faccia</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_una_circonferenza"><span class="tocnumber">1.44.27.7</span> <span class="toctext">Creare una circonferenza</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_arco_attraverso_dei_punti"><span class="tocnumber">1.44.27.8</span> <span class="toctext">Creare un arco attraverso dei punti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_poligono"><span class="tocnumber">1.44.27.9</span> <span class="toctext">Creare un poligono</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_una_curva_di_Bezier"><span class="tocnumber">1.44.27.10</span> <span class="toctext">Creare una curva di Bezier</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_piano"><span class="tocnumber">1.44.27.11</span> <span class="toctext">Creare un piano</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_una_ellisse"><span class="tocnumber">1.44.27.12</span> <span class="toctext">Creare una ellisse</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_toro"><span class="tocnumber">1.44.27.13</span> <span class="toctext">Creare un toro</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_cubo_o_parallelepipedo"><span class="tocnumber">1.44.27.14</span> <span class="toctext">Creare un cubo o parallelepipedo</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_una_sfera"><span class="tocnumber">1.44.27.15</span> <span class="toctext">Creare una sfera</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_cilindro"><span class="tocnumber">1.44.27.16</span> <span class="toctext">Creare un cilindro</span></a></li>
|
||
<li class="toclevel-4"><a href="#Creare_un_cono"><span class="tocnumber">1.44.27.17</span> <span class="toctext">Creare un cono</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Modificare_delle_forme"><span class="tocnumber">1.44.28</span> <span class="toctext">Modificare delle forme</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Operazioni_di_trasformazione"><span class="tocnumber">1.44.28.1</span> <span class="toctext">Operazioni di trasformazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Traslare_una_forma"><span class="tocnumber">1.44.28.1.1</span> <span class="toctext">Traslare una forma</span></a></li>
|
||
<li class="toclevel-5"><a href="#Ruotare_una_forma"><span class="tocnumber">1.44.28.1.2</span> <span class="toctext">Ruotare una forma</span></a></li>
|
||
<li class="toclevel-5"><a href="#Trasformazioni_generiche.2C_con_matrici"><span class="tocnumber">1.44.28.1.3</span> <span class="toctext">Trasformazioni generiche, con matrici</span></a></li>
|
||
<li class="toclevel-5"><a href="#Scalare_una_forma"><span class="tocnumber">1.44.28.1.4</span> <span class="toctext">Scalare una forma</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#Operazioni_Booleane_2"><span class="tocnumber">1.44.28.2</span> <span class="toctext">Operazioni Booleane</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Sottrazione"><span class="tocnumber">1.44.28.2.1</span> <span class="toctext">Sottrazione</span></a></li>
|
||
<li class="toclevel-5"><a href="#Intersezione"><span class="tocnumber">1.44.28.2.2</span> <span class="toctext">Intersezione</span></a></li>
|
||
<li class="toclevel-5"><a href="#Unione"><span class="tocnumber">1.44.28.2.3</span> <span class="toctext">Unione</span></a></li>
|
||
<li class="toclevel-5"><a href="#Sezione"><span class="tocnumber">1.44.28.2.4</span> <span class="toctext">Sezione</span></a></li>
|
||
<li class="toclevel-5"><a href="#Estrusione"><span class="tocnumber">1.44.28.2.5</span> <span class="toctext">Estrusione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Esplorare_le_forme"><span class="tocnumber">1.44.29</span> <span class="toctext">Esplorare le forme</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Analizzare_i_bordi"><span class="tocnumber">1.44.29.1</span> <span class="toctext">Analizzare i bordi</span></a></li>
|
||
<li class="toclevel-4"><a href="#Utilizzare_la_selezione"><span class="tocnumber">1.44.29.2</span> <span class="toctext">Utilizzare la selezione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Esempio_completo:_La_bottiglia_OCC"><span class="tocnumber">1.44.30</span> <span class="toctext">Esempio completo: La bottiglia OCC</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Lo_script_completo"><span class="tocnumber">1.44.30.1</span> <span class="toctext">Lo script completo</span></a></li>
|
||
<li class="toclevel-4"><a href="#Spiegazione_dettagliata"><span class="tocnumber">1.44.30.2</span> <span class="toctext">Spiegazione dettagliata</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Cubo_forato"><span class="tocnumber">1.45</span> <span class="toctext">Cubo forato</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Caricare_e_salvare"><span class="tocnumber">1.45.1</span> <span class="toctext">Caricare e salvare</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Convertire_oggetti_Parte_in_Mesh"><span class="tocnumber">1.46</span> <span class="toctext">Convertire oggetti Parte in Mesh</span></a></li>
|
||
<li class="toclevel-2"><a href="#Convertire_oggetti_Mesh_in_Parte"><span class="tocnumber">1.47</span> <span class="toctext">Convertire oggetti Mesh in Parte</span></a></li>
|
||
<li class="toclevel-2"><a href="#Accesso_e_modifica_del_Grafo_della_scena_.28Scenegraph.29"><span class="tocnumber">1.48</span> <span class="toctext">Accesso e modifica del Grafo della scena (Scenegraph)</span></a></li>
|
||
<li class="toclevel-2"><a href="#Utilizzo_dei_meccanismi_di_richiamo_.28callback.29"><span class="tocnumber">1.49</span> <span class="toctext">Utilizzo dei meccanismi di richiamo (callback)</span></a></li>
|
||
<li class="toclevel-2"><a href="#Documentazione"><span class="tocnumber">1.50</span> <span class="toctext">Documentazione</span></a></li>
|
||
<li class="toclevel-2"><a href="#PySide"><span class="tocnumber">1.51</span> <span class="toctext">PySide</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Esempio_base"><span class="tocnumber">1.51.1</span> <span class="toctext">Esempio base</span></a></li>
|
||
<li class="toclevel-3"><a href="#Propriet.C3.A0_disponibili"><span class="tocnumber">1.51.2</span> <span class="toctext">Proprietà disponibili</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tipi_di_Propriet.C3.A0"><span class="tocnumber">1.51.3</span> <span class="toctext">Tipi di Proprietà</span></a></li>
|
||
<li class="toclevel-3"><a href="#Altro_esempio_pi.C3.B9_complesso"><span class="tocnumber">1.51.4</span> <span class="toctext">Altro esempio più complesso</span></a></li>
|
||
<li class="toclevel-3"><a href="#Rendere_gli_oggetti_selezionabili"><span class="tocnumber">1.51.5</span> <span class="toctext">Rendere gli oggetti selezionabili</span></a></li>
|
||
<li class="toclevel-3"><a href="#Lavorare_con_le_forme_semplici"><span class="tocnumber">1.51.6</span> <span class="toctext">Lavorare con le forme semplici</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Ulteriori_informazioni"><span class="tocnumber">1.52</span> <span class="toctext">Ulteriori informazioni</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Utilizzare_FreeCAD_senza_GUI"><span class="tocnumber">1.52.1</span> <span class="toctext">Utilizzare FreeCAD senza GUI</span></a></li>
|
||
<li class="toclevel-3"><a href="#Utilizzare_FreeCAD_con_GUI"><span class="tocnumber">1.52.2</span> <span class="toctext">Utilizzare FreeCAD con GUI</span></a></li>
|
||
<li class="toclevel-3"><a href="#Avvertenze"><span class="tocnumber">1.52.3</span> <span class="toctext">Avvertenze</span></a></li>
|
||
<li class="toclevel-3"><a href="#Tutorial_6"><span class="tocnumber">1.52.4</span> <span class="toctext">Tutorial</span></a></li>
|
||
<li class="toclevel-3"><a href="#Un_tipico_file_InitGui.py"><span class="tocnumber">1.52.5</span> <span class="toctext">Un tipico file InitGui.py</span></a></li>
|
||
<li class="toclevel-3"><a href="#Un_tipico_file_del_modulo"><span class="tocnumber">1.52.6</span> <span class="toctext">Un tipico file del modulo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Importare_un_nuovo_tipo_di_file"><span class="tocnumber">1.52.7</span> <span class="toctext">Importare un nuovo tipo di file</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_una_linea"><span class="tocnumber">1.52.8</span> <span class="toctext">Aggiungere una linea</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_un_poligono"><span class="tocnumber">1.52.9</span> <span class="toctext">Aggiungere un poligono</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_e_rimuovere_un_oggetto_in_un_gruppo"><span class="tocnumber">1.52.10</span> <span class="toctext">Aggiungere e rimuovere un oggetto in un gruppo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_un_Mesh"><span class="tocnumber">1.52.11</span> <span class="toctext">Aggiungere un Mesh</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_un_arco_o_un_cerchio"><span class="tocnumber">1.52.12</span> <span class="toctext">Aggiungere un arco o un cerchio</span></a></li>
|
||
<li class="toclevel-3"><a href="#Accedere_alla_rappresentazione_di_un_oggetto_e_modificarla"><span class="tocnumber">1.52.13</span> <span class="toctext">Accedere alla rappresentazione di un oggetto e modificarla</span></a></li>
|
||
<li class="toclevel-3"><a href="#Controllare_gli_eventi_del_mouse_nel_visualizzatore_3D_tramite_Python"><span class="tocnumber">1.52.14</span> <span class="toctext">Controllare gli eventi del mouse nel visualizzatore 3D tramite Python</span></a></li>
|
||
<li class="toclevel-3"><a href="#Visualizzare_i_tasti_premuti_e_gli_eventi_dei_comandi"><span class="tocnumber">1.52.15</span> <span class="toctext">Visualizzare i tasti premuti e gli eventi dei comandi</span></a></li>
|
||
<li class="toclevel-3"><a href="#Manipolare_il_grafo_della_scena_in_Python"><span class="tocnumber">1.52.16</span> <span class="toctext">Manipolare il grafo della scena in Python</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_e_rimuovere_oggetti_nel_grafo_della_scena"><span class="tocnumber">1.52.17</span> <span class="toctext">Aggiungere e rimuovere oggetti nel grafo della scena</span></a></li>
|
||
<li class="toclevel-3"><a href="#Salvare_il_grafo_della_scaena_con_una_rotazione_in_una_serie_di_36_file_negli_assi_X_Y_Z."><span class="tocnumber">1.52.18</span> <span class="toctext">Salvare il grafo della scaena con una rotazione in una serie di 36 file negli assi X Y Z.</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_dei_widget_personalizzati_all.27interfaccia"><span class="tocnumber">1.52.19</span> <span class="toctext">Aggiungere dei widget personalizzati all'interfaccia</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_una_scheda_alla_Combo_View"><span class="tocnumber">1.52.20</span> <span class="toctext">Aggiungere una scheda alla Combo View</span></a></li>
|
||
<li class="toclevel-3"><a href="#Abilitare_o_disabilitare_una_finestra"><span class="tocnumber">1.52.21</span> <span class="toctext">Abilitare o disabilitare una finestra</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aprire_una_specifica_pagina_Web"><span class="tocnumber">1.52.22</span> <span class="toctext">Aprire una specifica pagina Web</span></a></li>
|
||
<li class="toclevel-3"><a href="#Ottenere_il_contenuto_HTML_di_una_pagina_web_aperta"><span class="tocnumber">1.52.23</span> <span class="toctext">Ottenere il contenuto HTML di una pagina web aperta</span></a></li>
|
||
<li class="toclevel-3"><a href="#Reperire_e_utilizzare_le_coordinate_di_3_punti_o_oggetti_selezionati"><span class="tocnumber">1.52.24</span> <span class="toctext">Reperire e utilizzare le coordinate di 3 punti o oggetti selezionati</span></a></li>
|
||
<li class="toclevel-3"><a href="#Lista_di_oggetti"><span class="tocnumber">1.52.25</span> <span class="toctext">Lista di oggetti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Ottenere_la_dimensione_di_un_oggetto.2C_dato_il_suo_nome"><span class="tocnumber">1.52.26</span> <span class="toctext">Ottenere la dimensione di un oggetto, dato il suo nome</span></a></li>
|
||
<li class="toclevel-3"><a href="#Funzione_residente_per_una_azione_con_un_clic_del_mouse"><span class="tocnumber">1.52.27</span> <span class="toctext">Funzione residente per una azione con un clic del mouse</span></a></li>
|
||
<li class="toclevel-3"><a href="#Trovare-selezionare_tutti_gli_elementi_sotto_il_cursore"><span class="tocnumber">1.52.28</span> <span class="toctext">Trovare-selezionare tutti gli elementi sotto il cursore</span></a></li>
|
||
<li class="toclevel-3"><a href="#Elencare_i_componenti_di_un_oggetto"><span class="tocnumber">1.52.29</span> <span class="toctext">Elencare i componenti di un oggetto</span></a></li>
|
||
<li class="toclevel-3"><a href="#List_the_PropertiesList"><span class="tocnumber">1.52.30</span> <span class="toctext">List the PropertiesList</span></a></li>
|
||
<li class="toclevel-3"><a href="#Aggiungere_una_Propriet.C3.A0_.22Comment.22"><span class="tocnumber">1.52.31</span> <span class="toctext">Aggiungere una Proprietà "Comment"</span></a></li>
|
||
<li class="toclevel-3"><a href="#Ricerca_e_estrazione_di_dati"><span class="tocnumber">1.52.32</span> <span class="toctext">Ricerca e estrazione di dati</span></a></li>
|
||
<li class="toclevel-3"><a href="#Ricerca_manuale_di_un_elemento_dall.27etichetta"><span class="tocnumber">1.52.33</span> <span class="toctext">Ricerca manuale di un elemento dall'etichetta</span></a></li>
|
||
<li class="toclevel-3"><a href="#Coordinate_Cartesiane"><span class="tocnumber">1.52.34</span> <span class="toctext">Coordinate Cartesiane</span></a></li>
|
||
<li class="toclevel-3"><a href="#Selezionare_tutti_gli_oggetti_nel_documento"><span class="tocnumber">1.52.35</span> <span class="toctext">Selezionare tutti gli oggetti nel documento</span></a></li>
|
||
<li class="toclevel-3"><a href="#Selezionare_la_faccia_di_un_oggetto"><span class="tocnumber">1.52.36</span> <span class="toctext">Selezionare la faccia di un oggetto</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_un_oggetto_della_posizione_della_fotocamera"><span class="tocnumber">1.52.37</span> <span class="toctext">Creare un oggetto della posizione della fotocamera</span></a></li>
|
||
<li class="toclevel-3"><a href="#Trovare_il_vettore_normale_alla_superficie"><span class="tocnumber">1.52.38</span> <span class="toctext">Trovare il vettore normale alla superficie</span></a></li>
|
||
<li class="toclevel-3"><a href="#Leggere_e_scrivere_una_Expression"><span class="tocnumber">1.52.39</span> <span class="toctext">Leggere e scrivere una Expression</span></a></li>
|
||
<li class="toclevel-3"><a href="#Lo_script_principale"><span class="tocnumber">1.52.40</span> <span class="toctext">Lo script principale</span></a></li>
|
||
<li class="toclevel-3"><a href="#Spiegazione_dettagliata_2"><span class="tocnumber">1.52.41</span> <span class="toctext">Spiegazione dettagliata</span></a></li>
|
||
<li class="toclevel-3"><a href="#Test_e_Utilizzo_dello_script"><span class="tocnumber">1.52.42</span> <span class="toctext">Test e Utilizzo dello script</span></a></li>
|
||
<li class="toclevel-3"><a href="#Includere_lo_script_nell.27interfaccia_di_FreeCAD"><span class="tocnumber">1.52.43</span> <span class="toctext">Includere lo script nell'interfaccia di FreeCAD</span></a></li>
|
||
<li class="toclevel-3"><a href="#Cosa_si_pu.C3.B2_aggiungere.3F"><span class="tocnumber">1.52.44</span> <span class="toctext">Cosa si può aggiungere?</span></a></li>
|
||
<li class="toclevel-3"><a href="#Progettare_la_finestra"><span class="tocnumber">1.52.45</span> <span class="toctext">Progettare la finestra</span></a></li>
|
||
<li class="toclevel-3"><a href="#Convertire_il_dialogo_in_Python"><span class="tocnumber">1.52.46</span> <span class="toctext">Convertire il dialogo in Python</span></a></li>
|
||
<li class="toclevel-3"><a href="#Utilizzare_la_finestra_di_dialogo"><span class="tocnumber">1.52.47</span> <span class="toctext">Utilizzare la finestra di dialogo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Lo_script_completo_2"><span class="tocnumber">1.52.48</span> <span class="toctext">Lo script completo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_una_finestra_di_dialogo_con_i_pulsanti"><span class="tocnumber">1.52.49</span> <span class="toctext">Creare una finestra di dialogo con i pulsanti</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Metodo_1"><span class="tocnumber">1.52.49.1</span> <span class="toctext">Metodo 1</span></a></li>
|
||
<li class="toclevel-4"><a href="#Metodo_2"><span class="tocnumber">1.52.49.2</span> <span class="toctext">Metodo 2</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Icone_personalizzate_nella_Vista_combinata"><span class="tocnumber">1.53</span> <span class="toctext">Icone personalizzate nella Vista combinata</span></a></li>
|
||
<li class="toclevel-2"><a href="#Scrivere_il_file_con_QFileDialog"><span class="tocnumber">1.54</span> <span class="toctext">Scrivere il file con QFileDialog</span></a></li>
|
||
<li class="toclevel-2"><a href="#Leggere_il_file_con_QFileDialog"><span class="tocnumber">1.55</span> <span class="toctext">Leggere il file con QFileDialog</span></a></li>
|
||
<li class="toclevel-2"><a href="#Ottenere_i_colori_con_QColorDialog"><span class="tocnumber">1.56</span> <span class="toctext">Ottenere i colori con QColorDialog</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Alcuni_comandi_utili"><span class="tocnumber">1.56.1</span> <span class="toctext">Alcuni comandi utili</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Sviluppare_applicazioni_per_FreeCAD"><span class="tocnumber">1.57</span> <span class="toctext">Sviluppare applicazioni per FreeCAD</span></a></li>
|
||
<li class="toclevel-2"><a href="#Statement_of_the_main_developer"><span class="tocnumber">1.58</span> <span class="toctext">Statement of the main developer</span></a></li>
|
||
<li class="toclevel-2"><a href="#Licences_used_in_FreeCAD"><span class="tocnumber">1.59</span> <span class="toctext">Licences used in FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Impact_of_the_licences"><span class="tocnumber">1.59.1</span> <span class="toctext">Impact of the licences</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Private_users"><span class="tocnumber">1.59.1.1</span> <span class="toctext">Private users</span></a></li>
|
||
<li class="toclevel-4"><a href="#Professional_users"><span class="tocnumber">1.59.1.2</span> <span class="toctext">Professional users</span></a></li>
|
||
<li class="toclevel-4"><a href="#Open_Source_developers"><span class="tocnumber">1.59.1.3</span> <span class="toctext">Open Source developers</span></a></li>
|
||
<li class="toclevel-4"><a href="#Commercial_developers"><span class="tocnumber">1.59.1.4</span> <span class="toctext">Commercial developers</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#OpenCasCade_License_side_effects_.28for_FreeCAD_version_0.13_and_older.29"><span class="tocnumber">1.60</span> <span class="toctext">OpenCasCade License side effects (for FreeCAD version 0.13 and older)</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#GPL2.2FGPL3.2FOCTLP_incompatibility"><span class="tocnumber">1.60.1</span> <span class="toctext">GPL2/GPL3/OCTLP incompatibility</span></a></li>
|
||
<li class="toclevel-3"><a href="#Debian"><span class="tocnumber">1.60.2</span> <span class="toctext">Debian</span></a></li>
|
||
<li class="toclevel-3"><a href="#Fedora.2FRedHat_non-free"><span class="tocnumber">1.60.3</span> <span class="toctext">Fedora/RedHat non-free</span></a></li>
|
||
<li class="toclevel-3"><a href="#Segnalare_bug"><span class="tocnumber">1.60.4</span> <span class="toctext">Segnalare bug</span></a></li>
|
||
<li class="toclevel-3"><a href="#Richiedere_delle_nuove_funzionalit.C3.A0"><span class="tocnumber">1.60.5</span> <span class="toctext">Richiedere delle nuove funzionalità</span></a></li>
|
||
<li class="toclevel-3"><a href="#Inviare_patch"><span class="tocnumber">1.60.6</span> <span class="toctext">Inviare patch</span></a></li>
|
||
<li class="toclevel-3"><a href="#Richiedere_la_fusione"><span class="tocnumber">1.60.7</span> <span class="toctext">Richiedere la fusione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#MantisBT_Tips_and_Tricks"><span class="tocnumber">1.61</span> <span class="toctext">MantisBT Tips and Tricks</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#MantisBT_Markup"><span class="tocnumber">1.61.1</span> <span class="toctext">MantisBT Markup</span></a></li>
|
||
<li class="toclevel-3"><a href="#MantisBT_BBCode"><span class="tocnumber">1.61.2</span> <span class="toctext">MantisBT BBCode</span></a></li>
|
||
<li class="toclevel-3"><a href="#MantisBT_.3C.3D.3E_GitHub_Markup"><span class="tocnumber">1.61.3</span> <span class="toctext">MantisBT <=> GitHub Markup</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#GitHub_and_MantisBT"><span class="tocnumber">1.62</span> <span class="toctext">GitHub and MantisBT</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Attaching_a_git_commit_to_a_ticket"><span class="tocnumber">1.62.1</span> <span class="toctext">Attaching a git commit to a ticket</span></a></li>
|
||
<li class="toclevel-3"><a href="#Remotely_resolving_a_ticket"><span class="tocnumber">1.62.2</span> <span class="toctext">Remotely resolving a ticket</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Related"><span class="tocnumber">1.63</span> <span class="toctext">Related</span></a></li>
|
||
<li class="toclevel-2"><a href="#Prerequisiti"><span class="tocnumber">1.64</span> <span class="toctext">Prerequisiti</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Programmi_richiesti"><span class="tocnumber">1.64.1</span> <span class="toctext">Programmi richiesti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Codice_sorgente"><span class="tocnumber">1.64.2</span> <span class="toctext">Codice sorgente</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Usando_Git_.28Preferito.29"><span class="tocnumber">1.64.2.1</span> <span class="toctext">Usando Git (Preferito)</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Compilatore"><span class="tocnumber">1.64.3</span> <span class="toctext">Compilatore</span></a></li>
|
||
<li class="toclevel-3"><a href="#Librerie_di_terze_parti"><span class="tocnumber">1.64.4</span> <span class="toctext">Librerie di terze parti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Programmi_opzionali"><span class="tocnumber">1.64.5</span> <span class="toctext">Programmi opzionali</span></a></li>
|
||
<li class="toclevel-3"><a href="#System_Path_Configuration"><span class="tocnumber">1.64.6</span> <span class="toctext">System Path Configuration</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Configuration_with_CMake"><span class="tocnumber">1.65</span> <span class="toctext">Configuration with CMake</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#The_switch_to_CMake"><span class="tocnumber">1.65.1</span> <span class="toctext">The switch to CMake</span></a></li>
|
||
<li class="toclevel-3"><a href="#CMake"><span class="tocnumber">1.65.2</span> <span class="toctext">CMake</span></a></li>
|
||
<li class="toclevel-3"><a href="#Configure_CMake_using_GUI"><span class="tocnumber">1.65.3</span> <span class="toctext">Configure CMake using GUI</span></a></li>
|
||
<li class="toclevel-3"><a href="#Options_for_the_Build_Process"><span class="tocnumber">1.65.4</span> <span class="toctext">Options for the Build Process</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Building_FreeCAD"><span class="tocnumber">1.66</span> <span class="toctext">Building FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Building_with_Visual_Studio_12_2013"><span class="tocnumber">1.66.1</span> <span class="toctext">Building with Visual Studio 12 2013</span></a></li>
|
||
<li class="toclevel-3"><a href="#Building_with_Visual_Studio_9_2008"><span class="tocnumber">1.66.2</span> <span class="toctext">Building with Visual Studio 9 2008</span></a></li>
|
||
<li class="toclevel-3"><a href="#Building_with_Qt_Creator"><span class="tocnumber">1.66.3</span> <span class="toctext">Building with Qt Creator</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Installation_and_configuration_of_Qt_Creator"><span class="tocnumber">1.66.3.1</span> <span class="toctext">Installation and configuration of Qt Creator</span></a></li>
|
||
<li class="toclevel-4"><a href="#Import_project_and_Build"><span class="tocnumber">1.66.3.2</span> <span class="toctext">Import project and Build</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Command_line_build"><span class="tocnumber">1.66.4</span> <span class="toctext">Command line build</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Building_older_versions"><span class="tocnumber">1.67</span> <span class="toctext">Building older versions</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Using_LibPack"><span class="tocnumber">1.67.1</span> <span class="toctext">Using LibPack</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Directory_setup_in_Visual_Studio"><span class="tocnumber">1.67.1.1</span> <span class="toctext">Directory setup in Visual Studio</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Includes"><span class="tocnumber">1.67.1.1.1</span> <span class="toctext">Includes</span></a></li>
|
||
<li class="toclevel-5"><a href="#Libs"><span class="tocnumber">1.67.1.1.2</span> <span class="toctext">Libs</span></a></li>
|
||
<li class="toclevel-5"><a href="#Executables"><span class="tocnumber">1.67.1.1.3</span> <span class="toctext">Executables</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#Python_needed"><span class="tocnumber">1.67.1.2</span> <span class="toctext">Python needed</span></a></li>
|
||
<li class="toclevel-4"><a href="#Special_for_VC8"><span class="tocnumber">1.67.1.3</span> <span class="toctext">Special for VC8</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Compile"><span class="tocnumber">1.67.2</span> <span class="toctext">Compile</span></a></li>
|
||
<li class="toclevel-3"><a href="Compiling.html"><span class="tocnumber">1.67.3</span> <span class="toctext">After Compiling</span></a></li>
|
||
<li class="toclevel-3"><a href="#Additional_stuff"><span class="tocnumber">1.67.4</span> <span class="toctext">Additional stuff</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#References"><span class="tocnumber">1.68</span> <span class="toctext">References</span></a></li>
|
||
<li class="toclevel-2"><a href="#Ottenere_il_sorgente"><span class="tocnumber">1.69</span> <span class="toctext">Ottenere il sorgente</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Git"><span class="tocnumber">1.69.1</span> <span class="toctext">Git</span></a></li>
|
||
<li class="toclevel-3"><a href="#Github"><span class="tocnumber">1.69.2</span> <span class="toctext">Github</span></a></li>
|
||
<li class="toclevel-3"><a href="#Pacchetto_sorgente"><span class="tocnumber">1.69.3</span> <span class="toctext">Pacchetto sorgente</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Ottenere_le_dipendenze"><span class="tocnumber">1.70</span> <span class="toctext">Ottenere le dipendenze</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Debian_e_Ubuntu"><span class="tocnumber">1.70.1</span> <span class="toctext">Debian e Ubuntu</span></a></li>
|
||
<li class="toclevel-3"><a href="#Fedora"><span class="tocnumber">1.70.2</span> <span class="toctext">Fedora</span></a></li>
|
||
<li class="toclevel-3"><a href="#Gentoo_2"><span class="tocnumber">1.70.3</span> <span class="toctext">Gentoo</span></a></li>
|
||
<li class="toclevel-3"><a href="#OpenSUSE_2"><span class="tocnumber">1.70.4</span> <span class="toctext">OpenSUSE</span></a></li>
|
||
<li class="toclevel-3"><a href="#Arch_Linux"><span class="tocnumber">1.70.5</span> <span class="toctext">Arch Linux</span></a></li>
|
||
<li class="toclevel-3"><a href="#Older_and_non-conventional_distributions"><span class="tocnumber">1.70.6</span> <span class="toctext">Older and non-conventional distributions</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Pivy"><span class="tocnumber">1.70.6.1</span> <span class="toctext">Pivy</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Compilare_FreeCAD"><span class="tocnumber">1.71</span> <span class="toctext">Compilare FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Usando_cMake"><span class="tocnumber">1.71.1</span> <span class="toctext">Usando cMake</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Costruzione_In-source"><span class="tocnumber">1.71.1.1</span> <span class="toctext">Costruzione In-source</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Per_una_Degug_build"><span class="tocnumber">1.71.1.1.1</span> <span class="toctext">Per una Degug build</span></a></li>
|
||
<li class="toclevel-5"><a href="#Oppure_per_una_Release_build"><span class="tocnumber">1.71.1.1.2</span> <span class="toctext">Oppure per una Release build</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#How_to_repair_your_source_code_directory_after_accidentally_running_an_in-source_build."><span class="tocnumber">1.71.1.2</span> <span class="toctext">How to repair your source code directory after accidentally running an in-source build.</span></a></li>
|
||
<li class="toclevel-4"><a href="#Costruzione_Out-of-source"><span class="tocnumber">1.71.1.3</span> <span class="toctext">Costruzione Out-of-source</span></a></li>
|
||
<li class="toclevel-4"><a href="#Opzioni_di_configurazione"><span class="tocnumber">1.71.1.4</span> <span class="toctext">Opzioni di configurazione</span></a></li>
|
||
<li class="toclevel-4"><a href="#Il_plugin_Qt_designer"><span class="tocnumber">1.71.1.5</span> <span class="toctext">Il plugin Qt designer</span></a></li>
|
||
<li class="toclevel-4"><a href="#Doxygen"><span class="tocnumber">1.71.1.6</span> <span class="toctext">Doxygen</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Making_a_debian_package"><span class="tocnumber">1.71.2</span> <span class="toctext">Making a debian package</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Risoluzione_dei_problemi"><span class="tocnumber">1.72</span> <span class="toctext">Risoluzione dei problemi</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Note_for_64bit_systems"><span class="tocnumber">1.72.1</span> <span class="toctext">Note for 64bit systems</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Script_di_build_automatico"><span class="tocnumber">1.73</span> <span class="toctext">Script di build automatico</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Ubuntu"><span class="tocnumber">1.73.1</span> <span class="toctext">Ubuntu</span></a></li>
|
||
<li class="toclevel-3"><a href="#OpenSUSE_12.2"><span class="tocnumber">1.73.2</span> <span class="toctext">OpenSUSE 12.2</span></a></li>
|
||
<li class="toclevel-3"><a href="#Debian_Squeeze"><span class="tocnumber">1.73.3</span> <span class="toctext">Debian Squeeze</span></a></li>
|
||
<li class="toclevel-3"><a href="#Fedora_22.2F23.2F24"><span class="tocnumber">1.73.4</span> <span class="toctext">Fedora 22/23/24</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Aggiornare_il_codice_sorgente"><span class="tocnumber">1.74</span> <span class="toctext">Aggiornare il codice sorgente</span></a></li>
|
||
<li class="toclevel-2"><a href="#Link_4"><span class="tocnumber">1.75</span> <span class="toctext">Link</span></a></li>
|
||
<li class="toclevel-2"><a href="#Prerequisiti_2"><span class="tocnumber">1.76</span> <span class="toctext">Prerequisiti</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Package_Manager"><span class="tocnumber">1.76.1</span> <span class="toctext">Package Manager</span></a></li>
|
||
<li class="toclevel-3"><a href="#CMake_2"><span class="tocnumber">1.76.2</span> <span class="toctext">CMake</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Installing_the_Dependencies"><span class="tocnumber">1.77</span> <span class="toctext">Installing the Dependencies</span></a></li>
|
||
<li class="toclevel-2"><a href="#Getting_the_source"><span class="tocnumber">1.78</span> <span class="toctext">Getting the source</span></a></li>
|
||
<li class="toclevel-2"><a href="#Building_FreeCAD_2"><span class="tocnumber">1.79</span> <span class="toctext">Building FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#CMake_Options"><span class="tocnumber">1.79.1</span> <span class="toctext">CMake Options</span></a></li>
|
||
<li class="toclevel-3"><a href="#CMake_GUI"><span class="tocnumber">1.79.2</span> <span class="toctext">CMake GUI</span></a></li>
|
||
<li class="toclevel-3"><a href="#CMake_command_line"><span class="tocnumber">1.79.3</span> <span class="toctext">CMake command line</span></a></li>
|
||
<li class="toclevel-3"><a href="#Make"><span class="tocnumber">1.79.4</span> <span class="toctext">Make</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Updating"><span class="tocnumber">1.80</span> <span class="toctext">Updating</span></a></li>
|
||
<li class="toclevel-2"><a href="#Troubleshooting"><span class="tocnumber">1.81</span> <span class="toctext">Troubleshooting</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Fortran"><span class="tocnumber">1.81.1</span> <span class="toctext">Fortran</span></a></li>
|
||
<li class="toclevel-3"><a href="#OpenGL"><span class="tocnumber">1.81.2</span> <span class="toctext">OpenGL</span></a></li>
|
||
<li class="toclevel-3"><a href="#FreeType"><span class="tocnumber">1.81.3</span> <span class="toctext">FreeType</span></a></li>
|
||
<li class="toclevel-3"><a href="#Panoramica"><span class="tocnumber">1.81.4</span> <span class="toctext">Panoramica</span></a></li>
|
||
<li class="toclevel-3"><a href="#Link_5"><span class="tocnumber">1.81.5</span> <span class="toctext">Link</span></a></li>
|
||
<li class="toclevel-3"><a href="#Dettagli"><span class="tocnumber">1.81.6</span> <span class="toctext">Dettagli</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Python"><span class="tocnumber">1.81.6.1</span> <span class="toctext">Python</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Descrizione"><span class="tocnumber">1.81.6.1.1</span> <span class="toctext">Descrizione</span></a></li>
|
||
<li class="toclevel-5"><a href="#Crediti"><span class="tocnumber">1.81.6.1.2</span> <span class="toctext">Crediti</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#OpenCasCade"><span class="tocnumber">1.81.6.2</span> <span class="toctext">OpenCasCade</span></a></li>
|
||
<li class="toclevel-4"><a href="#Qt"><span class="tocnumber">1.81.6.3</span> <span class="toctext">Qt</span></a></li>
|
||
<li class="toclevel-4"><a href="#Coin3D"><span class="tocnumber">1.81.6.4</span> <span class="toctext">Coin3D</span></a></li>
|
||
<li class="toclevel-4"><a href="#SoQt"><span class="tocnumber">1.81.6.5</span> <span class="toctext">SoQt</span></a></li>
|
||
<li class="toclevel-4"><a href="#Xerces-C.2B.2B"><span class="tocnumber">1.81.6.6</span> <span class="toctext">Xerces-C++</span></a></li>
|
||
<li class="toclevel-4"><a href="#Zlib"><span class="tocnumber">1.81.6.7</span> <span class="toctext">Zlib</span></a></li>
|
||
<li class="toclevel-4"><a href="#Boost"><span class="tocnumber">1.81.6.8</span> <span class="toctext">Boost</span></a></li>
|
||
<li class="toclevel-4"><a href="#libarea"><span class="tocnumber">1.81.6.9</span> <span class="toctext">libarea</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#LibPack"><span class="tocnumber">1.81.7</span> <span class="toctext">LibPack</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#FreeCADLibs7.x_Changelog"><span class="tocnumber">1.81.7.1</span> <span class="toctext">FreeCADLibs7.x Changelog</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Strumenti_2"><span class="tocnumber">1.81.8</span> <span class="toctext">Strumenti</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Strumenti_indipendenti_dalla_piattaforma"><span class="tocnumber">1.81.8.1</span> <span class="toctext">Strumenti indipendenti dalla piattaforma</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Qt-Toolkit"><span class="tocnumber">1.81.8.1.1</span> <span class="toctext">Qt-Toolkit</span></a></li>
|
||
<li class="toclevel-5"><a href="#InkScape"><span class="tocnumber">1.81.8.1.2</span> <span class="toctext">InkScape</span></a></li>
|
||
<li class="toclevel-5"><a href="#Doxygen_2"><span class="tocnumber">1.81.8.1.3</span> <span class="toctext">Doxygen</span></a></li>
|
||
<li class="toclevel-5"><a href="#Gimp"><span class="tocnumber">1.81.8.1.4</span> <span class="toctext">Gimp</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#Strumenti_in_Windows"><span class="tocnumber">1.81.8.2</span> <span class="toctext">Strumenti in Windows</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Visual_Studio_8_Express"><span class="tocnumber">1.81.8.2.1</span> <span class="toctext">Visual Studio 8 Express</span></a></li>
|
||
<li class="toclevel-5"><a href="#CamStudio"><span class="tocnumber">1.81.8.2.2</span> <span class="toctext">CamStudio</span></a></li>
|
||
<li class="toclevel-5"><a href="#Tortoise_SVN"><span class="tocnumber">1.81.8.2.3</span> <span class="toctext">Tortoise SVN</span></a></li>
|
||
<li class="toclevel-5"><a href="#StarUML"><span class="tocnumber">1.81.8.2.4</span> <span class="toctext">StarUML</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#Strumenti_in_Linux"><span class="tocnumber">1.81.8.3</span> <span class="toctext">Strumenti in Linux</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Avviare_FreeCAD_dalla_riga_di_comando"><span class="tocnumber">1.82</span> <span class="toctext">Avviare FreeCAD dalla riga di comando</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Le_opzioni_della_riga_di_comando"><span class="tocnumber">1.82.1</span> <span class="toctext">Le opzioni della riga di comando</span></a></li>
|
||
<li class="toclevel-3"><a href="#Risposta_e_file_di_configurazione"><span class="tocnumber">1.82.2</span> <span class="toctext">Risposta e file di configurazione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Opzioni_nascoste"><span class="tocnumber">1.82.3</span> <span class="toctext">Opzioni nascoste</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Eseguire_FreeCAD_senza_interfaccia_grafica"><span class="tocnumber">1.83</span> <span class="toctext">Eseguire FreeCAD senza interfaccia grafica</span></a></li>
|
||
<li class="toclevel-2"><a href="#Il_set_di_configurazione"><span class="tocnumber">1.84</span> <span class="toctext">Il set di configurazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Informazioni_relative_all.27utente"><span class="tocnumber">1.84.1</span> <span class="toctext">Informazioni relative all'utente</span></a></li>
|
||
<li class="toclevel-3"><a href="#Argomenti_della_riga_di_comando"><span class="tocnumber">1.84.2</span> <span class="toctext">Argomenti della riga di comando</span></a></li>
|
||
<li class="toclevel-3"><a href="#Relativi_al_sistema"><span class="tocnumber">1.84.3</span> <span class="toctext">Relativi al sistema</span></a></li>
|
||
<li class="toclevel-3"><a href="#Informazioni_relative_alla_costruzione"><span class="tocnumber">1.84.4</span> <span class="toctext">Informazioni relative alla costruzione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Relative_al_marchio"><span class="tocnumber">1.84.5</span> <span class="toctext">Relative al marchio</span></a></li>
|
||
<li class="toclevel-3"><a href="#Utilizzo"><span class="tocnumber">1.84.6</span> <span class="toctext">Utilizzo</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#DistSrc"><span class="tocnumber">1.84.6.1</span> <span class="toctext">DistSrc</span></a></li>
|
||
<li class="toclevel-4"><a href="#DistBin"><span class="tocnumber">1.84.6.2</span> <span class="toctext">DistBin</span></a></li>
|
||
<li class="toclevel-4"><a href="#DistSetup"><span class="tocnumber">1.84.6.3</span> <span class="toctext">DistSetup</span></a></li>
|
||
<li class="toclevel-4"><a href="#DistSetup_2"><span class="tocnumber">1.84.6.4</span> <span class="toctext">DistSetup</span></a></li>
|
||
<li class="toclevel-4"><a href="#DistAll"><span class="tocnumber">1.84.6.5</span> <span class="toctext">DistAll</span></a></li>
|
||
<li class="toclevel-4"><a href="#NextBuildNumber"><span class="tocnumber">1.84.6.6</span> <span class="toctext">NextBuildNumber</span></a></li>
|
||
<li class="toclevel-4"><a href="#CreateModule"><span class="tocnumber">1.84.6.7</span> <span class="toctext">CreateModule</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Utilizzare_lo_strumento_di_costruzione_di_FreeCAD"><span class="tocnumber">1.84.7</span> <span class="toctext">Utilizzare lo strumento di costruzione di FreeCAD</span></a></li>
|
||
<li class="toclevel-3"><a href="#Impostare_manualmente_un_nuovo_modulo"><span class="tocnumber">1.84.8</span> <span class="toctext">Impostare manualmente un nuovo modulo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_un_nuovo_ambiente_.28workbench.29"><span class="tocnumber">1.84.9</span> <span class="toctext">Creare un nuovo ambiente (workbench)</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_dei_comandi_di_FreeCAD_in_Python"><span class="tocnumber">1.84.10</span> <span class="toctext">Creare dei comandi di FreeCAD in Python</span></a></li>
|
||
<li class="toclevel-3"><a href="#Creare_dei_comandi_di_FreeCAD_in_C.2B.2B"><span class="tocnumber">1.84.11</span> <span class="toctext">Creare dei comandi di FreeCAD in C++</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Link_6"><span class="tocnumber">1.85</span> <span class="toctext">Link</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Prova_preliminare"><span class="tocnumber">1.85.1</span> <span class="toctext">Prova preliminare</span></a></li>
|
||
<li class="toclevel-3"><a href="#Riga_di_comando"><span class="tocnumber">1.85.2</span> <span class="toctext">Riga di comando</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Generare_un_Backtrace"><span class="tocnumber">1.86</span> <span class="toctext">Generare un Backtrace</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Per_Linux"><span class="tocnumber">1.86.1</span> <span class="toctext">Per Linux</span></a></li>
|
||
<li class="toclevel-3"><a href="#Per_MacOSX"><span class="tocnumber">1.86.2</span> <span class="toctext">Per MacOSX</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Eliminare_errori_Python"><span class="tocnumber">1.87</span> <span class="toctext">Eliminare errori Python</span></a></li>
|
||
<li class="toclevel-2"><a href="#Introduzione_4"><span class="tocnumber">1.88</span> <span class="toctext">Introduzione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#TestAPP.All"><span class="tocnumber">1.88.1</span> <span class="toctext">TestAPP.All</span></a></li>
|
||
<li class="toclevel-3"><a href="#BaseTests"><span class="tocnumber">1.88.2</span> <span class="toctext">BaseTests</span></a></li>
|
||
<li class="toclevel-3"><a href="#UnitTests"><span class="tocnumber">1.88.3</span> <span class="toctext">UnitTests</span></a></li>
|
||
<li class="toclevel-3"><a href="#Document"><span class="tocnumber">1.88.4</span> <span class="toctext">Document</span></a></li>
|
||
<li class="toclevel-3"><a href="#UnicodeTests"><span class="tocnumber">1.88.5</span> <span class="toctext">UnicodeTests</span></a></li>
|
||
<li class="toclevel-3"><a href="#MeshTestsApp"><span class="tocnumber">1.88.6</span> <span class="toctext">MeshTestsApp</span></a></li>
|
||
<li class="toclevel-3"><a href="#TestSketcherApp"><span class="tocnumber">1.88.7</span> <span class="toctext">TestSketcherApp</span></a></li>
|
||
<li class="toclevel-3"><a href="#TestPartApp"><span class="tocnumber">1.88.8</span> <span class="toctext">TestPartApp</span></a></li>
|
||
<li class="toclevel-3"><a href="#TestPartDesignApp"><span class="tocnumber">1.88.9</span> <span class="toctext">TestPartDesignApp</span></a></li>
|
||
<li class="toclevel-3"><a href="#Workbench"><span class="tocnumber">1.88.10</span> <span class="toctext">Workbench</span></a></li>
|
||
<li class="toclevel-3"><a href="#Menu"><span class="tocnumber">1.88.11</span> <span class="toctext">Menu</span></a></li>
|
||
<li class="toclevel-3"><a href="#Menu.MenuDeleteCases"><span class="tocnumber">1.88.12</span> <span class="toctext">Menu.MenuDeleteCases</span></a></li>
|
||
<li class="toclevel-3"><a href="#Menu.MenuCreateCases"><span class="tocnumber">1.88.13</span> <span class="toctext">Menu.MenuCreateCases</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Generale_2"><span class="tocnumber">1.88.13.1</span> <span class="toctext">Generale</span></a></li>
|
||
<li class="toclevel-4"><a href="#Immagini"><span class="tocnumber">1.88.13.2</span> <span class="toctext">Immagini</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Branding_XML"><span class="tocnumber">1.88.14</span> <span class="toctext">Branding XML</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Contribuire_a_tradurre_FreeCAD"><span class="tocnumber">1.89</span> <span class="toctext">Contribuire a tradurre FreeCAD</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Come_tradurre"><span class="tocnumber">1.89.1</span> <span class="toctext">Come tradurre</span></a></li>
|
||
<li class="toclevel-3"><a href="#Traduzione_con_Qt-Linguist_.28forma_antiquata_-_OBSOLETA.29"><span class="tocnumber">1.89.2</span> <span class="toctext">Traduzione con Qt-Linguist (forma antiquata - OBSOLETA)</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Preparare_i_propri_moduli_o_applicazioni_per_la_traduzione"><span class="tocnumber">1.90</span> <span class="toctext">Preparare i propri moduli o applicazioni per la traduzione</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Prerequisiti_3"><span class="tocnumber">1.90.1</span> <span class="toctext">Prerequisiti</span></a></li>
|
||
<li class="toclevel-3"><a href="#Setup_del_progetto"><span class="tocnumber">1.90.2</span> <span class="toctext">Setup del progetto</span></a></li>
|
||
<li class="toclevel-3"><a href="#Configurare_i_file_python_per_la_traduzione"><span class="tocnumber">1.90.3</span> <span class="toctext">Configurare i file python per la traduzione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Tradurre_il_wiki"><span class="tocnumber">1.91</span> <span class="toctext">Tradurre il wiki</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Plugin_di_traduzione"><span class="tocnumber">1.91.1</span> <span class="toctext">Plugin di traduzione</span></a></li>
|
||
<li class="toclevel-3"><a href="#Vecchie_istruzioni_di_traduzione"><span class="tocnumber">1.91.2</span> <span class="toctext">Vecchie istruzioni di traduzione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#PySide_.28sostituisce_PyQt4.29"><span class="tocnumber">1.92</span> <span class="toctext">PySide (sostituisce PyQt4)</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Installazione_3"><span class="tocnumber">1.92.1</span> <span class="toctext">Installazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Linux"><span class="tocnumber">1.92.1.1</span> <span class="toctext">Linux</span></a></li>
|
||
<li class="toclevel-4"><a href="#Windows"><span class="tocnumber">1.92.1.2</span> <span class="toctext">Windows</span></a></li>
|
||
<li class="toclevel-4"><a href="#MacOSX"><span class="tocnumber">1.92.1.3</span> <span class="toctext">MacOSX</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Utilizzo_2"><span class="tocnumber">1.92.2</span> <span class="toctext">Utilizzo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Esempio_di_passaggio_da_PyQt4_a_PySide"><span class="tocnumber">1.92.3</span> <span class="toctext">Esempio di passaggio da PyQt4 a PySide</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Documentazione_2"><span class="tocnumber">1.92.3.1</span> <span class="toctext">Documentazione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Pivy_2"><span class="tocnumber">1.92.4</span> <span class="toctext">Pivy</span></a></li>
|
||
<li class="toclevel-3"><a href="#Installazione_4"><span class="tocnumber">1.92.5</span> <span class="toctext">Installazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Prerequisiti_4"><span class="tocnumber">1.92.5.1</span> <span class="toctext">Prerequisiti</span></a></li>
|
||
<li class="toclevel-4"><a href="#Debian_.26_Ubuntu"><span class="tocnumber">1.92.5.2</span> <span class="toctext">Debian & Ubuntu</span></a></li>
|
||
<li class="toclevel-4"><a href="#Altre_distribuzioni_Linux"><span class="tocnumber">1.92.5.3</span> <span class="toctext">Altre distribuzioni Linux</span></a></li>
|
||
<li class="toclevel-4"><a href="#Mac_OS"><span class="tocnumber">1.92.5.4</span> <span class="toctext">Mac OS</span></a></li>
|
||
<li class="toclevel-4"><a href="#Windows_2"><span class="tocnumber">1.92.5.5</span> <span class="toctext">Windows</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Utilizzo_3"><span class="tocnumber">1.92.6</span> <span class="toctext">Utilizzo</span></a></li>
|
||
<li class="toclevel-3"><a href="#Documentazione_aggiuntiva"><span class="tocnumber">1.92.7</span> <span class="toctext">Documentazione aggiuntiva</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#pyCollada"><span class="tocnumber">1.93</span> <span class="toctext">pyCollada</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Installazione_5"><span class="tocnumber">1.93.1</span> <span class="toctext">Installazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Linux_2"><span class="tocnumber">1.93.1.1</span> <span class="toctext">Linux</span></a>
|
||
<ul>
|
||
<li class="toclevel-5"><a href="#Dal_repository_git"><span class="tocnumber">1.93.1.1.1</span> <span class="toctext">Dal repository git</span></a></li>
|
||
<li class="toclevel-5"><a href="#Con_easy_install"><span class="tocnumber">1.93.1.1.2</span> <span class="toctext">Con easy_install</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-4"><a href="#Windows_3"><span class="tocnumber">1.93.1.2</span> <span class="toctext">Windows</span></a></li>
|
||
<li class="toclevel-4"><a href="#Mac_OS_2"><span class="tocnumber">1.93.1.3</span> <span class="toctext">Mac OS</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#IfcOpenShell"><span class="tocnumber">1.94</span> <span class="toctext">IfcOpenShell</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Installazione_6"><span class="tocnumber">1.94.1</span> <span class="toctext">Installazione</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Linux_3"><span class="tocnumber">1.94.1.1</span> <span class="toctext">Linux</span></a></li>
|
||
<li class="toclevel-4"><a href="#Windows_4"><span class="tocnumber">1.94.1.2</span> <span class="toctext">Windows</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Link_7"><span class="tocnumber">1.94.2</span> <span class="toctext">Link</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Teigha_Converter"><span class="tocnumber">1.95</span> <span class="toctext">Teigha Converter</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Installazione_7"><span class="tocnumber">1.95.1</span> <span class="toctext">Installazione</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-2"><a href="#Crediti_2"><span class="tocnumber">1.96</span> <span class="toctext">Crediti</span></a>
|
||
<ul>
|
||
<li class="toclevel-3"><a href="#Development"><span class="tocnumber">1.96.1</span> <span class="toctext">Development</span></a>
|
||
<ul>
|
||
<li class="toclevel-4"><a href="#Project_managers"><span class="tocnumber">1.96.1.1</span> <span class="toctext">Project managers</span></a></li>
|
||
<li class="toclevel-4"><a href="#Main_developers"><span class="tocnumber">1.96.1.2</span> <span class="toctext">Main developers</span></a></li>
|
||
<li class="toclevel-4"><a href="#Other_coders"><span class="tocnumber">1.96.1.3</span> <span class="toctext">Other coders</span></a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toclevel-3"><a href="#Companies"><span class="tocnumber">1.96.2</span> <span class="toctext">Companies</span></a></li>
|
||
<li class="toclevel-3"><a href="#Forum_moderators"><span class="tocnumber">1.96.3</span> <span class="toctext">Forum moderators</span></a></li>
|
||
<li class="toclevel-3"><a href="#Community"><span class="tocnumber">1.96.4</span> <span class="toctext">Community</span></a></li>
|
||
<li class="toclevel-3"><a href="#Documentation_writers"><span class="tocnumber">1.96.5</span> <span class="toctext">Documentation writers</span></a></li>
|
||
<li class="toclevel-3"><a href="#Translators"><span class="tocnumber">1.96.6</span> <span class="toctext">Translators</span></a></li>
|
||
<li class="toclevel-3"><a href="#Addons_developers"><span class="tocnumber">1.96.7</span> <span class="toctext">Addons developers</span></a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
<h2><span class="mw-headline" id="Note_di_sviluppo">Note di sviluppo</span></h2>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_011/it" title="Release notes 011/it">Note di rilascio della versione 0.11</a> - Marzo 2011</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_012/it" title="Release notes 012/it">Note di rilascio della versione 0.12</a> - Dicembre 2011</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_013/it" title="Release notes 013/it">Note di rilascio della versione 0.13</a> - Gennaio 2013</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.14/it" title="Release notes 0.14/it">Note di rilascio della versione 0.14</a> - Marzo 2014</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_015/it" title="Release notes 015/it">Note di rilascio della versione 0.15</a> - Marzo 2015</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.16/it" title="Release notes 0.16/it">Note di rilascio della versione 0.16</a> - Aprile 2016</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">Note di rilascio della versione 0.17</a> - Aprile 2018</li></ul>
|
||
<h2><span class="mw-headline" id="Funzioni_principali">Funzioni principali</span></h2>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature1.jpg" class="image"><img alt="Feature1.jpg" src="Feature1.jpg" width="64" height="64" /></a></div> Un <b>kernel geometrico</b> (nucleo) basato su <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Open_CASCADE_Technology">OpenCasCade</a> permette operazioni complesse su profili di varia natura, anche molto articolati. È presente il supporto nativo al <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/B-Rep">BREP</a>, alle curve e alle superfici <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/NURBS">NURBS</a>, una vasta gamma di entità geometriche, di operazioni booleane e raccordi, e il supporto interno per i file STEP e IGES. <div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature3.jpg" class="image"><img alt="Feature3.jpg" src="Feature3.jpg" width="64" height="64" /></a></div> Un <b>modellatore interamente parametrico</b>. Tutti gli oggetti di FreeCAD sono nativamente parametrici, il che significa che la loro forma può essere basata sulle <a href="https://www.freecadweb.org/wiki/index.php?title=Property/it" title="Property/it">proprietà</a> e, quando dipendono da altri oggetti, se subiscono delle modifiche possono essere ricalcolati a richiesta, e registrati dall'albero delle operazioni annulla o ripeti. Possono essere aggiunti facilmente nuovi tipi di oggetti, anche quelli <a href="https://www.freecadweb.org/wiki/index.php?title=Scripted_objects/it" title="Scripted objects/it">completamente programmati in Python</a><div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature4.jpg" class="image"><img alt="Feature4.jpg" src="Feature4.jpg" width="64" height="64" /></a></div> Una <b>architettura modulare</b> permette di estendere le funzioni del programma attraverso l'utilizzo dei plugins. Queste estensioni possono essere complesse, come sono le intere nuove applicazioni programmate in C++ o essere semplici, come gli <a href="https://www.freecadweb.org/wiki/index.php?title=Power_users_hub/it" title="Power users hub/it">script Python</a> o le <a href="https://www.freecadweb.org/wiki/index.php?title=Macros/it" title="Macros/it">macro</a> auto-registrate. Attraverso l'utilizzo della riga di comando integrata nella GUI, è possibile accedere praticamente a tutte le funzionalità del software per mezzo di semplici comandi <b>Python</b>. Si possono <a href="https://www.freecadweb.org/wiki/index.php?title=Topological_data_scripting/it" title="Topological data scripting/it">creare e/o modificare oggetti geometrici</a>, interagire con <a href="https://www.freecadweb.org/wiki/index.php?title=Scenegraph/it" title="Scenegraph/it">l'ambiente di lavoro</a> o addirittura <a href="https://www.freecadweb.org/wiki/index.php?title=PySide/it" title="PySide/it">personalizzare l'interfaccia grafica</a> del programma. <div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature5.jpg" class="image"><img alt="Feature5.jpg" src="Feature5.jpg" width="64" height="64" /></a></div> È possibile importare ed esportare molti dei <b>formati standard</b> di rappresentazione 3D, come ad esempio: <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/ISO_10303">STEP</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/IGES">IGES</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Obj">OBJ</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/STL_%28file_format%29">STL</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Dxf">DXF</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Svg">SVG</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/STL_(file_format)">STL</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/COLLADA">DAE</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Industry_Foundation_Classes">IFC</a> oppure <a rel="nofollow" class="external text" href="http://people.sc.fsu.edu/~jburkardt/data/off/off.html">OFF</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/NASTRAN">NASTRAN</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/VRML">VRML</a>, oltre al formato nativo di FreeCAD <a href="https://www.freecadweb.org/wiki/index.php?title=Fcstd_file_format/it" class="mw-redirect" title="Fcstd file format/it">Fcstd</a>. Il livello di compatibilità tra FreeCAD e un formato di file specifico è variabile, dipende dal modulo che lo implementa.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature7.jpg" class="image"><img alt="Feature7.jpg" src="Feature7.jpg" width="64" height="64" /></a></div> Un ambiente di <a href="https://www.freecadweb.org/wiki/index.php?title=Sketcher_Workbench/it" title="Sketcher Workbench/it">sketch</a> dotato di strumenti per disegnare sagome in 2D vincolate. Questa funzionalità permette di vincolare in diversi modi le geometrie tracciate e poi di utilizzarle come base per la costruzione delle forme 3D.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature9.jpg" class="image"><img alt="Feature9.jpg" src="Feature9.jpg" width="64" height="64" /></a></div> Un modulo di <a href="https://www.freecadweb.org/wiki/index.php?title=Robot_Module/it" class="mw-redirect" title="Robot Module/it">simulazione robotica</a> con il quale studiare i movimenti e le traiettorie del manipolatore. È disponibile una interfaccia grafica di questo modulo che permette di manovrare i vari elementi del modello 3D in modo semplice e intuitivo.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature8.jpg" class="image"><img alt="Feature8.jpg" src="Feature8.jpg" width="64" height="64" /></a></div> Un nuovo modulo comodo per creare <a href="https://www.freecadweb.org/wiki/index.php?title=TechDraw_Module/it" title="TechDraw Module/it">fogli di disegno tradizionali</a> con opzioni come viste di dettagli, sezioni trasversali, quotatura e altre, che consente di inserire delle viste 2D dei modelli 3D su un foglio. Questo modulo produce quindi fogli SVG o PDF pronti per l'esportazione. Esiste ancora il vecchio modulo <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Module/it" title="Drawing Module/it">Drawing</a> con i suoi scarni comandi Gui, ma una potente funzionalità Python.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature-raytracing.jpg" class="image"><img alt="Feature-raytracing.jpg" src="Feature-raytracing.jpg" width="64" height="64" /></a></div> Un modulo dedicato al <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Module/it" title="Raytracing Module/it">rendering</a> per mezzo del quale si possono esportare i modelli 3D ed effettuare renderizzazioni con software di terze parti. Al momento è pienamente supportato solo <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/POV-Ray">POV-Ray</a>.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature-arch.jpg" class="image"><img alt="Feature-arch.jpg" src="Feature-arch.jpg" width="64" height="64" /></a></div> Inoltre, è stato avviato lo sviluppo di un modulo di <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Module/it" title="Arch Module/it">architettura</a> compatibile con il modello <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Building_Information_Modeling">BIM</a> e compatibile con l'<a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Industry_Foundation_Classes">IFC</a>. Le caratteristiche di questo modulo sono ancora in via di definizione e sono discusse dalla comunità in <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=10&t=821">questa pagina</a> del forum.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature-CAM.jpg" class="image"><img alt="Feature-CAM.jpg" src="Feature-CAM.jpg" width="64" height="64" /></a></div> Un <a href="https://www.freecadweb.org/wiki/index.php?title=Path_Workbench/it" title="Path Workbench/it">modulo Path</a> dedicato alle lavorazioni meccaniche, come la fresatura (CAM), in grado di produrre, visualizzare e modificare il <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/G-code">Codice G</a>. <div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature_spreadsheet.png" class="image"><img alt="Feature spreadsheet.png" src="Feature_spreadsheet.png" width="64" height="64" /></a></div> Il <a href="https://www.freecadweb.org/wiki/index.php?title=Spreadsheet_Workbench/it" title="Spreadsheet Workbench/it">foglio di calcolo integrato</a> e un <a href="https://www.freecadweb.org/wiki/index.php?title=Expressions/it" title="Expressions/it">parser delle espressioni</a> per guidare i modelli basati su formule o recuperare dati dai modelli.<div style="clear:both"></div></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Funzioni_Generali">Funzioni Generali</span></h2>
|
||
<ul><li><b>FreeCAD è multipiattaforma</b>. È in grado di funzionare esattamente allo stesso modo su piattaforme Microsoft Windows®, Linux e macOS®.</li></ul>
|
||
<ul><li> <b>FreeCAD ha una interfaccia grafica completa </b>basata sulla famosa piattaforma <a rel="nofollow" class="external text" href="http://www.qtsoftware.com/">Qt</a> e una interfaccia di visualizzazione 3D basata su <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_Inventor">Open Inventor</a> che garantisce un rendering rapido e permette di accedere facilmente alle varie proiezioni della scena.</li></ul>
|
||
<ul><li> <b>FreeCAD funziona anche tramite riga di comando</b>, con il minimo utilizzo di memoria. Utilizzando questa modalità, FreeCAD si avvia senza la <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Interfaccia_grafica">GUI</a>, ma dispone comunque di tutte le sue funzioni, anche di quelle più avanzate. In questo modo, può essere utilizzato come server per generare contenuti utilizzati in altre applicazioni.</li></ul>
|
||
<ul><li> <b>FreeCAD può essere importato come un <a href="https://www.freecadweb.org/wiki/index.php?title=Embedding_FreeCAD/it" title="Embedding FreeCAD/it">modulo Python</a></b> all'interno di altre applicazioni in grado di gestire script in questo linguaggio, oppure direttamente all'interno di una console Python. In questa modalità la GUI non viene caricata, ma è comunque possibile utilizzare tutti gli strumenti di modellazione geometrica come se si stesse agendo da riga di comando.</li></ul>
|
||
<ul><li> <b>Concepito in Ambienti</b>: nell'interfaccia di FreeCAD gli strumenti sono raggruppati all'interno di <a href="https://www.freecadweb.org/wiki/index.php?title=Workbenches/it" title="Workbenches/it">workbenches</a> (ambienti di lavoro). Questo permette che vengano visualizzati soltanto gli strumenti necessari all'azione specifica che si deve compiere, ottenendo un'area di lavoro pulita, facile da gestire e veloce da caricare.</li></ul>
|
||
<ul><li> <b>Struttura a plugins e moduli per il caricamento ritardato di funzioni e dati</b>. FreeCAD è formato da una struttura di base, il suo "cuore", e da numerosi moduli che vengono avviati solo quando sono necessari. Questo permette di aggiungere o rimuovere funzionalità, attraverso i moduli, anche ad una installazione preesistente.</li></ul>
|
||
<ul><li> <b>Gestione parametrica degli oggetti</b>. In un documento di FreeCAD tutti gli oggetti vengono definiti tramite parametri. Questi parametri sono modificabili a piacere e gli effetti delle modifiche sono visibili in tempo reale. Vengono memorizzate anche le relazioni che intercorrono tra i vari oggetti, quindi modificando un oggetto vengono modificati automaticamente tutti quelli collegati.</li></ul>
|
||
<ul><li> <b>Geometrie primitive</b> costruite per via <b>parametrica</b> come, ad esempio, cubi e parallelepipedi, sfere, cilindri, coni, figure toroidali ecc.</li></ul>
|
||
<ul><li> Operazioni di <b>modifica grafica</b> come traslazione, rotazione, scalatura, specularità, offset (triviali o di tipo <a rel="nofollow" class="external text" href="https://www.researchgate.net/publication/240754626_Self-intersection_Removal_in_Triangular_Mesh_Offsetting">Jung/Shin/Choi</a>) e anche trasformazione della forma, in qualsiasi piano dello spazio 3D.</li></ul>
|
||
<ul><li> <b><a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Constructive_solid_geometry">Operazioni booleane (en)</a></b> di costruzione di solidi geometrici quali Unione, Differenza e Intersezione.</li></ul>
|
||
<ul><li> Creazione grafica di <b>geometrie semplici</b> come linee, rettangoli, b-spline, archi circolari o ellittici, spezzate in ogni piano dello spazio 3D.</li></ul>
|
||
<ul><li> Modellazione lineare o rivolutiva di <b>estrusioni</b>, <b>sezioni</b> e <b>raccordi</b>.</li></ul>
|
||
<ul><li> Elementi topologici quali <b>vertici, spigoli, contorni</b> e <b>piani</b> facilmente ottenibili anche tramite <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" class="mw-redirect" title="Scripting/it">script Python</a>.</li></ul>
|
||
<ul><li> <b>Strumenti per il test e la correzione</b> di oggetti mesh: solid test, non-two-manifolds test, self-intersection test, hole-filling e uniform-orientation.</li></ul>
|
||
<ul><li> <b>Annotazioni</b> come testi o dimensioni</li></ul>
|
||
<ul><li> <b>Strumento annulla/ripristina</b>: tutto si può annullare o ripristinare tramite l'accesso diretto allo storico delle azioni. In questo modo è possibile annullare più modifiche contemporaneamente.</li></ul>
|
||
<ul><li> <b>Gestione delle modifiche</b>: lo storico annulla/ripristina conserva le informazioni sulle modifiche globali e non sulla singola azione, così ogni singolo strumento può gestire esattamente ciò che deve essere annullato o ripristinato.</li></ul>
|
||
<ul><li> <b>Strumento di sviluppo di <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" class="mw-redirect" title="Scripting/it">script</a> integrato</b>: FreeCAD fornisce un interprete <a rel="nofollow" class="external text" href="http://www.python.org/">Python</a> integrato nel programma e delle API che coprono la quasi totalità del programma, come ad esempio l'interfaccia, la geometria e la visualizzazione 3D. L'interprete è in grado di gestire singoli comandi così come interi script complessi. Tutti i moduli possono essere gestiti tramite Python.</li></ul>
|
||
<ul><li> <b>Console Python integrata</b> completa della funzione di highlight del codice, dell'auto-completamento e anche del class-browser. I comandi, in python, possono essere inviati direttamente dall'interno del programma e essere eseguiti immediatamente. Questa funzione è molto utile per testare il funzionamento di uno script, ma anche per esplorare i contenuti dei moduli integrati e conoscere a fondo il programma stesso.</li></ul>
|
||
<ul><li> <b>Azioni dell'utente registrate nella console</b>: tutto quello che si costruisce in <b>FreeCAD</b> viene tradotto in comandi Python. L'output di tali comandi può essere stampato sulla riga di comando integrata per tenerne nota oppure per essere registrato nelle <a href="https://www.freecadweb.org/wiki/index.php?title=Macros/it" title="Macros/it">macro</a> .</li></ul>
|
||
<ul><li> <b>Registrazione e editazione di macro.</b>: I comandi Python generati quando l'utente manipola l'interfaccia possono essere registrati, modificati, se necessario, e salvati per essere poi riprodotti in seguito.</li></ul>
|
||
<ul><li> <b>Formato di salvataggio parametrico</b>: I documenti FreeCAD vengono salvati con estensione <a href="https://www.freecadweb.org/wiki/index.php?title=Fcstd_file_format/it" class="mw-redirect" title="Fcstd file format/it">.fcstd</a> e contengono numerose informazioni come ad esempio la geometria, gli script e le anteprime. Il file .fcstd è di per sé un contenitore zip, quindi un file di FreeCAD salvato è già stato compresso.</li></ul>
|
||
<ul><li> <b>G.U.I. completamente personalizzabile</b>. L'interfaccia di FreeCAD è basata su <a rel="nofollow" class="external text" href="http://www.qtsoftware.com">Qt</a> ed è completamente configurabile tramite l'interprete Python. Oltre alle funzioni standard definite nel software, si ha a disposizione la potenze e la versatilità dell'intero framework Qt, il quale permette di aggiungere, spostare, agganciare oppure eliminare i widgets dall'area di lavoro.</li></ul>
|
||
<ul><li> <b>Thumbnailer</b> (per ora disponibile solo su piattaforme GNU/Linux): le icone dei documenti salvati in formato <a href="https://www.freecadweb.org/wiki/index.php?title=Fcstd_file_format/it" class="mw-redirect" title="Fcstd file format/it">.fcstd</a> forniscono una comoda anteprima del loro contenuto in molte applicazioni di gestione dei file, come Nautilus di Gnome, rendendo facile individuare i propri elaborati.</li></ul>
|
||
<ul><li> <b>Un installer MSI modulare</b> garantisce una installazione flessibile in ambienti Microsoft Windows®. Sono disponibili anche dei pacchetti specifici per Ubuntu.</li></ul>
|
||
<h2><span class="mw-headline" id="Funzioni_in_fase_di_sviluppo">Funzioni in fase di sviluppo</span></h2>
|
||
<ul><li> <div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Feature-assembly.jpg" class="image"><img alt="Feature-assembly.jpg" src="Feature-assembly.jpg" width="64" height="64" /></a></div> Un modulo di <a href="https://www.freecadweb.org/wiki/index.php?title=Assembly_project/it" title="Assembly project/it">Assemblaggio</a> che permetta di lavorare contemporaneamente su diverse forme, documenti, file e relazioni...</li></ul>
|
||
Questo modulo è attualmente in fase di progettazione.<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Ambienti_complementari">Ambienti complementari</span></h2>
|
||
<p>Alcuni utenti esperti hanno creato vari <a href="https://www.freecadweb.org/wiki/index.php?title=External_workbenches/it" title="External workbenches/it">ambienti complementari</a> personalizzati.
|
||
</p><p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Installazione">Installazione</span></h2>
|
||
<p>Il modo più semplice per installare FreeCAD su Windows è quello di scaricare il sottostante programma di installazione.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Windows.png" class="image"><img alt="Windows.png" src="Windows.png" width="32" height="32" /></a> <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/releases/download/0.16/FreeCAD.0.16.6706.f86a4e4-WIN-x86-installer.exe">Windows</a> <small>32 bits </small>
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Windows.png" class="image"><img alt="Windows.png" src="Windows.png" width="32" height="32" /></a> <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/releases/download/0.16.6712/FreeCAD-0.16.6712_x64_setup.exe">Windows</a> <small>64 bits</small>
|
||
</p><p><br />
|
||
Dopo aver scaricato il file .msi (Microsoft Installer), è sufficiente fare doppio clic su di esso per avviare il processo di installazione automatica.
|
||
</p><p>Più avanti sono riportate ulteriori informazioni sulle opzioni tecniche.<br />
|
||
Se appaiono scoraggianti, nessuna preoccupazione, ignoratele! La maggior parte degli utenti Windows ha bisogno solo del file .msi per installare e <b><a href="https://www.freecadweb.org/wiki/index.php?title=Getting_started/it" title="Getting started/it">iniziare ad usare FreeCAD</a></b>!
|
||
</p><p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Semplice_installazione_con_Microsoft_Installer">Semplice installazione con Microsoft Installer</span></h3>
|
||
<p>Per scaricare una versione a 64 bit o una versione instabile di sviluppo, vedere la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Download/it" title="Download/it">Download (it)</a> oppure la pagina originale <a href="Download.html" title="Download">Download (en)</a>.
|
||
</p><p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_da_riga_di_comando">Installazione da riga di comando</span></h3>
|
||
<p>Con l'utility a riga di comando msiexec.exe, sono disponibili funzioni aggiuntive, quali l'installazione <i>non interattiva</i> e l'installazione <i>amministrativa</i>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Installazione_non_interattiva">Installazione non interattiva</span></h4>
|
||
<p>L'installazione si avvia con il comando:
|
||
</p>
|
||
<pre> msiexec /i FreeCAD<version>.msi
|
||
</pre>
|
||
<p>Alla fine di questa riga di comando è possibile fornire i parametri aggiuntivi, come nel caso in cui si vuole specificare la directory di destinazione:
|
||
</p>
|
||
<pre>msiexec /i FreeCAD-2.5.msi TARGETDIR=r:\FreeCAD25 </pre>
|
||
<h4><span class="mw-headline" id="Limitazione_dell.27interfaccia_utente">Limitazione dell'interfaccia utente</span></h4>
|
||
<p>La dimensione dell'interfaccia utente che visualizza installazione può essere controllata con le opzioni /q, in particolare:
|
||
</p>
|
||
<ul><li> /qn - Senza interfaccia</li>
|
||
<li> /qb - Interfaccia di base - solo una piccola finestra che mostra l'avanzamento</li>
|
||
<li> /qb! - Come /qb, ma nasconde il pulsante Annulla</li>
|
||
<li> /qr - Interfaccia ridotta - visualizza tutte le finestre di dialogo che non richiedono interazione da parte dell'utente (salta tutte le finestre modali)</li>
|
||
<li> /qn+ - Come /qn, ma visualizzare la finestra "Completed" alla fine</li>
|
||
<li> /qb+ - Come /qb, ma visualizzare la finestra "Completed" alla fine </li></ul>
|
||
<h4><span class="mw-headline" id="Directory_di_destinazione">Directory di destinazione</span></h4>
|
||
<p>La proprietà TARGETDIR determina la directory principale di installazione di FreeCAD.
|
||
</p><p>Ad esempio, si può specificare una diversa unità di installazione con
|
||
</p>
|
||
<pre>TARGETDIR=R:\FreeCAD25 </pre>
|
||
<p>La cartella di destinazione predefinita (TARGETDIR di default) è [WindowsVolume\Programm Files\]FreeCAD<version>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Installazione_per_tutti_gli_utenti">Installazione per tutti gli utenti</span></h4>
|
||
<p>Aggiungendo
|
||
</p>
|
||
<pre>ALLUSERS=1 </pre>
|
||
<p>si realizza una installazione per tutti gli utenti.
|
||
</p><p>Come impostazioni predefinite, l'installazione <i>non interattiva</i> installa il pacchetto solo per l'utente corrente mentre l'installazione interattiva mostra una finestra di dialogo che ha come impostazione predefinita "Tutti gli utenti" se l'utente attuale ha, in Windows, i permessi necessari.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Selezione_delle_caratteristiche">Selezione delle caratteristiche</span></h4>
|
||
<p>Varie proprietà permettono la selezione delle funzioni da installare, reinstallare, o rimuovere.
|
||
</p><p>Il set di funzioni dell'installatore di FreeCAD è:
|
||
</p>
|
||
<ul><li> DefaultFeature - Installa il software appropriato, più le librerie di base</li>
|
||
<li> Documentation - Installa la documentazione</li>
|
||
<li> Source code - Installa il codice sorgente</li>
|
||
<li> ... ToDo</li></ul>
|
||
<p>Inoltre, ALL specifica (installa) tutte le funzioni.
|
||
</p><p>Tutte le funzioni dipendono da DefaultFeature, quindi installando qualsiasi funzione si installano automaticamente anche le funzione di default.
|
||
</p><p>Le seguenti proprietà controllano le operazioni di installazione o di rimozione:
|
||
</p>
|
||
<ul><li> ADDLOCAL - Elenco delle funzioni da installare sulla macchina locale</li>
|
||
<li> REMOVE - Elenco delle funzioni da eliminare</li>
|
||
<li> ADDDEFAULT - Elenco delle funzioni aggiunte nella loro configurazione di default (che è locale per tutte le funzioni di FreeCAD)</li>
|
||
<li> REINSTALL - Elenco delle funzioni da reinstallare o riparare</li>
|
||
<li> ADVERTISE - Elenco delle funzioni per cui fornire un avviso di installazione </li></ul>
|
||
<p>Ci sono alcune altre proprietà aggiuntive disponibili, vedere la documentazione MSDN per i dettagli.
|
||
</p><p>Con queste opzioni, aggiungendo
|
||
</p>
|
||
<pre>ADDLOCAL=Extensions </pre>
|
||
<p>installa l'interprete e registra le estensioni, ma non installa niente altro.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Disinstallazione">Disinstallazione</span></h3>
|
||
<p>Si può disinstallare FreeCAD con:
|
||
</p>
|
||
<pre>msiexec /x FreeCAD<version>.msi </pre>
|
||
<p>Per la disinstallazione, non è necessario disporre del file MSI; in alternativa, può anche essere specificato il codice del pacchetto o del prodotto.
|
||
</p><p>Per trovare il codice del prodotto, esplorare le proprietà del collegamento per la disinstallazione che FreeCAD installa nel menu di Avvio.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_Amministrativa">Installazione Amministrativa</span></h3>
|
||
<p>Si può iniziare una installazione "amministrativa" (da rete) con:
|
||
</p>
|
||
<pre>msiexec /a FreeCAD<version>.msi </pre>
|
||
<p>I file vengono decompressi nella directory di destinazione (che dovrebbe essere una directory in rete), ma non vengono apportate altre modifiche al sistema locale.
|
||
</p><p>Inoltre, viene generato un altro file .msi (più piccolo) nella directory di destinazione, che i clienti possono utilizzare per eseguire un'installazione locale (le future versioni potrebbero anche offrire di mantenere alcune funzioni sull'unità di rete).
|
||
</p><p>Attualmente non esiste alcuna interfaccia per le installazioni amministrative.
|
||
</p><p>La directory di destinazione deve essere specificata nella riga di comando.
|
||
</p><p>Non esiste una specifica procedura di disinstallazione, basta cancellare la directory di destinazione se non è più utilizzata da nessun client.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Advertisement_-_Annunciare_FreeCAD">Advertisement - Annunciare FreeCAD</span></h3>
|
||
<p>Con
|
||
</p>
|
||
<pre>msiexec /jm FreeCAD<version>.msi </pre>
|
||
<p>è possibile, all'inizio, "annunciare" FreeCAD a una macchina (con /jm oppure ad un utente con /ju).
|
||
</p><p>In questo modo, le icone appaiono nel menu Start e le estensioni vengono registrate senza che il software venga effettivamente installato.
|
||
</p><p>Il primo uso di una funzione provoca l'installazione della funzione stessa.
|
||
</p><p>L'installatore di FreeCAD attualmente supporta solo l'annuncio per le voci del menu di avvio, ma non supporta l'annuncio per i comandi di avvio veloce.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_automatica_su_un_gruppo_di_macchine">Installazione automatica su un gruppo di macchine</span></h3>
|
||
<p>Utilizzando i criteri di gruppo di Windows, è possibile automatizzare l'installazione di FreeCAD su un gruppo di macchine.
|
||
</p><p>Per effettuare questa operazione, attenersi alla seguente procedura:
|
||
</p>
|
||
<ol><li>Accedere al controller di dominio.</li>
|
||
<li>Copiare il file MSI in una cartella condivisa a cui è consentito l'accesso a tutti i computer di destinazione</li>
|
||
<li>Aprire il componente MMC "Active Directory users and computers"</li>
|
||
<li>Passare al gruppo di computer che necessitano di FreeCAD</li>
|
||
<li>Aprire Proprietà</li>
|
||
<li>Aprire Criteri di gruppo - Group Policies </li>
|
||
<li>Aggiungere un nuovo criterio, e editarlo - new policy</li>
|
||
<li>In Computer Configuration/Software Installation, sceglire New/Package </li>
|
||
<li>Selezionare il file MSI attraverso il percorso di rete</li>
|
||
<li>Facoltativamente, selezionare che si desidera che FreeCAD venga disinstallato se il computer lascia il campo di applicazione del criterio. </li></ol>
|
||
<p>La propagazione dei criteri di gruppo richiede in genere un po 'di tempo - per distribuire in modo affidabile il pacchetto, tutte le macchine dovrebbero essere riavviate.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_su_Linux_con_Crossover_Office">Installazione su Linux con Crossover Office</span></h3>
|
||
<p>È possibile installare la versione Windows di FreeCAD su un sistema Linux utilizzando <i>CXOffice 5.0.1</i>.
|
||
</p><p>Eseguire <i>msiexec</i> dalla riga di comando di CXOffice.
|
||
</p><p>Supponendo che il pacchetto di installazione si trovi nella directory "software", nell'unità "Y:":
|
||
</p>
|
||
<pre>msiexec /i Y:\\software\\FreeCAD<version>.msi </pre>
|
||
<p>FreeCAD viene eseguito, ma è stato riferito che OpenGL non funziona, come succede con altri programmi che girano sotto [<a rel="nofollow" class="external text" href="http://es.wikipedia.org/wiki/Wine">Wine</a>], quali ad esempio [<a rel="nofollow" class="external text" href="http://es.wikipedia.org/wiki/Google_SketchUp%7CGoogle">SketchUp</a>].
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p>L'installazione di FreeCAD sui sistemi Linux più noti ora è stata approvata dalla comunità e FreeCAD dovrebbe essere accessibile direttamente tramite il "Gestore dei pacchetti" disponibile nella propria distribuzione. Il team di FreeCAD fornisce inoltre i pacchetti "ufficiali" quando sono rilasciate le nuove versioni, e fornisce i repository PPA sperimentali per testare le ultime caratteristiche sviluppate.
|
||
</p><p>Appena terminata l'installazione di FreeCAD, è ora di <a href="https://www.freecadweb.org/wiki/index.php?title=Getting_started/it" title="Getting started/it">iniziare</a>!
|
||
</p>
|
||
<h2><span class="mw-headline" id="Ubuntu_e_sistemi_basati_su_Ubuntu">Ubuntu e sistemi basati su Ubuntu</span></h2>
|
||
<p>Molte distribuzioni Linux sono basate su Ubuntu e condividono i suoi repository. Per altre varianti ufficiali (Kubuntu, Xubuntu e Lubuntu), ci sono distro non ufficiali come per Linux Mint, Voyager e altri. Le opzioni di installazione riportate in seguito dovrebbero essere compatibili con tali sistemi.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Repository_ufficiale_di_Ubuntu">Repository ufficiale di Ubuntu</span></h3>
|
||
<p>FreeCAD è disponibile nei repository di Ubuntu e può essere installato tramite il Centro Software o tramite il terminale con:
|
||
</p>
|
||
<pre>sudo apt-get install freecad </pre>
|
||
<p>ma è probabile che la versione installata in questo modo non sia aggiornata e non possieda le ultime caratteristiche. Per ottenere l'ultima versione rilasciata, si prega di utilizzare il PPA.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Versione_stabile_da_PPA_tramite_GUI">Versione stabile da PPA tramite GUI</span></h3>
|
||
<p>Per installare FreeCAD utilizzando il PPA dall'interfaccia grafica, si prega di seguire queste istruzioni. La comunità FreeCAD fornisce un <a rel="nofollow" class="external text" href="https://launchpad.net/~freecad-maintainers/+archive/freecad-stable">PPA repository on Launchpad</a> con l'ultima versione di FreeCAD stabile.
|
||
</p><p>È necessario aggiungere alle Sorgenti software del sistema il seguente PPA. Per farlo aprire il Software Centre> Modifica Sorgenti> Software> Altro software. Fare clic su Aggiungi e copiare e incollare il codice sottostante:
|
||
</p>
|
||
<pre>ppa:freecad-maintainers/freecad-stable </pre>
|
||
<p>Aggiornare le sorgenti del software, se richiesto. Ora, è possibile trovare ed installare l'ultima versione stabile di FreeCAD da Ubuntu Software Center.
|
||
</p><p>Per avere ulteriori informazioni sui PPA, cliccare qui: <a rel="nofollow" class="external text" href="https://help.ubuntu.com/community/PPA">Definition of PPA (Personal Package Archive) on help.ubuntu.com</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Versione_stabile_da_PPA_tramite_console">Versione stabile da PPA tramite console</span></h3>
|
||
<p>Digitare (o copia-incolla) questi comandi in una console per aggiungere il PPA e installare FreeCAD con la sua documentazione:
|
||
</p><p>Per il PPA <b>"stable"</b>
|
||
</p>
|
||
<pre>sudo add-apt-repository ppa:freecad-maintainers/freecad-stable </pre>
|
||
<p>Non dimenticare di recuperare l'elenco aggiornato dei pacchetti:
|
||
</p>
|
||
<pre>sudo apt-get update </pre>
|
||
<p>Update sincronizza il proprio elenco dei pacchetti con quelli disponibili sul server.
|
||
</p><p>Poi, installare FreeCAD con la sua documentazione:
|
||
</p>
|
||
<pre>sudo apt-get install freecad freecad-doc && sudo apt-get upgrade </pre>
|
||
<p>Upgrade scarica e installa la versione più recente dei pacchetti dei programmi installati. Viene applicato a tutti i software installati sul computer.
|
||
</p><p>Per avviare la versione stabile di FreeCAD eseguire questo comando:
|
||
</p>
|
||
<pre>freecad </pre>
|
||
<h3><span class="mw-headline" id="Versione_daily_da_PPA_tramite_console">Versione daily da PPA tramite console</span></h3>
|
||
<p>Se si desidera installare l'ultima versione instabile di FreeCAD, utilizzare il PPA denominato <b>"freecad-daily"</b> <a rel="nofollow" class="external text" href="https://launchpad.net/~freecad-maintainers/+archive/freecad-daily">repositorio PPA su Launchpad</a>. In questo modo è possibile accedere alla versione più evoluta di FreeCAD. Questo PPA viene compilato automaticamente tutti i giorni dal ramo master del repositorio ufficiale di FreeCAD. Di solito contiene numerose correzioni di bug e gli ultimi aggiornamenti di funzionalità.
|
||
</p><p>Per il PPA <b>"daily"</b>
|
||
</p>
|
||
<pre>sudo add-apt-repository ppa:freecad-maintainers/freecad-daily
|
||
sudo apt-get update
|
||
sudo apt-get install freecad-daily && sudo apt-get upgrade </pre>
|
||
<p>Per avviare la versione daily build di FreeCAD eseguire questo comando :
|
||
</p>
|
||
<pre>freecad-daily </pre>
|
||
<h2><span class="mw-headline" id="Debian_e_altri_sistemi_basati_su_Debian">Debian e altri sistemi basati su Debian</span></h2>
|
||
<p>A partire da Debian Lenny, FreeCAD è disponibile direttamente nei repository di software Debian e può essere installato tramite Synaptic o semplicemente con:
|
||
</p>
|
||
<pre>sudo apt-get install freecad </pre>
|
||
<h2><span class="mw-headline" id="OpenSUSE">OpenSUSE</span></h2>
|
||
<p>FreeCAD si installa normalmente con:
|
||
</p>
|
||
<pre>zypper install FreeCAD </pre>
|
||
<h2><span class="mw-headline" id="Gentoo">Gentoo</span></h2>
|
||
<p>FreeCAD si può costruire/installare semplicemente eseguendo:
|
||
</p>
|
||
<pre>emerge freecad </pre>
|
||
<h2><span class="mw-headline" id="Altri">Altri</span></h2>
|
||
<p>Se scoprite che il vostro sistema è dotato di FreeCAD, ma in questa pagina non è documentato, per favore comunicatelo tramite il <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewforum.php?f=21">forum</a>!
|
||
</p><p>Sulla rete sono disponibili diversi pacchetti alternativi non ufficiali di FreeCAD, ad esempio per sistemi come Slackware o Fedora. Una ricerca in rete può dare rapidamente buoni risultati.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_manuale_in_sistemi_basati_su_.deb">Installazione manuale in sistemi basati su .deb</span></h3>
|
||
<p>Se per qualche motivo non è possibile utilizzare uno dei metodi di cui sopra, si può sempre scaricare uno dei pacchetti .deb disponibili nella pagina <a href="Download.html" title="Download">Download</a>.
|
||
</p><p>Dopo aver scaricato la versione .deb corrispondente al proprio sistema, se è installato il pacchetto <a href="http://en.wikipedia.org/wiki/Debian#GDEBI" class="extiw" title="wikipedia:Debian">Gdebi</a> (di solito lo è), basta spostarsi nella cartella del file scaricato e fare doppio clic su di esso. Le dipendenze necessarie sono installate automaticamente dal gestore del sistema. In alternativa è possibile installare il pacchetto dal terminale; spostarsi nella cartella che contiene il file e digitare:
|
||
</p>
|
||
<pre>sudo dpkg -i Name_of_your_FreeCAD_package.deb </pre>
|
||
<p>sostituendo a Name_of_your_FreeCAD_package.deb il nome del file scaricato
|
||
</p><p>Terminata l'installazione di FreeCAD, nella sezione "Grafica" del Menu Start viene aggiunta l'icona per avviarlo.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_in_altri_sistemi_Linux.2FUnix">Installazione in altri sistemi Linux/Unix</span></h3>
|
||
<p>Purtroppo, al momento, nessun pacchetto precompilato è disponibile per altri sistemi Linux / Unix, quindi è necessario <a href="CompileOnUnix.html" title="CompileOnUnix">compilare FreeCAD</a> da soli.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installare_le_versioni_per_Windows_in_Linux">Installare le versioni per Windows in Linux</span></h3>
|
||
<p>Vedere la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Install_on_Windows/it" title="Install on Windows/it">Installazione in Windows</a>.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p>FreeCAD può essere installato su Mac OS X in una unica operazione usando l'installer seguente.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mac.png" class="image"><img alt="Mac.png" src="Mac.png" width="32" height="32" /></a> <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/releases/download/0.16.6712/FreeCAD_0.16-6712.da2d364-OSX-x86_64.dmg">Mac</a> <small>10.9 Mavericks 64-bit</small>
|
||
</p><p><br />
|
||
Questa pagina descrive l'uso e le caratteristiche del programma di installazione di FreeCAD. Essa comprende anche le istruzioni di disinstallazione.
|
||
</p><p>Terminata l'installazione, è possibile <a href="https://www.freecadweb.org/wiki/index.php?title=Getting_started/it" title="Getting started/it">iniziare</a>!
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_semplice">Installazione semplice</span></h3>
|
||
<p>L'installatore di FreeCAD viene fornito come pacchetto di installazione (.app) incluso in un file di immagine disco.
|
||
</p><p>È possibile scaricare l'ultima versione dell'installatore dalla pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Download/it" title="Download/it">Download</a>. Dopo aver scaricato il file, basta montare l'immagine, poi trascinarla nella cartella Applicazioni o in una cartella a scelta..
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mac_installer_1.png" class="image"><img alt="Mac installer 1.png" src="Mac_installer_1.png" width="700" height="438" /></a>
|
||
</p><p>Questo è tutto. Basta cliccare sulla app per lanciare FreeCAD. Se si riceve il messaggio "FreeCAD non può essere aperto in quanto proviene da uno sviluppatore non identificato", aprire la cartella (Applicazione) e fare clic destro sulla App quindi fare clic su apri e accettare di aprire l'applicazione.
|
||
</p><p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Disinstallazione_2">Disinstallazione</span></h3>
|
||
<p>Attualmente non c'è un programma di disinstallazione per FreeCAD.
|
||
Per rimuovere completamente FreeCAD e tutti i componenti installati, trascinare i seguenti file e cartelle nel cestino:
|
||
</p>
|
||
<ul><li>In /Applications:
|
||
<ul><li>FreeCAD</li></ul></li></ul>
|
||
<p>Tutto qui.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Informazioni_su_FreeCAD">Informazioni su FreeCAD</span></h2>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Aggiornamenti">Aggiornamenti</span></h2>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_011/it" title="Release notes 011/it">Note di rilascio della versione 0.11</a> (<a href="Release_notes_011.html" title="Release notes 011">Version 0.11 Release notes/en</a>): per conoscere le nuove funzionalità introdotte con la versione 0.11 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_012/it" title="Release notes 012/it">Note di rilascio della versione 0.12</a> (<a href="Release_notes_012.html" title="Release notes 012">Version 0.12 Release notes/en</a>): per conoscere le nuove funzionalità introdotte con la versione 0.12 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_013/it" title="Release notes 013/it">Note di rilascio della versione 0.13</a> (<a href="Release_notes_013.html" title="Release notes 013">Version 0.13 Release notes/en</a>): per conoscere le nuove funzionalità introdotte con la versione 0.13 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_014/it" class="mw-redirect" title="Release notes 014/it">Note di rilascio della versione 0.14</a> (<a href="Release_notes_014.html" class="mw-redirect" title="Release notes 014">Version 0.14 Release notes/en</a>): per conoscere le nuove funzionalità introdotte con la versione 0.14 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_015/it" title="Release notes 015/it">Note di rilascio della versione 0.15</a> (<a href="Release_notes_015.html" title="Release notes 015">Version 0.15 Release notes/en</a>): per conoscere le nuove funzionalità introdotte con la versione 0.15 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.16/it" title="Release notes 0.16/it">Note di rilascio della versione 0.16</a> : per conoscere le nuove funzionalità introdotte con la versione 0.16 di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">Note di rilascio della versione 0.17</a> : per conoscere le nuove funzionalità introdotte con la versione 0.17 di FreeCAD.</li></ul>
|
||
<h2><span class="mw-headline" id="Prefazione">Prefazione</span></h2>
|
||
<p>FreeCAD è una <a href="https://www.freecadweb.org/wiki/index.php?title=About_FreeCAD/it" title="About FreeCAD/it">applicazione per la modellazione parametrica</a> di tipo CAD/CAE. È fatto principalmente per la progettazione meccanica, ma serve anche in tutti casi in cui è necessario modellare degli oggetti 3D con precisione e avere il controllo dello storico della modellazione.
|
||
</p><p>Nonostante FreeCAD sia ancora nella fase iniziale del suo sviluppo, offre già un lunga lista (che continua a aumentare) di <a href="Feature_list.html" title="Feature list">funzionalità</a>, ma ne mancano ancora molte altre, specialmente rispetto alle soluzioni commerciali, quindi potreste ritenerlo non ancora abbastanza sviluppato per essere usato in ambito produttivo. Ciò nonostante, c'è una comunità in rapida crescita di utenti entusiasti, e si possono già trovare <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=8&t=1222">molti esempi</a> di progetti di qualità sviluppati con FreeCAD.
|
||
</p><p>Come tutti i progetti open-source, il progetto FreeCAD non è un lavoro a <i>senso unico</i> che gli sviluppatori vi consegnano. La crescita del progetto, l'acquisizione di nuove funzionalità e la stabilità dell'applicazione (la correzione dei bug) dipendono molto dalla sua comunità. Quindi non dimenticate questo quando iniziate ad utilizzare FreeCAD, e se vi piace, potete contribuire e <a href="Help_FreeCAD.html" title="Help FreeCAD">aiutare</a> il progetto!
|
||
</p>
|
||
<h2><span class="mw-headline" id="Installazione_2">Installazione</span></h2>
|
||
<p>Per iniziare è necessario scaricare ed <a href="https://www.freecadweb.org/wiki/index.php?title=Installing/it" title="Installing/it">installare</a> FreeCAD. Consultare la pagina (<a href="Download.html" title="Download">Download/en</a>) <a href="https://www.freecadweb.org/wiki/index.php?title=Download/it" title="Download/it">Download/it</a> per ottenere informazioni sulla versione corrente e sugli ultimi aggiornamenti.
|
||
Sono disponibili i file di installazione per Windows (.msi), Ubuntu & Debian (.deb), openSUSE (.rpm) e Mac OSX.
|
||
Dato che FreeCAD è open-source, se siete avventurosi e volete vedere le ultime funzionalità che in questo momento sono in fase di sviluppo, potete anche prelevare il codice sorgente e <a href="https://www.freecadweb.org/wiki/index.php?title=Compiling/it" title="Compiling/it">compilarlo</a> (<a href="Compiling.html" title="Compiling">en</a>).
|
||
</p>
|
||
<h2><span class="mw-headline" id="Esplorare_FreeCAD">Esplorare FreeCAD</span></h2>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Freecad-interface.jpg" class="image"><img alt="Freecad-interface.jpg" src="1024px-Freecad-interface.jpg" width="1024" height="623" srcset="/wiki/images/thumb/d/d8/Freecad-interface.jpg/1536px-Freecad-interface.jpg 1.5x, /wiki/images/d/d8/Freecad-interface.jpg 2x" /></a></div></div>
|
||
<p><br />
|
||
</p>
|
||
<ol><li> La vista 3D che visualizza gli oggetti contenuti nel documento</li>
|
||
<li> La vista ad albero che mostra la gerarchia e lo storico della costruzione di tutti gli oggetti del documento</li>
|
||
<li> L'<a href="https://www.freecadweb.org/wiki/index.php?title=Property/it" title="Property/it">editore delle proprietà</a> che consente di visualizzare e modificare le proprietà degli oggetti selezionati</li>
|
||
<li> La finestra dei rapporti dove FreeCAD stampa i messaggi di avvisi o di errori</li>
|
||
<li> La console python dove sono visibili tutti i comandi eseguiti da FreeCAD, e in cui è possibile inserire il codice python</li>
|
||
<li> Il selettore degli <a href="https://www.freecadweb.org/wiki/index.php?title=Workbenches/it" title="Workbenches/it">Ambienti</a> che mostra quello attivo</li></ol>
|
||
<p><br />
|
||
Il concetto principale è che, dietro la sua interfaccia, FreeCAD è suddiviso in <a href="https://www.freecadweb.org/wiki/index.php?title=Workbenches/it" title="Workbenches/it">ambienti di lavoro</a>. Ogni ambiente raggruppa gli strumenti idonei a svolgere un compito specifico, come ad esempio lavorare con gli oggetti <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">mesh</a>, oppure disegnare <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Module/it" title="Draft Module/it">oggetti 2D</a> o <a href="https://www.freecadweb.org/wiki/index.php?title=Sketcher_Module/it" class="mw-redirect" title="Sketcher Module/it">schizzi vincolati</a>. È possibile cambiare l'ambiente corrente con il selettore (6). Si può <a href="https://www.freecadweb.org/wiki/index.php?title=Interface_Customization/it" title="Interface Customization/it">personalizzare</a> il set di strumenti inclusi in ogni ambiente, aggiungere degli strumenti da altri ambienti o anche aggiungere strumenti di propria creazione, che noi chiamiamo <a href="https://www.freecadweb.org/wiki/index.php?title=Macros/it" title="Macros/it">macro</a>. Vi è anche un ambiente di lavoro generico denominato <b>Completo</b> che riunisce gli strumenti di uso più comune dagli altri ambienti.
|
||
</p><p>Al primo avvio di FreeCAD viene visualizzato lo start center:
|
||
</p><p><br />
|
||
</p>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Startcenter.jpg" class="image"><img alt="Startcenter.jpg" src="1024px-Startcenter.jpg" width="1024" height="574" srcset="/wiki/images/6/66/Startcenter.jpg 1.5x" /></a></div></div>
|
||
<p><br />
|
||
Lo Start Center permette di passare rapidamente a uno degli ambienti di lavoro più comuni, di aprire uno dei file recenti, oppure di vedere le ultime novità dal mondo di FreeCAD. Nelle <a href="https://www.freecadweb.org/wiki/index.php?title=Preferences_Editor/it" title="Preferences Editor/it">preferenze</a> è possibile modificare l'ambiente di lavoro predefinito.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Navigare_nello_spazio_3D">Navigare nello spazio 3D</span></h2>
|
||
<p>FreeCAD permette di interagire con lo spazio 3D in diverse <a href="https://www.freecadweb.org/wiki/index.php?title=Mouse_Model/it" title="Mouse Model/it">modalità di navigazione</a> selezionabili nel dialogo delle preferenze oppure cliccando con il tasto destro nella vista 3D. Uno di essi è specifico per la <a href="/wiki/Mouse_Model/it#Touchpad_Navigation" title="Mouse Model/it">Navigazione Touchpad</a>, dove non si usa il tasto centrale del mouse.
|
||
</p><p>Per la modalità di default, la "Navigazione CAD", i comandi sono i seguenti:
|
||
</p><p><br />
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Traslazione
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per selezionare"><img alt="per selezionare" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per traslare"><img alt="per traslare" src="Pan-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Zoom-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse.svg" class="image" title="per ruotare la vista"><img alt="per ruotare la vista" src="Rotate-mouse.svg" width="70" height="100" /></a> oppure <a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse-MMB%2BRMB.svg" class="image" title="per ruotare la vista, secondo metodo"><img alt="per ruotare la vista, secondo metodo" src="Rotate-mouse-MMB%2BRMB.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro del mouse sull'oggetto che si desidera selezionare. Tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span> per selezionare più oggetti.
|
||
</td>
|
||
<td>Fare clic sul pulsante centrale del mouse e muovere il mouse per spostare l'oggetto.<br />Inoltre, per attivare la traslazione, si può tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span> e cliccare con il tasto destro. In questo modo la funzione rimane attiva, senza impegnare la mano del mouse, e permette l'uso della rotellina per lo zoom, fino a quando il tasto Ctrl non viene rilasciato.
|
||
</td>
|
||
<td>Ruotare la rotellina del mouse per ingrandire e ridurre.
|
||
</td>
|
||
<td>Premere e mantenere premuto il tasto centrale del mouse, fare clic con il pulsante sinistro, o destro, del mouse su qualsiasi parte visibile di un oggetto e trascinarlo nella direzione desiderata. La posizione del cursore nel momento in cui si preme il pulsante centrale del mouse determina il centro di rotazione. La rotazione funziona come nel caso di una palla che ruota attorno al suo centro. Se i tasti vengono rilasciati prima di arrestare il movimento e se l'opzione <a href="https://www.freecadweb.org/wiki/index.php?title=Spinning/it" title="Spinning/it">Abilita animazione</a> è attivata, l'oggetto continua la rotazione automaticamente. Un doppio clic con il tasto centrale del mouse su qualsiasi parte di un oggetto imposta un nuovo centro di rotazione e di zoom in tale punto. Il secondo metodo può essere utile ai mancini.<br />Inoltre, per attivare la rotazione, si può tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Maiusc</span> (Shift) e cliccare con il tasto destro. In questo modo la funzione rimane attiva, senza impegnare la mano del mouse, e permette l'uso dello zoom, fino a quando il tasto Maiusc non viene rilasciato.
|
||
<p><br />
|
||
</p>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse-CTRL.svg" class="image" title="to Pan"><img alt="to Pan" src="Pan-mouse-CTRL.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse-CTRL-SHIFT.svg" class="image" title="to Zoom"><img alt="to Zoom" src="Zoom-mouse-CTRL-SHIFT.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse-SHIFT.svg" class="image" title="to rotate"><img alt="to rotate" src="Rotate-mouse-SHIFT.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span>, cliccare sul tasto destro, rilasciarlo e spostare il mouse per spostare la vista (rev 0.17)
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span>, cliccare sul tasto destro, rilasciarlo, cliccare sul tasto sinistro, rilasciarlo e spostare il mouse per zoommare (rev 0.17)
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Maiusc</span>, cliccare sul tasto destro, rilasciarlo e spostare il mouse per ruotare la vista (rev 0.17)
|
||
</td>
|
||
<td>
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p><p>Inoltre, sono disponibili alcune viste preconfigurate (dall'alto, laterale, frontale, ecc) accessibili dal menu Visualizza → Viste standard oppure tramite i pratici comandi veloci dei tasti numerici ( <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">1</span>, <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">2</span>, <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">3</span> etc...)
|
||
</p>
|
||
<h2><span class="mw-headline" id="Primi_passi_con_FreeCAD">Primi passi con FreeCAD</span></h2>
|
||
<p>L'obiettivo di FreeCAD è quello di consentire di creare dei modelli 3D di alta precisione mantenendo uno stretto controllo sui modelli per essere in grado di tornare indietro nello storico della modellazione e di variare i parametri, e alla fine di costruire quei modelli (attraverso la stampa 3D, CNC o anche la costruzione in cantiere). È quindi molto diverso da alcune applicazioni 3D realizzate per altri scopi, come ad esempio per i film di animazione o per i giochi. La sua curva di apprendimento può essere ripida, specialmente se questo è il primo contatto con la modellazione 3D. Quando si rimane bloccati in un certo punto, ricordarsi che nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/index.php">FreeCAD forum</a> c'è una comunità amichevole di utenti può essere in grado di fornire un aiuto in breve tempo.
|
||
</p><p>L'ambiente di lavoro con cui iniziare a lavorare in FreeCAD dipende dal tipo di lavoro si intende realizzare. Quando si ha intenzione di lavorare su modelli meccanici, o più in generale su qualsiasi oggetto di piccole dimensioni, probabilmente si vuole provare <a href="https://www.freecadweb.org/wiki/index.php?title=PartDesign_Workbench/it" title="PartDesign Workbench/it">Part Design</a>. Se si lavora in 2D, allora conviene passare all'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Module/it" title="Draft Module/it">Draft</a>, o all'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Sketcher_Workbench/it" title="Sketcher Workbench/it">Sketcher</a> quando servono i vincoli. Se si vuole fare BIM, avviare l'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Workbench/it" class="mw-redirect" title="Arch Workbench/it">Architettura</a>. Se si lavora con il disegno navale, è disponibile uno speciale ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Ship_Workbench/it" title="Ship Workbench/it">Ship</a>. Se si proviene dal mondo di OpenSCAD, si può provare l'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=OpenSCAD_Module/it" title="OpenSCAD Module/it">OpenSCAD</a>.
|
||
</p><p>È possibile commutare gli ambienti di lavoro in qualsiasi momento, e anche <a href="https://www.freecadweb.org/wiki/index.php?title=Interface_Customization/it" title="Interface Customization/it">personalizzare</a> il proprio ambiente preferito aggiungendovi degli strumenti di altri ambienti.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Lavorare_con_gli_ambienti_PartDesign_e_Sketcher">Lavorare con gli ambienti PartDesign e Sketcher</span></h2>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=PartDesign_Workbench/it" title="PartDesign Workbench/it">PartDesign</a> è fatto appositamente per costruire oggetti complessi, partendo da forme semplici a cui aggiungere o rimuovere dei pezzi (che noi chiamiamo "caratteristiche"), fino a ottenere l'oggetto finale. Tutte le caratteristiche applicate durante il processo di modellazione vengono memorizzate in una vista separata denominata <a href="https://www.freecadweb.org/wiki/index.php?title=Document_structure/it" title="Document structure/it">vista a albero</a>, che contiene anche gli altri oggetti del documento. Si può pensare ad un oggetto di PartDesign come a una successione di operazioni, ciascuna applicata al risultato di quella precedente, formando una grande catena. Nella vista ad albero, si vede l'oggetto finale, ma è possibile espanderla e recuperare tutti gli stati precedenti, e modificare i loro parametri, questo aggiorna automaticamente l'oggetto finale.
|
||
</p><p>L'ambiente PartDesign fa uso importante di un altro ambiente, l'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Sketcher_Workbench/it" title="Sketcher Workbench/it">Sketcher</a>. Sketcher permette di disegnare forme 2D vincolate, il che significa che alcune parti della forma 2D possono avere dei vincoli. Ad esempio, è possibile disegnare un rettangolo e impostare un vincolo di lunghezza per uno dei suoi lati. Quel lato quindi non può più essere ridimensionato, fino a quando il vincolo non viene modificato.
|
||
</p><p>Queste forme 2D realizzate con lo sketcher sono molto utilizzate in PartDesign, ad esempio per creare i volumi 3D o per disegnare le aree sulle facce dell'oggetto che devono essere scavate dal volume principale. Ecco un tipico flusso di lavoro PartDesign:
|
||
</p>
|
||
<ol><li> Creare un nuovo schizzo</li>
|
||
<li> Disegnare un contorno chiuso (assicurarsi che tutti i punti sono uniti)</li>
|
||
<li> Chiudere lo schizzo</li>
|
||
<li> Espandere lo schizzo in un solido 3D con lo strumento Pad</li>
|
||
<li> Selezionare una faccia del solido</li>
|
||
<li> Creare un secondo schizzo (questa volta sarà disegnato sulla faccia selezionata)</li>
|
||
<li> Disegnare una forma chiusa</li>
|
||
<li> Chiudere lo schizzo</li>
|
||
<li> Creare uno scavo con il secondo schizzo, sul primo oggetto</li></ol>
|
||
<p>Si ottiene un oggetto simile a questo:
|
||
</p>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Partdesign_example.jpg" class="image"><img alt="Partdesign example.jpg" src="1024px-Partdesign_example.jpg" width="1024" height="524" srcset="/wiki/images/5/53/Partdesign_example.jpg 1.5x" /></a></div></div>
|
||
<p>In qualsiasi momento è possibile selezionare gli schizzi originali e modificarli oppure modificare i parametri delle operazioni di estrusione o di scavo, l'oggetto finale viene automaticamente aggiornato.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Lavorare_con_gli_ambienti_Draft_e_Arch">Lavorare con gli ambienti Draft e Arch</span></h2>
|
||
<p>Gli ambienti <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Workbench/it" class="mw-redirect" title="Draft Workbench/it">Draft</a> e <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Workbench/it" class="mw-redirect" title="Arch Workbench/it">Arch</a> si comportano in modo un po' diverso dagli altri ambienti di lavoro di cui sopra, anche se seguono le regole comuni di FreeCAD. In breve, Sketcher e PartDesign sono utilizzati principalmente per la progettazione di singoli pezzi, invece Draft e Arch sono concepiti per facilitare il lavoro quando si opera con diversi oggetti semplici.
|
||
</p><p>L'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Workbench/it" class="mw-redirect" title="Draft Workbench/it">Draft</a> offre degli strumenti 2D in parte simili a quelli che si possono trovare nelle applicazioni tradizionali di CAD 2D quali <a rel="nofollow" class="external text" href="https://en.wikipedia.org/wiki/AutoCAD">AutoCAD</a>. Però, il disegno 2D è lontano dagli scopi di FreeCAD, quindi non aspettatevi di trovare in esso la gamma completa di strumenti offerta da queste applicazioni dedicate. La maggior parte degli strumenti di Draft lavorano, non solo in un piano 2D, ma anche nello spazio 3D, e beneficiano degli speciali sistemi di supporto come il <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SelectPlane/it" title="Draft SelectPlane/it">Piano di lavoro</a> e lo <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Snap/it" title="Draft Snap/it">Snapping</a>.
|
||
</p><p>L'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Module/it" title="Arch Module/it">Arch</a> aggiunge a FreeCAD gli strumenti <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Building_Information_Modeling">BIM</a> che consentono di costruire i modelli architettonici con degli oggetti parametrici. L'ambiente Arch si basa molto sugli altri moduli come Draft e Sketcher. Tutti gli strumenti di Draft sono presenti anche nell'ambiente Arch e molti strumenti di Arch usano i sistemi di supporto di Draft.
|
||
</p><p>Un tipico flusso di lavoro con gli ambienti Arch e Draft potrebbe essere:
|
||
</p>
|
||
<ol><li> Disegnare un paio di linee con lo strumento Linea di Draft</li>
|
||
<li> Selezionare tutte le linee e premere lo strumento Muro per costruire un muro su ciascuna di esse</li>
|
||
<li> Unire le pareti selezionandole e premendo lo strumento Aggiungi di Draft</li>
|
||
<li> Creare un oggetto Piano, e posizionare in esso i Muri lavorando nella Vista ad albero</li>
|
||
<li> Creare un oggetto Edificio, e posizionare in esso il Piano lavorando nella Vista ad albero</li>
|
||
<li> Creare una Finestra cliccando sullo strumento Finestra, selezionare un modello predefinito nel suo pannello, quindi fare clic su una faccia di un muro</li>
|
||
<li> Aggiungere le Quote impostando prima il piano di lavoro, se necessario, quindi utilizzando lo strumento Dimension di Draft</li></ol>
|
||
<p>Si ottiene un oggetto simile a questo:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Arch_workflow_example.jpg" class="image"><img alt="Arch workflow example.jpg" src="1024px-Arch_workflow_example.jpg" width="1024" height="604" srcset="/wiki/images/d/df/Arch_workflow_example.jpg 1.5x" /></a>
|
||
</p><p>Maggiori informazioni si trovano nella sezione <a href="https://www.freecadweb.org/wiki/index.php?title=Tutorials/it" title="Tutorials/it">Tutorial</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Script">Script</span></h2>
|
||
<p>Infine, una delle più potenti caratteristiche di FreeCAD che è l'ambiente di <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" class="mw-redirect" title="Scripting/it">script</a>. Dalla console Python integrata (o tramite qualsiasi altro script Python esterno), è possibile accedere a quasi tutte le parti di FreeCAD, creare o modificare le geometrie, modificare la rappresentazione degli oggetti nella vista 3D, oppure accedere e modificare l'interfaccia di FreeCAD. Gli script Python possono essere utilizzati anche all'interno delle <a href="https://www.freecadweb.org/wiki/index.php?title=Macros/it" title="Macros/it">macro</a> che forniscono un metodo facile e veloce per creare combinazioni di comandi personalizzati.
|
||
</p><p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Lavorare_con_FreeCAD">Lavorare con FreeCAD</span></h2>
|
||
<p>La funzione <b>Navigazione 3D - Tipo di mouse</b> di FreeCAD comprende i comandi utilizzati per navigare visivamente lo spazio 3D e per interagire con gli oggetti visualizzati. Attualmente FreeCAD offre diversi stili di navigazione con il mouse. Lo stile di navigazione predefinito, denominato "Navigazione CAD", è molto semplice e pratico, ma si può anche usare uno stile alternativo, secondo le proprie preferenze.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Navigazione">Navigazione</span></h2>
|
||
<p>Lo stile di navigazione impostato viene utilizzato in tutti gli ambienti di lavoro.
|
||
</p><p>Ci sono due modi per modificare lo stile di navigazione:
|
||
</p>
|
||
<ul><li> In <a href="https://www.freecadweb.org/wiki/index.php?title=Preferences_Editor/it" title="Preferences Editor/it">Modifica → Preferenze</a>, sezione <i>Visualizzazione</i>, scheda <i>Vista 3D</i>, voce <i>Navigazione 3D</i> selezionare la modalità desiderata;</li>
|
||
<li> Cliccare col tasto destro nello spazio vuoto dell'area di visualizzazione 3D, quindi selezionare <i>Stili di navigazione</i> nel menu contestuale.</li></ul>
|
||
<p>Per controllare la posizione dell'oggetto e la vista si possono utilizzare i seguenti movimenti del mouse secondo lo stile di navigazione selezionato.
|
||
</p><p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Navigazione_CAD_.28default.29">Navigazione CAD (default)</span></h3>
|
||
<p>Questo è lo stile di navigazione predefinito e permette all'utente un semplice controllo della vista. Richiede l'uso della tastiera solo per eseguire multi-selezioni.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Traslazione
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per selezionare"><img alt="per selezionare" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per traslare"><img alt="per traslare" src="Pan-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Zoom-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse.svg" class="image" title="per ruotare la vista"><img alt="per ruotare la vista" src="Rotate-mouse.svg" width="70" height="100" /></a> oppure <a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse-MMB%2BRMB.svg" class="image" title="per ruotare la vista, secondo metodo"><img alt="per ruotare la vista, secondo metodo" src="Rotate-mouse-MMB%2BRMB.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro del mouse sull'oggetto che si desidera selezionare. Tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span> per selezionare più oggetti.
|
||
</td>
|
||
<td>Fare clic sul pulsante centrale del mouse e muovere il mouse per spostare l'oggetto.<br />Inoltre, per attivare la traslazione, si può tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span> e cliccare con il tasto destro. In questo modo la funzione rimane attiva, senza impegnare la mano del mouse, e permette l'uso della rotellina per lo zoom, fino a quando il tasto Ctrl non viene rilasciato.
|
||
</td>
|
||
<td>Ruotare la rotellina del mouse per ingrandire e ridurre.
|
||
</td>
|
||
<td>Premere e mantenere premuto il tasto centrale del mouse, fare clic con il pulsante sinistro, o destro, del mouse su qualsiasi parte visibile di un oggetto e trascinarlo nella direzione desiderata. La posizione del cursore nel momento in cui si preme il pulsante centrale del mouse determina il centro di rotazione. La rotazione funziona come nel caso di una palla che ruota attorno al suo centro. Se i tasti vengono rilasciati prima di arrestare il movimento e se l'opzione <a href="https://www.freecadweb.org/wiki/index.php?title=Spinning/it" title="Spinning/it">Abilita animazione</a> è attivata, l'oggetto continua la rotazione automaticamente. Un doppio clic con il tasto centrale del mouse su qualsiasi parte di un oggetto imposta un nuovo centro di rotazione e di zoom in tale punto. Il secondo metodo può essere utile ai mancini.<br />Inoltre, per attivare la rotazione, si può tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Maiusc</span> (Shift) e cliccare con il tasto destro. In questo modo la funzione rimane attiva, senza impegnare la mano del mouse, e permette l'uso dello zoom, fino a quando il tasto Maiusc non viene rilasciato.
|
||
<p><br />
|
||
</p>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse-CTRL.svg" class="image" title="to Pan"><img alt="to Pan" src="Pan-mouse-CTRL.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse-CTRL-SHIFT.svg" class="image" title="to Zoom"><img alt="to Zoom" src="Zoom-mouse-CTRL-SHIFT.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse-SHIFT.svg" class="image" title="to rotate"><img alt="to rotate" src="Rotate-mouse-SHIFT.svg" width="75" height="107" /></a>
|
||
</td>
|
||
<td>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span>, cliccare sul tasto destro, rilasciarlo e spostare il mouse per spostare la vista (rev 0.17)
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span>, cliccare sul tasto destro, rilasciarlo, cliccare sul tasto sinistro, rilasciarlo e spostare il mouse per zoommare (rev 0.17)
|
||
</td>
|
||
<td>Premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Maiusc</span>, cliccare sul tasto destro, rilasciarlo e spostare il mouse per ruotare la vista (rev 0.17)
|
||
</td>
|
||
<td>
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Navigazione_OpenInventor">Navigazione OpenInventor</span></h3>
|
||
<p>Nella Navigazione OpenInventor (formalmente Inventor), secondo il modello <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_Inventor">Open Inventor</a>, da non confondere con Autodesk Inventor, non è possibile selezionare gli oggetti utilizzando solo il mouse. Per selezionare gli oggetti, è necessario tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">CTRL</span>.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Traslazione
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">ctrl</span> +<a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per selezionare"><img alt="per selezionare" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per traslare"><img alt="per traslare" src="Pan-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="to Zoom in or out"><img alt="to Zoom in or out" src="Zoom-mouse.svg" width="70" height="100" /></a> o <a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate-mouse.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Rotate-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per ruotare la vista"><img alt="per ruotare la vista" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Tenere premuto Ctrl e premere il pulsante sinistro del mouse su un oggetto che si desidera selezionare.
|
||
</td>
|
||
<td>Fare clic sul pulsante sinistro del mouse e spostare l'oggetto.
|
||
</td>
|
||
<td>Utilizzare la rotellina del mouse per ingrandire e rimpicciolire, oppure cliccare e tenete premuto il tasto centrale del mouse e fare clic con il pulsante sinistro del mouse.
|
||
</td>
|
||
<td>Fare clic con il tasto sinistro del mouse e trascinare per ruotare.
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Navigazione_Blender">Navigazione Blender</span></h3>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>Nella Navigazione secondo il modello <a rel="nofollow" class="external text" href="http://www.blender.org">Blender</a> non è possibile spostare gli oggetti utilizzando solo il mouse. Per spostare la vista, è necessario tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">SHIFT</span>.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Traslazione
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per selezionare"><img alt="per selezionare" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">shift</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per traslare"><img alt="per traslare" src="Pan-mouse.svg" width="70" height="100" /></a> o <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mouse_LMB%2BRMB.svg" class="image"><img alt="Mouse LMB+RMB.svg" src="Mouse_LMB%2BRMB.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Zoom-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per ruotare la vista"><img alt="per ruotare la vista" src="Pan-mouse.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro del mouse su un oggetto che si desidera selezionare.
|
||
</td>
|
||
<td>Tenere premuto Shift e fare clic sul pulsante centrale del mouse e spostare l'oggetto, oppure tenere premuti i pulsanti Sinistra e Destra e spostarsi.
|
||
</td>
|
||
<td>Usare la rotellina del mouse per ingrandire e rimpicciolire.
|
||
</td>
|
||
<td>Fare clic con il tasto centrale del mouse e trascinare.
|
||
</td></tr></table>
|
||
</div>
|
||
<h3><span class="mw-headline" id="Navigazione_Touchpad">Navigazione Touchpad</span></h3>
|
||
<p>Con la Navigazione Touchpad non è possibile effettuare le operazioni di traslazione, rotazione o ingrandimento utilizzando solo il mouse (oppure solo il touchpad). Per spostare la vista si deve premere il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">SHIFT</span>. Per ingrandire o ridurre premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">PgUp</span> oppure <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">PgDn</span> (senza usare il mouse o il touchpad). Per ruotare la vista tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">ALT</span>.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Traslazione
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-touchpad.png" class="image" title="to Select"><img alt="to Select" src="70px-Select-touchpad.png" width="70" height="70" srcset="/wiki/images/b/bb/Select-touchpad.png 1.5x" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">shift</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Touchpad.png" class="image" title="to Pan"><img alt="to Pan" src="70px-Touchpad.png" width="70" height="70" srcset="/wiki/images/7/78/Touchpad.png 1.5x" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">PgUp</span> / <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">PgDn</span>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">alt</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Touchpad.png" class="image" title="to Rotate"><img alt="to Rotate" src="70px-Touchpad.png" width="70" height="70" srcset="/wiki/images/7/78/Touchpad.png 1.5x" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro sull'oggetto che si vuole selezionare.
|
||
</td>
|
||
<td>Tenere premuto il tasto Maiuscola e spostare l'oggetto.
|
||
</td>
|
||
<td>Usare PgUp o PgDn per ingrandire o ridurre.
|
||
</td>
|
||
<td>Tenere premuto il tasto Alt e muovere il puntatore.
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Navigazione_Gesture_.28Gesture_Navigation.29_.28v0.16.29">Navigazione Gesture (Gesture Navigation) (v0.16)</span></h3>
|
||
<p>Questo stile di navigazione è fatto su misura per essere usato con il touchscreen o con la penna, ma è usabile anche con il mouse.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="20%">Selezionare
|
||
</th>
|
||
<th align="center" width="20%">Spostare
|
||
</th>
|
||
<th align="center" width="20%">Zoom
|
||
</th>
|
||
<th align="center" width="20%">Ruotare la vista
|
||
</th>
|
||
<th align="center" width="20%">Inclinare la vista
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="to Select"><img alt="to Select" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse-Ctrl.svg" class="image" title="to Pan"><img alt="to Pan" src="Pan-mouse-Ctrl.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="to Zoom in or out"><img alt="to Zoom in or out" src="Zoom-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="to Rotate view"><img alt="to Rotate view" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mouse_LMB%2BRMB.svg" class="image" title="to Tilt view"><img alt="to Tilt view" src="Mouse_LMB%2BRMB.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro del mouse sull'oggetto che si desidera selezionare. Per selezionare più oggetti tenere premuto il tasto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Ctrl</span>.
|
||
</td>
|
||
<td>Tenere premuto il tasto destro del mouse e trascinare per scorrere la vista.
|
||
</td>
|
||
<td>Utilizzare la rotellina del mouse per ingrandire e rimpicciolire.
|
||
</td>
|
||
<td>Tenere premuto il tasto sinistro del mouse e trascinare per ruotare la vista.
|
||
<p>In Sketcher e altre modalità di modifica, questo comportamento è disattivato. Tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Alt</span> quando si preme il pulsante del mouse per entrare in modalità di rotazione.
|
||
</p><p>La rotazione avviene sempre attorno al punto di messa a fuoco della fotocamera. Per impostare il punto di messa a fuoco della fotocamera, fare clic con il tasto centrale del mouse nel punto desiderato; la vista viene orientata verso tale punto. In alternativa, posizionare il cursore nel nuovo punto e premere <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">H</span> dalla tastiera.
|
||
</p>
|
||
</td>
|
||
<td>Premere entrambi i tasti del mouse, sia il sinistro che il destro, e trascinare a sinistra o a destra per inclinare la vista (regolare l'orizzonte).
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_Tap.svg" class="image"><img alt="Touch Tap.svg" src="Touch_Tap.svg" width="100" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_Tap-Hold-Drag.svg" class="image"><img alt="Touch Tap-Hold-Drag.svg" src="Touch_Tap-Hold-Drag.svg" width="100" height="100" /></a>
|
||
<p>oppure
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_Two-Finger-Drag.svg" class="image"><img alt="Touch Two-Finger-Drag.svg" src="Touch_Two-Finger-Drag.svg" width="100" height="100" /></a>
|
||
</p>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_Pinch.svg" class="image"><img alt="Touch Pinch.svg" src="Touch_Pinch.svg" width="100" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_One-Finger-Drag.svg" class="image"><img alt="Touch One-Finger-Drag.svg" src="Touch_One-Finger-Drag.svg" width="100" height="100" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Touch_Rotate.svg" class="image"><img alt="Touch Rotate.svg" src="Touch_Rotate.svg" width="100" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Tocco per selezionare.
|
||
</td>
|
||
<td>Trascinare con due dita per spostare la vista. In alternativa, toccare e tenere premuto, quindi trascinare (simula lo spostamento con il tasto destro del mouse).
|
||
</td>
|
||
<td>Pizzicare per zoomare (i.e., trascinare due dita avvicinandoli o allontanandoli).
|
||
</td>
|
||
<td>Trascinare un dito per ruotare. Inoltre tenere premuto <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">Alt</span> quando si lavora in Sketcher o in altre modalità di modifica.
|
||
</td>
|
||
<td>Ruotare per inclinare la vista (i.e., mettere due dita sulla superficie e ruotare la linea immaginaria tra i due punti di contatto).
|
||
</td></tr></table>
|
||
<p>Note sullo stile di Navigazione Gesture:
|
||
</p>
|
||
<ul><li> su Windows, le azioni delle due dita sono separate, singole. L'azione dipende da come si avvia il gesto. Ad esempio, se si avvia lo spostamento con due dita, il gesto produce solo lo spostamento. Modificando in seguito la distanza tra le dita non si produce il ridimensionamento.</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Navigazione_Maya-Gesture">Navigazione Maya-Gesture</span></h3>
|
||
<p>Nella navigazione Maya-Gesture tutti i movimenti vista sono ottenuti premendo <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">ALT</span> e un pulsante del mouse, quindi per utilizzare correttamente questa modalità di navigazione è necessario disporre di un mouse con 3 pulsanti. In alternativa, dato che questo modo è stato sviluppato per essere normalmente usato come modalità di navigazione gestuale, è possibile utilizzare i gesti.
|
||
</p>
|
||
<table border="1" class="mousemodel">
|
||
<tr>
|
||
<th align="center" width="25%">Selezione
|
||
</th>
|
||
<th align="center" width="25%">Spostamento
|
||
</th>
|
||
<th align="center" width="25%">Zoom
|
||
</th>
|
||
<th align="center" width="25%">Rotazione
|
||
</th></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Hand_cursor.png" class="image"><img alt="Hand cursor.png" src="Hand_cursor.png" width="24" height="24" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan_cursor.png" class="image"><img alt="Pan cursor.png" src="Pan_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom_cursor.png" class="image"><img alt="Zoom cursor.png" src="Zoom_cursor.png" width="16" height="16" /></a>
|
||
</td>
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Rotate_cursor.png" class="image"><img alt="Rotate cursor.png" src="Rotate_cursor.png" width="16" height="16" /></a>
|
||
</td></tr>
|
||
<tr align="center">
|
||
<td><a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per selezionare"><img alt="per selezionare" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">alt</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse.svg" class="image" title="per spostare"><img alt="per spostare" src="Pan-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">alt</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Pan-mouse-Ctrl.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Pan-mouse-Ctrl.svg" width="70" height="100" /></a> o <a href="https://www.freecadweb.org/wiki/index.php?title=File:Zoom-mouse.svg" class="image" title="per ingrandire o ridurre"><img alt="per ingrandire o ridurre" src="Zoom-mouse.svg" width="70" height="100" /></a>
|
||
</td>
|
||
<td><span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">alt</span>+<a href="https://www.freecadweb.org/wiki/index.php?title=File:Select-mouse.svg" class="image" title="per ruotera"><img alt="per ruotera" src="Select-mouse.svg" width="70" height="100" /></a>
|
||
</td></tr>
|
||
<tr valign="top">
|
||
<td>Premere il tasto sinistro del mouse sull'oggetto che si desidera selezionare.
|
||
</td>
|
||
<td>Tenere premuto <b>Alt</b>, tenere premuto il tasto centrale del mouse e trascinarlo per spostare la vista.
|
||
</td>
|
||
<td>Tenere premuto <b>Alt</b>, tenere premuto il pulsante destro del mouse e trascinarlo per ingrandire e ridurre o utilizzare la rotella del mouse per ottenere lo stesso effetto.
|
||
</td>
|
||
<td>Tenere premuto <b>Alt</b>, tenere premuto il tasto sinistro del mouse e trascinarlo per ruotare l'oggetto.
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="La_selezione_degli_oggetti">La selezione degli oggetti</span></h2>
|
||
<h3><span class="mw-headline" id="Selezione_semplice">Selezione semplice</span></h3>
|
||
<p>Gli oggetti si possono selezionare con un click del tasto sinistro del mouse o facendo clic sull'oggetto nella vista 3D o selezionandoli nella vista ad albero.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Preselezione">Preselezione</span></h3>
|
||
<p>Passando con il mouse sugli oggetti, una funzione di Preselezione li evidenzia e visualizza le relative informazioni prima della loro selezione. Se questo comportamento non è gradito o si dispone di una macchina lenta, è possibile disattivare la funzione nel dialogo delle preferenze.
|
||
</p><p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="La_manipolazione_degli_oggetti">La manipolazione degli oggetti</span></h2>
|
||
<p>FreeCAD offre strumenti <a href="https://www.freecadweb.org/wiki/index.php?title=Manipulator/it" title="Manipulator/it">Manipolatori</a> utilizzabili per modificare un oggetto o il suo aspetto visivo.
|
||
</p><p>Un esempio semplice è dato dal <a href="https://www.freecadweb.org/wiki/index.php?title=Std_ClippingPlane/it" title="Std ClippingPlane/it">Piano di taglio</a> attivabile con il menu <i>Visualizza → Piano di taglio</i>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Supporto_Hardware">Supporto Hardware</span></h2>
|
||
<p>FreeCAD supporta anche i <a href="https://www.freecadweb.org/wiki/index.php?title=3D_input_devices/it" title="3D input devices/it">dispositivi di input 3D</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Problemi_con_Mac_OS_X">Problemi con Mac OS X</span></h2>
|
||
<p>Recentemente abbiamo ricevuto segnalazioni <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=3&t=3592&start=0">nel forum</a> da utenti Mac che questi pulsanti del mouse e le combinazioni di tasti non funzionano come previsto. Purtroppo, nessuno degli sviluppatori possiede un Mac e neppure gli altri collaboratori regolari. Abbiamo bisogno del vostro aiuto per determinare quali pulsanti del mouse e quali combinazioni di tasti funzionano e poter aggiornare questo wiki.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="I_documenti_di_FreeCAD">I documenti di FreeCAD</span></h2>
|
||
<p><br />
|
||
</p>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Screenshot_treeview.jpg" class="image"><img alt="Screenshot treeview.jpg" src="Screenshot_treeview.jpg" width="217" height="254" /></a></div>
|
||
<p>Un documento FreeCAD contiene tutti gli oggetti della scena. Può contenere i gruppi e gli oggetti realizzati con qualsiasi ambiente di lavoro. Si possono quindi alternare gli ambienti pur continuando a lavorare sullo stesso documento. Il documento è ciò che viene salvato sul disco quando si salva il proprio lavoro. Inoltre, in FreeCAD è possibile aprire più documenti contemporaneamente, e aprire diverse viste dello stesso documento.
|
||
</p><p>All'interno del documento, gli oggetti possono essere raggruppati, e avere un unico nome. La gestione dei gruppi, degli oggetti e dei nomi degli oggetti avviene prevalentemente nella vista a albero. Naturalmente, queste operazioni, come tutto in FreeCAD, si possono eseguire anche tramite interprete Python.
|
||
</p><p>Nella vista ad albero, è possibile creare gruppi, spostare gruppi di oggetti, eliminare oggetti o gruppi, facendo clic destro nella vista ad albero o su un oggetto, oppure rinominare gli oggetti facendo doppio clic sui loro nomi, o eventualmente eseguire altre operazioni, attinenti l'ambiente di lavoro attivo.
|
||
</p><p>Un documento FreeCAD può contenere oggetti di diversi tipi. Ogni ambiente di lavoro crea oggetti di tipo specifico, per esempio <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">Ambiente Mesh</a> crea oggetti Mesh , <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Ambiente Parte</a> crea oggetti Parte, <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Module/it" title="Draft Module/it">Ambiente Draft</a> crea disegni e anche oggetti Parte, ecc.
|
||
</p><p>In FreeCAD può essere attivo un solo documento alla volta. Il documento attivo è quello che viene visualizzato nella vista 3D corrente ed è il documento in lavorazione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Applicazione_e_Interfaccia_utente">Applicazione e Interfaccia utente</span></h3>
|
||
<p>Come per quasi tutto il resto, in FreeCAD, la parte interfaccia utente (GUI) è separata dalla parte applicazione (App). Questo vale anche per i documenti.
|
||
</p><p>I documenti sono composti da due parti: il documento <b>Applicazione</b>, che contiene gli oggetti, e il documento <b>Visualizzazione</b>, che contiene la rappresentazione degli oggetti sullo schermo.
|
||
</p><p>Pensate a due spazi in cui sono definiti gli oggetti. I loro parametri costruttivi (si tratta di un cubo? di un cono? quanto misura?) sono memorizzati nel documento <i>Applicazione</i>, mentre la loro rappresentazione grafica (è disegnata con linee nere? con le facce blu?) sono memorizzati nel documento <i>Visualizzazione</i>. Questo permette di utilizzare FreeCAD anche senza interfaccia grafica, ad esempio all'interno di altri programmi, e di manipolare gli oggetti, anche senza disegnare nulla sullo schermo.
|
||
</p><p>Il documento Visualizzazione contiene anche le viste 3D. Un documento può avere contemporaneamente diverse viste aperte, in modo da poterlo controllare da diversi punti di vista. Ad esempio, si può visualizzare allo stesso tempo una vista dall'alto e una vista frontale. Tutte le viste dello stesso progetto vengono memorizzate nel documento Visualizzazione. La produzione di nuove viste o la chiusura di viste attive si può fare dal menu Visualizza o facendo clic destro su una scheda di visualizzazione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Script_2">Script</span></h3>
|
||
<p>Tramite l'interprete Python, si può facilmente accedere, creare o modificare i documenti. Ad esempio:
|
||
</p>
|
||
<pre>FreeCAD.ActiveDocument </pre>
|
||
<p>Restituisce il documento corrente (attivo)
|
||
</p>
|
||
<pre>FreeCAD.ActiveDocument.Blob </pre>
|
||
<p>Accede ad un oggetto chiamato "Blob" all'interno del documento
|
||
</p>
|
||
<pre>FreeCADGui.ActiveDocument </pre>
|
||
<p>Restituisce il documento associato al documento corrente
|
||
</p>
|
||
<pre>FreeCADGui.ActiveDocument.Blob </pre>
|
||
<p>Accede alla rappresentazione grafica (visualizza) l'oggetto "Blob"
|
||
</p>
|
||
<pre>FreeCADGui.ActiveDocument.ActiveView </pre>
|
||
<p>Restituisce la vista corrente
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Il sistema delle preferenze di FreeCAD si trova nel menu <b>Modifica → Preferenze</b>.
|
||
</p><p>Le funzionalità di FreeCAD sono suddivise in moduli separati, ciascun modulo si occupa della lavorazione in uno specifico <a href="https://www.freecadweb.org/wiki/index.php?title=Workbenches/it" title="Workbenches/it">Ambiente</a>. FreeCAD utilizza il caricamento tardivo (late loading), questo significa che i componenti vengono caricati solo quando sono necessari. Come si può notare, un ambiente di lavoro con tutti i suoi componenti viene caricato solo al momento in cui l'ambiente viene selezionato nella barra degli strumenti di FreeCAD. Questo vale anche per le impostazioni delle preferenze (ndt le preferenze sono trattate come un componente dell'ambiente).
|
||
</p><p>Senza alcun modulo caricato, si ha accesso a due sezioni di configurazione, responsabili delle impostazioni generali dell'applicazione e delle impostazioni della visualizzazione.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Le_impostazioni_generali">Le impostazioni generali</span></h2>
|
||
<p>Quando si avvia FreeCAD senza nessun Ambiente caricato, si visualizza una finestra delle preferenze minimale. Man mano che si caricano i moduli aggiuntivi, nella finestra delle preferenze appaiono delle nuove sezioni che consentono di configurare i dettagli di ogni ambiente di lavoro.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Generale">Generale</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_01.png" class="image"><img alt="Preference General Tab 01.png" src="Preference_General_Tab_01.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Documento">Documento</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_02.png" class="image"><img alt="Preference General Tab 02.png" src="Preference_General_Tab_02.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Editore">Editore</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_03.png" class="image"><img alt="Preference General Tab 03.png" src="Preference_General_Tab_03.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Finestra_di_output">Finestra di output</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_04.png" class="image"><img alt="Preference General Tab 04.png" src="Preference_General_Tab_04.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Macro">Macro</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_05.png" class="image"><img alt="Preference General Tab 05.png" src="Preference_General_Tab_05.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Unit.C3.A0">Unità</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_General_Tab_06.png" class="image"><img alt="Preference General Tab 06.png" src="Preference_General_Tab_06.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h2><span class="mw-headline" id="Le_impostazioni_di_visualizzazione">Le impostazioni di visualizzazione</span></h2>
|
||
<p>FreeCAD è sempre in costante evoluzione, quindi il contenuto di tali schermate potrebbe differire dagli screenshot precedenti. Le impostazioni sono di solito auto-esplicative, quindi non dovresti avere alcuna difficoltà a configurare FreeCAD in base alle tue esigenze.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Vista_3D">Vista 3D</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_Display_Tab_01.png" class="image"><img alt="Preference Display Tab 01.png" src="Preference_Display_Tab_01.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Colori">Colori</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_Display_Tab_02.png" class="image"><img alt="Preference Display Tab 02.png" src="Preference_Display_Tab_02.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Colori_parte">Colori parte</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Preference_Display_Tab_03.png" class="image"><img alt="Preference Display Tab 03.png" src="Preference_Display_Tab_03.png" width="657" height="712" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<p>Il modulo Draft ha una propria finestra di dialogo per le <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Preferences/it" title="Draft Preferences/it">preferenze</a>
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Dato che l'interfaccia di FreeCAD è basata sul moderno toolkit <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Qt_(toolkit)">Qt</a>, essa dispone di una organizzazione ottimale. Si possono modificare, spostare, condividere tra i vari ambienti di lavoro widget, menu, barre e altri strumenti. Si possono creare e modificare le scorciatoie da tastiera. Si possono registrare e riprodurre le macro.
|
||
</p><p>La finestra di personalizzazione è accessibile dal menu <b>Strumenti → <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgCustomize.png" class="image"><img alt="Std DlgCustomize.png" src="16px-Std_DlgCustomize.png" width="16" height="16" srcset="/wiki/images/thumb/1/12/Std_DlgCustomize.png/24px-Std_DlgCustomize.png 1.5x, /wiki/images/thumb/1/12/Std_DlgCustomize.png/32px-Std_DlgCustomize.png 2x" /></a></span> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DlgCustomize/it" title="Std DlgCustomize/it">Personalizza</a></b>:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:MenuPersonalizza.png" class="image"><img alt="MenuPersonalizza.png" src="MenuPersonalizza.png" width="636" height="399" /></a>
|
||
</p><p>La scheda <b>Comandi</b> consente di esplorare tutti i comandi disponibili in FreeCAD, organizzati per categorie.
|
||
</p><p>In <b>Tastiera</b>, è possibile vedere le scorciatoie da tastiera associate a ogni comando di FreeCAD, e volendo, si può modificare o assegnare un nuovo collegamento a qualsiasi comando. Quando si usa sovente uno specifico ambiente di lavoro, questo permette di velocizzare il suo utilizzo tramite la tastiera.
|
||
</p><p>La scheda <b>Barre degli strumenti</b> consente di modificare le barre degli strumenti esistenti, o di creare nuove barre degli strumenti personalizzate.
|
||
</p><p>La scheda <b>Macro</b> consente di gestire le <a href="https://www.freecadweb.org/wiki/index.php?title=Macros/it" title="Macros/it">Macro</a> salvate in precedenza.
|
||
</p><p>Le schede successive permettono di impostare le azioni di <a href="https://www.freecadweb.org/wiki/index.php?title=3Dconnexion_input_devices/it" title="3Dconnexion input devices/it">Spaceball</a> (se installato)
|
||
</p><p>Vedere anche il tutorial per creare la <a href="https://www.freecadweb.org/wiki/index.php?title=Customize_Toolbars/it" title="Customize Toolbars/it">Barra personalizzata</a> degli strumenti macro
|
||
</p><p>Nella versione 0.16 è disponibile un nuovo strumento che permette di gestire gli ambienti di lavoro.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:CustomizeWorkbenches.png" class="image"><img alt="CustomizeWorkbenches.png" src="CustomizeWorkbenches.png" width="692" height="434" /></a>
|
||
</p><p>Come esempio del flusso di lavoro, supponiamo di voler avere la funzione "Misura Lineare" mostrata anche in una barra degli strumenti personalizzata nell'ambiente Draft.
|
||
</p>
|
||
<ul><li> dal menu principale di FreeCAD scegliere "Strumenti -> Personalizza"</li>
|
||
<li> selezionare la tabella "Barre degli strumenti"</li>
|
||
<li> sul lato sinistro scegliere "Part" nel menu a discesa</li>
|
||
<li> sul lato sinistro della finestra scorrere in basso fino alla voce "Misura Lineare" e selezionarla</li>
|
||
<li> sul lato destro scegliere "Draft" nel menu a discesa</li>
|
||
<li> cliccare su "Nuova..." per creare una nuova barra degli strumenti e definire il suo nome</li>
|
||
<li> ora selezionare la barra degli strumenti di destinazione nella finestra in basso a destra (è necessario solo se si dispone di più di una barra degli strumenti)</li>
|
||
<li> cliccando sulla "Freccia destra" di colore blu (l'icona in alto nella fila centrale) si aggiunge la voce selezionata alla barra degli strumenti selezionata</li></ul>
|
||
<p><b>Osservazioni:</b>
|
||
</p>
|
||
<ul><li> quando si seleziona "Global" nel menu a tendina sulla parte di destra si crea una barra degli strumenti che sarà visibile in tutti gli ambienti</li>
|
||
<li> per aggiungere ad una barra degli strumenti una macro installata è necessario
|
||
<ul><li> selezionare "Macro" nel menu a discesa sul lato sinistro</li>
|
||
<li> aver assegnato il testo del menu, l'icona (Pixmap) e così via utilizzando il menu "Strumenti -> Macro -> Personalizza"</li></ul></li></ul>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p>Una <b>Proprietà</b> è una parte di informazione sotto forma di numero o di stringa di testo che viene allegata a un documento FreeCAD oppure a un oggetto in un documento. Le proprietà possono essere visualizzate e, se consentito, modificate con l'<a href="https://www.freecadweb.org/wiki/index.php?title=Property_editor/it" title="Property editor/it">Editor delle proprietà</a>.
|
||
</p><p>In FreeCAD le proprietà svolgono un ruolo molto importante in quanto esso è concepito per lavorare con oggetti parametrici, ovvero oggetti definiti solo dalle loro proprietà.
|
||
</p><p>In FreeCAD gli <a href="https://www.freecadweb.org/wiki/index.php?title=Scripted_objects/it" title="Scripted objects/it">oggetti script</a> personalizzati possono avere proprietà dei seguenti tipi:
|
||
</p>
|
||
<pre>Boolean
|
||
Float
|
||
FloatList
|
||
FloatConstraint
|
||
Angle
|
||
Distance
|
||
Integer
|
||
IntegerConstraint
|
||
Percent
|
||
Enumeration
|
||
IntegerList
|
||
String
|
||
StringList
|
||
Link
|
||
LinkList
|
||
Matrix
|
||
Vector
|
||
VectorList
|
||
Placement
|
||
PlacementLink
|
||
Color
|
||
ColorList
|
||
Material
|
||
Path
|
||
File
|
||
FileIncluded
|
||
PartShape
|
||
FilletContour
|
||
Circle
|
||
</pre>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
FreeCAD, come molte altre applicazioni di grafica moderne quali <a href="http://en.wikipedia.org/wiki/Revit" class="extiw" title="wikipedia:Revit">Revit</a> o <a href="http://en.wikipedia.org/wiki/CATIA" class="extiw" title="wikipedia:CATIA">Catia</a>, è strutturato in <b>Ambienti di lavoro</b> definiti <a href="http://en.wikipedia.org/wiki/Workbench" class="extiw" title="wikipedia:Workbench">Workbench</a>.
|
||
</p><p>Ogni ambiente offre gli strumenti necessari, opportunamente riuniti, per svolgere un compito specifico.
|
||
</p><p>Si pensi, come esempio, ad un laboratorio di mobili dove c'è un banco di lavoro per chi lavora il legno, un altro per chi lavora i pezzi di metallo, e forse un terzo per chi assembla tutti i componenti.
|
||
</p><p>In FreeCAD, viene applicato lo stesso concetto. Gli strumenti sono raggruppati per ambienti in base alle funzioni correlate.
|
||
</p><p>Quando si passa da un ambiente di lavoro ad un altro, cambiano anche gli strumenti disponibili visualizzati sull'interfaccia.
|
||
Le barre degli strumenti, le barre dei comandi e eventualmente altre parti dell'interfaccia si adattano al nuovo ambiente, ma il contenuto della scena visualizzata non cambia.
|
||
Si può, ad esempio, iniziare a disegnare forme 2D utilizzando l'ambiente <b>Draft</b> e poi continuare a lavorare su di esse con l'ambiente <b>Parte</b>.
|
||
</p><p>Notare che a volte un Ambiente viene indicato come un <i>Modulo</i>. Gli Ambienti e i Moduli sono però entità diverse. Un modulo è una estensione di FreeCAD, mentre un ambiente di lavoro è una speciale configurazione dell'interfaccia grafica che raggruppa alcune barre degli strumenti e dei menu specifici. Di solito, ogni modulo contiene anche il proprio ambiente di lavoro, e viceversa, ogni ambiente dipende da un modulo, per questo motivo succede di fare un uso incrociato del nome.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Ambienti_incorporati">Ambienti incorporati</span></h2>
|
||
<p>Attualmente in tutte le installazioni di FreeCAD sono disponibili i seguenti ambienti:
|
||
</p>
|
||
<h3><span class="mw-headline" id="Ambienti_di_lavoro">Ambienti di lavoro</span></h3>
|
||
<p>Questi sono gli ambienti base forniti con ogni installazione di FreeCAD:
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Arch.svg" class="image"><img alt="Workbench Arch.svg" src="Workbench_Arch.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Module/it" title="Arch Module/it">Arch</a> per lavorare con gli elementi architettonici</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Complete.svg" class="image"><img alt="Workbench Complete.svg" src="Workbench_Complete.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Complete_Workbench/it" title="Complete Workbench/it">Complete</a> contiene tutti i comandi e le funzioni di tutti i moduli e ambienti di lavoro che soddisfano determinati criteri di qualità.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Draft.svg" class="image"><img alt="Workbench Draft.svg" src="Workbench_Draft.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Module/it" title="Draft Module/it">Draft</a> Contiene gli strumenti 2D e quelli per realizzare le operazioni di base di tipo CAD 2D e 3D</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Drawing.svg" class="image"><img alt="Workbench Drawing.svg" src="Workbench_Drawing.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Module/it" title="Drawing Module/it">Disegno</a> (Drawing) per visualizzare in un foglio 2D il lavoro svolto in 3D (proiezioni standard e isometriche)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_FEM.svg" class="image"><img alt="Workbench FEM.svg" src="Workbench_FEM.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Fem_Workbench/it" class="mw-redirect" title="Fem Workbench/it">FEM</a> per Analisi agli elementi finiti (FEA)</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Image.svg" class="image"><img alt="Workbench Image.svg" src="Workbench_Image.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Image_Module/it" title="Image Module/it">Image</a> per lavorare con immagini bitmap (matrice)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Inspection.svg" class="image"><img alt="Workbench Inspection.svg" src="Workbench_Inspection.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Inspection_Workbench/it" title="Inspection Workbench/it">Inspection</a> fornisce gli strumenti specifici per esaminare le forme. È ancora in sviluppo.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Mesh.svg" class="image"><img alt="Workbench Mesh.svg" src="Workbench_Mesh.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">Mesh</a> per lavorare con grigliature a maglie triangolari</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_OpenSCAD.svg" class="image"><img alt="Workbench OpenSCAD.svg" src="Workbench_OpenSCAD.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=OpenSCAD_Module/it" title="OpenSCAD Module/it">OpenSCAD</a> per interagire con OpenSCAD e riparare lo storico del modello CSG</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Part.svg" class="image"><img alt="Workbench Part.svg" src="Workbench_Part.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Parte</a> (Part) per lavorare con oggetti CAD di tipo Parte 3D</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_PartDesign.svg" class="image"><img alt="Workbench PartDesign.svg" src="Workbench_PartDesign.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=PartDesign_Workbench/it" title="PartDesign Workbench/it">Part Design</a> per costruire oggetti di tipo Parte utilizzando degli schizzi come base</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Path.svg" class="image"><img alt="Workbench Path.svg" src="Workbench_Path.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Path_Workbench/it" title="Path Workbench/it">Percorso</a> per produrre istruzioni G-Code. È ancora in fase iniziale di sviluppo. Solo v0.16</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Plot.svg" class="image"><img alt="Workbench Plot.svg" src="Workbench_Plot.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Plot_Module/it" title="Plot Module/it">Grafico</a> (Plot) per editare e salvare i grafici sviluppati da altri moduli e strumenti (in fase di sviluppo)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Points.svg" class="image"><img alt="Workbench Points.svg" src="Workbench_Points.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Points_Module/it" title="Points Module/it">Punti</a> per lavorare con nuvole di punti.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Raytracing.svg" class="image"><img alt="Workbench Raytracing.svg" src="Workbench_Raytracing.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Module/it" title="Raytracing Module/it">Raytracing</a> per operazioni di rendering con ray-tracing (fotorealismo)</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Reverse_Engineering.svg" class="image"><img alt="Workbench Reverse Engineering.svg" src="Workbench_Reverse_Engineering.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Reverse_Engineering_Workbench/it" title="Reverse Engineering Workbench/it">Ingegneria inversa</a> (Reverse Engineering) fornisce gli strumenti specifici per convertire forme/solidi/maglie in funzioni parametriche compatibili con FreeCAD. È ancora in sviluppo.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Robot.svg" class="image"><img alt="Workbench Robot.svg" src="Workbench_Robot.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Robot_Module/it" class="mw-redirect" title="Robot Module/it">Robot</a> per studiare i movimenti del robot</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Ship.svg" class="image"><img alt="Workbench Ship.svg" src="Workbench_Ship.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Ship_Workbench/it" title="Ship Workbench/it">Ship</a> per operare su entità navali costruite su geometrie di base.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Sketcher.svg" class="image"><img alt="Workbench Sketcher.svg" src="Workbench_Sketcher.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Sketcher_Workbench/it" title="Sketcher Workbench/it">Sketcher</a> per lavorare con degli schizzi vincolati geometricamente</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Spreadsheet.svg" class="image"><img alt="Workbench Spreadsheet.svg" src="Workbench_Spreadsheet.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Spreadsheet_Workbench/it" title="Spreadsheet Workbench/it">Foglio di calcolo</a> (Spreadsheet) per creare un foglio di calcolo e manipolare i dati</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Start.svg" class="image"><img alt="Workbench Start.svg" src="Workbench_Start.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Start_Workbench/it" title="Start Workbench/it">Start Center</a> consente di passare rapidamente in uno degli ambienti di lavoro più comuni.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_TechDraw.svg" class="image"><img alt="Workbench TechDraw.svg" src="Workbench_TechDraw.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=TechDraw_Module/it" title="TechDraw Module/it">TechDraw</a> è il successore di <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Module/it" title="Drawing Module/it">Disegno</a>, è più avanzato e ricco di funzionalità</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Test.svg" class="image"><img alt="Workbench Test.svg" src="Workbench_Test.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Debugging/it" title="Debugging/it">Test</a> per la messa a punto (debug) di FreeCAD.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Workbench_Web.svg" class="image"><img alt="Workbench Web.svg" src="Workbench_Web.svg" width="24" height="24" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Web_Workbench/it" title="Web Workbench/it">Web</a> offre una finestra del browser nella vista 3D di FreeCAD.</li></ul>
|
||
<h2><span class="mw-headline" id="Ambienti_aggiuntivi">Ambienti aggiuntivi</span></h2>
|
||
<p>Gli ambienti di lavoro per FreeCAD sono facilmente programmabili in <a rel="nofollow" class="external text" href="http://www.python.org">Python</a>, quindi ci sono molte persone che stanno sviluppando degli ambienti aggiuntivi al di fuori del codice di base di FreeCAD. La pagina <a href="https://www.freecadweb.org/wiki/index.php?title=External_workbenches/it" title="External workbenches/it">Ambienti complementari</a> contiene alcune informazioni e tutorial su alcuni di loro, e il progetto <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD-addons">FreeCAD Addons</a> mira a raccoglierli e renderli facilmente installabili dall'interno di FreeCAD.
|
||
</p><p>Sono in fase di sviluppo ulteriori nuovi ambienti.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
L'ambiente Mesh gestisce i reticoli triangolari degli oggetti <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Triangle_mesh">mesh</a>.
|
||
</p><p>Gli oggetti mesh sono un tipo speciale di oggetti 3D, composti da triangoli (le maglie della griglia) connessi lungo i loro bordi e nei loro vertici. Oggetti tassellati.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_example.jpg" class="image" title="Un esempio di un oggetto mesh"><img alt="Un esempio di un oggetto mesh" src="Mesh_example.jpg" width="640" height="400" /></a>
|
||
</p><p>Un esempio di un oggetto mesh
|
||
</p><p>Molte applicazioni 3D utilizzano i mesh come tipo principale di oggetti 3D, ad esempio: <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Sketchup">sketchup</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Blender_(software)">blender</a>, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Maya_(software)">maya</a> o<a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/3d_max">3d studio max</a>. Dato che i mesh sono oggetti molto semplici, contenenti solo vertici (punti), bordi e facce (triangoli), sono molto facili da creare, modificare, suddividere, allungare, e altrettanto facili da trasferire da un'applicazione all'altra senza alcuna perdita di informazioni. Inoltre, dal momento che contengono dati molto semplici, le applicazioni 3D ne possono gestire grandi quantità senza alcun problema. Per queste ragioni, gli oggetti mesh sono spesso il tipo di oggetto 3D utilizzato dalle applicazioni che si occupano di cinema, animazione e creazione di immagini.
|
||
</p><p>Nel campo dell'ingegneria, tuttavia, i mesh presentano una grossa limitazione: Sono oggetti estremamente elementari, composti solo da punti, linee e facce; sono composti solo da superfici, e non contengono alcuna informazione sulla massa, di conseguenza non si comportano come solidi. In un mesh non c'è, ad esempio, un modo automatico per sapere se un punto è all'interno o all'esterno dell'oggetto. Tutte le operazioni sui volumi di questi oggetti, come l'addizione o la sottrazione, sono sempre complicate da eseguire e spesso si verificano errori.
|
||
</p><p>In FreeCAD, poiché si tratta di un'applicazione di ingegneria, si preferisce lavorare con tipi di oggetti 3D più intelligenti, che possano contenere più informazioni, quali la massa, il comportamento solido o anche altri parametri personalizzati.
|
||
</p><p>Il modulo mesh è stato creato come ambiente di prova, ma è comunque importante che FreeCAD sia in grado di leggere, modificare e convertire le mesh . Spesso, nel processo di lavoro, si ricevono i dati 3D in formato mesh. Di conseguenza è necessario poter gestire questi dati, analizzarli per individuare errori o altri problemi che impediscono di convertirli in oggetti più intelligenti e, infine, poterli convertire in oggetti più intelligenti per gestirli con l'<a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Ambiente Parte</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Utilizzare_il_modulo_mesh">Utilizzare il modulo mesh</span></h2>
|
||
<p>Attualmente, il modulo Mesh ha una interfaccia molto semplice, tutte le sue funzioni sono raggruppate nelle voci del menu <b>Mesh</b>. Per il momento, le più importanti operazioni possibili sono:
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_ImportMesh.png" class="image"><img alt="Mesh ImportMesh.png" src="32px-Mesh_ImportMesh.png" width="32" height="32" srcset="/wiki/images/thumb/2/27/Mesh_ImportMesh.png/48px-Mesh_ImportMesh.png 1.5x, /wiki/images/2/27/Mesh_ImportMesh.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Import/it" title="Mesh Import/it">Importa mesh</a>: Importa oggetti mesh in diversi formati di file</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_ExportMesh.png" class="image"><img alt="Mesh ExportMesh.png" src="32px-Mesh_ExportMesh.png" width="32" height="32" srcset="/wiki/images/thumb/0/0f/Mesh_ExportMesh.png/48px-Mesh_ExportMesh.png 1.5x, /wiki/images/0/0f/Mesh_ExportMesh.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Export/it" title="Mesh Export/it">Esporta mesh</a>: Esporta oggetti mesh in diversi formati di file</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_MeshFromShape.png" class="image"><img alt="Mesh MeshFromShape.png" src="32px-Mesh_MeshFromShape.png" width="32" height="32" srcset="/wiki/images/thumb/2/24/Mesh_MeshFromShape.png/48px-Mesh_MeshFromShape.png 1.5x, /wiki/images/2/24/Mesh_MeshFromShape.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_MeshFromShape/it" title="Mesh MeshFromShape/it">Crea mesh da forma</a>: Converte oggetti <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Parte</a> in oggetti Mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_HarmonizeNormals.png" class="image"><img alt="Mesh HarmonizeNormals.png" src="32px-Mesh_HarmonizeNormals.png" width="32" height="32" srcset="/wiki/images/thumb/0/01/Mesh_HarmonizeNormals.png/48px-Mesh_HarmonizeNormals.png 1.5x, /wiki/images/0/01/Mesh_HarmonizeNormals.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_HarmonizeNormals/it" title="Mesh HarmonizeNormals/it">Armonizza le normali</a>: Armonizza le <a rel="nofollow" class="external text" href="https://it.wikipedia.org/wiki/Normale_%28superficie%29">normali</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_FlipNormals.png" class="image"><img alt="Mesh FlipNormals.png" src="32px-Mesh_FlipNormals.png" width="32" height="32" srcset="/wiki/images/thumb/3/31/Mesh_FlipNormals.png/48px-Mesh_FlipNormals.png 1.5x, /wiki/images/3/31/Mesh_FlipNormals.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_FlipNormals/it" title="Mesh FlipNormals/it">Inverti le normali</a>: Inverte le <a rel="nofollow" class="external text" href="https://it.wikipedia.org/wiki/Normale_%28superficie%29">normali</a> di una mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_FillHoles/it" title="Mesh FillHoles/it">Riempi i fori...</a>: Riempie i fori</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_FillInteractiveHole.png" class="image"><img alt="Mesh FillInteractiveHole.png" src="32px-Mesh_FillInteractiveHole.png" width="32" height="32" srcset="/wiki/images/thumb/8/81/Mesh_FillInteractiveHole.png/48px-Mesh_FillInteractiveHole.png 1.5x, /wiki/images/8/81/Mesh_FillInteractiveHole.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_FillInteractiveHole/it" title="Mesh FillInteractiveHole/it">Chiudi i fori</a>: Riempie e chiude i fori nelle maglie</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_RemoveComponents.png" class="image"><img alt="Mesh RemoveComponents.png" src="32px-Mesh_RemoveComponents.png" width="32" height="32" srcset="/wiki/images/thumb/b/b0/Mesh_RemoveComponents.png/48px-Mesh_RemoveComponents.png 1.5x, /wiki/images/b/b0/Mesh_RemoveComponents.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_RemoveComponents/it" title="Mesh RemoveComponents/it">Rimuovi componenti...</a>: Rimuove elementi della griglia</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_RemoveCompByHand/it" title="Mesh RemoveCompByHand/it">Rimuovi componenti a mano...</a>: Rimuove manualmente elementi della griglia</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_AddTriangle/it&action=edit&redlink=1" class="new" title="Mesh AddTriangle/it (page does not exist)">Aggiungi triangolo</a>: Aggiunge un triangolo</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Smooth/it" title="Mesh Smooth/it">Leviga...</a>: Leviga la mesh</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <b>Analizzare</b> la curvatura, le facce, e verificare se un oggetto mesh può essere convertito senza inconvenienti in un solido
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_EvaluateRepair/it" title="Mesh EvaluateRepair/it">Analizza e ripara la mesh...</a>: Analizza e ripara la mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_EvaluateFacet.png" class="image"><img alt="Mesh EvaluateFacet.png" src="32px-Mesh_EvaluateFacet.png" width="32" height="32" srcset="/wiki/images/thumb/9/96/Mesh_EvaluateFacet.png/48px-Mesh_EvaluateFacet.png 1.5x, /wiki/images/9/96/Mesh_EvaluateFacet.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_EvaluateFacet/it" title="Mesh EvaluateFacet/it">Dettagli faccia</a>: Fornisce informazioni sulle facce</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_EvaluateCurvature/it&action=edit&redlink=1" class="new" title="Mesh EvaluateCurvature/it (page does not exist)">Dettagli curvatura</a>: Fornisce informazioni sulla curvatura</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_EvaluateSolid/it&action=edit&redlink=1" class="new" title="Mesh EvaluateSolid/it (page does not exist)">Controlla il solido mesh</a>: Controlla se il solido può essere convertito in mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_BoundingBox/it" title="Mesh BoundingBox/it">Info Limiti Contenitore...</a>: Valuta il riquadro di delimitazione di una mesh</li></ul></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Regular_Solid.png" class="image"><img alt="Mesh Regular Solid.png" src="32px-Mesh_Regular_Solid.png" width="32" height="32" srcset="/wiki/images/thumb/d/d9/Mesh_Regular_Solid.png/48px-Mesh_Regular_Solid.png 1.5x, /wiki/images/d/d9/Mesh_Regular_Solid.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_BuildRegularSolid/it" title="Mesh BuildRegularSolid/it">Solido regolare...</a> Crea oggetti mesh primitivi, come cubi, cilindri, coni o sfere:
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Cube.png" class="image"><img alt="Mesh Cube.png" src="32px-Mesh_Cube.png" width="32" height="32" srcset="/wiki/images/thumb/d/df/Mesh_Cube.png/48px-Mesh_Cube.png 1.5x, /wiki/images/d/df/Mesh_Cube.png 2x" /></a> Crea un cubo mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Cylinder.png" class="image"><img alt="Mesh Cylinder.png" src="32px-Mesh_Cylinder.png" width="32" height="32" srcset="/wiki/images/thumb/2/26/Mesh_Cylinder.png/48px-Mesh_Cylinder.png 1.5x, /wiki/images/2/26/Mesh_Cylinder.png 2x" /></a> Crea un cilindro mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Cone.png" class="image"><img alt="Mesh Cone.png" src="32px-Mesh_Cone.png" width="32" height="32" srcset="/wiki/images/thumb/d/df/Mesh_Cone.png/48px-Mesh_Cone.png 1.5x, /wiki/images/d/df/Mesh_Cone.png 2x" /></a> Crea un cono mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Sphere.png" class="image"><img alt="Mesh Sphere.png" src="32px-Mesh_Sphere.png" width="32" height="32" srcset="/wiki/images/thumb/9/98/Mesh_Sphere.png/48px-Mesh_Sphere.png 1.5x, /wiki/images/9/98/Mesh_Sphere.png 2x" /></a> Crea una sfera mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Ellipsoid.png" class="image"><img alt="Mesh Ellipsoid.png" src="32px-Mesh_Ellipsoid.png" width="32" height="32" srcset="/wiki/images/thumb/9/9f/Mesh_Ellipsoid.png/48px-Mesh_Ellipsoid.png 1.5x, /wiki/images/9/9f/Mesh_Ellipsoid.png 2x" /></a> Crea un ellissoide mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Torus.png" class="image"><img alt="Mesh Torus.png" src="32px-Mesh_Torus.png" width="32" height="32" srcset="/wiki/images/thumb/3/36/Mesh_Torus.png/48px-Mesh_Torus.png 1.5x, /wiki/images/3/36/Mesh_Torus.png 2x" /></a> Crea un toro mesh</li></ul></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> Eseguire operazioni <b>Booleane</b> con oggetti mesh
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Union/it" title="Mesh Union/it">Unione</a>: Esegue una unione (fusione) di mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Intersection/it" title="Mesh Intersection/it">Intersezione</a>: Esegue una intersezione (parte comune) di mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Difference/it" title="Mesh Difference/it">Differenza</a>: Esegue una differenza (taglio) di mesh</li></ul></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Merge/it" title="Mesh Merge/it">Unisci</a>: Unisce mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_SelectMesh/it&action=edit&redlink=1" class="new" title="Mesh SelectMesh/it (page does not exist)">Seleziona le mesh</a>: Seleziona mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_Cut.png" class="image"><img alt="Mesh Cut.png" src="32px-Mesh_Cut.png" width="32" height="32" srcset="/wiki/images/thumb/7/73/Mesh_Cut.png/48px-Mesh_Cut.png 1.5x, /wiki/images/7/73/Mesh_Cut.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Cut/it&action=edit&redlink=1" class="new" title="Mesh Cut/it (page does not exist)">Taglia la mesh</a>: Taglia le mesh lungo una linea</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_SplitMesh/it&action=edit&redlink=1" class="new" title="Mesh SplitMesh/it (page does not exist)">Dividi la mesh</a>: Divide mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_MakeSegment.png" class="image"><img alt="Mesh MakeSegment.png" src="32px-Mesh_MakeSegment.png" width="32" height="32" srcset="/wiki/images/thumb/0/0f/Mesh_MakeSegment.png/48px-Mesh_MakeSegment.png 1.5x, /wiki/images/0/0f/Mesh_MakeSegment.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_MakeSegment/it&action=edit&redlink=1" class="new" title="Mesh MakeSegment/it (page does not exist)">Crea un segmento</a>: Crea un segmento</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_TrimMesh/it&action=edit&redlink=1" class="new" title="Mesh TrimMesh/it (page does not exist)">Taglia mesh</a>: Taglia mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_TrimMeshWithPlane/it&action=edit&redlink=1" class="new" title="Mesh TrimMeshWithPlane/it (page does not exist)">Taglia mesh con un piano</a>: Taglia mesh con un piano</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_CreateMeshSegment/it&action=edit&redlink=1" class="new" title="Mesh CreateMeshSegment/it (page does not exist)">Crea segmenti di mesh...</a>: Crea segmenti di mesh</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Mesh_CurvaturePlot.png" class="image"><img alt="Mesh CurvaturePlot.png" src="32px-Mesh_CurvaturePlot.png" width="32" height="32" srcset="/wiki/images/thumb/3/3b/Mesh_CurvaturePlot.png/48px-Mesh_CurvaturePlot.png 1.5x, /wiki/images/3/3b/Mesh_CurvaturePlot.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_CurvaturePlot/it" title="Mesh CurvaturePlot/it">Colora curvatura</a>: Crea un grafico della curvatura</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Preferences-import-export.svg" class="image"><img alt="Preferences-import-export.svg" src="Preferences-import-export.svg" width="32" height="32" /></a> <a href="Import_Export_Preference.html" title="Import Export Preference">Preference ...</a> Import Export</li></ul>
|
||
<p>Queste sono solo alcune delle operazioni di base, quelle che sono attualmente presenti nell'interfaccia del modulo Mesh.
|
||
</p><p>Altri strumenti mesh sono disponibili nell'ambiente <a href="https://www.freecadweb.org/wiki/index.php?title=OpenSCAD_Workbench/it" class="mw-redirect" title="OpenSCAD Workbench/it">OpenSCAD</a>.
|
||
</p><p>FreeCAD può gestire gli oggetti grigliati in molti altri modi tramite gli <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" title="Mesh Scripting/it"> script</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Link">Link</span></h2>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Import/it" title="FreeCAD and Mesh Import/it">Importare oggetti Mesh in FreeCAD</a></li></ul>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Le funzionalità CAD di FreeCAD sono basate sul kernel <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_CASCADE">OpenCasCade</a>. Il modulo Parte di FreeCAD permette di accedere e utilizzare gli oggetti e le funzioni di OpenCascade. OpenCascade è un kernel CAD di livello professionale, che contiene funzioni avanzate per la manipolazione degli oggetti e della geometria 3D.
|
||
Gli oggetti Parte sono molto più complessi degli oggetti <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">Mesh</a> e consentono quindi delle operazioni più avanzate, quali ad esempio le operazioni logiche booleane, la cronologia delle modifiche e un comportamento parametrico.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_example.jpg" class="image"><img alt="Part example.jpg" src="Part_example.jpg" width="634" height="406" /></a>
|
||
</p><p>Esempio di forma realizzata con il modulo Parte di FreeCAD
|
||
</p>
|
||
<h3><span class="mw-headline" id="Gli_strumenti">Gli strumenti</span></h3>
|
||
<p>Gli strumenti del modulo Parte sono tutti situati nel menu <b>Parte </b> che viene visualizzato quando si carica questo modulo.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Primitive">Primitive</span></h4>
|
||
<p>Questi sono strumenti per creare oggetti primitivi.
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Box.png" class="image"><img alt="Part Box.png" src="32px-Part_Box.png" width="32" height="32" srcset="/wiki/images/thumb/a/a5/Part_Box.png/48px-Part_Box.png 1.5x, /wiki/images/a/a5/Part_Box.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Box/it" title="Part Box/it">Prisma</a>: disegna parallelepipedi specificandone le dimensioni</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Cone.png" class="image"><img alt="Part Cone.png" src="32px-Part_Cone.png" width="32" height="32" srcset="/wiki/images/thumb/1/13/Part_Cone.png/48px-Part_Cone.png 1.5x, /wiki/images/1/13/Part_Cone.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Cone/it" title="Part Cone/it">Cono</a>: disegna solidi conici.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Cylinder.png" class="image"><img alt="Part Cylinder.png" src="32px-Part_Cylinder.png" width="32" height="32" srcset="/wiki/images/thumb/d/d4/Part_Cylinder.png/48px-Part_Cylinder.png 1.5x, /wiki/images/d/d4/Part_Cylinder.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Cylinder/it" title="Part Cylinder/it">Cilindro</a>: disegna solidi cilindrici.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Sphere.png" class="image"><img alt="Part Sphere.png" src="32px-Part_Sphere.png" width="32" height="32" srcset="/wiki/images/thumb/4/4b/Part_Sphere.png/48px-Part_Sphere.png 1.5x, /wiki/images/4/4b/Part_Sphere.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Sphere/it" title="Part Sphere/it">Sfera</a>: disegna sfere.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Torus.png" class="image"><img alt="Part Torus.png" src="32px-Part_Torus.png" width="32" height="32" srcset="/wiki/images/thumb/8/8b/Part_Torus.png/48px-Part_Torus.png 1.5x, /wiki/images/8/8b/Part_Torus.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Torus/it" title="Part Torus/it">Toro</a>: disegna anelli.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_CreatePrimitives.png" class="image"><img alt="Part CreatePrimitives.png" src="32px-Part_CreatePrimitives.png" width="32" height="32" srcset="/wiki/images/thumb/8/8a/Part_CreatePrimitives.png/48px-Part_CreatePrimitives.png 1.5x, /wiki/images/8/8a/Part_CreatePrimitives.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_CreatePrimitives/it" title="Part CreatePrimitives/it">Crea Primitive</a>: strumento per creare varie primitive geometriche parametriche</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Shapebuilder.png" class="image"><img alt="Part Shapebuilder.png" src="32px-Part_Shapebuilder.png" width="32" height="32" srcset="/wiki/images/thumb/a/a6/Part_Shapebuilder.png/48px-Part_Shapebuilder.png 1.5x, /wiki/images/a/a6/Part_Shapebuilder.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Shapebuilder/it" title="Part Shapebuilder/it">Generatore di forma</a>: strumento per creare delle forme complesse da primitive geometriche parametriche</li></ul>
|
||
<h4><span class="mw-headline" id="Modificare_gli_oggetti">Modificare gli oggetti</span></h4>
|
||
<p>Questi sono gli strumenti per modificare gli oggetti esistenti. Essi permettono di scegliere l'oggetto da modificare.
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Booleans.png" class="image"><img alt="Part Booleans.png" src="32px-Part_Booleans.png" width="32" height="32" srcset="/wiki/images/thumb/8/89/Part_Booleans.png/48px-Part_Booleans.png 1.5x, /wiki/images/8/89/Part_Booleans.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Booleans/it" title="Part Booleans/it">Booleana</a>: Esegue operazioni booleane sugli oggetti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Union.png" class="image"><img alt="Part Union.png" src="32px-Part_Union.png" width="32" height="32" srcset="/wiki/images/thumb/4/45/Part_Union.png/48px-Part_Union.png 1.5x, /wiki/images/4/45/Part_Union.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Union/it" title="Part Union/it">Unione</a>: Unisce (fonde) due oggetti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Common.png" class="image"><img alt="Part Common.png" src="32px-Part_Common.png" width="32" height="32" srcset="/wiki/images/thumb/9/9a/Part_Common.png/48px-Part_Common.png 1.5x, /wiki/images/9/9a/Part_Common.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Common/it" title="Part Common/it">Interseca</a>: Estrae la parte comune (intersezione) di due oggetti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Cut.png" class="image"><img alt="Part Cut.png" src="32px-Part_Cut.png" width="32" height="32" srcset="/wiki/images/thumb/4/4a/Part_Cut.png/48px-Part_Cut.png 1.5x, /wiki/images/4/4a/Part_Cut.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Cut/it" title="Part Cut/it">Sottrai</a>: Taglia (sottrae) un oggetto da un altro</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_JoinConnect.png" class="image"><img alt="Part JoinConnect.png" src="32px-Part_JoinConnect.png" width="32" height="32" srcset="/wiki/images/thumb/9/95/Part_JoinConnect.png/48px-Part_JoinConnect.png 1.5x, /wiki/images/9/95/Part_JoinConnect.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_CompJoinFeatures/it" title="Part CompJoinFeatures/it">Giunzione</a>: operazioni booleane intelligenti per oggetti vuoti internamente, es. tubazioni (v0.16)
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_JoinConnect.png" class="image"><img alt="Part JoinConnect.png" src="32px-Part_JoinConnect.png" width="32" height="32" srcset="/wiki/images/thumb/9/95/Part_JoinConnect.png/48px-Part_JoinConnect.png 1.5x, /wiki/images/9/95/Part_JoinConnect.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_JoinConnect/it" title="Part JoinConnect/it">Congiunzione</a>: Congiunge gli oggetti (v0.16)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_JoinEmbed.png" class="image"><img alt="Part JoinEmbed.png" src="32px-Part_JoinEmbed.png" width="32" height="32" srcset="/wiki/images/thumb/b/bc/Part_JoinEmbed.png/48px-Part_JoinEmbed.png 1.5x, /wiki/images/b/bc/Part_JoinEmbed.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_JoinEmbed/it" title="Part JoinEmbed/it">Incastro</a>: Incastra un oggetto in un altro oggetto (v0.16)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_JoinCutout.png" class="image"><img alt="Part JoinCutout.png" src="32px-Part_JoinCutout.png" width="32" height="32" srcset="/wiki/images/thumb/c/c4/Part_JoinCutout.png/48px-Part_JoinCutout.png 1.5x, /wiki/images/c/c4/Part_JoinCutout.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_JoinCutout/it" title="Part JoinCutout/it">Asportazione</a>: Asporta un oggetto da un altro oggetto (v0.16)</li></ul></li>
|
||
<li> Strumenti di suddivisione: (v0.17)
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_BooleanFragments.png" class="image"><img alt="Part BooleanFragments.png" src="32px-Part_BooleanFragments.png" width="32" height="32" srcset="/wiki/images/thumb/f/fc/Part_BooleanFragments.png/48px-Part_BooleanFragments.png 1.5x, /wiki/images/f/fc/Part_BooleanFragments.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_BooleanFragments/it" title="Part BooleanFragments/it">Frammenti</a>: Restituisce tutte le parti che possono essere ottenute con operazioni booleane tra oggetti (v0.17)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Slice.png" class="image"><img alt="Part Slice.png" src="32px-Part_Slice.png" width="32" height="32" srcset="/wiki/images/thumb/f/f7/Part_Slice.png/48px-Part_Slice.png 1.5x, /wiki/images/f/f7/Part_Slice.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Slice/it" title="Part Slice/it">Suddivisione</a>: Divide un oggetto nelle parti ottenute intersecando l'oggetto con un altro oggetto (v0.17)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_XOR.png" class="image"><img alt="Part XOR.png" src="32px-Part_XOR.png" width="32" height="32" srcset="/wiki/images/thumb/e/e7/Part_XOR.png/48px-Part_XOR.png 1.5x, /wiki/images/e/e7/Part_XOR.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_XOR/it&action=edit&redlink=1" class="new" title="Part XOR/it (page does not exist)">XOR</a>: Rimuove lo spazio condiviso dagli oggetti (versione simmetrica di <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Cut/it" title="Part Cut/it">Taglia</a>) (Or esclusivo) (v0.17)</li></ul></li>
|
||
<li> Composto
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_MakeCompound/it" title="Part MakeCompound/it">Crea un composto</a>: Crea un composto dagli oggetti selezionati.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_CompoundFilter/it&action=edit&redlink=1" class="new" title="Part CompoundFilter/it (page does not exist)">Compound Filter</a>:</li></ul></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Extrude.png" class="image"><img alt="Part Extrude.png" src="32px-Part_Extrude.png" width="32" height="32" srcset="/wiki/images/thumb/d/df/Part_Extrude.png/48px-Part_Extrude.png 1.5x, /wiki/images/d/df/Part_Extrude.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Extrude/it" title="Part Extrude/it">Estrudi</a>: Estrude le facce planari di un oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Revolve.png" class="image"><img alt="Part Revolve.png" src="32px-Part_Revolve.png" width="32" height="32" srcset="/wiki/images/thumb/1/12/Part_Revolve.png/48px-Part_Revolve.png 1.5x, /wiki/images/1/12/Part_Revolve.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Revolve/it" title="Part Revolve/it">Rivoluziona</a>: Crea un oggetto tramite la rotazione di un altro oggetto attorno ad un asse</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Mirror.png" class="image"><img alt="Part Mirror.png" src="32px-Part_Mirror.png" width="32" height="32" srcset="/wiki/images/thumb/9/93/Part_Mirror.png/48px-Part_Mirror.png 1.5x, /wiki/images/9/93/Part_Mirror.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Mirror/it" title="Part Mirror/it">Specchia</a>: Riflette l'oggetto selezionato rispetto ad un asse stabilito</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Section.png" class="image"><img alt="Part Section.png" src="32px-Part_Section.png" width="32" height="32" srcset="/wiki/images/thumb/a/ab/Part_Section.png/48px-Part_Section.png 1.5x, /wiki/images/a/ab/Part_Section.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Section/it" title="Part Section/it">Seziona</a>: Crea una sezione intersecando un oggetto con un altro oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_SectionCross.png" class="image"><img alt="Part SectionCross.png" src="32px-Part_SectionCross.png" width="32" height="32" srcset="/wiki/images/thumb/8/8b/Part_SectionCross.png/48px-Part_SectionCross.png 1.5x, /wiki/images/8/8b/Part_SectionCross.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_SectionCross/it" title="Part SectionCross/it">Sezioni...</a>: Crea una sezione intersecando un oggetto con uno o più piani di sezione</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Fillet.png" class="image"><img alt="Part Fillet.png" src="32px-Part_Fillet.png" width="32" height="32" srcset="/wiki/images/thumb/4/4a/Part_Fillet.png/48px-Part_Fillet.png 1.5x, /wiki/images/4/4a/Part_Fillet.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Fillet/it" title="Part Fillet/it">Raccorda</a>: Raccorda (arrotonda) i bordi di un oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Chamfer.png" class="image"><img alt="Part Chamfer.png" src="32px-Part_Chamfer.png" width="32" height="32" srcset="/wiki/images/thumb/8/87/Part_Chamfer.png/48px-Part_Chamfer.png 1.5x, /wiki/images/8/87/Part_Chamfer.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Chamfer/it" title="Part Chamfer/it">Smussa</a>: Smussa i bordi di un oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_RuledSurface.png" class="image"><img alt="Part RuledSurface.png" src="32px-Part_RuledSurface.png" width="32" height="32" srcset="/wiki/images/thumb/2/26/Part_RuledSurface.png/48px-Part_RuledSurface.png 1.5x, /wiki/images/2/26/Part_RuledSurface.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_RuledSurface/it" title="Part RuledSurface/it">Superficie rigata</a>: Crea una superficie tra due linee</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Sweep.png" class="image"><img alt="Part Sweep.png" src="32px-Part_Sweep.png" width="32" height="32" srcset="/wiki/images/thumb/7/79/Part_Sweep.png/48px-Part_Sweep.png 1.5x, /wiki/images/7/79/Part_Sweep.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Sweep/it" title="Part Sweep/it">Sweep</a>: Estrude un profilo seguendo un percorso determinato</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Loft.png" class="image"><img alt="Part Loft.png" src="32px-Part_Loft.png" width="32" height="32" srcset="/wiki/images/thumb/e/ef/Part_Loft.png/48px-Part_Loft.png 1.5x, /wiki/images/e/ef/Part_Loft.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Loft/it" title="Part Loft/it">Loft</a>: Crea una estrusione tra due sagome diverse</li>
|
||
<li> Strumenti offset:
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Offset.png" class="image"><img alt="Part Offset.png" src="32px-Part_Offset.png" width="32" height="32" srcset="/wiki/images/thumb/9/9f/Part_Offset.png/48px-Part_Offset.png 1.5x, /wiki/images/9/9f/Part_Offset.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Offset/it" title="Part Offset/it">Offset 3D</a>: Crea una forma parallela ad una data distanza dall'originale.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Offset2D.png" class="image"><img alt="Part Offset2D.png" src="32px-Part_Offset2D.png" width="32" height="32" srcset="/wiki/images/thumb/8/8e/Part_Offset2D.png/48px-Part_Offset2D.png 1.5x, /wiki/images/thumb/8/8e/Part_Offset2D.png/64px-Part_Offset2D.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Offset2D/it" title="Part Offset2D/it">Offset 2D</a>: Crea un contorno parallelo ad una certa distanza dall'originale, ingrandisce o contrae una faccia piana. (v0.17)</li></ul></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Thickness.png" class="image"><img alt="Part Thickness.png" src="32px-Part_Thickness.png" width="32" height="32" srcset="/wiki/images/thumb/e/e7/Part_Thickness.png/48px-Part_Thickness.png 1.5x, /wiki/images/e/e7/Part_Thickness.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Thickness/it" title="Part Thickness/it">Spessore</a>: Scava un solido, lasciando aperte le facce selezionate.</li></ul>
|
||
<h3><span class="mw-headline" id="Altri_strumenti">Altri strumenti</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_ImportCAD.png" class="image"><img alt="Part ImportCAD.png" src="32px-Part_ImportCAD.png" width="32" height="32" srcset="/wiki/images/thumb/d/d6/Part_ImportCAD.png/48px-Part_ImportCAD.png 1.5x, /wiki/images/d/d6/Part_ImportCAD.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_ImportCAD/it" title="Part ImportCAD/it">Importa CAD</a>: Questo strumento consente di aggiungere un file *.IGES, *.STEP, *.BREP al documento corrente.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_ExportCAD.png" class="image"><img alt="Part ExportCAD.png" src="32px-Part_ExportCAD.png" width="32" height="32" srcset="/wiki/images/thumb/b/bd/Part_ExportCAD.png/48px-Part_ExportCAD.png 1.5x, /wiki/images/b/bd/Part_ExportCAD.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_ExportCAD/it" title="Part ExportCAD/it">Esporta CAD</a>: Questo strumento consente di esportare un oggetto parte in un file *.IGES, *.STEP, *.BREP.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_ShapeFromMesh.png" class="image"><img alt="Part ShapeFromMesh.png" src="32px-Part_ShapeFromMesh.png" width="32" height="32" srcset="/wiki/images/thumb/5/50/Part_ShapeFromMesh.png/48px-Part_ShapeFromMesh.png 1.5x, /wiki/images/5/50/Part_ShapeFromMesh.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_ShapeFromMesh/it" title="Part ShapeFromMesh/it">Crea forma da mesh</a>: Crea un oggetto forma da un oggetto mesh.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_ConvertToSolid/it" title="Part ConvertToSolid/it">Converti in solido</a>: Converte un oggetto forma di un oggetto solido.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_ReverseShapes/it" title="Part ReverseShapes/it">Inverti le forme</a>: Capovolge le normali di tutte le facce dell'oggetto selezionato.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_CreateSimpleCopy/it" title="Part CreateSimpleCopy/it">Crea una copia semplice</a>: Crea una semplice copia dell'oggetto selezionato.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_RefineShape.png" class="image"><img alt="Part RefineShape.png" src="32px-Part_RefineShape.png" width="32" height="32" srcset="/wiki/images/thumb/6/68/Part_RefineShape.png/48px-Part_RefineShape.png 1.5x, /wiki/images/6/68/Part_RefineShape.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_RefineShape/it" title="Part RefineShape/it">Affina una forma</a>: Pulisce le facce, eliminando le linee inutili.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_CheckGeometry.png" class="image"><img alt="Part CheckGeometry.png" src="32px-Part_CheckGeometry.png" width="32" height="32" srcset="/wiki/images/thumb/5/5f/Part_CheckGeometry.png/48px-Part_CheckGeometry.png 1.5x, /wiki/images/5/5f/Part_CheckGeometry.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Part_CheckGeometry/it" title="Part CheckGeometry/it">Controlla la geometria</a>: Controlla se la geometria degli oggetti selezionati contiene degli errori.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_Measure_Menu/it" title="Std Measure Menu/it">Misura</a>: Permette di eseguire misure lineari e angolari tra i punti, i bordi o le facce.</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Preferences-import-export.svg" class="image"><img alt="Preferences-import-export.svg" src="Preferences-import-export.svg" width="32" height="32" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Import_Export_Preference/it" title="Import Export Preference/it">Preferenze ...</a> Import Export</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Operazioni_booleane">Operazioni booleane</span></h3>
|
||
<div class="floatleft"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_BooleanOperations.png" class="image" title="Un esempio di unione (Somma), intersezione (Comune) e differenza (Sottrazione)"><img alt="Un esempio di unione (Somma), intersezione (Comune) e differenza (Sottrazione)" src="500px-Part_BooleanOperations.png" width="500" height="384" srcset="/wiki/images/thumb/d/df/Part_BooleanOperations.png/750px-Part_BooleanOperations.png 1.5x, /wiki/images/thumb/d/df/Part_BooleanOperations.png/1000px-Part_BooleanOperations.png 2x" /></a></div>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Un esempio di unione (Somma), intersezione (Comune) e differenza (Sottrazione)
|
||
</p>
|
||
<h3><span class="mw-headline" id="Concetti_base">Concetti base</span></h3>
|
||
<p>Nella terminologia OpenCascade, si distingue tra primitive geometriche e forme (topologiche). Una primitiva geometrica può essere un punto, una linea, un cerchio, un piano, ecc o essere anche di tipo più complesso come una curva B-Spline o una superficie. Una forma può essere un vertice, un bordo, un profilo, una faccia, un solido o un insieme di più forme. Le primitive geometriche non sono fatte per essere visualizzate direttamente sulla scena 3D, ma piuttosto per essere utilizzate come geometrie per la costruzione di forme. Ad esempio, un bordo può essere costruito usando una linea o una porzione di un cerchio.
|
||
</p><p>Potremmo dire, per riassumere, che le primitive geometriche sono blocchi di costruzione "informi", e le forme sono la reale geometria spaziale costruita su questi blocchi.
|
||
</p><p>Per ottenere un elenco completo di tutti questi elementi fare riferimento alla <a rel="nofollow" class="external text" href="http://www.opencascade.org/org/doc/">documentazione OCC</a> e cercare Geom_Geometry e TopoDS_Shape. Nella documentazione sono anche contenute ulteriori informazioni sulle differenze tra gli oggetti geometrici e le forme. La documentazione OCC non è disponibile online (è necessario scaricare un archivio) e si rivolge principalmente ai programmatori e non agli utenti finali. Si spera che le informazioni fornite in seguito siano sufficienti per iniziare.
|
||
</p><p>I tipi di oggetti geometrici possono essere suddivisi in due gruppi principali: le curve e le superfici. Sulle curve (linea, cerchio, ...), è possibile creare direttamente un bordo, mentre sulle superfici (piano, cilindro, ...) è possibile costruire una faccia. Ad esempio, la linea primitiva geometrica è illimitata, ossia è definita da un vettore di base e da un vettore di direzione, mentre la sua forma (e rappresentazione) deve essere qualcosa di limitato da un punto iniziale e da un punto finale. E un cubo - solido - può essere creato da sei piani limitati.
|
||
</p><p>Da un bordo o una faccia (forme) si può sempre risalire alla sua primitiva geometrica.
|
||
</p><p>Utilizzando le forme, è possibile costruire parti molto complesse, oppure viceversa, si possono estrarre tutte le sotto-forme che compongono una forma complessa.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Script_3">Script</span></h3>
|
||
<p>La struttura principale dei dati utilizzati nel modulo Parte di OpenCascade è il tipo di dati <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Boundary_representation">BRep</a> .
|
||
Quasi tutti i contenuti e i tipi di oggetti del modulo Parte sono ora disponibili per gli script Python. Questo include le primitive geometriche, come Linee e Cerchi (o Archi), e tutta la gamma di TopoShapes, come Vertici, Bordi, Contorni, Facce, Solidi e Compositi. Per ognuno di questi oggetti, esistono diversi metodi di creazione, e per alcuni di loro, soprattutto le TopoShapes, sono inoltre disponibili operazioni booleane avanzate come unione, differenza e intersezione. Per maggiori informazioni, esplorare il contenuto del modulo Parte, come descritto nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_Scripting_Basics/it" title="FreeCAD Scripting Basics/it">Script</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Esempi">Esempi</span></h3>
|
||
<p>Per creare un elemento linea, passare alla console Python e digitare:
|
||
</p>
|
||
<pre>import Part,PartGui
|
||
doc=App.newDocument()
|
||
l=Part.LineSegment()
|
||
l.StartPoint=(0.0,0.0,0.0)
|
||
l.EndPoint=(1.0,1.0,1.0)
|
||
doc.addObject("Part::Feature","Line").Shape=l.toShape()
|
||
doc.recompute() </pre>
|
||
<p>Descrizione passo per passo della procedura del precedente esempio Python:
|
||
</p>
|
||
<pre>import Part,PartGui
|
||
doc=App.newDocument() </pre>
|
||
<p>carica il modulo Parte e crea un nuovo documento
|
||
</p>
|
||
<pre>l=Part.LineSegment()
|
||
l.StartPoint=(0.0,0.0,0.0)
|
||
l.EndPoint=(1.0,1.0,1.0) </pre>
|
||
<p>La funzione Line descrive in realtà un segmento di linea, quindi serve il punto iniziale e quello finale.
|
||
</p>
|
||
<pre>doc.addObject("Part::Feature","Line").Shape=l.toShape() </pre>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>Questo comando aggiunge un oggetto di tipo Parte al documento e assegna la forma di rappresentazione del segmento di linea alla proprietà 'forma' (Shape) dell'oggetto aggiunto. È importante comprendere che abbiamo usato una primitiva geometrica (la Part.line) per creare un TopoShape su di essa (il metodo toShape()). Al documento possono essere aggiunte solo delle forme . In FreeCAD, le primitive geometriche vengono utilizzate come "strutture di base" per le forme.
|
||
</p>
|
||
</div>
|
||
<pre>doc.recompute() </pre>
|
||
<p>Aggiorna il documento. Questo prepara anche la rappresentazione visiva del nuovo oggetto Parte.
|
||
</p>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>Notare che una linea può essere creata specificando il suo punto iniziale e il suo punto finale direttamente nel costruttore, per es. Part.Line (point1, point2) oppure possiamo creare una linea predefinita e impostarne le proprietà in seguito, come in questo caso.
|
||
</p>
|
||
</div>
|
||
<p>In modo analogo è possibile creare un cerchio:
|
||
</p>
|
||
<pre>import Part
|
||
doc = App.activeDocument()
|
||
c = Part.Circle()
|
||
c.Radius=10.0
|
||
f = doc.addObject("Part::Feature", "Circle")
|
||
f.Shape = c.toShape()
|
||
doc.recompute() </pre>
|
||
<p>Si noti ancora una volta che il cerchio (geometria primitiva) viene usato per costruire una forma su di esso. Ovviamente, in seguito, si può ancora accedere alla geometria di costruzione con:
|
||
</p>
|
||
<pre>s = f.Shape
|
||
e = s.Edges[0]
|
||
c = e.Curve </pre>
|
||
<p>Qui si acquisisce la forma dell'oggetto f, poi si acquisisce la lista dei bordi, (in questo caso il bordo è uno solo perché si crea l'intera forma con un unico cerchio, quindi si definisce solo il primo elemento della lista Edges) e infine, si recupera la curva. Ogni bordo ha una curva, che è la geometria primitiva sulla quale è basato.
|
||
</p><p>Per maggiori informazioni consultare la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Topological_data_scripting/it" title="Topological data scripting/it">Script di dati topologici</a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Tutorial">Tutorial</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Import_from_STL_or_OBJ/it" title="Import from STL or OBJ/it">Importare da STL o OBJ</a> : Come importare file STL/OBJ in FreeCAD</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Export_to_STL_or_OBJ/it" title="Export to STL or OBJ/it">Esportare in STL o OBJ</a> : Come esportare file STL/OBJ da FreeCAD</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Whiffle_Ball_tutorial/it" title="Whiffle Ball tutorial/it">Tutorial Sfera traforata</a> : Come usare il modulo Part</li></ul>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
L'ambiente Disegno (Drawing) consente di trasferire su carta il lavoro realizzato in 3D.
|
||
</p><p>Permette di produrre delle viste (proiezioni sul piano) del modello, di posizionarle in una finestra 2D e di inserire la finestra in una tavola, ad esempio, in un foglio con il bordo, il titolo e il logo e, infine, di stampare la tavola.
|
||
</p>
|
||
<div id="itsfree" style="text-align:center;color:black;background:#FDE0A8;margin:1em 7em;padding:0.5em 2em;border:2px solid #FF5706;">Lo sviluppo del modulo Drawing è stato interrotto con il proposito di sostituirlo con il nuovo <a href="https://www.freecadweb.org/wiki/index.php?title=TechDraw_Module/it" title="TechDraw Module/it">Modulo TechDraw</a> che sarà introdotto nella versione 0.17. Nella versione 0.17 sono forniti entrambi i moduli, ma il modulo Drawing potrebbe essere rimosso nelle versioni future.</div>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Strumenti_dell.27interfaccia_grafica">Strumenti dell'interfaccia grafica</span></h3>
|
||
<p>Questi strumenti permettono di creare, configurare e esportare le proiezioni dei solidi come disegni 2D.
|
||
</p><p><br />
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_New.png" class="image"><img alt="Drawing New.png" src="32px-Drawing_New.png" width="32" height="32" srcset="/wiki/images/thumb/d/dc/Drawing_New.png/48px-Drawing_New.png 1.5x, /wiki/images/d/dc/Drawing_New.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Open_SVG/it" title="Drawing Open SVG/it">Apri SVG</a>: apre un foglio di disegno preventivamente salvato in un file SVG.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Landscape_A3.png" class="image"><img alt="Drawing Landscape A3.png" src="32px-Drawing_Landscape_A3.png" width="32" height="32" srcset="/wiki/images/thumb/2/27/Drawing_Landscape_A3.png/48px-Drawing_Landscape_A3.png 1.5x, /wiki/images/2/27/Drawing_Landscape_A3.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Landscape_A3/it" title="Drawing Landscape A3/it">Nuovo Disegno A3</a>: crea un nuovo disegno su un foglio di default A3 orizzontale di FreeCAD.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_View.png" class="image"><img alt="Drawing View.png" src="32px-Drawing_View.png" width="32" height="32" srcset="/wiki/images/thumb/0/03/Drawing_View.png/48px-Drawing_View.png 1.5x, /wiki/images/0/03/Drawing_View.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_View/it" title="Drawing View/it">Inserisci vista nel disegno</a>: inserisce nel foglio di lavoro attivo una vista in proiezione dell'oggetto selezionato.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Annotation.png" class="image"><img alt="Drawing Annotation.png" src="32px-Drawing_Annotation.png" width="32" height="32" srcset="/wiki/images/thumb/7/74/Drawing_Annotation.png/48px-Drawing_Annotation.png 1.5x, /wiki/images/7/74/Drawing_Annotation.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Annotation/it" title="Drawing Annotation/it">Annotazione</a>: aggiunge una annotazione al foglio di disegno corrente.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Clip.png" class="image"><img alt="Drawing Clip.png" src="32px-Drawing_Clip.png" width="32" height="32" srcset="/wiki/images/thumb/b/b9/Drawing_Clip.png/48px-Drawing_Clip.png 1.5x, /wiki/images/b/b9/Drawing_Clip.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Clip/it" title="Drawing Clip/it">Clip</a>: aggiunge un gruppo di clip al foglio di disegno corrente.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Openbrowser.png" class="image"><img alt="Drawing Openbrowser.png" src="32px-Drawing_Openbrowser.png" width="32" height="32" srcset="/wiki/images/thumb/0/02/Drawing_Openbrowser.png/48px-Drawing_Openbrowser.png 1.5x, /wiki/images/0/02/Drawing_Openbrowser.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Openbrowser/it" title="Drawing Openbrowser/it">Apri finestra browser</a>: apre un'anteprima del foglio corrente nel browser</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Orthoviews.png" class="image"><img alt="Drawing Orthoviews.png" src="32px-Drawing_Orthoviews.png" width="32" height="32" srcset="/wiki/images/thumb/7/7f/Drawing_Orthoviews.png/48px-Drawing_Orthoviews.png 1.5x, /wiki/images/7/7f/Drawing_Orthoviews.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Orthoviews/it" title="Drawing Orthoviews/it">Inserisci viste ortogonali</a>: crea automaticamente le viste ortogonali di un oggetto nel foglio di disegno corrente</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Symbol.png" class="image"><img alt="Drawing Symbol.png" src="32px-Drawing_Symbol.png" width="32" height="32" srcset="/wiki/images/thumb/0/0a/Drawing_Symbol.png/48px-Drawing_Symbol.png 1.5x, /wiki/images/0/0a/Drawing_Symbol.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Symbol/it" title="Drawing Symbol/it">Simbolo</a>: aggiunge il contenuto di un file in formato SVG come un simbolo nel foglio di disegno corrente</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_DraftView.png" class="image"><img alt="Drawing DraftView.png" src="32px-Drawing_DraftView.png" width="32" height="32" srcset="/wiki/images/thumb/f/ff/Drawing_DraftView.png/48px-Drawing_DraftView.png 1.5x, /wiki/images/f/ff/Drawing_DraftView.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Drawing/it" title="Draft Drawing/it">Vista Draft</a>: Inserisce una speciale vista Draft dell'oggetto selezionato nel foglio del disegno corrente</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_SpreadsheetView.png" class="image"><img alt="Drawing SpreadsheetView.png" src="32px-Drawing_SpreadsheetView.png" width="32" height="32" srcset="/wiki/images/thumb/2/2f/Drawing_SpreadsheetView.png/48px-Drawing_SpreadsheetView.png 1.5x, /wiki/images/2/2f/Drawing_SpreadsheetView.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_SpreadsheetView/it" title="Drawing SpreadsheetView/it">Vista foglio di calcolo</a>: Inserisce una vista di un foglio di calcolo selezionato nel foglio del disegno corrente</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_Save.png" class="image"><img alt="Drawing Save.png" src="32px-Drawing_Save.png" width="32" height="32" srcset="/wiki/images/4/43/Drawing_Save.png 1.5x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Save/it" title="Drawing Save/it">Esporta pagina</a>: salva il progetto o le sue modifiche in un file SVG.</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_ProjectShape/it" title="Drawing ProjectShape/it">Proietta le forme</a>: proietta le forme su un piano, nella vista 3D.</li></ul>
|
||
<p><b>Nota.</b>
|
||
Lo strumento <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Drawing/it" title="Draft Drawing/it">Disegno</a> è utilizzato principalmente per posizionare gli oggetti Draft sulla carta. Possiede alcune funzionalità aggiuntive rispetto agli strumenti standard di Drawing, e supporta degli oggetti specifici come le <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Dimension/it" title="Draft Dimension/it">dimensioni di Draft</a>.
|
||
</p><p><br />
|
||
<a href="https://www.freecadweb.org/wiki/index.php?title=File:Drawing_extraction.png" class="image"><img alt="Drawing extraction.png" src="800px-Drawing_extraction.png" width="800" height="428" srcset="/wiki/images/thumb/f/f4/Drawing_extraction.png/1200px-Drawing_extraction.png 1.5x, /wiki/images/f/f4/Drawing_extraction.png 2x" /></a>
|
||
</p><p>Nella schermata precedente si vedono i componenti principali del modulo Drawing.
|
||
Il documento contiene l'oggetto (Schenkel) da cui si vuole estrarre un disegno (una proiezione). Viene perciò creata una <b>Pagina</b>. La pagina viene creata tramite un <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_templates/it" title="Drawing templates/it">modello</a>, in questo caso il modello è <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Landscape_A3/it" title="Drawing Landscape A3/it">A3_Landscape</a>.
|
||
</p><p>Il modello della pagina è un documento SVG che può contenere la consueta cornice e un logo oppure conformarsi a una presentazione standard personalizzata.
|
||
</p><p>I modelli, di default, nei sistemi Windows si trovano in <i>C:/Program Files/FreeCAD0.13/data/Mod/Drawing/Templates/A3_Landscape.svg</i>, e nei sistemi Linux in <i>/usr/share/freecad/Mod/Drawing/Templates/A3_Landscape.svg</i>.
|
||
</p><p>Nella pagina si possono inserire una o più viste.
|
||
</p><p>Ogni vista ha una posizione nella pagina (Proprietà X, Y), un fattore di scala (proprietà di scala) e delle proprietà aggiuntive.
|
||
</p><p>Ogni volta che la pagina, la vista o l'oggetto a cui si fa riferimento subiscono delle modifiche, la pagina viene rigenerata e viene anche aggiornata la sua visualizzazione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Script_4">Script</span></h3>
|
||
<p>Per ora le funzioni offerte dall'interfaccia grafica (GUI) sono molto limitate, quindi gli script API sono più interessanti. Ecco alcuni esempi su come utilizzare gli script API del modulo Disegno.
|
||
</p><p>Lo script <a href="https://www.freecadweb.org/wiki/index.php?title=Macro_CartoucheFC/it" title="Macro CartoucheFC/it">Macro_CartoucheFC</a> permette di compilare agevolmente la tabella del modello di tavola FreeCAD A3_Landscape.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Esempio_semplice">Esempio semplice</span></h4>
|
||
<p>Prima di tutto è necessario caricare i moduli Part e Disegno:
|
||
</p>
|
||
<pre>import FreeCAD, Part, Drawing </pre>
|
||
<p>Creare una Parte campione
|
||
</p>
|
||
<pre>Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100))) </pre>
|
||
<p>Proiezione diretta. G0 significa bordo rigido, G1 è una tangente continua.
|
||
</p>
|
||
<pre>Shape = App.ActiveDocument.Shape.Shape
|
||
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
|
||
print "visible edges:", len(visibleG0.Edges)
|
||
print "hidden edges:", len(hiddenG0.Edges) </pre>
|
||
<p>Tutto viene proiettato sul piano Z:
|
||
</p>
|
||
<pre>print "Bnd Box shape: X=",Shape.BoundBox.XLength," Y=",Shape.BoundBox.YLength," Z=",Shape.BoundBox.ZLength
|
||
print "Bnd Box project: X=",visibleG0.BoundBox.XLength," Y=",visibleG0.BoundBox.YLength," Z=",visibleG0.BoundBox.ZLength </pre>
|
||
<p>Proiezione con un vettore diverso
|
||
</p>
|
||
<pre>[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1)) </pre>
|
||
<p>Proiezione in SVG
|
||
</p>
|
||
<pre>resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
|
||
print resultSVG </pre>
|
||
<h4><span class="mw-headline" id="Il_metodo_parametrico">Il metodo parametrico</span></h4>
|
||
<p>Creare il corpo
|
||
</p>
|
||
<pre>import FreeCAD
|
||
import Part
|
||
import Drawing
|
||
|
||
# Create three boxes and a cylinder
|
||
App.ActiveDocument.addObject("Part::Box","Box")
|
||
App.ActiveDocument.Box.Length=100.00
|
||
App.ActiveDocument.Box.Width=100.00
|
||
App.ActiveDocument.Box.Height=100.00
|
||
|
||
App.ActiveDocument.addObject("Part::Box","Box1")
|
||
App.ActiveDocument.Box1.Length=90.00
|
||
App.ActiveDocument.Box1.Width=40.00
|
||
App.ActiveDocument.Box1.Height=100.00
|
||
|
||
App.ActiveDocument.addObject("Part::Box","Box2")
|
||
App.ActiveDocument.Box2.Length=20.00
|
||
App.ActiveDocument.Box2.Width=85.00
|
||
App.ActiveDocument.Box2.Height=100.00
|
||
|
||
App.ActiveDocument.addObject("Part::Cylinder","Cylinder")
|
||
App.ActiveDocument.Cylinder.Radius=80.00
|
||
App.ActiveDocument.Cylinder.Height=100.00
|
||
App.ActiveDocument.Cylinder.Angle=360.00
|
||
# Fuse two boxes and the cylinder
|
||
App.ActiveDocument.addObject("Part::Fuse","Fusion")
|
||
App.ActiveDocument.Fusion.Base = App.ActiveDocument.Cylinder
|
||
App.ActiveDocument.Fusion.Tool = App.ActiveDocument.Box1
|
||
|
||
App.ActiveDocument.addObject("Part::Fuse","Fusion1")
|
||
App.ActiveDocument.Fusion1.Base = App.ActiveDocument.Box2
|
||
App.ActiveDocument.Fusion1.Tool = App.ActiveDocument.Fusion
|
||
# Cut the fused shapes from the first box
|
||
App.ActiveDocument.addObject("Part::Cut","Shape")
|
||
App.ActiveDocument.Shape.Base = App.ActiveDocument.Box
|
||
App.ActiveDocument.Shape.Tool = App.ActiveDocument.Fusion1
|
||
# Hide all the intermediate shapes
|
||
Gui.ActiveDocument.Box.Visibility=False
|
||
Gui.ActiveDocument.Box1.Visibility=False
|
||
Gui.ActiveDocument.Box2.Visibility=False
|
||
Gui.ActiveDocument.Cylinder.Visibility=False
|
||
Gui.ActiveDocument.Fusion.Visibility=False
|
||
Gui.ActiveDocument.Fusion1.Visibility=False </pre>
|
||
<p>Inserire un oggetto Page e assegnargli un modello
|
||
</p>
|
||
<pre>App.ActiveDocument.addObject('Drawing::FeaturePage','Page')
|
||
App.ActiveDocument.Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg' </pre>
|
||
<p>Creare una vista dell'oggetto "Shape", definirne la posizione e la scala e assegnare la vista a una pagina
|
||
</p>
|
||
<pre>App.ActiveDocument.addObject('Drawing::FeatureViewPart','View')
|
||
App.ActiveDocument.View.Source = App.ActiveDocument.Shape
|
||
App.ActiveDocument.View.Direction = (0.0,0.0,1.0)
|
||
App.ActiveDocument.View.X = 10.0
|
||
App.ActiveDocument.View.Y = 10.0
|
||
App.ActiveDocument.Page.addObject(App.ActiveDocument.View) </pre>
|
||
<p>Creare una seconda vista, ruotata di 90 gradi, dello stesso oggetto.
|
||
</p>
|
||
<pre>App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewRot')
|
||
App.ActiveDocument.ViewRot.Source = App.ActiveDocument.Shape
|
||
App.ActiveDocument.ViewRot.Direction = (0.0,0.0,1.0)
|
||
App.ActiveDocument.ViewRot.X = 290.0
|
||
App.ActiveDocument.ViewRot.Y = 30.0
|
||
App.ActiveDocument.ViewRot.Scale = 1.0
|
||
App.ActiveDocument.ViewRot.Rotation = 90.0
|
||
App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewRot) </pre>
|
||
<p>Creare una terza vista, con direzione isometrica, dello stesso oggetto. Anche le linee nascoste sono attivate.
|
||
</p>
|
||
<pre>App.ActiveDocument.addObject('Drawing::FeatureViewPart','ViewIso')
|
||
App.ActiveDocument.ViewIso.Source = App.ActiveDocument.Shape
|
||
App.ActiveDocument.ViewIso.Direction = (1.0,1.0,1.0)
|
||
App.ActiveDocument.ViewIso.X = 335.0
|
||
App.ActiveDocument.ViewIso.Y = 140.0
|
||
App.ActiveDocument.ViewIso.ShowHiddenLines = True
|
||
App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewIso) </pre>
|
||
<p>Modificare qualche parametro e aggiornare. Il processo di aggiornamento modifica la visualizzazione e aggiorna la pagina.
|
||
</p>
|
||
<pre>App.ActiveDocument.View.X = 30.0
|
||
App.ActiveDocument.View.Y = 30.0
|
||
App.ActiveDocument.View.Scale = 1.5
|
||
App.ActiveDocument.recompute() </pre>
|
||
<h4><span class="mw-headline" id="Ottenere_porzioni_e_parti">Ottenere porzioni e parti</span></h4>
|
||
<p>Ottenere il frammento SVG di una singola vista
|
||
</p>
|
||
<pre>ViewSVG = App.ActiveDocument.View.ViewResult
|
||
print ViewSVG </pre>
|
||
<p>Ottenere l'intera pagina risultante (contenuta in un file nella directory temporanea del documento, con il permesso di sola lettura)
|
||
</p>
|
||
<pre>print "Resulting SVG document: ",App.ActiveDocument.Page.PageResult
|
||
file = open(App.ActiveDocument.Page.PageResult,"r")
|
||
print "Result page is ",len(file.readlines())," lines long" </pre>
|
||
<p>Importante: liberare il file!
|
||
</p>
|
||
<pre>del file </pre>
|
||
<p>Inserire una vista con un contenuto personalizzato:
|
||
</p>
|
||
<pre>App.ActiveDocument.addObject('Drawing::FeatureView','ViewSelf')
|
||
App.ActiveDocument.ViewSelf.ViewResult = """<g id="ViewSelf"
|
||
stroke="rgb(0, 0, 0)"
|
||
stroke-width="0.35"
|
||
stroke-linecap="butt"
|
||
stroke-linejoin="miter"
|
||
transform="translate(30,30)"
|
||
fill="#00cc00"
|
||
>
|
||
|
||
<ellipse cx="40" cy="40" rx="30" ry="15"/>
|
||
</g>"""
|
||
App.ActiveDocument.Page.addObject(App.ActiveDocument.ViewSelf)
|
||
App.ActiveDocument.recompute()
|
||
|
||
del ViewSVG </pre>
|
||
<p>Si ottiene il seguente risultato:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:DrawingScriptResult.jpg" class="image"><img alt="DrawingScriptResult.jpg" src="800px-DrawingScriptResult.jpg" width="800" height="481" srcset="/wiki/images/thumb/2/2e/DrawingScriptResult.jpg/1200px-DrawingScriptResult.jpg 1.5x, /wiki/images/2/2e/DrawingScriptResult.jpg 2x" /></a>
|
||
</p>
|
||
<h4><span class="mw-headline" id="Dimensionamento_generale_e_tolleranze_geometriche">Dimensionamento generale e tolleranze geometriche</span></h4>
|
||
<p>Il disegno delle dimensioni e delle tolleranze sono ancora in fase di sviluppo, ma, con un po' di lavoro, è già possibile ottenere alcune funzionalità di base.
|
||
</p><p>Prima di tutto bisogna scaricare il modulo gdtsvg python da
|
||
</p><p><a rel="nofollow" class="external free" href="https://github.com/jcc242/FreeCAD">https://github.com/jcc242/FreeCAD</a> (ATTENZIONE: Questo link potrebbe essere interrotto in qualsiasi momento)
|
||
</p><p>Per ottenere un riquadro per l'indicazione delle caratteristiche (una griglia in cui inserire i parametri), provare quanto segue:
|
||
</p>
|
||
<pre>import gdtsvg as g # Import the module, I like to give it an easy handle
|
||
ourFrame = g.ControlFrame("0","0", g.Perpendicularity(), ".5", g.Diameter(), g.ModifyingSymbols("M"), "A",
|
||
g.ModifyingSymbols("F"), "B", g.ModifyingSymbols("L"), "C", g.ModifyingSymbols("I")) </pre>
|
||
<p>Ecco un esempio di buona ripartizione del contenuto di una griglia di controllo della geometria: <a rel="nofollow" class="external autonumber" href="http://www.cadblog.net/adding-geometric-tolerances.htm">[1]</a>
|
||
</p><p>I parametri da passare a ControlFrame sono:
|
||
</p>
|
||
<ol><li>Coordinata X nel sistema di coordinate SVG (digitare stringa)</li>
|
||
<li>Coordinata Y nel sistema di coordinate SVG (digitare stringa)</li>
|
||
<li>Il simbolo grafico della caratteristica geometrica desiderata (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li>
|
||
<li>La tolleranza (digitare stringa)</li>
|
||
<li>(opzionale) Il simbolo di diametro (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li>
|
||
<li>(optional) La condizione di tolleranza di materiale (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li>
|
||
<li>(optional) Il primo dato (digitare stringa)</li>
|
||
<li>(optional) La condizione di tolleranza del primo dato (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li>
|
||
<li>(optional) Il secondo dato (digitare stringa)</li>
|
||
<li>(optional) La condizione di tolleranza del secondo dato (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li>
|
||
<li>(optional) Il terzo dato (digitare stringa)</li>
|
||
<li>(optional) Il terzo dato per la condizione di materiale (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)</li></ol>
|
||
<p>La funzione ControlFrame restituisce un testo che contiene (stringa svg, larghezza totale del riquadro, altezza complessiva del riquadro)
|
||
</p><p>Per ottenere una dimensione, provare quanto segue:
|
||
</p>
|
||
<pre>import gdtsvg
|
||
ourDimension = linearDimension(point1, point2, textpoint, dimensiontext, linestyle=getStyle("visible"),
|
||
arrowstyle=getStyle("filled"), textstyle=getStyle("text") </pre>
|
||
<p>Gli input per ottenere una dimensione lineare sono:
|
||
</p>
|
||
<ol><li>point1, una tupla con le coordinate svg (x,y), questo è uno dei punti tra i quali si desidera la quota</li>
|
||
<li>point2, una tupla con le coordinate svg (x,y), questo è il secondo dei punti tra i quali si desidera la quota</li>
|
||
<li>textpoint, una tupla con le coordinate svg (x,y), questo è il punto dove viene posizionato il testo della quota</li>
|
||
<li>dimensiontext, una stringa contenente il testo che si desidera per la dimensione</li>
|
||
<li>linestyle, una stringa contenente lo stile svg (ad esempio css), utilizzando la funzione getStyle per recuperare una stringa predefinita, per definire lo stile con cui appaiono le linee</li>
|
||
<li>arrowstyle, una stringa contenente lo stile svg (ad esempio css), utilizzando la funzione getStyle per recuperare una stringa predefinita, per definire lo stile con cui appaiono le frecce</li>
|
||
<li>textstyle, una stringa contenente lo stile svg (ad esempio css), utilizzando la funzione getStyle per recuperare una stringa predefinita, per definire lo stile con cui appaiono i testi </li></ol>
|
||
<p>Con la quotatura e l'indicazione delle tolleranze, si può procedere come sopra per visualizzarle nella pagina di disegno.
|
||
</p><p>Questo modulo è provvisorio e può essere interrotto in qualsiasi momento, segnalazioni di bug per ora sono benvenute nella pagina github, oppure contattare jcc242 sul forum se si registra un bug da qualche altra parte.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Modelli_di_squadrature">Modelli di squadrature</span></h3>
|
||
<p>FreeCAD viene fornito con una serie di modelli di pagina predefiniti, ma si possono trovare altri modelli in <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_templates/it" title="Drawing templates/it">Modelli di squadrature</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Estendere_il_modulo_Drawing">Estendere il modulo Drawing</span></h3>
|
||
<p>Alcune ulteriori note sulla programmazione del Modulo Disegno sono contenute nella pagina <a href="Drawing_Documentation.html" title="Drawing Documentation">Drawing Documentation (en)</a> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Documentation/it" title="Drawing Documentation/it">Drawing Documentation (it)</a>. Dette note aiutano a capire rapidamente come lavora questo modulo e permettono ai programmatori di avviare rapidamente la programmazione per esso.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Tutorial_2">Tutorial</span></h2>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_tutorial/it" title="Drawing tutorial/it">Drawing tutorial</a></li></ul>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Link_esterni">Link esterni</span></h2>
|
||
<ul><li> <a rel="nofollow" class="external text" href="https://www.youtube.com/watch?v=1Hm5Zyjmjac">Intro to mechanical drawing on Youtube - by Normal Universe</a></li></ul>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Il modulo Raytracing ha la funzione di inviare il contenuto della scena presente sul monitor a un motore di rendering esterno, per produrre immagini foto-realistiche del progetto. Il modulo Raytracing lavora con dei <a href="/wiki/Raytracing_Module/it#Modelli" title="Raytracing Module/it">modelli</a>, nello stesso modo del modulo <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Module/it" title="Drawing Module/it">Drawing</a>, e consente di creare un progetto di raytracing, in cui inserire una vista degli oggetti. Il progetto può essere esportato in un file ready-to-render, o essere trattato direttamente.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_example.jpg" class="image"><img alt="Raytracing example.jpg" src="1024px-Raytracing_example.jpg" width="1024" height="574" srcset="/wiki/images/thumb/a/a4/Raytracing_example.jpg/1536px-Raytracing_example.jpg 1.5x, /wiki/images/a/a4/Raytracing_example.jpg 2x" /></a>
|
||
</p><p>Attualmente sono supportati due renderizzatori: <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/POV-Ray">povray</a> e <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/LuxRender">luxrender</a>. Per poter eseguire il rendering direttamente da FreeCAD, sul sistema deve essere installato almeno uno di questi renderer, e deve essere configurato il suo percorso nelle preferenze di FreeCAD per Raytracing. Senza alcun renderer installato, si può comunque esportare un file della scena e utilizzarlo successivamente in uno di questi renderer, o su una macchina diversa.
|
||
</p><p>Il modulo Raytracing lavora con dei <a href="/wiki/Raytracing_Module/it#Modelli" title="Raytracing Module/it">modelli</a>, che sono dei file della scena completati per un dato renderer esterno, comprese le luci e eventuali geometrie aggiuntive, come i piani di appoggio. Questi file di scena contengono dei segnaposto, dove FreeCAD inserisce le informazioni per la posizione della fotocamera, la geometria e il materiale di ogni oggetto del progetto. Questo file di scena modificato è il file che viene poi esportato verso il renderer esterno.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Strumenti">Strumenti</span></h3>
|
||
<h4><span class="mw-headline" id="Gli_strumenti_di_un_progetto_Raytracing">Gli strumenti di un progetto Raytracing</span></h4>
|
||
<p>Questi sono i principali strumenti per esportare il vostro lavoro 3D verso i software di renderizzazione (rendering) esterni.
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_New.png" class="image"><img alt="Raytracing New.png" src="32px-Raytracing_New.png" width="32" height="32" srcset="/wiki/images/thumb/5/59/Raytracing_New.png/48px-Raytracing_New.png 1.5x, /wiki/images/5/59/Raytracing_New.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_New/it" title="Raytracing New/it">Nuovo progetto PovRay</a>: avvia un nuovo progetto per l'esportazione in PovRay.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_Lux.png" class="image"><img alt="Raytracing Lux.png" src="32px-Raytracing_Lux.png" width="32" height="32" srcset="/wiki/images/thumb/0/05/Raytracing_Lux.png/48px-Raytracing_Lux.png 1.5x, /wiki/images/0/05/Raytracing_Lux.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Lux/it" title="Raytracing Lux/it">Nuovo progetto LuxRender</a>: Inserisce un nuovo progetto LuxRender nel documento</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_InsertPart.png" class="image"><img alt="Raytracing InsertPart.png" src="32px-Raytracing_InsertPart.png" width="32" height="32" srcset="/wiki/images/thumb/9/9e/Raytracing_InsertPart.png/48px-Raytracing_InsertPart.png 1.5x, /wiki/images/9/9e/Raytracing_InsertPart.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_InsertPart/it" title="Raytracing InsertPart/it">Inserisci parte</a>: Inserisce una vista di una parte in un progetto raytracing</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_ResetCamera.png" class="image"><img alt="Raytracing ResetCamera.png" src="32px-Raytracing_ResetCamera.png" width="32" height="32" srcset="/wiki/images/thumb/9/92/Raytracing_ResetCamera.png/48px-Raytracing_ResetCamera.png 1.5x, /wiki/images/9/92/Raytracing_ResetCamera.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_ResetCamera/it" title="Raytracing ResetCamera/it">Reset camera</a>: Adatta la posizione della telecamera di un progetto raytracing alla vista corrente</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_ExportProject.png" class="image"><img alt="Raytracing ExportProject.png" src="32px-Raytracing_ExportProject.png" width="32" height="32" srcset="/wiki/images/thumb/3/38/Raytracing_ExportProject.png/48px-Raytracing_ExportProject.png 1.5x, /wiki/images/3/38/Raytracing_ExportProject.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_ExportProject/it" title="Raytracing ExportProject/it">Esporta progetto</a>: Esporta un progetto raytracing in un file di scena per il rendering con un renderizzatore esterno</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_Render.png" class="image"><img alt="Raytracing Render.png" src="32px-Raytracing_Render.png" width="32" height="32" srcset="/wiki/images/thumb/c/c5/Raytracing_Render.png/48px-Raytracing_Render.png 1.5x, /wiki/images/c/c5/Raytracing_Render.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Render/it" title="Raytracing Render/it">Render</a>: Esegue il rendering di un progetto di raytracing con un renderizzatore esterno</li></ul>
|
||
<h4><span class="mw-headline" id="Utilit.C3.A0">Utilità</span></h4>
|
||
<p>Sono degli strumenti di supporto per eseguire manualmente compiti specifici
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_Export.png" class="image"><img alt="Raytracing Export.png" src="32px-Raytracing_Export.png" width="32" height="32" srcset="/wiki/images/thumb/0/00/Raytracing_Export.png/48px-Raytracing_Export.png 1.5x, /wiki/images/0/00/Raytracing_Export.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Export/it" title="Raytracing Export/it">Esporta la vista in povray</a>: scrive in un file PovRay tutte le informazioni sulla scena dal punto di vista corrente.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_Camera.png" class="image"><img alt="Raytracing Camera.png" src="32px-Raytracing_Camera.png" width="32" height="32" srcset="/wiki/images/thumb/d/d0/Raytracing_Camera.png/48px-Raytracing_Camera.png 1.5x, /wiki/images/d/d0/Raytracing_Camera.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Camera/it" title="Raytracing Camera/it">Esporta la camera in povray</a>: Esporta la posizione della telecamera della vista 3D attiva in un file in formato POV-Ray</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Raytracing_Part.png" class="image"><img alt="Raytracing Part.png" src="32px-Raytracing_Part.png" width="32" height="32" srcset="/wiki/images/thumb/c/c7/Raytracing_Part.png/48px-Raytracing_Part.png 1.5x, /wiki/images/c/c7/Raytracing_Part.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_Part/it" title="Raytracing Part/it">Esporta un oggetto</a>: esporta l'oggetto selezionato, la Parte, in un file PovRay.</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Flusso_di_lavoro_tipico">Flusso di lavoro tipico</span></h3>
|
||
<ol><li> Creare o aprire un progetto di FreeCAD, aggiungere alcuni oggetti basati sul modulo <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Part</a> (i mesh non sono ancora supportati)</li>
|
||
<li> Creare un progetto Raytracing (luxrender o povray)</li>
|
||
<li> Selezionare gli oggetti che si desidera aggiungere al progetto raytracing e aggiungerli con lo strumento "Inserisci Parte"</li>
|
||
<li> Esportare o elaborare direttamente</li></ol>
|
||
<h3><span class="mw-headline" id="Creare_manualmente_un_file_povray">Creare manualmente un file povray</span></h3>
|
||
<p>Gli strumenti di utilità descritti prima consentono di esportare la corrente vista 3D e tutto il suo contenuto in un file <a rel="nofollow" class="external text" href="http://www.povray.org/">Povray</a>. In primo luogo, è necessario caricare un documento o crearne uno e poi orientare la vista 3D come si desidera. Dopo, scegliere <b>Esporta la vista ...</b> nel menu di Raytracing.
|
||
</p>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:FreeCAD_Raytracing.jpg" class="image"><img alt="FreeCAD Raytracing.jpg" src="FreeCAD_Raytracing.jpg" width="964" height="730" /></a></div></div>
|
||
<p>Nella finestra di dialogo <b>Esporta pagina</b>, selezionare la destinazione per salvare il file *.pov. Successivamente aprire il file in <a rel="nofollow" class="external text" href="http://www.povray.org/">Povray</a> e generare la renderizzazione:
|
||
</p>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Povray.jpg" class="image"><img alt="Povray.jpg" src="Povray.jpg" width="805" height="825" /></a></div></div>
|
||
<p>Come è noto, le applicazioni di renderizzazione possono produrre immagini di grandi dimensioni e ottima qualità:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Scharniergreifer_render.jpg" class="image"><img alt="Scharniergreifer render.jpg" src="1024px-Scharniergreifer_render.jpg" width="1024" height="819" srcset="/wiki/images/2/2e/Scharniergreifer_render.jpg 1.5x" /></a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Script_5">Script</span></h3>
|
||
<h4><span class="mw-headline" id="Output_dei_file_di_rendering">Output dei file di rendering</span></h4>
|
||
<p>I moduli Raytracing e RaytracingGui forniscono diversi metodi per scrivere i contenuti della scena come dati povray o luxrender. I più utili sono Raytracing.getPartAsPovray() e Raytracing.getPartAsLux() per il rendering di un oggetto Part di FreeCAD in una definizione povray o luxrender, e RaytracingGui.povViewCamera() e RaytracinGui.luxViewCamera() per ottenere il corrente punto di vista della finestra 3D di FreeCAD in formato luxrender o povray.
|
||
</p><p>Ecco come utilizzare le funzionalità tramite Python, supponendo che il documento contenga un oggetto "Box":
|
||
</p>
|
||
<pre>import Raytracing,RaytracingGui
|
||
OutFile = open('C:/Documents and Settings/jriegel/Desktop/test.pov','w')
|
||
OutFile.write(open(App.getResourceDir()+'Mod/Raytracing/Templates/ProjectStd.pov').read())
|
||
OutFile.write(RaytracingGui.povViewCamera())
|
||
OutFile.write(Raytracing.getPartAsPovray('Box',App.activeDocument().Box.Shape,0.800000,0.800000,0.800000))
|
||
OutFile.close()
|
||
del OutFile </pre>
|
||
<p>E la stessa cosa per luxrender:
|
||
</p>
|
||
<pre>import Raytracing,RaytracingGui
|
||
OutFile = open('C:/Documents and Settings/jriegel/Desktop/test.lxs','w')
|
||
OutFile.write(open(App.getResourceDir()+'Mod/Raytracing/Templates/LuxClassic.lxs').read())
|
||
OutFile.write(RaytracingGui.luxViewCamera())
|
||
OutFile.write(Raytracing.getPartAsLux('Box',App.activeDocument().Box.Shape,0.800000,0.800000,0.800000))
|
||
OutFile.close()
|
||
del OutFile </pre>
|
||
<h4><span class="mw-headline" id="Creare_un_oggetto_rendering_personalizzato">Creare un oggetto rendering personalizzato</span></h4>
|
||
<p>Oltre agli oggetti viste standard di Povray e di luxrender che offrono una visione di un oggetto Part esistente, e che possono essere inseriti rispettivamente in progetti Povray e luxrender, esiste un terzo oggetto, chiamato RaySegment, che può essere inserito sia in progetti Povray che luxrender. Questo oggetto RaySegment non è legato a nessuno degli oggetti di FreeCAD, e può contenere del codice povray o luxrender personalizzato che è possibile inserire in un progetto raytracing. È inoltre possibile utilizzarlo, ad esempio, per produrre il proprio oggetto FreeCAD in un modo particolare, se il modo standard non soddisfa. È possibile crearlo e utilizzarlo dalla console python in questo modo:
|
||
</p>
|
||
<pre>myRaytracingProject = FreeCAD.ActiveDocument.PovProject
|
||
myCustomRenderObject = FreeCAD.ActiveDocument.addObject("Raytracing::RaySegment","myRenderObject")
|
||
myRaytracingProject.addObject(myCustomRenderObject)
|
||
myCustomRenderObject.Result = "// Hello from python!" </pre>
|
||
<h3><span class="mw-headline" id="Link_2">Link</span></h3>
|
||
<h4><span class="mw-headline" id="POVRay">POVRay</span></h4>
|
||
<ul><li> <a rel="nofollow" class="external free" href="http://www.spiritone.com/~english/cyclopedia/">http://www.spiritone.com/~english/cyclopedia/</a></li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.povray.org/">http://www.povray.org/</a></li>
|
||
<li> <a rel="nofollow" class="external free" href="http://en.wikipedia.org/wiki/POV-Ray">http://en.wikipedia.org/wiki/POV-Ray</a></li></ul>
|
||
<h4><span class="mw-headline" id="Luxrender">Luxrender</span></h4>
|
||
<ul><li> <a rel="nofollow" class="external free" href="http://www.luxrender.net/">http://www.luxrender.net/</a></li></ul>
|
||
<h4><span class="mw-headline" id="Render_per_future_implementazioni">Render per future implementazioni</span></h4>
|
||
<ul><li> <a rel="nofollow" class="external free" href="http://www.yafaray.org/">http://www.yafaray.org/</a></li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.mitsuba-renderer.org/">http://www.mitsuba-renderer.org/</a></li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.kerkythea.net/">http://www.kerkythea.net/</a></li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.artofillusion.org/">http://www.artofillusion.org/</a></li></ul>
|
||
<p>Attualmente vi è un nuovo Ambiente Renderer in fase di sviluppo per supportare diversi back-end, come Lux Renderer e YafaRay. Le informazioni per l'utilizzo della versione di sviluppo possono essere visionate nel <a href="https://www.freecadweb.org/wiki/index.php?title=Render_project/it" title="Render project/it">progetto Render</a>.
|
||
</p><p>Per conoscere lo stato di sviluppo del Modulo Render consultare il <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_project/it" title="Raytracing project/it"> progetto Raytracing</a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Modelli">Modelli</span></h3>
|
||
<p>FreeCAD viene fornito con un paio di modelli predefiniti per Povray e LuxRender, ma si può facilmente crearne uno proprio. Basta creare un file di scena per un dato renderer, quindi modificarlo manualmente con un editor di testo per inserire i tag speciali che FreeCAD riconosce e dove inserisce il suo contenuto (i dati della fotocamera e degli oggetti).
|
||
</p>
|
||
<h4><span class="mw-headline" id="Povray_2">Povray</span></h4>
|
||
<p>I file di scena Povray (con estensione .pov) possono essere creati manualmente con un editor di testo (povray è fatto principalmente per essere utilizzato come un linguaggio di scripting), ma anche con una vasta gamma di applicazioni 3D, come ad esempio <a rel="nofollow" class="external text" href="http://www.blender.org">blender</a>. Nel <a rel="nofollow" class="external text" href="http://www.povray.org/">sito web di povray</a> è possibile trovare ulteriori informazioni e un elenco di applicazioni in grado di produrre file .pov.
|
||
</p><p>Quando si dispone di un file .pov pronto, è necessario aprirlo con un editor di testo e eseguire due operazioni:
|
||
</p>
|
||
<ol><li> Eliminare le informazioni della fotocamera, perché FreeCAD collocherà i propri dati della fotocamera. Per fare ciò, individuare un blocco di testo come questo: <tt>camera { ... }</tt>, che descrive i parametri della camera, e sopprimerlo (o inserire "//" davanti a ogni riga per commentarla).</li>
|
||
<li> Inserire da qualche parte la seguente riga: <tt>//RaytracingContent</tt>. Questo è il posto dove FreeCAD inserisce il suo contenuto (dati della fotocamera e degli oggetti). È possibile, ad esempio, aggiungere questa riga alla fine del file.</li></ol>
|
||
<p>Notare che FreeCAD aggiunge, dopo il tag <tt>//RaytracingContent</tt>, anche alcune dichiarazioni che è possibile utilizzare nel modello. Queste sono:
|
||
</p>
|
||
<ul><li> cam_location: la posizione della camera</li>
|
||
<li> cam_look_at: la posizione del punto della camera target</li>
|
||
<li> cam_sky: il vettore superiore della camera</li>
|
||
<li> cam_angle: l'angolo della camera</li></ul>
|
||
<p>Ad esempio, per posizionare una lampada sopra la fotocamera, è possibile utilizzare:
|
||
</p>
|
||
<pre>light_source {
|
||
cam_location + cam_angle * 100
|
||
color rgb <10, 10, 10>
|
||
} </pre>
|
||
<h4><span class="mw-headline" id="Luxrender_2">Luxrender</span></h4>
|
||
<p>I file di una scena LuxRender (con estensione .lxs) possono essere dei singoli file o un file master .lxs che include i file per la definizione dell'insieme (.lxw), la definizione del materiale (.lxm) e la definizione della geometria (.lxo). È possibile lavorare con entrambi gli stili, ma è anche facile trasformare un gruppo di 4 file in un singolo file .lxs, copiando il contenuto di ogni file .lxw, .lxm e .lxo e incollandolo nel punto in cui quel file è inserito nel file master .lxs.
|
||
</p><p>I file di scena LuxRender sono difficili da produrre a mano, ma sono facili da produrre con molte applicazioni 3D, come <a rel="nofollow" class="external text" href="http://www.blender.org">blender</a>. Nel <a rel="nofollow" class="external text" href="http://www.luxrender.net">sito LuxRender</a>, troverete maggiori informazioni e i plugin per le principali applicazioni 3D.
|
||
</p><p>Se si lavora con i file .lxw, .lxm e .lxo separati, fare attenzione perchè i file .lxs finali esportati da FreeCAD possono essere in una posizione diversa rispetto al file del modello, e quindi non possono essere trovati da LuxRender in fase di rendering. In questo caso si deve copiare questi file nella posizione del file finale, o modificare i loro percorsi nel file .lxs esportato.
|
||
</p><p>Se si esporta un file di scena da blender, e si vuole unire tutto in un unico file, è necessario eseguire un passaggio prima dell'esportazione: per impostazione predefinita, l'esportatore per LuxRender di blender esporta tutta la geometria delle mesh in file .ply separati, invece di inserire la geometria mesh direttamente all'interno del file .lxo. Per modificare questo comportamento, è necessario selezionare ciascuna delle mesh in blender, passare alla scheda "mesh" e impostare per ognuna l'opzione "Esporta come" "LuxRender mesh".
|
||
</p><p>Quando il file di scena è pronto, per trasformarlo in un modello di FreeCAD, è necessario eseguire le seguenti operazioni:
|
||
</p>
|
||
<ol><li> Individuare la posizione della telecamera, una sola riga che inizia con <tt>LookAt</tt>, e cancellarla o commentarla con "#" posto all'inizio della riga</li>
|
||
<li> Nello stesso posto, inserire la seguente riga: <tt>#RaytracingCamera</tt></li>
|
||
<li> Nel punto desiderato, ad esempio subito dopo la fine della definizione del materiale, prima delle informazioni sulla geometria, o alla fine, poco prima della riga finale <tt>WorldEnd</tt>, inserire la seguente riga: <tt>#RaytracingContent</tt>. Dove FreeCAD inserirà i propri oggetti.</li></ol>
|
||
<p>Notare che in LuxRender, gli oggetti memorizzati in un file di scena possono definire matrici di trasformazione, che eseguono operazioni di posizionamento, rotazione o ridimensionamento. Queste matrici possono influenzare tutto quello che viene dopo di loro, quindi, ponendo il tag <tt>#RaytracingContent</tt> alla fine del file, è possibile vedere gli oggetti di FreeCAD colpiti da una matrice di trasformazione collocata all'interno del modello. Per assicurarsi che questo non accada, inserire il tag <tt>#RaytracingContent</tt> prima di qualsiasi altro oggetto di geometria presente nel modello. FreeCAD non definisce nessuna di queste matrici di trasformazione.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Esportare_in_Kerkythea">Esportare in Kerkythea</span></h2>
|
||
<p>Sebbene l'esportazione diretta nel formato XML di Kerkythea non sia ancora supportata, è possibile esportare gli oggetti come file Mesh (.obj) e poi importarli in Kerkythea.
|
||
</p>
|
||
<ul><li> se si utilizza Kerkythea per Linux, ricordarsi di installare il pacchetto WINE (necessario per far funzionare Kerkythea in Linux)</li>
|
||
<li> è possibile convertire i modelli in mesh con l'aiuto dell'ambiente Mesh e poi esportare questi mesh, come file .obj</li>
|
||
<li> If your mesh-export resulted in errors (flip of normals, holes ...) you may try your luck with <a rel="nofollow" class="external text" href="http://www.netfabb.com/downloadcenter.php?basic=1">netfabb studio basic</a></li></ul>
|
||
<dl><dd>Free for personal use, available for Windows, Linux and Mac OSX.</dd>
|
||
<dd>It has standard repair tools which will repair you model in most cases.</dd></dl>
|
||
<ul><li> another good program for mesh analysing/repairing is <a rel="nofollow" class="external text" href="http://sourceforge.net/projects/meshlab/">Meshlab</a></li></ul>
|
||
<dl><dd>Open Source, available for Windows, Linux and Mac OSX.</dd>
|
||
<dd>It has standard repair tools which will repair you model in most cases (fill holes, re-orient normals, etc.)</dd></dl>
|
||
<ul><li> è possibile utilizzare "make compound" e poi "make single copy" oppure è possibile fondere i solidi in un gruppo prima di convertirli in mesh</li>
|
||
<li> ricordatevi di impostare in Kerkythea un fattore di importazione di 0.001 per obj-modeler, in quanto Kerkythea si aspetta che il file obj sia in m (ma l'unità standard in FreeCAD è il mm)</li></ul>
|
||
<dl><dd>Within WIndows 7 64-bit Kerkythea does not seem to be able to save these settings.</dd>
|
||
<dd>So remember to do that each time you start Kerkythea</dd></dl>
|
||
<ul><li> se si importano più oggetti in Kerkythea è possibile utilizzare la funzione "File> Unisci" di Kerkythea</li></ul>
|
||
<h2><span class="mw-headline" id="Links">Links</span></h2>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Render_project/it" title="Render project/it">Progetto Render</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Raytracing_tutorial/it" title="Raytracing tutorial/it">Tutorial di Raytracing</a></li></ul>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p>Il modulo <b>Immagine</b> gestisce diversi tipi di <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Raster_graphics">immagini bitmap</a>, e permette di aprirle in FreeCAD.<br /> Attualmente, il modulo consente di aprire file di formato .bmp, .jpg, .png e .xpm in una finestra di visualizzazione separata.
|
||
</p><p>Il modulo <b>Immagine</b> consente inoltre di aprire una immagine su un piano nello spazio 3D di FreeCAD. Questa funzione è disponibile tramite il secondo pulsante dell'ambiente immagine. <a href="https://www.freecadweb.org/wiki/index.php?title=File:Image_Import.png" class="image"><img alt="Image Import.png" src="32px-Image_Import.png" width="32" height="32" srcset="/wiki/images/thumb/b/b5/Image_Import.png/48px-Image_Import.png 1.5x, /wiki/images/b/b5/Image_Import.png 2x" /></a>
|
||
<br />
|
||
L'immagine importata può essere unita come schizzo a uno dei tre piani principali (XY/XZ/YZ) con offset positivo o negativo.
|
||
<br />
|
||
Questa funzione è disponibile solo se è stato aperto un documento di FreeCAD.
|
||
</p><p>L'immagine può essere spostata nello spazio 3D modificando il suo posizionamento nell'editor delle <a href="https://www.freecadweb.org/wiki/index.php?title=Property_editor/it" title="Property editor/it">Proprietà</a>.
|
||
<br />
|
||
Principalmente serve per costruire il tracciato di una nuova parte usando l'immagine come modello.
|
||
</p><p>L'immagine viene importata con 1 pixel = 1mm.
|
||
Pertanto si raccomanda di importare una immagine che abbia una risoluzione ragionevole.
|
||
L'immagine può essere scalata modificando i valori "XSize" e "YSize" nella scheda delle <a href="https://www.freecadweb.org/wiki/index.php?title=Property_editor/it" title="Property editor/it">Proprietà</a>.
|
||
L'immagine può essere spostata anche modificando i valori di Y/Z/X nella scheda Placement.
|
||
L'immagine può essere ruotata attorno ad un asse utilizzando il dialogo di posizionamento.
|
||
</p><p><b>Suggerimento:</b><br />
|
||
La tracciatura di elementi di sketch su un'immagine funziona meglio se l'immagine ha un piccolo offset negativo rispetto al piano dello schizzo, ovvero se l'immagine è posizionata leggermente dietro al piano dello schizzo .<br />
|
||
È possibile impostare un offset di -0,1 mm in fase di importazione oppure successivamente, modificando la posizione dell'immagine.
|
||
</p><p><b>Strumenti</b>
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Image_Import.png" class="image"><img alt="Image Import.png" src="32px-Image_Import.png" width="32" height="32" srcset="/wiki/images/thumb/b/b5/Image_Import.png/48px-Image_Import.png 1.5x, /wiki/images/b/b5/Image_Import.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Image_Import/it" title="Image Import/it">Importa immagine</a>
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p><p>L'ambiente Draft permette di disegnare in modo rapido e semplice degli oggetti 2D nel documento corrente, e offre diversi strumenti per manipolarli.
|
||
</p><p>Alcuni di questi strumenti funzionano su tutti gli oggetti di FreeCAD, non solo su quelli creati con l'ambiente Draft.
|
||
</p><p>Fornisce inoltre un sistema completo di ancoraggio, e diverse utility per gestire gli oggetti e le impostazioni.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Strumenti_per_disegnare_oggetti">Strumenti per disegnare oggetti</span></h4>
|
||
<p>Questi sono gli strumenti per creare gli oggetti
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Line.png" class="image"><img alt="Draft Line.png" src="32px-Draft_Line.png" width="32" height="32" srcset="/wiki/images/thumb/a/a8/Draft_Line.png/48px-Draft_Line.png 1.5x, /wiki/images/a/a8/Draft_Line.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Line/it" title="Draft Line/it">Linea</a>: Disegna un segmento delimitato da due punti.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Wire.png" class="image"><img alt="Draft Wire.png" src="32px-Draft_Wire.png" width="32" height="32" srcset="/wiki/images/thumb/0/00/Draft_Wire.png/48px-Draft_Wire.png 1.5x, /wiki/images/0/00/Draft_Wire.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Wire/it" title="Draft Wire/it">DWire</a>: Disegna una spezzata o polilinea specificando tutti i punti intermedi.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Circle.png" class="image"><img alt="Draft Circle.png" src="32px-Draft_Circle.png" width="32" height="32" srcset="/wiki/images/thumb/1/10/Draft_Circle.png/48px-Draft_Circle.png 1.5x, /wiki/images/1/10/Draft_Circle.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Circle/it" title="Draft Circle/it">Cerchio</a>: Disegna una circonferenza prendendo in input il centro e il raggio.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Arc.png" class="image"><img alt="Draft Arc.png" src="32px-Draft_Arc.png" width="32" height="32" srcset="/wiki/images/thumb/a/a8/Draft_Arc.png/48px-Draft_Arc.png 1.5x, /wiki/images/a/a8/Draft_Arc.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Arc/it" title="Draft Arc/it">Arco</a>: Disegna un arco di circonferenza a partire dal centro e specificando il raggio, l'angolo iniziale e l'angolo finale.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Ellipse.png" class="image"><img alt="Draft Ellipse.png" src="32px-Draft_Ellipse.png" width="32" height="32" srcset="/wiki/images/thumb/1/13/Draft_Ellipse.png/48px-Draft_Ellipse.png 1.5x, /wiki/images/1/13/Draft_Ellipse.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Ellipse/it" title="Draft Ellipse/it">Ellisse</a>: Disegna una ellisse.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Polygon.png" class="image"><img alt="Draft Polygon.png" src="32px-Draft_Polygon.png" width="32" height="32" srcset="/wiki/images/thumb/8/8e/Draft_Polygon.png/48px-Draft_Polygon.png 1.5x, /wiki/images/8/8e/Draft_Polygon.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Polygon/it" title="Draft Polygon/it">Poligono</a>: Disegna un poligono regolare a partire da centro e raggio.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Rectangle.png" class="image"><img alt="Draft Rectangle.png" src="32px-Draft_Rectangle.png" width="32" height="32" srcset="/wiki/images/thumb/1/14/Draft_Rectangle.png/48px-Draft_Rectangle.png 1.5x, /wiki/images/1/14/Draft_Rectangle.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Rectangle/it" title="Draft Rectangle/it">Rettangolo</a>: Disegna un rettangolo specificando gli angoli opposti.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Text.png" class="image"><img alt="Draft Text.png" src="32px-Draft_Text.png" width="32" height="32" srcset="/wiki/images/thumb/9/9f/Draft_Text.png/48px-Draft_Text.png 1.5x, /wiki/images/9/9f/Draft_Text.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Text/it" title="Draft Text/it">Testo</a>: Disegna delle annotazioni multilinea.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Dimension.png" class="image"><img alt="Draft Dimension.png" src="32px-Draft_Dimension.png" width="32" height="32" srcset="/wiki/images/thumb/b/b0/Draft_Dimension.png/48px-Draft_Dimension.png 1.5x, /wiki/images/b/b0/Draft_Dimension.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Dimension/it" title="Draft Dimension/it">Quota</a>: Aggiunge la quotatura.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_BSpline.png" class="image"><img alt="Draft BSpline.png" src="32px-Draft_BSpline.png" width="32" height="32" srcset="/wiki/images/thumb/a/af/Draft_BSpline.png/48px-Draft_BSpline.png 1.5x, /wiki/images/a/af/Draft_BSpline.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_BSpline/it" title="Draft BSpline/it">B-Spline</a>: Interpola una traiettoria curvilinea passante per i punti specificati.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Point.png" class="image"><img alt="Draft Point.png" src="32px-Draft_Point.png" width="32" height="32" srcset="/wiki/images/thumb/c/c5/Draft_Point.png/48px-Draft_Point.png 1.5x, /wiki/images/c/c5/Draft_Point.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Point/it" title="Draft Point/it">Punto</a>: Inserisce un oggetto punto.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ShapeString.png" class="image"><img alt="Draft ShapeString.png" src="32px-Draft_ShapeString.png" width="32" height="32" srcset="/wiki/images/thumb/f/f7/Draft_ShapeString.png/48px-Draft_ShapeString.png 1.5x, /wiki/images/f/f7/Draft_ShapeString.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ShapeString/it" title="Draft ShapeString/it">ShapeString</a>: inserisce una forma composta da una stringa di testo.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Facebinder.png" class="image"><img alt="Draft Facebinder.png" src="32px-Draft_Facebinder.png" width="32" height="32" srcset="/wiki/images/thumb/9/93/Draft_Facebinder.png/48px-Draft_Facebinder.png 1.5x, /wiki/images/9/93/Draft_Facebinder.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Facebinder/it" title="Draft Facebinder/it">Facebinder</a>: crea un nuovo oggetto costituito dalle facce selezionate in una forma.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_BezCurve.png" class="image"><img alt="Draft BezCurve.png" src="32px-Draft_BezCurve.png" width="32" height="32" srcset="/wiki/images/thumb/3/34/Draft_BezCurve.png/48px-Draft_BezCurve.png 1.5x, /wiki/images/3/34/Draft_BezCurve.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_BezCurve/it" title="Draft BezCurve/it">Curva di Bezier</a>: Disegna curve di Bezier su una serie di punti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Label.png" class="image"><img alt="Draft Label.png" src="32px-Draft_Label.png" width="32" height="32" srcset="/wiki/images/thumb/8/82/Draft_Label.png/48px-Draft_Label.png 1.5x, /wiki/images/8/82/Draft_Label.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Label/it" title="Draft Label/it">Etichetta</a>: Posiziona un'etichetta con una freccia che punta a un elemento selezionato <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<h4><span class="mw-headline" id="Strumenti_per_modificare_gli_oggetti">Strumenti per modificare gli oggetti</span></h4>
|
||
<p>Si tratta degli strumenti per la modifica di oggetti esistenti. Lavorano su oggetti selezionati precedentemente, quando nessun oggetto è selezionato, si viene invitati a scegliere uno.
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Move.png" class="image"><img alt="Draft Move.png" src="32px-Draft_Move.png" width="32" height="32" srcset="/wiki/images/thumb/c/c5/Draft_Move.png/48px-Draft_Move.png 1.5x, /wiki/images/c/c5/Draft_Move.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Move/it" title="Draft Move/it">Sposta</a>: Sposta un o più oggetti da una posizione a un'altra</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Rotate.png" class="image"><img alt="Draft Rotate.png" src="32px-Draft_Rotate.png" width="32" height="32" srcset="/wiki/images/thumb/5/5a/Draft_Rotate.png/48px-Draft_Rotate.png 1.5x, /wiki/images/5/5a/Draft_Rotate.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Rotate/it" title="Draft Rotate/it">Ruota</a>: Ruota uno o più oggetti da un angolo di partenza a un angolo finale</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Offset.png" class="image"><img alt="Draft Offset.png" src="32px-Draft_Offset.png" width="32" height="32" srcset="/wiki/images/thumb/e/eb/Draft_Offset.png/48px-Draft_Offset.png 1.5x, /wiki/images/e/eb/Draft_Offset.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Offset/it" title="Draft Offset/it">Scosta</a>: Duplica e scosta in modo equidistante i componenti di un oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Trimex.png" class="image"><img alt="Draft Trimex.png" src="32px-Draft_Trimex.png" width="32" height="32" srcset="/wiki/images/thumb/e/e7/Draft_Trimex.png/48px-Draft_Trimex.png 1.5x, /wiki/images/e/e7/Draft_Trimex.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Trimex/it" title="Draft Trimex/it">Taglia/Estendi</a>: Accorcia o estende (estrude) l'oggetto selezionato</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Upgrade.png" class="image"><img alt="Draft Upgrade.png" src="32px-Draft_Upgrade.png" width="32" height="32" srcset="/wiki/images/thumb/b/be/Draft_Upgrade.png/48px-Draft_Upgrade.png 1.5x, /wiki/images/b/be/Draft_Upgrade.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Upgrade/it" title="Draft Upgrade/it">Assembla</a>: Unisce gli oggetti in un oggetto di livello superiore</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Downgrade.png" class="image"><img alt="Draft Downgrade.png" src="32px-Draft_Downgrade.png" width="32" height="32" srcset="/wiki/images/thumb/8/86/Draft_Downgrade.png/48px-Draft_Downgrade.png 1.5x, /wiki/images/8/86/Draft_Downgrade.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Downgrade/it" title="Draft Downgrade/it">Scomponi</a>: Scompone gli oggetti in oggetti di livello inferiore</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Scale.png" class="image"><img alt="Draft Scale.png" src="32px-Draft_Scale.png" width="32" height="32" srcset="/wiki/images/thumb/c/c9/Draft_Scale.png/48px-Draft_Scale.png 1.5x, /wiki/images/c/c9/Draft_Scale.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Scale/it" title="Draft Scale/it">Scala</a>: Scala gli oggetti in relazione a un punto base</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_PutOnSheet.png" class="image"><img alt="Draft PutOnSheet.png" src="32px-Draft_PutOnSheet.png" width="32" height="32" srcset="/wiki/images/thumb/9/91/Draft_PutOnSheet.png/48px-Draft_PutOnSheet.png 1.5x, /wiki/images/9/91/Draft_PutOnSheet.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Drawing/it" title="Draft Drawing/it">Disegno</a>: Traspone gli oggetti in un <a href="https://www.freecadweb.org/wiki/index.php?title=Drawing_Module/it" title="Drawing Module/it">Foglio di disegno</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Edit.png" class="image"><img alt="Draft Edit.png" src="32px-Draft_Edit.png" width="32" height="32" srcset="/wiki/images/thumb/5/51/Draft_Edit.png/48px-Draft_Edit.png 1.5x, /wiki/images/5/51/Draft_Edit.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Edit/it" title="Draft Edit/it">Modifica</a>: Consente di modificare un oggetto</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_WireToBSpline.png" class="image"><img alt="Draft WireToBSpline.png" src="32px-Draft_WireToBSpline.png" width="32" height="32" srcset="/wiki/images/thumb/a/a4/Draft_WireToBSpline.png/48px-Draft_WireToBSpline.png 1.5x, /wiki/images/a/a4/Draft_WireToBSpline.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_WireToBSpline/it" title="Draft WireToBSpline/it">Da Wire a BSpline</a>: Converte i segmenti di una linea spezzata (Wire) in curve di una linea BSpline e viceversa</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_AddPoint.png" class="image"><img alt="Draft AddPoint.png" src="32px-Draft_AddPoint.png" width="32" height="32" srcset="/wiki/images/thumb/9/9e/Draft_AddPoint.png/48px-Draft_AddPoint.png 1.5x, /wiki/images/9/9e/Draft_AddPoint.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_AddPoint/it" title="Draft AddPoint/it">Aggiungi punto</a>: Aggiunge un punto a una linea spezzata o a una BSpline</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_DelPoint.png" class="image"><img alt="Draft DelPoint.png" src="32px-Draft_DelPoint.png" width="32" height="32" srcset="/wiki/images/thumb/1/18/Draft_DelPoint.png/48px-Draft_DelPoint.png 1.5x, /wiki/images/1/18/Draft_DelPoint.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_DelPoint/it" title="Draft DelPoint/it">Elimina punto</a>: Elimina un punto da una spezzata o da una BSpline</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Shape2DView.png" class="image"><img alt="Draft Shape2DView.png" src="32px-Draft_Shape2DView.png" width="32" height="32" srcset="/wiki/images/thumb/9/9f/Draft_Shape2DView.png/48px-Draft_Shape2DView.png 1.5x, /wiki/images/9/9f/Draft_Shape2DView.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Shape2DView/it" title="Draft Shape2DView/it">Vista 2D</a>: Crea un oggetto 2D quale proiezione di un oggetto 3D</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Draft2Sketch.png" class="image"><img alt="Draft Draft2Sketch.png" src="32px-Draft_Draft2Sketch.png" width="32" height="32" srcset="/wiki/images/thumb/b/b2/Draft_Draft2Sketch.png/48px-Draft_Draft2Sketch.png 1.5x, /wiki/images/b/b2/Draft_Draft2Sketch.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Draft2Sketch/it" title="Draft Draft2Sketch/it">Da Draft a Schizzo</a>: Converte un oggetto di Draft in un oggetto di Schizzo e viceversa</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Array.png" class="image"><img alt="Draft Array.png" src="32px-Draft_Array.png" width="32" height="32" srcset="/wiki/images/thumb/c/c8/Draft_Array.png/48px-Draft_Array.png 1.5x, /wiki/images/c/c8/Draft_Array.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Array/it" title="Draft Array/it">Schiera</a>: Duplica e crea una schiera a matrice polare o rettangolare degli oggetti selezionati</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_PathArray.png" class="image"><img alt="Draft PathArray.png" src="32px-Draft_PathArray.png" width="32" height="32" srcset="/wiki/images/thumb/c/c1/Draft_PathArray.png/48px-Draft_PathArray.png 1.5x, /wiki/images/c/c1/Draft_PathArray.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_PathArray/it" title="Draft PathArray/it">Path Array</a>: Crea delle copie dell'oggetto selezionato distribuite su un percorso</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Clone.png" class="image"><img alt="Draft Clone.png" src="32px-Draft_Clone.png" width="32" height="32" srcset="/wiki/images/thumb/3/39/Draft_Clone.png/48px-Draft_Clone.png 1.5x, /wiki/images/3/39/Draft_Clone.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Clone/it" title="Draft Clone/it">Clona</a>: Clona gli oggetti selezionati</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Mirror.png" class="image"><img alt="Draft Mirror.png" src="32px-Draft_Mirror.png" width="32" height="32" srcset="/wiki/images/thumb/3/3f/Draft_Mirror.png/48px-Draft_Mirror.png 1.5x, /wiki/images/3/3f/Draft_Mirror.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Mirror/it" title="Draft Mirror/it">Simmetria</a>: Riflette gli oggetti selezionati</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Stretch.png" class="image"><img alt="Draft Stretch.png" src="32px-Draft_Stretch.png" width="32" height="32" srcset="/wiki/images/thumb/7/7b/Draft_Stretch.png/48px-Draft_Stretch.png 1.5x, /wiki/images/7/7b/Draft_Stretch.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Stretch/it" title="Draft Stretch/it">Stira</a>: Stira gli oggetti selezionati <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<h3><span class="mw-headline" id="Strumenti_di_utilit.C3.A0">Strumenti di utilità</span></h3>
|
||
<p>Ulteriori strumenti disponibili tramite il menu contestuale del tasto destro, a seconda degli oggetti selezionati.
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_SelectPlane.png" class="image"><img alt="Draft SelectPlane.png" src="32px-Draft_SelectPlane.png" width="32" height="32" srcset="/wiki/images/thumb/a/aa/Draft_SelectPlane.png/48px-Draft_SelectPlane.png 1.5x, /wiki/images/a/aa/Draft_SelectPlane.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SelectPlane/it" title="Draft SelectPlane/it">Piano di lavoro</a>: Consente di impostare un piano di lavoro da una vista standard o da una faccia selezionata</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_FinishLine.png" class="image"><img alt="Draft FinishLine.png" src="32px-Draft_FinishLine.png" width="32" height="32" srcset="/wiki/images/thumb/c/c1/Draft_FinishLine.png/48px-Draft_FinishLine.png 1.5x, /wiki/images/c/c1/Draft_FinishLine.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_FinishLine/it" title="Draft FinishLine/it">Termina</a>: Termina il disegno della polilinea o della BSpline corrente senza chiuderla</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_CloseLine.png" class="image"><img alt="Draft CloseLine.png" src="32px-Draft_CloseLine.png" width="32" height="32" srcset="/wiki/images/thumb/d/dc/Draft_CloseLine.png/48px-Draft_CloseLine.png 1.5x, /wiki/images/d/dc/Draft_CloseLine.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_CloseLine/it" title="Draft CloseLine/it">Chiudi</a>: Termina il disegno della polilinea o della BSpline corrente chiudendola</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_UndoLine.png" class="image"><img alt="Draft UndoLine.png" src="32px-Draft_UndoLine.png" width="32" height="32" srcset="/wiki/images/thumb/d/dd/Draft_UndoLine.png/48px-Draft_UndoLine.png 1.5x, /wiki/images/d/dd/Draft_UndoLine.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_UndoLine/it" title="Draft UndoLine/it">Annulla</a>: Annulla l'ultimo segmento della linea</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleConstructionMode.png" class="image"><img alt="Draft ToggleConstructionMode.png" src="32px-Draft_ToggleConstructionMode.png" width="32" height="32" srcset="/wiki/images/thumb/7/76/Draft_ToggleConstructionMode.png/48px-Draft_ToggleConstructionMode.png 1.5x, /wiki/images/7/76/Draft_ToggleConstructionMode.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleConstructionMode/it" title="Draft ToggleConstructionMode/it">Modalità Costruzione</a>: Attiva o disattiva la modalità "Disegno di Costruzione"</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleContinueMode.png" class="image"><img alt="Draft ToggleContinueMode.png" src="Draft_ToggleContinueMode.png" width="32" height="32" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleContinueMode/it" title="Draft ToggleContinueMode/it">Modalità Continua</a>: Attiva o disattiva la modalità "Continua con lo stesso strumento"</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ApplyStyle.png" class="image"><img alt="Draft ApplyStyle.png" src="32px-Draft_ApplyStyle.png" width="32" height="32" srcset="/wiki/images/thumb/1/16/Draft_ApplyStyle.png/48px-Draft_ApplyStyle.png 1.5x, /wiki/images/1/16/Draft_ApplyStyle.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Apply/it" title="Draft Apply/it">Applica stile</a>: Applica lo stile e il colore attuale agli oggetti selezionati</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleDisplayMode.png" class="image"><img alt="Draft ToggleDisplayMode.png" src="32px-Draft_ToggleDisplayMode.png" width="32" height="32" srcset="/wiki/images/thumb/0/00/Draft_ToggleDisplayMode.png/48px-Draft_ToggleDisplayMode.png 1.5x, /wiki/images/0/00/Draft_ToggleDisplayMode.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleDisplayMode/it" title="Draft ToggleDisplayMode/it">Visualizzazione</a>: Commuta la modalità di visualizzazione degli oggetti selezionati da "flat lines" a "wireframe" (da facce a linee)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_AddToGroup.png" class="image"><img alt="Draft AddToGroup.png" src="32px-Draft_AddToGroup.png" width="32" height="32" srcset="/wiki/images/thumb/5/56/Draft_AddToGroup.png/48px-Draft_AddToGroup.png 1.5x, /wiki/images/5/56/Draft_AddToGroup.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_AddToGroup/it" title="Draft AddToGroup/it">Aggiungi al gruppo</a>: Aggiunge rapidamente gli oggetti selezionati a un gruppo esistente</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_SelectGroup.png" class="image"><img alt="Draft SelectGroup.png" src="32px-Draft_SelectGroup.png" width="32" height="32" srcset="/wiki/images/thumb/d/d9/Draft_SelectGroup.png/48px-Draft_SelectGroup.png 1.5x, /wiki/images/d/d9/Draft_SelectGroup.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SelectGroup/it" title="Draft SelectGroup/it">Seleziona il contenuto del gruppo</a>: Seleziona il contenuto di un gruppo selezionato</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleSnap.png" class="image"><img alt="Draft ToggleSnap.png" src="32px-Draft_ToggleSnap.png" width="32" height="32" srcset="/wiki/images/thumb/2/25/Draft_ToggleSnap.png/48px-Draft_ToggleSnap.png 1.5x, /wiki/images/2/25/Draft_ToggleSnap.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleSnap/it" title="Draft ToggleSnap/it">Aggancia</a>: Attiva o disattiva la funzione di <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Snap/it" title="Draft Snap/it">ancoraggio</a> (snap) agli oggetti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleGrid.png" class="image"><img alt="Draft ToggleGrid.png" src="32px-Draft_ToggleGrid.png" width="32" height="32" srcset="/wiki/images/thumb/f/fc/Draft_ToggleGrid.png/48px-Draft_ToggleGrid.png 1.5x, /wiki/images/f/fc/Draft_ToggleGrid.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleGrid/it" title="Draft ToggleGrid/it">Griglia</a>: Attiva o disattiva la griglia di Draft</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ShowSnapBar.png" class="image"><img alt="Draft ShowSnapBar.png" src="32px-Draft_ShowSnapBar.png" width="32" height="32" srcset="/wiki/images/thumb/c/c3/Draft_ShowSnapBar.png/48px-Draft_ShowSnapBar.png 1.5x, /wiki/images/c/c3/Draft_ShowSnapBar.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ShowSnapBar/it" title="Draft ShowSnapBar/it">Barra di snap</a>: Mostra o nasconde la barra degli strumenti di <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Snap/it" title="Draft Snap/it">ancoraggio</a> di Draft</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Heal.png" class="image"><img alt="Draft Heal.png" src="32px-Draft_Heal.png" width="32" height="32" srcset="/wiki/images/thumb/d/d9/Draft_Heal.png/48px-Draft_Heal.png 1.5x, /wiki/images/d/d9/Draft_Heal.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Heal/it" title="Draft Heal/it">Heal</a>: Risolve i problemi individuati negli oggetti di Draft in file molto vecchi</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_FlipDimension.png" class="image"><img alt="Draft FlipDimension.png" src="32px-Draft_FlipDimension.png" width="32" height="32" srcset="/wiki/images/thumb/f/fe/Draft_FlipDimension.png/48px-Draft_FlipDimension.png 1.5x, /wiki/images/f/fe/Draft_FlipDimension.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_FlipDimension/it" title="Draft FlipDimension/it">Flip Dimension</a>: Inverte l'orientamento del testo di una <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Dimension/it" title="Draft Dimension/it">dimensione</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_VisGroup.png" class="image"><img alt="Draft VisGroup.png" src="32px-Draft_VisGroup.png" width="32" height="32" srcset="/wiki/images/thumb/8/81/Draft_VisGroup.png/48px-Draft_VisGroup.png 1.5x, /wiki/images/8/81/Draft_VisGroup.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_VisGroup/it" title="Draft VisGroup/it">VisGruppo</a>: Crea nel documento corrente un gruppo di elementi con le stesse proprietà Vista</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_Slope.png" class="image"><img alt="Draft Slope.png" src="32px-Draft_Slope.png" width="32" height="32" srcset="/wiki/images/thumb/5/5c/Draft_Slope.png/48px-Draft_Slope.png 1.5x, /wiki/images/5/5c/Draft_Slope.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Slope/it" title="Draft Slope/it">Pendenza</a>: Cambia l'inclinazione di linee o polilinee selezionate <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_AutoGroup.png" class="image"><img alt="Draft AutoGroup.png" src="32px-Draft_AutoGroup.png" width="32" height="32" srcset="/wiki/images/thumb/8/8c/Draft_AutoGroup.png/48px-Draft_AutoGroup.png 1.5x, /wiki/images/8/8c/Draft_AutoGroup.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_AutoGroup/it" title="Draft AutoGroup/it">AutoGruppo</a>: Posiziona automaticamente i nuovi oggetti in un determinato gruppo <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_SetWorkingPlaneProxy.png" class="image"><img alt="Draft SetWorkingPlaneProxy.png" src="32px-Draft_SetWorkingPlaneProxy.png" width="32" height="32" srcset="/wiki/images/thumb/0/03/Draft_SetWorkingPlaneProxy.png/48px-Draft_SetWorkingPlaneProxy.png 1.5x, /wiki/images/0/03/Draft_SetWorkingPlaneProxy.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SetWorkingPlaneProxy/it" title="Draft SetWorkingPlaneProxy/it">Piano Proxy</a>: Aggiunge un oggetto proxy nel documento per memorizzare la posizione di un <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SelectPlane/it" title="Draft SelectPlane/it">Piano di lavoro</a> <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Draft_ToggleConstructionMode.png" class="image"><img alt="Draft ToggleConstructionMode.png" src="32px-Draft_ToggleConstructionMode.png" width="32" height="32" srcset="/wiki/images/thumb/7/76/Draft_ToggleConstructionMode.png/48px-Draft_ToggleConstructionMode.png 1.5x, /wiki/images/7/76/Draft_ToggleConstructionMode.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_AddConstruction/it" title="Draft AddConstruction/it">Aggiungi al gruppo Costruzione</a>: Aggiunge l'oggetto selezionato al gruppo Costruzione <span style="font-size:x-small;"><a href="https://www.freecadweb.org/wiki/index.php?title=Release_notes_0.17/it" title="Release notes 0.17/it">disponibile dalla versione 0.17</a></span></li></ul>
|
||
<h3><span class="mw-headline" id="Preferenze">Preferenze</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgParameter.png" class="image"><img alt="Std DlgParameter.png" src="32px-Std_DlgParameter.png" width="32" height="32" srcset="/wiki/images/thumb/6/6d/Std_DlgParameter.png/48px-Std_DlgParameter.png 1.5x, /wiki/images/6/6d/Std_DlgParameter.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Preferences/it" title="Draft Preferences/it">Preferenze...</a>: Preferenze disponibili negli strumenti Draft.</li></ul>
|
||
<h3><span class="mw-headline" id="Formato_dei_file">Formato dei file</span></h3>
|
||
<p>Il modulo Draft fornisce a FreeCAD gli importatori e gli esportatori per i seguenti formati di file:
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Preferences-import-export.svg" class="image"><img alt="Preferences-import-export.svg" src="Preferences-import-export.svg" width="32" height="32" /></a> <a href="Import_Export_Preference.html" title="Import Export Preference">Preference ...</a> Import Export</li></ul>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_DXF/it" title="Draft DXF/it">Autodesk .DXF</a>: Importa ed esporta file <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/AutoCAD_DXF">Drawing Exchange Format</a> creati con applicazioni CAD 2D</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SVG/it" title="Draft SVG/it">SVG (come geometria)</a>: Importa ed esporta file <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Scalable_Vector_Graphics">Scalable Vector Graphics</a> creati con applicazioni di grafica vettoriale</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_OCA/it" title="Draft OCA/it">Open Cad format .OCA</a>: Importa ed esporta file OCA/GCAD, potenzialmente un nuovo <a rel="nofollow" class="external text" href="http://groups.google.com/group/open_cad_format">formato di file open CAD</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_DAT/it" title="Draft DAT/it">Airfoil Data Format .DAT</a>: Importa file DAT che descrivono <a rel="nofollow" class="external text" href="http://www.ae.illinois.edu/m-selig/ads/coord_database.html">profili aerodinamici</a> portanti</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_DXF/it" title="Draft DXF/it">Autodesk .DWG</a>: Importa e esporta file DWG tramite l'importatore DXF quando l'utility <a href="https://www.freecadweb.org/wiki/index.php?title=Extra_python_modules/it" title="Extra python modules/it">Teigha Converter</a> è installata.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_and_DWG_Import/it" title="FreeCAD and DWG Import/it">FreeCAD e importare DWG</a>: Importa e esporta file DWG</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_and_DXF_Import/it" title="FreeCAD and DXF Import/it">FreeCAD e importare DXF</a>: Importa e esporta file DXF</li></ul>
|
||
<h3><span class="mw-headline" id="Ulteriori_funzioni">Ulteriori funzioni</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Snap/it" title="Draft Snap/it">Ancorare (Snap)</a>: Permette di inserire nuovi punti in posizioni particolari su oggetti esistenti.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Constrain/it" title="Draft Constrain/it">Vincolare</a>: Permette di inserire nuovi punti correlati (vincolati) orizzontalmente o verticalmente a punti precedenti.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Coordinates/it" title="Draft Coordinates/it">Digitare le coordinate</a>: Permette di inserire le coordinate da tastiera invece di cliccare sullo schermo</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ToggleConstructionMode/it" title="Draft ToggleConstructionMode/it">Modalità Costruzione</a>: Permette di raggruppare delle geometrie in un blocco definito 'Costruzione' per nasconderle o visualizzarle contemporaneamente, in modo semplice, tramite l'interruttore on/off</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_SelectPlane/it" title="Draft SelectPlane/it">Piano di lavoro</a>: Consente di definire un piano nello spazio 3D dove eseguire le successive operazioni</li></ul>
|
||
<h3><span class="mw-headline" id="API">API</span></h3>
|
||
<p>Il modulo Draft incorpora una <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_API/it" title="Draft API/it">Draft API</a> completa perciò si può utilizzare le sue funzioni negli script e nelle macro
|
||
</p>
|
||
<h3><span class="mw-headline" id="Tutorial_3">Tutorial</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_tutorial/it" title="Draft tutorial/it">Draft tutorial</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_tutorial_Outdated/it" title="Draft tutorial Outdated/it">Draft tutorial antiquato</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_ShapeString_tutorial/it" title="Draft ShapeString tutorial/it">Draft ShapeString tutorial</a></li></ul>
|
||
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Script_e_Macro">Script e Macro</span></h2>
|
||
<p>Le macro sono un modo pratico per creare delle azioni complesse. In FreeCAD è sufficiente registrare le azioni così come vengono eseguite, quindi salvarle con un nome, per poterle ripetere quando si vuole. Dato che le macro sono in realtà un elenco di comandi python, è anche possibile modificarle e creare degli script molto complessi.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Come_funzionano">Come funzionano</span></h3>
|
||
<p>Quando dal menu <i>Modifica -> Preferenze -> Generale -> Macro -> Mostra comandi script nella console python</i>, si attiva l'output su console si vede che ogni azione che si compie, come ad esempio la pressione di un pulsante, invia un comando python. Questi comandi sono ciò che è possibile registrare in una macro. Lo strumento principale per creare una macro è la barra degli strumenti macro: <a href="https://www.freecadweb.org/wiki/index.php?title=File:Macros_toolbar.jpg" class="image"><img alt="Macros toolbar.jpg" src="Macros_toolbar.jpg" width="144" height="43" /></a>. Su di essa si trovano 4 tasti: Registrare, Interrompere la registrazione, Modificare e Riprodurre la macro corrente.
|
||
</p><p>È molto semplice da usare: Premere il pulsante di registrazione, dare un nome alla macro, quindi eseguire alcune azioni. Al termine, fare clic sul pulsante Interrompi registrazione, e le azioni compiute vengono salvate. Ora è possibile accedere alla finestra di dialogo delle macro utilizzando il pulsante Modifica:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macros.jpg" class="image"><img alt="Macros.jpg" src="Macros.jpg" width="381" height="408" /></a>
|
||
</p><p>Quì è possibile gestire le macro, eliminarle, modificarle o crearne di nuove partendo da zero. Quando si modifica una macro, essa viene aperta in una finestra dell'editor in cui è possibile apportare le proprie modifiche al codice.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Esempio">Esempio</span></h3>
|
||
<p>Premere il pulsante di registrazione, fornire un nome, ad esempio, "cilindro 10x10", poi, nell'<a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Ambiente Parte</a>, creare un cilindro con raggio = 10 e altezza = 10. Quindi, premere il pulsante "Interrompi registrazione". Nella finestra di dialogo Modifica macro, è possibile vedere il codice python che è stato registrato, e, volendo, apportarvi delle modifiche. Per eseguire la macro, è sufficiente premere sul pulsante Esegui della barra degli strumenti, mentre la macro è nell'editor. La macro viene sempre salvata su disco, in modo che tutte le modifiche apportate, o ogni nuova macro creata, sono sempre disponibili al successivo avvio di FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Personalizzazione">Personalizzazione</span></h3>
|
||
<p>Naturalmente non è pratico dover caricare una macro nell'editor per poterla utilizzare. FreeCAD fornisce modi migliori per usarle, come ad esempio l'assegnazione ad essa di una scorciatoia da tastiera o l'inserimento di una voce nel menu. Dopo aver creato la macro, tutto questo può essere fatto tramite il menu <i>Strumenti -> Personalizza</i>:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Macros_config.jpg" class="image"><img alt="Macros config.jpg" src="Macros_config.jpg" width="400" height="276" /></a>
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=Customize_Toolbars/it" title="Customize Toolbars/it">Personalizzare la barra degli strumenti.</a> In questo modo si può trasformare la macro in un vero e proprio strumento, proprio come qualsiasi strumento standard di FreeCAD. Questo, sommato alla potenza degli script Python all'interno di FreeCAD, permette di aggiungere facilmente all'interfaccia dei propri strumenti. Per maggiori informazioni sugli script Python, continuare la lettura alle pagine del <a href="https://www.freecadweb.org/wiki/index.php?title=Power_users_hub/it" title="Power users hub/it">Centro utenti esperti</a> o degli <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" class="mw-redirect" title="Scripting/it">Script</a> ...
|
||
</p>
|
||
<h3><span class="mw-headline" id="Gli_strumenti_del_menu_Macro">Gli strumenti del menu Macro</span></h3>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgMacroRecord.png" class="image"><img alt="Std DlgMacroRecord.png" src="32px-Std_DlgMacroRecord.png" width="32" height="32" srcset="/wiki/images/thumb/6/66/Std_DlgMacroRecord.png/48px-Std_DlgMacroRecord.png 1.5x, /wiki/images/6/66/Std_DlgMacroRecord.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DlgMacroRecord/it" title="Std DlgMacroRecord/it">Registra macro</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgMacroStop.png" class="image"><img alt="Std DlgMacroStop.png" src="32px-Std_DlgMacroStop.png" width="32" height="32" srcset="/wiki/images/thumb/2/26/Std_DlgMacroStop.png/48px-Std_DlgMacroStop.png 1.5x, /wiki/images/2/26/Std_DlgMacroStop.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DlgMacroStop/it" title="Std DlgMacroStop/it">Interrompi la registrazione</a> </li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgMacroExecuteDirect.png" class="image"><img alt="Std DlgMacroExecuteDirect.png" src="32px-Std_DlgMacroExecuteDirect.png" width="32" height="32" srcset="/wiki/images/thumb/1/1c/Std_DlgMacroExecuteDirect.png/48px-Std_DlgMacroExecuteDirect.png 1.5x, /wiki/images/1/1c/Std_DlgMacroExecuteDirect.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DlgMacroExecuteDirect/it" title="Std DlgMacroExecuteDirect/it">Macro...</a> </li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Std_DlgMacroExecute.png" class="image"><img alt="Std DlgMacroExecute.png" src="32px-Std_DlgMacroExecute.png" width="32" height="32" srcset="/wiki/images/thumb/d/d3/Std_DlgMacroExecute.png/48px-Std_DlgMacroExecute.png 1.5x, /wiki/images/d/d3/Std_DlgMacroExecute.png 2x" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DlgMacroExecute/it" title="Std DlgMacroExecute/it">Esegui macro</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DebugMacro/it" title="Std DebugMacro/it">Debug macro</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DebugStop/it" title="Std DebugStop/it">Interrompi il debug</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DebugOver/it" title="Std DebugOver/it">Passo successivo</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DebugInto/it" title="Std DebugInto/it">Step into</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Std_DebugToggle/it" title="Std DebugToggle/it">Attiva/disattiva punto di interruzione </a></li></ul>
|
||
<h3><span class="mw-headline" id="Creare_delle_macro_senza_registrarle">Creare delle macro senza registrarle</span></h3>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=How_to_install_macros/it" title="How to install macros/it">Come installare le macro</a>. È anche possibile inserire direttamente con copia/incolla del codice python in un macro, senza registrare le azioni della GUI (dell'interfaccia grafica). È sufficiente creare una nuova macro, modificarla, e incollare il codice. È quindi possibile salvare la macro nello stesso modo in cui si salva un documento di FreeCAD. Al prossima avvio di FreeCAD, la macro viene visualizzata in "Macro installate" nel menu Macro.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Repositorio_di_macro">Repositorio di macro</span></h3>
|
||
<p>Visitare la pagina degli <a href="https://www.freecadweb.org/wiki/index.php?title=Macros_recipes/it" title="Macros recipes/it">esempi di macro</a> per trovare alcune utili macro da aggiungere alla propria installazione di FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Link_3">Link</span></h3>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=Installing_more_workbenches/it" title="Installing more workbenches/it">Installare ulteriori ambienti</a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Tutorial_4">Tutorial</span></h3>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=How_to_install_additional_workbenches/it" title="How to install additional workbenches/it">Come installare ambienti di lavoro aggiuntivi</a>
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questo è una breve guida realizzata per chi si avvicina per la prima volta a Python.
|
||
<a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Python_%28programming_language%29">Python</a> è un <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Programming_language">linguaggio di programmazione</a> multi-piattaforma open-source.
|
||
Python dispone di numerose funzionalità che lo rendono molto diverso dagli altri comuni linguaggi di programmazione, ed è facilmente accessibile ai nuovi utenti:
|
||
</p>
|
||
<ul><li> È stato progettato appositamente per essere letto facilmente dalle persone, quindi è molto facile da imparare e da capire.</li>
|
||
<li> È interpretato, ciò significa che, a differenza dei linguaggi compilati come il C, non è necessario compilare il programma prima di poterlo eseguire. Quando si desidera, il codice che si scrive può essere eseguito immediatamente, riga dopo riga. Siccome si procede gradualmente, passo dopo passo, è facile impararlo e trovare gli eventuali errori nel codice. </li>
|
||
<li> Può essere incorporato in altri programmi per essere usato come linguaggio di script. FreeCAD ha un interprete Python integrato, così, in FreeCAD, è possibile scrivere dei codici Python che manipolano parti di FreeCAD, ad esempio per creare la geometria. Questo è estremamente performante, perché invece di premere semplicemente un pulsante denominato "Crea sfera", che un programmatore ha messo a disposizione, si ha la libertà di creare facilmente dei propri strumenti per produrre una particolare geometria desiderata.</li>
|
||
<li> È estensibile. Si possono inserire facilmente dei nuovi moduli nella propria installazione di Python ed estenderne le funzionalità. Ad esempio, esistono moduli Python che permettono di leggere e scrivere le immagini jpg, di comunicare con Twitter, di programmare le operazioni del proprio sistema operativo, ecc.</li></ul>
|
||
<p>Ora, mettiamoci al lavoro! Ricordare che ciò che verrà dopo è solamente una semplice introduzione e non un tutorial completo. Ma la speranza è che dopo si avranno basi sufficienti per esplorare più in profondità i meccanismi di FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="L.27interprete">L'interprete</span></h3>
|
||
<p>Di solito, per scrivere programmi per computer, basta aprire un editor di testo (o l'ambiente di programmazione preferito che, in genere, è un editor di testo con strumenti aggiuntivi), scrivere il programma, quindi compilarlo ed eseguirlo. Il più delle volte si fanno degli errori di scrittura, per cui il programma non funziona, e si ottiene un messaggio di errore che dà informazioni su cosa è andato storto. Quindi si ritorna all'editor di testo, si correggono gli errori, si esegue di nuovo, e così via fino a quando il programma funziona bene.
|
||
</p><p>In Python, l'intero processo, può essere eseguito in modo trasparente all'interno del suo interprete. L'interprete Python è una finestra con un prompt dei comandi, dove si può digitare direttamente il codice Python. Se si installa Python sul proprio computer (scaricarlo dal <a rel="nofollow" class="external text" href="http://www.python.org">sito web di Python</a> se lavorate su Windows o Mac, installarlo dal repository dei pacchetti se utilizzate GNU/Linux), si avrà un interprete Python nel menu di avvio. FreeCAD dispone di un proprio interprete Python visualizzato nella sua finestra inferiore:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Screenshot_pythoninterpreter.jpg" class="image"><img alt="Screenshot pythoninterpreter.jpg" src="Screenshot_pythoninterpreter.jpg" width="614" height="228" /></a>
|
||
</p><p>Se non è visibile, cliccare su Visualizza → Viste → Console Python.
|
||
</p><p>L'interprete mostra la versione di Python, quindi il simbolo >>>, che è il suo prompt dei comandi, cioè, dove si deve inserire il codice Python. Scrivere il codice nell'interprete è semplice: ogni riga è una istruzione. Quando si preme Invio, la riga di codice viene eseguita (dopo essere stata istantaneamente e invisibilmente compilata). Ad esempio, provare a scrivere questo:
|
||
</p>
|
||
<pre>print "hello" </pre>
|
||
<p>per Python <code>print</code> è una speciale parola chiave che, ovviamente, serve per stampare qualcosa sullo schermo. Quando si preme Invio, l'operazione viene eseguita, e viene stampato il messaggio "ciao". Se si commette un errore, provare, per esempio, a scrivere:
|
||
</p>
|
||
<pre>print hello </pre>
|
||
<p>Python dice che non conosce ciao. I caratteri " " specificano che il contenuto è una stringa. In gergo tecnico, una stringa è semplicemente un pezzo di testo. Senza i segni ", la parola ciao viene vista come una specificazione del comando di stampa, cioè come una speciale parola chiave di Python, e non come un testo. Il fatto importante è che l'errore viene immediatamente notificato. Premendo la freccia verso l'alto (o, nell'interprete di FreeCAD, CTRL + freccia su), si può tornare all'ultimo comando scritto e correggerlo.
|
||
</p><p>L'interprete Python possiede anche un sistema di aiuto incorporato. Provare a digitare:
|
||
</p>
|
||
<pre>help </pre>
|
||
<p>oppure, ad esempio, se non si riesce a capire cosa è andato storto con il precedente comando print ciao, e si desiderano delle informazioni specifiche sul comando "print" digitare:
|
||
</p>
|
||
<pre>help("print") </pre>
|
||
<p>Si ottiene una lunga e completa descrizione di tutto quello che può fare il comando print.
|
||
</p><p>Ora che si ha il controllo totale dell'interprete, si può cominciare con le cose significative.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Variabili">Variabili</span></h3>
|
||
<p>Naturalmente, stampare "ciao" non è molto interessante. Più interessante è stampare cose che non si conoscono prima, o lasciare che Python le trovi per noi. Qui entra in gioco il concetto di variabile. Una variabile è semplicemente un valore che viene memorizzato con un nome specifico. Ad esempio, digitare questo:
|
||
</p>
|
||
<pre>a = "hello"
|
||
print a </pre>
|
||
<p>Sicuramente si capisce quello che succede, la stringa "ciao" viene "salvata" sotto il nome "a". Ora, "a" non è più un nome sconosciuto! Si può usare ovunque, per esempio nel comando print. È possibile utilizzare qualsiasi nome che si desideri, basta rispettare alcune semplici regole, tipo non usare spazi o segni di punteggiatura. Ad esempio, si potrebbe tranquillamente scrivere:
|
||
</p>
|
||
<pre>hello = "my own version of hello"
|
||
print hello </pre>
|
||
<p>Visto? ciao ora non è più una parola indefinita. E se, per sfortuna, si sceglie un nome che in Python esiste già? Supponiamo di voler conservare una stringa con il nome "print":
|
||
</p>
|
||
<pre>print = "hello" </pre>
|
||
<p>Python è molto intelligente e ci dice che questo non è possibile. Possiede alcune parole chiave "riservate" che non possono essere modificate. Invece le nostre variabili possono essere modificate in qualsiasi momento, il che è esattamente il motivo per cui sono chiamate variabili, ovvero il contenuto può variare. Ad esempio:
|
||
</p>
|
||
<pre>myVariable = "hello"
|
||
print myVariable
|
||
myVariable = "good bye"
|
||
print myVariable </pre>
|
||
<p>Il valore di myVariable è stato cambiato. Le variabili possono anche essere copiate:
|
||
</p>
|
||
<pre>var1 = "hello"
|
||
var2 = var1
|
||
print var2 </pre>
|
||
<p>Notare che è importante dare alle variabili dei nomi descrittivi. Quando si scrivono programmi lunghi, dopo un po' probabilmente non si ricorda più cosa rappresenta la variabile denominata "a". Se invece viene chiamata, ad esempio, MioMessaggioDiBenvenuto, quando la si vede, si capisce facilmente a cosa serve. In più è un passo avanti verso l'autodocumentazione del proprio codice.
|
||
</p><p>Case is very important. myVariable is not the same as myvariable, the difference in the upper/lower case <b>v</b>. If you were to enter <i>print myvariable</i> it would come back with an error as not defined.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Numeri">Numeri</span></h3>
|
||
<p>È noto che la programmazione serve per trattare ogni tipo di dati, non solo le stringhe di testo, ma soprattutto i numeri. È molto importante che Python sappia che tipo di dati deve trattare. Nell'esempio precedente, con print ciao, si è visto che il comando print ha riconosciuto la nostra stringa "ciao". Questo perché utilizzando il segno ", abbiamo specificato al comando print che ciò che seguiva era una stringa di testo.
|
||
</p><p>Per controllare in qualsiasi momento di quale tipo sono i dati contenuti in una variabile si utilizza la speciale parola chiave di Python type():
|
||
</p>
|
||
<pre>myVar = "hello"
|
||
type(myVar) </pre>
|
||
<p>In questo caso ci dice che il contenuto di myVar è 'str', ovvero una stringa in gergo Python. Ci sono anche altri tipi di dati, ad esempio i numeri interi (integer) e i numeri in virgola mobile (float numbers):
|
||
</p>
|
||
<pre>firstNumber = 10
|
||
secondNumber = 20
|
||
print firstNumber + secondNumber
|
||
type(firstNumber) </pre>
|
||
<p>Questo è già molto più interessante, vero? Ora si dispone di una potente calcolatrice! Notare bene come funziona. Python capisce che 10 e 20 sono numeri interi, quindi vengono memorizzati come "int", e con essi Python può fare tutte le operazioni consentite con numeri interi. Osservare i risultati di questo codice:
|
||
</p>
|
||
<pre>firstNumber = "10"
|
||
secondNumber = "20"
|
||
print firstNumber + secondNumber </pre>
|
||
<p>Visto? Python è stato indotto a considerare le due variabili non più come numeri, ma come semplici parti di testo. Python può unire insieme due parti di testo, ma con esse non cerca di produrre una somma. Torniamo ai numeri. Oltre ai numeri interi (int) ci sono anche i numeri in virgola mobile (float). I numeri interi non hanno una parte decimale, mentre i numeri float possono avere una parte decimale:
|
||
</p>
|
||
<pre>var1 = 13
|
||
var2 = 15.65
|
||
print "var1 is of type ", type(var1)
|
||
print "var2 is of type ", type(var2) </pre>
|
||
<p>I numeri Int e Float possono essere mescolati tra di loro senza problemi:
|
||
</p>
|
||
<pre>total = var1 + var2
|
||
print total
|
||
print type(total) </pre>
|
||
<p>Naturalmente il totale ha dei decimali, vero? Quindi Python ha deciso automaticamente che il risultato è un float. In molti casi, come in questo, Python decide automaticamente il tipo da usare. In altri casi no. Ad esempio con:
|
||
</p>
|
||
<pre>varA = "hello 123"
|
||
varB = 456
|
||
print varA + varB </pre>
|
||
<p>Si produce un errore, varA è una stringa e varB è un int, quindi Python non sa cosa fare. Ma possiamo indurre Python a convertire i tipi:
|
||
</p>
|
||
<pre>varA = "hello"
|
||
varB = 123
|
||
print varA + str(varB) </pre>
|
||
<p>Ora entrambi sono stringhe, e l'operazione funziona! Notare che, con questi comandi, varB è convertita in "stringa" solo al momento della stampa, però varB originale non viene modificata. Per trasformare varB permanentemente in una stringa, si deve fare:
|
||
</p>
|
||
<pre>varB = str(varB) </pre>
|
||
<p>Inoltre è possibile usare int() e float() per convertire in int e in float:
|
||
</p>
|
||
<pre>varA = "123"
|
||
print int(varA)
|
||
print float(varA) </pre>
|
||
<p><b>Note sui comandi Python</b>
|
||
</p><p>Sicuramente avete notato che in questa sezione il comando di stampa (print) è stato utilizzato in diversi modi. Abbiamo stampato variabili, somme, parti separati da virgole, e anche il risultato di altri comandi Python, ad esempio type(). Forse avete anche notato che questi due comandi,
|
||
</p>
|
||
<pre>type(varA)
|
||
print type(varA) </pre>
|
||
<p>producono esattamente lo stesso risultato. Questo succede perché siamo nell'interprete, dove ogni cosa viene sempre automaticamente stampata sullo schermo. Per velocizzare, d'ora in avanti si può fare a meno di usarlo e quindi scrivere semplicemente:
|
||
</p>
|
||
<pre>myVar = "hello friends"
|
||
myVar </pre>
|
||
<p>Inoltre avrete notato che con la maggior parte dei comandi (o parole chiave) di Python si usano le parentesi per dire loro su quale contenuto devono operare: type(), int(), str(), ecc. Unica eccezione è il comando print, ma in realtà non si tratta di un'eccezione, anche lui funziona normalmente in questo modo:
|
||
</p>
|
||
<pre>print ("ciao")
|
||
</pre>
|
||
<p>però, siccome viene utilizzato frequentemente, i programmatori di Python ne hanno creato una versione semplificata.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Liste">Liste</span></h3>
|
||
<p>Un altro tipo di dati interessante è una list (lista). Una lista è semplicemente un elenco di altri dati. In modo analogo a come si definisce una stringa di testo usando " ", una lista si definisce usando []:
|
||
</p>
|
||
<pre>myList = [1,2,3]
|
||
type(myList)
|
||
myOtherList = ["Bart", "Frank", "Bob"]
|
||
myMixedList = ["hello", 345, 34.567] </pre>
|
||
<p>Come si vede, una lista può contenere dati di qualsiasi tipo. Le liste sono molto utili perché permettono di raggruppare le variabili. Con il gruppo, successivamente, è possibile fare diverse cose, ad esempio contare i suoi componenti:
|
||
</p>
|
||
<pre>len(myOtherList) </pre>
|
||
<p>o recuperare un elemento da una lista:
|
||
</p>
|
||
<pre>myName = myOtherList[0]
|
||
myFriendsName = myOtherList[1] </pre>
|
||
<p>Come si vede, mentre il comando len() restituisce il numero totale di elementi in una lista, la loro "posizione" nella lista inizia con 0. Il primo elemento in una lista si trova sempre in posizione 0, quindi nella lista myOtherList, "Bob" è nella posizione 2. Con le liste è possibile eseguire molte altre operazioni, descritte in modo più completo <a rel="nofollow" class="external text" href="http://diveintopython.org/native_data_types/lists.html">qui</a>, ad esempio, ordinare i suoi contenuti, rimuovere o aggiungere elementi.
|
||
</p><p>Una cosa curiosa: una stringa di testo è molto simile a una lista di caratteri! Provate a fare questo:
|
||
</p>
|
||
<pre>myvar = "hello"
|
||
len(myvar)
|
||
myvar[2] </pre>
|
||
<p>In genere, tutto quello che si può fare con le liste si può fare anche con le stringhe. In effetti le liste e le stringhe sono entrambe delle sequenze.
|
||
</p><p>Oltre a stringhe, int, float e liste, in Python sono disponibili molti altri tipi di dati built-in (incorporati), quali ad esempio i <a rel="nofollow" class="external text" href="http://www.diveintopython.net/native_data_types/index.html#d0e5174">dictionaries</a> (collezione di oggetti), oppure si possono creare dei propri tipi di dati utilizzando le <a rel="nofollow" class="external text" href="http://www.freenetpages.co.uk/hp/alan.gauld/tutclass.htm">classi</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Indentazione">Indentazione</span></h3>
|
||
<p>Un tipico uso della lista consiste nel navigare al suo interno e di operare con i suoi elementi. Per esempio osservare questo:
|
||
</p>
|
||
<pre>alldaltons = ["Joe", "William", "Jack", "Averell"]
|
||
for dalton in alldaltons:
|
||
print dalton + " Dalton" </pre>
|
||
<p>In questo esempio, la lista viene iterata (nuovo gergo di programmazione!) con il comando "for ... in ..." e con ognuno dei suoi elementi viene eseguito qualcosa.
|
||
</p><p>Notare la speciale sintassi. Il comando "for" termina con un ":" questo indica a Python che ciò che segue è un blocco di uno o più comandi. Subito dopo che viene inserita la riga con il comando che termina con :, il prompt dei comandi cambia in ... il che significa che Python ha riconosciuto un comando terminato con un (:) e quello che segue è parte del comando stesso.
|
||
</p><p>Come fa Python a sapere quante delle prossime righe sono da eseguire all'interno dell'operazione for ... in ? Per sapere questo, Python utilizza l'indentazione. Cioè, le righe successive non iniziano immediatamente, ma iniziano con uno o più spazi vuoti, oppure con uno o più spazi di tabulazione. Altri linguaggi di programmazione utilizzano vari metodi, tipo inserire tutto dentro parentesi, ecc. Finché le righe successive sono scritte con la <b>stessa indentazione</b>, esse sono considerate come parte del blocco for-in. Quando si inizia una riga con 2 spazi vuoti e quella successiva con 4, si produce un errore. Per terminare e uscire dal blocco for-in, basta scrivere una nuova riga senza rientro, o semplicemente premere Invio.
|
||
</p><p>L'indentazione è molto utile perché conferisce leggibilità al promma. Se è ampia (usando, ad esempio, tab che crea più spazi invece di un solo), quando si scrive un programma lungo si ha una visione chiara di ciò che viene eseguito all'interno di ogni blocco. Vedremo che anche molti altri comandi diversi da for-in richiedono blocchi indentati.
|
||
</p><p>Il comando for-in può essere utilizzato per varie operazioni che devono essere eseguite più volte. Ad esempio, può essere combinato con il comando range():
|
||
</p>
|
||
<pre>serie = range(1,11)
|
||
total = 0
|
||
print "sum"
|
||
for number in serie:
|
||
print number
|
||
total = total + number
|
||
print "----"
|
||
print total </pre>
|
||
<p>(If you have been running the code examples in an interpreter by Copying and Pasting, you will find the previous block of text will throw an error. Instead, copy to the end of the indented block, i.e. the end of the line <i>total = total + number</i> and then paste to the interpreter. In the interpreter issue an <enter> until the three dot prompt disappears and the code runs. Then copy the final two lines into the interpreter followed by one or more <enter> The final answer should appear.)
|
||
</p><p>If you would type into the interpreter <b>help(range)</b> you would see:
|
||
</p>
|
||
<pre>range(...)
|
||
range(stop) -> list of integers
|
||
range(start, stop[, step]) -> list of integers </pre>
|
||
<p>Here the square brackets denote an optional parameter. However all are expected to be integers. Below we will force the range parameters to be an integer using int()
|
||
</p>
|
||
<pre>decimales = 1000 # for 3 decimales
|
||
#decimales = 10000 # for 4 decimales ...
|
||
for i in range(int(0 * decimales),int(180 * decimales),int(0.5 * decimales)):
|
||
print float(i) / decimales </pre>
|
||
<p>O per operazioni più complesse tipo questa:
|
||
</p>
|
||
<pre>alldaltons = ["Joe", "William", "Jack", "Averell"]
|
||
for n in range(4):
|
||
print alldaltons[n], " is Dalton number ", n </pre>
|
||
<p>Come si vede, anche il comando range() ha la strana particolarità di iniziare con 0 (quando non si specifica il numero di partenza) e che il suo ultimo numero è uno in meno del numero finale specificato. Ciò, naturalmente, perché questo modo funziona bene con gli altri comandi di Python. Ad esempio:
|
||
</p>
|
||
<pre>alldaltons = ["Joe", "William", "Jack", "Averell"]
|
||
total = len(alldaltons)
|
||
for n in range(total):
|
||
print alldaltons[n] </pre>
|
||
<p>Un altro uso interessante dei blocchi indentati si ha con il comando if. Il comando if esegue un blocco di codice solo se una certa condizione è soddisfatta, ad esempio:
|
||
</p>
|
||
<pre>alldaltons = ["Joe", "William", "Jack", "Averell"]
|
||
if "Joe" in alldaltons:
|
||
print "We found that Dalton!!!" </pre>
|
||
<p>Naturalmente, questo esempio stampa sempre la prima frase, ma provare a sostituire la seconda riga con:
|
||
</p>
|
||
<pre>if "Lucky" in alldaltons: </pre>
|
||
<p>Ora non viene più stampato nulla. Si può anche specificare una dichiarazione: else:
|
||
</p>
|
||
<pre>alldaltons = ["Joe", "William", "Jack", "Averell"]
|
||
if "Lucky" in alldaltons:
|
||
print "We found that Dalton!!!"
|
||
else:
|
||
print "Such Dalton doesn't exist!" </pre>
|
||
<h3><span class="mw-headline" id="Funzioni">Funzioni</span></h3>
|
||
<p>I <a rel="nofollow" class="external text" href="http://docs.python.org/reference/lexical_analysis.html#identifiers">comandi standard di Python</a> non sono molti. Nella versione corrente di Python ce ne sono circa 30, e ne conosciamo già alcuni di loro. Ma immaginate se potessimo inventare dei nostri propri comandi? Beh, possiamo, ed è estremamente facile. In effetti, la maggior parte dei moduli aggiuntivi che si possono aggiungere nella propria installazione di Python fanno esattamente questo, essi aggiungono dei comandi utilizzabili. In Python un comando personalizzato si chiama funzione e si crea in questo modo:
|
||
</p>
|
||
<pre>def printsqm(myValue):
|
||
print str(myValue)+" square meters"
|
||
|
||
printsqm(45) </pre>
|
||
<p>(Another copy and paste error, only copy through the end of the indented section i.e. <b>" square meters"</b> Paste to the interpreter, and issue <enter> until the three dot prompt goes a way, then copy and paste the final line.)
|
||
</p><p>Extremely simple: the def() command defines a new function. You give it a name, and inside the parenthesis you define arguments that we'll use in our function. Arguments are data that will be passed to the function. For example, look at the len() command. If you just write len() alone, Python will tell you it needs an argument. That is, you want len() of something, right? Then, for example, you'll write len(myList) and you'll get the length of myList. Well, myList is an argument that you pass to the len() function. The len() function is defined in such a way that it knows what to do with what is passed to it. Same as we did here.
|
||
</p><p>Il nome "myValue" può contenere qualsiasi oggetto, e viene utilizzato solo all'interno della funzione. È solo un nome assegnato all'argomento in modo da poter operare con esso, però serve anche a fare in modo che la funzione sappia quanti argomenti aspettarsi. Se, ad esempio, si esegue:
|
||
</p>
|
||
<pre>printsqm(45,34) </pre>
|
||
<p>Si ottiene un errore. La funzione è stata programmata per ricevere un solo argomento, ma ne ha ricevuto due, 45 e 34. In sostituzione, si può eseguire qualcosa di simile a:
|
||
</p>
|
||
<pre>def sum(val1,val2):
|
||
total = val1 + val2
|
||
return total
|
||
|
||
sum(45,34)
|
||
myTotal = sum(45,34) </pre>
|
||
<p>Dove si crea una funzione che riceve due argomenti, li somma, e restituisce il valore. Ottenere qualcosa è molto utile, perché permette di utilizzare il risultato ottenuto e, ad esempio, memorizzarlo nella variabile myTotal. Naturalmente, visto che siamo nell'interprete e tutto quello che facciamo viene stampato, digitando:
|
||
</p>
|
||
<pre>sum(45,34) </pre>
|
||
<p>il risultato viene stampato sullo schermo, ma al di fuori dell'interprete, e, siccome non vi è alcun comando di stampa all'interno della funzione, sullo schermo non appare nulla. Per ottenere la stampa, si deve digitare:
|
||
</p>
|
||
<pre>print sum(45,34) </pre>
|
||
<p>Per ulteriori informazioni sulle funzioni leggere <a rel="nofollow" class="external text" href="http://www.diveintopython.net/getting_to_know_python/declaring_functions.html%7C">qui</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Moduli">Moduli</span></h3>
|
||
<p>Ora che si ha un'idea di come funziona Python, serve una ultima cosa: Come lavorare con i file e i moduli.
|
||
</p><p>Fino ad ora, abbiamo scritto le istruzioni nell'interprete di Python riga per riga, vero?
|
||
</p><p>Quando si intende fare delle cose più complesse, è certamente più comodo scrivere prima diverse righe di codice, e poi eseguirle tutte insieme in una unica volta. Bene, anche questo, è estremamente facile da farsi, e inoltre permette anche salvare il proprio lavoro.
|
||
</p><p>È sufficiente aprire un editor di testo (ad es. il Blocco Note di Windows, o gedit, emacs, o vi per Linux), e scrivere tutte le proprie righe di Python, nello stesso modo in cui si scrivono nell'interprete, con indentazioni, ecc. Quindi, salvare il file da qualche parte, preferibilmente con estensione .py. Tutto qui, ora si dispone di un programma Python completo. Naturalmente, ci sono editor migliori di notepad, citato solo per dimostrare che un programma Python non è altro che un file di testo.
|
||
</p><p>To make Python execute that program, there are hundreds of ways. In windows, simply right-click your file, open it with Python, and execute it. But you can also execute it from the Python interpreter itself. For this, the interpreter must know where your .py program is. In FreeCAD, the easiest way is to place your program in a place that FreeCAD's Python interpreter knows by default, such as FreeCAD's bin folder, or any of the Mod folders. (In Linux, you probably have a directory /home/<username>/.FreeCAD/Mod, let's add a subdirectory to that called scripts where we will put the text file.) Suppose we write a file like this:
|
||
</p>
|
||
<pre>def sum(a,b):
|
||
return a + b
|
||
|
||
print "myTest.py succesfully loaded" </pre>
|
||
<p>e di salvarlo con il nome MioTest.py nella nostra directory /bin di FreeCAD (o on Linux to /home/<username>/.FreeCAD/Mod/scripts). Ora, avviamo FreeCAD e nella finestra interprete scriviamo:
|
||
</p>
|
||
<pre>import myTest </pre>
|
||
<p>senza l'estensione. py. Questo comando esegue semplicemente il contenuto del file, riga per riga, esattamente come quando viene scritto nell'interprete. Viene creata la funzione somma, poi viene stampato il messaggio. Però c'è una grande differenza: il comando di importazione (import) serve non solo per eseguire i programmi contenuti in un file, come il nostro, ma anche per caricare le funzioni interne, in modo da renderle disponibili nell'interprete. I file, come il nostro, contenenti funzioni sono chiamati moduli.
|
||
</p><p>Di solito, come si è fatto in precedenza, quando si scrive la funzione sum() nell'interprete, si digita semplicemente:
|
||
</p>
|
||
<pre>sum(14,45) </pre>
|
||
<p>Invece, quando si importa un modulo contenente una funzione sum(), la sintassi è un po' diversa. Si scrive:
|
||
</p>
|
||
<pre>myTest.sum(14,45) </pre>
|
||
<p>Cioè, il modulo viene importato come un "contenitore", e tutte le sue funzioni sono all'interno. Dato che è possibile importare più moduli, ciò è estremamente utile per tenere il tutto ben organizzato. In sostanza, quando si vede "qualcosa.qualcosaAltro", con un punto in mezzo, significa che "qualcosaAltro" è contenuto in "qualcosa".
|
||
</p><p>Si può anche estrarre da test una sua parte, e importare la funzione sum() direttamente nello spazio principale dell'interprete, in questo modo:
|
||
</p>
|
||
<pre>from myTest import *
|
||
sum(12,54) </pre>
|
||
<p>In pratica tutti i moduli si comportano in questo modo. È possibile importare un modulo, e poi utilizzare le sue funzioni tramite l'istruzione: module.function (argomento). Quasi tutti i moduli eseguono le seguenti operazioni: definiscono le funzioni, i nuovi tipi di dati e le classi che è possibile utilizzare nell'interprete o nei moduli Python, perché nulla impedisce di importare altri moduli all'interno di un proprio modulo!
|
||
</p><p>Un'ultima cosa estremamente utile. Come si fa per sapere quali moduli sono disponibili, quali funzioni sono al loro interno e come usarli (cioè, di che tipo di argomenti hanno bisogno)? Si è già visto che Python ha una funzione help(). Digitare:
|
||
</p>
|
||
<pre>help()
|
||
modules </pre>
|
||
<p>Viene restituito un elenco di tutti i moduli disponibili. Digitare q per uscire dall'aiuto interattivo e importare qualsiasi di essi.
|
||
</p><p>Si può anche sfogliare il contenuto del modulo tramite il comando dir():
|
||
</p>
|
||
<pre>import math
|
||
dir(math) </pre>
|
||
<p>In questo caso, si vedono tutte le funzioni contenute nel modulo di matematica (il modulo math), come, ad esempio, cose con strani nomi __ doc__, __ FILE__, __ name__. L'oggetto doc__ __ è estremamente utile, è un testo di documentazione. Ogni funzione dei moduli (se fatti bene) ha un proprio __doc__ che spiega come usarla. Se, per esempio, si vuole sapere come usare la funzione sin (seno) contenuta all'interno del modulo math, basta digitare:
|
||
</p>
|
||
<pre>print math.sin.__doc__ </pre>
|
||
<p>(It may not be evident, but on either side of doc are two underscore characters.)
|
||
</p><p>And finally one last little goodie: When we work on a new or existing module, it's best to replace the file extension with py such as: myModule.FCMacro => myModule.py. We often want to test it so we will load it as above.
|
||
</p>
|
||
<pre>import myModule
|
||
myModule.myTestFunction() </pre>
|
||
<p>Ma cosa succede se il modulo myTestFunction() non funziona correttamente? Si torna al proprio editor per modificarlo. Dopo, invece di chiudere e riaprire l'interprete python, è possibile aggiornare semplicemente il modulo in questo modo:
|
||
</p>
|
||
<pre>reload(myModule) </pre>
|
||
<p>Questo perché Python non conosce l'estensione FCMacro.
|
||
</p><p>Però, si può fare in due modi:
|
||
1. Utilizzare una funzione exec o execfile di Python all'interno della macro.
|
||
</p>
|
||
<pre>f = open("myModule","r")
|
||
d = f.read()
|
||
exec d </pre>
|
||
<p>oppure
|
||
</p>
|
||
<pre>execfile "myModule" </pre>
|
||
<p>Per condividere il codice tra le macro, è possibile ad esempio accedere al modulo FreeCAD o FreeCADGui (o qualsiasi altro modulo Python) e impostare qualsiasi attributo ad esso. Questo dovrebbe sopravvivere alla esecuzione della macro.
|
||
</p>
|
||
<pre>import FreeCAD
|
||
if hasattr(FreeCAD,"macro2_executed"):
|
||
...
|
||
else:
|
||
FreeCAD.macro2_executed = True # you can assign any value because we only check for the existence of the attribute
|
||
... execute macro2 </pre>
|
||
<h3><span class="mw-headline" id="Iniziare_con_FreeCAD">Iniziare con FreeCAD</span></h3>
|
||
<p>Ora che si ha un'idea di come funziona Python si può iniziare ad esplorare quello che FreeCAD ha da offrire. Le funzioni Python di FreeCAD sono tutte ben organizzate in moduli diversi. Alcuni di loro vengono caricati (importati) all'avvio di FreeCAD. Quindi, basta solo, digitare:
|
||
</p>
|
||
<pre>dir() </pre>
|
||
<p>e continuate a leggere in <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_Scripting_Basics/it" title="FreeCAD Scripting Basics/it">Script base in FreeCAD</a>...
|
||
</p><p>Naturalmente, quì si è visto solo una parte molto piccola del mondo di Python. Ci sono ancora molti altri concetti importanti che non sono stati menzionati qui.
|
||
</p><p>In rete sono disponibili tre documenti molto importanti che referenziano Python:
|
||
</p>
|
||
<ul><li> The <a rel="nofollow" class="external text" href="http://docs.python.org/3/tutorial/index.html">official Python tutorial with way more information than this one</a></li>
|
||
<li> La <a rel="nofollow" class="external text" href="http://docs.python.org/reference/">guida ufficiale di Python</a></li>
|
||
<li> Il wiki <a rel="nofollow" class="external text" href="http://www.diveintopython.org/toc/index.html">Dive into Python</a> </li></ul>
|
||
<p>Accertarsi di averli nel segnalibri!
|
||
</p><p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Script_Python_in_FreeCAD">Script Python in FreeCAD</span></h3>
|
||
<p>FreeCAD è stato costruito fin dall'inizio per essere totalmente controllato tramite gli script Python.
|
||
</p><p>Quasi tutte le parti di FreeCAD, come ad esempio l'interfaccia oppure i contenuti della scena, compresa la rappresentazione di quanto contenuto nelle viste 3D, sono accessibili tramite l'interprete Python incorporato o tramite script personali.
|
||
</p><p>Per questo, FreeCAD risulta probabilmente una delle applicazioni ingegneristiche più profondamente personalizzabili oggi disponibili.
|
||
</p><p>Allo stato attuale, FreeCAD ha però pochissimi comandi "nativi" per interagire con gli oggetti 3D, soprattutto perché è ancora all'inizio dello sviluppo, ma anche perché i suoi programmatori intendono fornire una piattaforma base per lo sviluppo del CAD piuttosto che un'applicazione per un uso specifico.
|
||
</p><p>La facilità d'uso degli script Python all'interno di FreeCAD permette di conoscere velocemente le nuove funzionalità in fase di sviluppo come "utenti esperti", cioè come utenti che conoscono un po' di programmazione Python.
|
||
</p><p>Python è uno dei più popolari linguaggi interpretati, e poiché è generalmente considerato facile da imparare, anche voi potrete produrre presto vostri script all'interno di FreeCAD come "utenti esperti".
|
||
</p><p>Se non conoscete ancora Python, vi consigliamo di cercare qualche tutorial su internet e di dare un rapido sguardo alla sua struttura.
|
||
</p><p>Python è un linguaggio molto facile da imparare, soprattutto perché può essere eseguito all'interno di un interprete, dove sia i comandi semplici come i programmi completi, possono essere eseguiti "al volo", cioè senza bisogno di compilare nulla.
|
||
</p><p>FreeCAD incorpora un interprete Python. Se non vedete la finestra denominata "Console Python" della figura successiva, potete attivarla con Visualizza → Pannelli → Console Python e mostrare l'interprete.
|
||
</p>
|
||
<h4><span class="mw-headline" id="L.27interprete_2">L'interprete</span></h4>
|
||
<p>Tramite l'interprete, è possibile accedere a tutti i moduli Python installati nel sistema, come pure ai moduli incorporati in FreeCAD e a tutti i moduli aggiuntivi di FreeCAD installati successivamente.
|
||
</p><p>La schermata seguente mostra l'interprete Python di FreeCAD:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Screenshot_pythoninterpreter.jpg" class="image" title="The FreeCAD Python interpreter"><img alt="The FreeCAD Python interpreter" src="Screenshot_pythoninterpreter.jpg" width="614" height="228" /></a>
|
||
</p><p>Tramite l'interprete è possibile eseguire del codice Python e sfogliare le classi e le funzioni disponibili.
|
||
</p><p>FreeCAD fornisce un browser delle classi molto utile per esplorare il nuovo mondo di FreeCAD.
|
||
</p><p>Quando si digita il nome di una classe nota seguita da un punto (.) (il che significa che si intende completare aggiungendo qualcos'altro alla classe), si apre la finestra del browser delle classi, dove si può navigare tra le sottoclassi e i metodi disponibili.
|
||
</p><p>Quando si seleziona una voce, viene visualizzato il testo di aiuto associato (se esiste):
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Screenshot_classbrowser.jpg" class="image" title="The FreeCAD class browser"><img alt="The FreeCAD class browser" src="Screenshot_classbrowser.jpg" width="614" height="228" /></a>
|
||
</p><p>Per verificare questo, iniziate a digitare <b>App.</b> oppure <b>Gui.</b> e osservate cosa succede.
|
||
</p><p>Generalmente, in Python, per esplorare il contenuto dei moduli e delle classi si utilizza il comando <i>print dir()</i>.
|
||
</p><p>Ad esempio, digitando <b>print dir()</b> si ottiene l'elenco di tutti i moduli attualmente caricati in FreeCAD e con <b>print dir(App)</b> si mostra tutto ciò che è contenuto all'interno del modulo App, ecc..
|
||
</p><p>Inoltre l'interprete ricorda i codici che vengono digitati. Questa altra utile caratteristica dell'interprete permette di esplorare all'indietro i comandi digitati e di recuperare, attraverso la cronologia, una riga di codice scritta in precedenza.
|
||
</p><p>Per navigare nella cronologia dei comandi, basta usare la combinazione di tasti <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">CTRL+UP</span> oppure <span style="background: #DDDDDD; border: 1px solid #888888; padding: 0px 5px 1px 5px;">CTRL+DOWN</span>.
|
||
</p><p>Cliccando col tasto destro nella finestra dell'interprete, si rendono disponibili diverse altre opzioni, quali, ad esempio, copiare lo storico (l'intera cronologia, cosa utile quando si desidera sperimentare qualcosa prima di utilizzarla in uno script) oppure inserire un nome di un file con il suo percorso completo.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Aiuti_di_Python">Aiuti di Python</span></h4>
|
||
<p>Nel menu <i>Aiuto</i> di FreeCAD, trovate una voce denominata <i>Moduli Python</i>, essa apre una finestra del browser contenente una documentazione completa, generata in tempo reale, di tutti i moduli Python a disposizione dell'interprete di FreeCAD, compreso Python e i moduli interni di FreeCAD, i moduli installati dal sistema e i moduli aggiuntivi di FreeCAD.
|
||
</p><p>La documentazione disponibile dipende dalla fatica che lo sviluppatore del modulo ha fatto per documentare il proprio codice. I moduli Python hanno la reputazione di essere in genere abbastanza ben documentati. La finestra di FreeCAD deve rimanere aperta perché questo sistema di documentazione funzioni.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Moduli_incorporati_.28Built-in.29">Moduli incorporati (Built-in)</span></h3>
|
||
<p>Dato che FreeCAD è stato progettato per essere eseguito senza una interfaccia grafica (GUI), quasi tutte le sue funzionalità sono divise in due parti: la funzionalità di base, denominata <i>App</i>, e la funzionalità grafica, denominata <i>Gui</i>. Per questo motivo i due principali moduli incorporati nel nostro FreeCAD sono chiamati App e Gui. Questi due moduli sono accessibili, rispettivamente con il nome "FreeCAD" e "FreeCADGui", anche tramite script eseguiti al di fuori dell'interprete.
|
||
</p>
|
||
<ul><li> Nel modulo <b>App</b>, si trova tutto ciò che riguarda l'applicazione stessa, cioè i metodi per l'apertura o la chiusura di file e documenti, oppure l'impostazione del documento attivo o la visualizzazione dei contenuti.</li></ul>
|
||
<ul><li> Nel modulo <b>Gui</b>, si trovano gli strumenti per accedere e gestire gli elementi dell'interfaccia grafica (GUI), cioè gli ambienti di lavoro e le loro barre degli strumenti e, più interessante, la rappresentazione grafica di tutti i contenuti di FreeCAD. </li></ul>
|
||
<p>Elencare tutto il contenuto di tali moduli è un lavoro un po' controproducente, in quanto essi crescono molto velocemente seguendo lo sviluppo di FreeCAD.
|
||
</p><p>I due strumenti di esplorazione disponibili (il browser delle classi e l'aiuto di Python) dovrebbero dare, in qualsiasi momento, una completa e aggiornata documentazione di questi moduli.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Gli_oggetti_App_e_gli_oggetti_GUI">Gli oggetti App e gli oggetti GUI</span></h4>
|
||
<p>Come abbiamo detto, in FreeCAD, tutto viene separato tra nucleo e rappresentazione. Ciò vale anche per gli oggetti 3D.
|
||
</p><p>È possibile accedere alla definizione delle proprietà degli oggetti (chiamate funzioni in FreeCAD) tramite il modulo App, e cambiare il modo in cui gli oggetti vengono riprodotti sullo schermo tramite il modulo Gui.
|
||
</p><p>Ad esempio, un parallelepipedo ha delle proprietà che lo definiscono, (cioè larghezza, lunghezza e altezza) che vengono memorizzate in un <i>oggetto App</i> e delle proprietà di rappresentazione, (come il colore delle facce, la modalità di disegno) che sono memorizzate in un corrispondente <i>oggetto Gui</i>.
|
||
</p><p>Questo modo di fare le cose consente una vasta gamma di operazioni, come gli algoritmi che funzionano solo sulla parte di definizione delle caratteristiche, senza la necessità di prendersi cura di nessuna parte visiva, e consente anche di reindirizzare il contenuto del documento a applicazioni non-grafiche, quali, ad esempio, elenchi, fogli di calcolo, o analisi degli elementi.
|
||
</p><p>Nel documento, per ogni oggetto App, esiste un corrispondente oggetto Gui.
|
||
Infatti lo stesso documento possiede sia oggetti App che oggetti Gui.
|
||
</p><p>Questo, naturalmente, è valido solo quando si esegue FreeCAD completo di interfaccia grafica. Nella versione riga di comando, senza interfaccia grafica, sono quindi disponibili solo gli oggetti App.
|
||
</p><p>Ricordare che la parte Gui degli oggetti viene rigenerata ogni volta che un oggetto App viene indicato "da ricalcolare" (ad esempio quando cambia uno dei suoi parametri), in quanto le modifiche fatte direttamente all'oggetto Gui potrebbero perdersi.
|
||
</p><p>Per accedere alla parte App di qualcosa, si digita:
|
||
</p>
|
||
<pre>myObject = App.ActiveDocument.getObject("ObjectName") </pre>
|
||
<p>dove "ObjectName" è il nome del vostro oggetto.
|
||
</p><p>Inoltre è possibile digitare:
|
||
</p>
|
||
<pre>myObject = App.ActiveDocument.ObjectName </pre>
|
||
<p>Per accedere alla parte Gui dello stesso oggetto, si digita:
|
||
</p>
|
||
<pre>myViewObject = Gui.ActiveDocument.getObject("ObjectName") </pre>
|
||
<p>dove "ObjectName" è il nome del vostro oggetto.
|
||
</p><p>Inoltre è possibile digitare:
|
||
</p>
|
||
<pre>myViewObject = App.ActiveDocument.ObjectName.ViewObject </pre>
|
||
<p>Se non abbiamo GUI (ad esempio, siamo in modalità riga di comando), l'ultima riga non restituirà nulla.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Gli_oggetti_del_documento">Gli oggetti del documento</span></h4>
|
||
<p>In FreeCAD tutto il vostro lavoro si trova all'interno dei documenti.
|
||
</p><p>Un documento contiene la geometria e può essere salvato in un file. Si possono avere simultaneamente più documenti aperti.
|
||
</p><p>Il documento, come la geometria contenuta all'interno, ha oggetti App e oggetti Gui. L'oggetto App contiene le definizioni della geometria reale, mentre l'oggetto Gui contiene i diversi punti di vista del documento.
|
||
</p><p>È possibile aprire più finestre, ognuna delle quali visualizza il lavoro con un fattore di zoom o un punto di vista diverso. Questi punti di vista fanno tutti parte dell'oggetto Gui del documento.
|
||
</p><p>Per accedere alla parte App del documento attualmente aperto (attivo), si digita:
|
||
</p>
|
||
<pre>myDocument = App.ActiveDocument </pre>
|
||
<p>Per creare un nuovo documento, si digita:
|
||
</p>
|
||
<pre>myDocument = App.newDocument("Document Name") </pre>
|
||
<p>Per accedere alla parte Gui del documento attualmente aperto (attivo), si digita:
|
||
</p>
|
||
<pre>myGuiDocument = Gui.ActiveDocument </pre>
|
||
<p>Per accedere alla vista corrente, si digita:
|
||
</p>
|
||
<pre>myView = Gui.ActiveDocument.ActiveView </pre>
|
||
<h3><span class="mw-headline" id="Utilizzo_di_moduli_aggiuntivi">Utilizzo di moduli aggiuntivi</span></h3>
|
||
<p>I moduli FreeCAD e FreeCADGui sono responsabili esclusivamente della creazione e della gestione degli oggetti nel documento di FreeCAD.
|
||
</p><p>Essi in realtà non fanno nulla che riguardi la creazione o la modifica della geometria.
|
||
</p><p>Ciò è dovuto al fatto che la geometria può essere di diversi tipi, e quindi la sua gestione è affidata ai moduli aggiuntivi, ognuno di essi ha il compito di gestire uno specifico tipo di geometria.
|
||
</p><p>Il modulo <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Parte</a> utilizza il kernel OpenCascade, e quindi è in grado di creare e manipolare geometrie di tipo <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Boundary_representation">B-rep</a>, che è appunto il tipo di geometria costruito da OpenCascade.
|
||
</p><p>Il modulo <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">Mesh</a> è in grado di costruire e modificare gli oggetti mesh.
|
||
</p><p>In questo modo, FreeCAD è in grado di gestire un'ampia gamma di tipi di oggetti che possono coesistere nello stesso documento, e nuovi tipi potrebbero essere aggiunti facilmente in futuro.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Creare_degli_oggetti">Creare degli oggetti</span></h4>
|
||
<p>Ogni modulo tratta la propria geometria in un modo specifico, però in genere tutti i moduli possono creare degli oggetti nel documento.
|
||
</p><p>Il documento FreeCAD è anche a conoscenza dei tipi di oggetti fornibili dai moduli e il seguente comando:
|
||
</p>
|
||
<pre>FreeCAD.ActiveDocument.supportedTypes() </pre>
|
||
<p>mostra tutti gli oggetti che si possono creare.
|
||
</p><p>Come esempio, proviamo a creare un oggetto mesh (trattato dal modulo Mesh) e un oggetto parte (trattato dal modulo Part):
|
||
</p>
|
||
<pre>myMesh = FreeCAD.ActiveDocument.addObject("Mesh::Feature","myMeshName")
|
||
myPart = FreeCAD.ActiveDocument.addObject("Part::Feature","myPartName") </pre>
|
||
<p>Il primo parametro è il tipo di oggetto, il secondo il nome dell'oggetto. I nostri due oggetti appaiono quasi come la stessa cosa.
|
||
</p><p>Al momento, essi non contengono ancora la geometria, e se li ispezioniamo con dir(myMesh) e con dir(myPart) la maggior parte delle loro proprietà sono le stesse. L'unica differenza è che myMesh ha una proprietà "Mesh" e "Part" ha una proprietà "Shape". È qui che i dati Mesh e Parte vengono memorizzati.
|
||
</p><p>Come esempio, creiamo un cubo di tipo Parte e poi lo archiviamo nel nostro oggetto myPart:
|
||
</p>
|
||
<pre>import Part
|
||
cube = Part.makeBox(2,2,2)
|
||
myPart.Shape = cube </pre>
|
||
<p>Se provate a memorizzare il cubo all'interno della proprietà Mesh dell'oggetto myMesh, vi verrà restituito un messaggio di "errore di tipo". Questo perché le proprietà sono fatte in modo da memorizzare solo uno specifico tipo. Nelle proprietà Mesh di myMesh, è possibile salvare solo elementi creati con il modulo Mesh.
|
||
</p><p>Notare che la maggior parte dei moduli hanno anche un collegamento per aggiungere la loro geometria al documento:
|
||
</p>
|
||
<pre>import Part
|
||
cube = Part.makeBox(2,2,2)
|
||
Part.show(cube) </pre>
|
||
<h4><span class="mw-headline" id="Modificare_gli_oggetti_2">Modificare gli oggetti</span></h4>
|
||
<p>La modifica di un oggetto si esegue nello stesso modo:
|
||
</p>
|
||
<pre>import Part
|
||
cube = Part.makeBox(2,2,2)
|
||
myPart.Shape = cube </pre>
|
||
<p>Ora cambiamo la sua forma in una più grande:
|
||
</p>
|
||
<pre>biggercube = Part.makeBox(5,5,5)
|
||
myPart.Shape = biggercube </pre>
|
||
<h4><span class="mw-headline" id="Interrogare_gli_oggetti">Interrogare gli oggetti</span></h4>
|
||
<p>È sempre possibile sapere di che tipo è un oggetto con:
|
||
</p>
|
||
<pre>myObj = FreeCAD.ActiveDocument.getObject("myObjectName")
|
||
print myObj.TypeId </pre>
|
||
<p>o sapere se un oggetto è derivato da uno di quelli base (struttura di Parte, struttura di Mesh, etc) con:
|
||
</p>
|
||
<pre>print myObj.isDerivedFrom("Part::Feature") </pre>
|
||
<p>Ora si può davvero iniziare a divertirsi con FreeCAD! Per vedere ciò che si può fare con il <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a>, leggere la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Topological_data_scripting/it" title="Topological data scripting/it">Script per ambiente Parte</a>, o la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" title="Mesh Scripting/it">Script per ambiente Mesh</a> per lavorare con il <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">Modulo Mesh</a>.
|
||
</p><p>Notare che, oltre ai moduli Parte e Mesh che sono i più completi e sono molto utilizzati, anche altri moduli come il <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_Module/it" title="Draft Module/it">Modulo Draft</a> hanno <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_API/it" title="Draft API/it">script</a> API che possono servirvi.
|
||
</p><p>Per un elenco completo di tutti i moduli e gli strumenti disponibili, consultare la sezione <a href="https://www.freecadweb.org/wiki/index.php?title=Category:API/it" title="Category:API/it">Category:API/it</a>.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h4><span class="mw-headline" id="Introduzione_2">Introduzione</span></h4>
|
||
<p>Prima di tutto si deve importare il modulo Mesh:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Mesh</pre></div>
|
||
<p>Dopo questa operazione si ha accesso al modulo Mesh e alla classe Mesh che offrono le funzioni del Kernel C++ Mesh di FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Creazione_e_caricamento">Creazione e caricamento</span></h3>
|
||
<p>Per creare un oggetto mesh vuoto basta usare il costruttore standard:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>mesh = Mesh.Mesh()</pre></div>
|
||
<p>Inoltre è possibile creare un oggetto da un file
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>mesh = Mesh.Mesh('D:/temp/Something.stl')</pre></div>
|
||
<p>Un elenco di tipi di file compatibili è disponibile <a href="/wiki/Feature_list/it#IO" title="Feature list/it">in questa pagina</a> al paragrafo 'Mesh'.
|
||
</p><p>Oppure crearlo tramite un gruppo di triangoli descritti dai loro vertici:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>planarMesh = [
|
||
# triangle 1
|
||
[-0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],[-0.5000,0.5000,0.0000],
|
||
#triangle 2
|
||
[-0.5000,-0.5000,0.0000],[0.5000,-0.5000,0.0000],[0.5000,0.5000,0.0000],
|
||
]
|
||
planarMeshObject = Mesh.Mesh(planarMesh)
|
||
Mesh.show(planarMeshObject)</pre></div>
|
||
<p>Il Kernel Mesh si occupa di creare una corretta struttura topologica dei dati individuando i punti e i bordi coincidenti.
|
||
</p><p>Più avanti si vedrà come è possibile verificare ed esaminare i dati mesh.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Modellazione">Modellazione</span></h3>
|
||
<p>Per creare delle geometrie regolari è possibile utilizzare lo script Python BuildRegularGeoms.py.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import BuildRegularGeoms</pre></div>
|
||
<p>Questo script fornisce i metodi per definire semplici corpi di rotazione, tipo le sfere, gli ellissoidi, i cilindri, i coni e i toroidi. Inoltre ha anche un metodo per creare un semplice cubo.
|
||
</p><p>Ad esempio, per creare un toroide si può fare nel modo seguente:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>t = BuildRegularGeoms.Toroid(8.0, 2.0, 50) # list with several thousands triangles
|
||
m = Mesh.Mesh(t)</pre></div>
|
||
<p>I primi due parametri definiscono i raggi del toroide e il terzo parametro è un fattore di sub-campionamento che stabilisce quanti triangoli vengono creati. Maggiore è questo valore e più il corpo è liscio, più questo valore è piccolo e più il corpo è grossolano (sfaccettato).
|
||
</p><p>La classe Mesh fornisce una serie di funzioni booleane che possono essere utilizzate per operazioni di modellazione. Essa fornisce l'unione, l'intersezione e la differenza tra due oggetti mesh.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>m1, m2 # are the input mesh objects
|
||
m3 = Mesh.Mesh(m1) # create a copy of m1
|
||
m3.unite(m2) # union of m1 and m2, the result is stored in m3
|
||
m4 = Mesh.Mesh(m1)
|
||
m4.intersect(m2) # intersection of m1 and m2
|
||
m5 = Mesh.Mesh(m1)
|
||
m5.difference(m2) # the difference of m1 and m2
|
||
m6 = Mesh.Mesh(m2)
|
||
m6.difference(m1) # the difference of m2 and m1, usually the result is different to m5</pre></div>
|
||
<p>Ecco infine, un esempio completo che calcola l'intersezione tra una sfera e un cilindro che interseca la sfera.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Mesh, BuildRegularGeoms
|
||
sphere = Mesh.Mesh( BuildRegularGeoms.Sphere(5.0, 50) )
|
||
cylinder = Mesh.Mesh( BuildRegularGeoms.Cylinder(2.0, 10.0, True, 1.0, 50) )
|
||
diff = sphere
|
||
diff = diff.difference(cylinder)
|
||
d = FreeCAD.newDocument()
|
||
d.addObject("Mesh::Feature","Diff_Sphere_Cylinder").Mesh=diff
|
||
d.recompute()</pre></div>
|
||
<h4><span class="mw-headline" id="Analisi_e_Test">Analisi e Test</span></h4>
|
||
<h4><span class="mw-headline" id="Scrivere_i_propri_algoritmi">Scrivere i propri algoritmi</span></h4>
|
||
<h3><span class="mw-headline" id="Esportazione">Esportazione</span></h3>
|
||
<p>Si può anche scrivere l'oggetto mesh in un modulo python:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>m.write("D:/Develop/Projekte/FreeCAD/FreeCAD_0.7/Mod/Mesh/SavedMesh.py")
|
||
import SavedMesh
|
||
m2 = Mesh.Mesh(SavedMesh.faces)</pre></div>
|
||
<h4><span class="mw-headline" id="Aspetti_correlati_alla_GUI">Aspetti correlati alla GUI</span></h4>
|
||
<h3><span class="mw-headline" id="Prove">Prove</span></h3>
|
||
<p>Una nutrita (anche se difficile da usare) libreria di script riferiti a Mesh sono gli script dell'unita di test del Modulo Mesh. In questa unit test sono letteralmente chiamati tutti i metodi e sono ottimizzate tutte le proprietà e gli attributi. Quindi, se siete abbastanza coraggiosi, date un'occhiata al <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/App/MeshTestsApp.py?view=markup">modulo unit test</a>.
|
||
</p><p>Vedere anche <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_API/it" title="Mesh API/it">Mesh API</a>
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<table class="fcinfobox wikitable ct" style="width: 230px; float: right; margin-left: 1em">
|
||
<tr>
|
||
<td class="ctTitle">
|
||
<h3><span class="mw-headline" id="Tutorial_5"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Base_ExampleCommandModel.png" class="image"><img alt="Base ExampleCommandModel.png" src="32px-Base_ExampleCommandModel.png" width="32" height="30" srcset="/wiki/images/thumb/9/93/Base_ExampleCommandModel.png/48px-Base_ExampleCommandModel.png 1.5x, /wiki/images/9/93/Base_ExampleCommandModel.png 2x" /></a> Tutorial</span></h3>
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Argomento
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Programmazione
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Livello di difficoltà
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Intermedio
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Tempo di esecuzione
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Autore
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Versione di FreeCAD
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">File di esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<td class="ctToc"><br />
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p><p><br />
|
||
Questa pagina descrive i diversi metodi per creare e modificare gli <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">oggetti di tipo Parte</a> tramite Python.
|
||
</p><p>Se non si conosce ancora Python, prima di leggere questa pagina, è meglio leggere la pagina di <a href="https://www.freecadweb.org/wiki/index.php?title=Introduction_to_Python/it" title="Introduction to Python/it">introduzione a Python</a> e quella in cui si descrive <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_Scripting_Basics/it" title="FreeCAD Scripting Basics/it">come funzionano gli script in FreeCAD</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Introduzione_3">Introduzione</span></h3>
|
||
<p>Qui si spiega come controllare il <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a> direttamente tramite l'interprete Python di FreeCAD, o tramite degli script esterni.
|
||
</p><p>Se avete bisogno di ulteriori informazioni su come funzionano gli script in FreeCAD, potete consultare la sezione <a href="https://www.freecadweb.org/wiki/index.php?title=Scripting/it" class="mw-redirect" title="Scripting/it">Script</a> e la sezione <a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_Scripting_Basics/it" title="FreeCAD Scripting Basics/it">Concetti base sugli script in FreeCAD</a>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Diagramma_delle_classi">Diagramma delle classi</span></h4>
|
||
<p>Questa è una panoramica delle classi <a rel="nofollow" class="external text" href="http://it.wikipedia.org/wiki/Unified_Modeling_Language">Linguaggio di Modellazione Unificato (UML)</a> più importanti del modulo Parte:
|
||
</p>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Part_Classes.jpg" class="image" title="Python classes of the Part module"><img alt="Python classes of the Part module" src="Part_Classes.jpg" width="744" height="520" /></a></div></div>
|
||
<h4><span class="mw-headline" id="Geometria">Geometria</span></h4>
|
||
<p>Gli oggetti geometrici sono le fondamenta per la costruzione di tutti gli oggetti topologici:
|
||
</p>
|
||
<ul><li> <b>Geom</b> Classe base degli oggetti geometrici</li>
|
||
<li> <b>Line</b> Linea retta in 3D, definita dal punto iniziale e dal punto finale</li>
|
||
<li> <b>Circle</b> Cerchio o arco definito dal centro, dal punto iniziale e dal punto finale</li>
|
||
<li> <b>......</b> E presto ancora altro</li></ul>
|
||
<h4><span class="mw-headline" id="Topologia">Topologia</span></h4>
|
||
<p>Sono disponibili i seguenti tipi di dati topologici:
|
||
</p>
|
||
<ul><li> <b>compound</b> Un gruppo di qualsiasi tipo di oggetto topologico.</li>
|
||
<li> <b>compsolid</b> Un solido composito è un insieme di solidi collegati dalle loro facce. E' una estensione dei concetti <i>wire</i> e <i>shell</i> ai solidi.</li>
|
||
<li> <b>solid</b> Una parte di spazio limitato da shell. E' tridimensionale</li>
|
||
<li> <b>shell</b> Una serie di facce connesse nei loro bordi. Una shell (guscio) può essere aperta o chiusa.</li>
|
||
<li> <b>face</b> In 2D è una parte di un piano; in 3D è una parte di una superficie. La sua geometria è vincolata (delimitata/tagliata) dai suoi bordi.</li>
|
||
<li> <b>wire</b> Una serie di bordi (una polilinea) collegati tra di loro nei vertici. Può essere un profilo aperto o chiuso, secondo se i bordi sono interamente concatenati oppure no.</li>
|
||
<li> <b>edge</b> Un elemento topologico corrispondente ad una curva limitata. Un bordo è generalmente delimitato dai vertici. Ha una dimensione.</li>
|
||
<li> <b>vertex</b> Un elemento topologico corrispondente ad un punto. Esso non ha dimensioni.</li>
|
||
<li> <b>shape</b> Un termine generico che comprende tutti i precedenti.</li></ul>
|
||
<h3><span class="mw-headline" id="Veloce_esempio:_Creare_una_topologia_base">Veloce esempio: Creare una topologia base</span></h3>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Wire.png" class="image" title="Wire"><img alt="Wire" src="Wire.png" width="260" height="137" /></a>
|
||
</p><p><br />
|
||
Creeremo ora una topologia tramite la costruzione della semplice geometria. Come caso di studio, utilizzeremo una forma come quella che si vede nella figura, composta da quattro vertici, due cerchi e due linee.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_la_geometria">Creare la geometria</span></h5>
|
||
<p>Per prima cosa dobbiamo creare le singole parti geometriche di questo contorno (wire).
|
||
È necessario che i vertici delle parti geometriche siano nella <b>stessa</b> posizione. In caso contrario, in seguito potremmo non essere in grado di collegare le parti geometriche in una topologia!
|
||
</p><p>Quindi creiamo prima i punti:
|
||
</p>
|
||
<pre>from FreeCAD import Base
|
||
V1 = Base.Vector(0,10,0)
|
||
V2 = Base.Vector(30,10,0)
|
||
V3 = Base.Vector(30,-10,0)
|
||
V4 = Base.Vector(0,-10,0) </pre>
|
||
<h5><span class="mw-headline" id="Arco">Arco</span></h5>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Circel.png" class="image" title="Circle"><img alt="Circle" src="Circel.png" width="111" height="135" /></a>
|
||
</p><p><br />
|
||
Per creare un arco di cerchio prima creiamo un punto di supporto poi creiamo l'arco di cerchio tramite tre punti:
|
||
</p>
|
||
<pre>VC1 = Base.Vector(-10,0,0)
|
||
C1 = Part.Arc(V1,VC1,V4)
|
||
# and the second one
|
||
VC2 = Base.Vector(40,0,0)
|
||
C2 = Part.Arc(V2,VC2,V3) </pre>
|
||
<h5><span class="mw-headline" id="Linea">Linea</span></h5>
|
||
<p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Line.png" class="image" title="Line"><img alt="Line" src="Line.png" width="175" height="76" /></a>
|
||
</p><p><br />
|
||
</p>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>La linea può essere creata molto semplicemente tramite i punti:
|
||
</p>
|
||
</div>
|
||
<pre>L1 = Part.LineSegment(V1,V2)
|
||
# and the second one
|
||
L2 = Part.LineSegment(V3,V4) </pre>
|
||
<p><i>Note: in FreeCAD 0.16 Part.Line was used, for FreeCAD 0.17 Part.LineSegment has to be used</i>
|
||
</p>
|
||
<h5><span class="mw-headline" id="Unire_tutto">Unire tutto</span></h5>
|
||
<p>L'ultimo passaggio consiste nell'unire tutti gli elementi geometrici di base e produrre una forma topologica:
|
||
</p>
|
||
<pre>S1 = Part.Shape([C1,L1,C2,L2]) </pre>
|
||
<h5><span class="mw-headline" id="Creare_un_prisma">Creare un prisma</span></h5>
|
||
<p>Ora si può estrudere il contorno nella direzione voluta e creare una forma 3D reale:
|
||
</p>
|
||
<pre>W = Part.Wire(S1.Edges)
|
||
P = W.extrude(Base.Vector(0,0,10)) </pre>
|
||
<h5><span class="mw-headline" id="Mostrare_il_risultato">Mostrare il risultato</span></h5>
|
||
<p>Per visualizzare il prisma:
|
||
</p>
|
||
<pre>Part.show(P) </pre>
|
||
<h3><span class="mw-headline" id="Creare_forme_di_base">Creare forme di base</span></h3>
|
||
<p>Con i metodi "make...()" del Modulo Parte è possibile creare facilmente oggetti topologici di base (chiamati anche forme primitive). Ad esempio, si può creare un cubo con:
|
||
</p>
|
||
<pre>b = Part.makeBox(100,100,100)
|
||
Part.show(b) </pre>
|
||
<p>Altri metodi make...() disponibili sono:
|
||
</p>
|
||
<ul><li> makeBox(l,w,h) -- Produce un box situato in p e rivolto nella direzione d con le dimensioni (l,w,h)</li>
|
||
<li> makeCircle(raggio) -- Crea un cerchio con un raggio dato</li>
|
||
<li> makeCone(raggio1,raggio2,altezza) -- Restituisce un cono con raggio e altezza dati</li>
|
||
<li> makeCylinder(raggio,altezza) -- Crea un cilindro con raggio e l'altezza prestabilite</li>
|
||
<li> makeLine((x1,y1,z1),(x2,y2,z2)) -- Crea una linea tra due punti</li>
|
||
<li> makePlane(lunghezza,larghezza) -- Crea un piano con lunghezza e larghezza</li>
|
||
<li> makePolygon(lista) -- Restituisce un poligono da una serie di punti</li>
|
||
<li> makeSphere(raggio) -- Crea una sfera di raggio dato</li>
|
||
<li> makeTorus(raggio1,raggio2) -- Crea un toro con raggi determinati</li></ul>
|
||
<p>Per avere un elenco completo dei metodi disponibili con il modulo Parte consultare la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Part_API/it" title="Part API/it">API di Parte</a> (<a href="Part_API.html" title="Part API">Part API in inglese</a>).
|
||
</p>
|
||
<h5><span class="mw-headline" id="Importare_i_moduli_necessari">Importare i moduli necessari</span></h5>
|
||
<p>In primo luogo è necessario importare il modulo Parte per poter utilizzare i suoi contenuti in Python. Inoltre, importiamo anche il modulo Base dall'interno del modulo FreeCAD:
|
||
</p>
|
||
<pre>import Part
|
||
from FreeCAD import Base </pre>
|
||
<h5><span class="mw-headline" id="Creare_un_vettore">Creare un vettore</span></h5>
|
||
<p>Per la costruzione di forme, i <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Euclidean_vector">Vettori</a> sono una delle parti di informazione più importanti. Di solito, ma non necessariamente sempre, essi contengono 3 numeri che sono le coordinate cartesiane x, y e z. È possibile creare un vettore nel modo seguente:
|
||
</p>
|
||
<pre>myVector = Base.Vector(3,2,0) </pre>
|
||
<p>Abbiamo appena creato un vettore nelle coordinate x=3, y=2, z=0. Nel modulo Parte, i vettori sono usati in tutte le parti. Le forme Parte usano anche un altro tipo di rappresentazione del punto, chiamato Vertex (Vertice), che in realtà non è altro che un contenitore per un vettore. Si accede al vettore di un vertice in questo modo:
|
||
</p>
|
||
<pre>myVertex = myShape.Vertexes[0]
|
||
print myVertex.Point
|
||
> Vector (3, 2, 0) </pre>
|
||
<h5><span class="mw-headline" id="Creare_un_bordo">Creare un bordo</span></h5>
|
||
<p>Un bordo non è altro che una linea con due vertici:
|
||
</p>
|
||
<pre>edge = Part.makeLine((0,0,0), (10,0,0))
|
||
edge.Vertexes
|
||
> [<Vertex object at 01877430>, <Vertex object at 014888E0>] </pre>
|
||
<p>Nota: È anche possibile creare un bordo passando due vettori:
|
||
</p>
|
||
<pre>vec1 = Base.Vector(0,0,0)
|
||
vec2 = Base.Vector(10,0,0)
|
||
line = Part.LineSegment(vec1,vec2)
|
||
edge = line.toShape() </pre>
|
||
<p>È possibile trovare la lunghezza e il centro di un bordo in questo modo:
|
||
</p>
|
||
<pre>edge.Length
|
||
> 10.0
|
||
edge.CenterOfMass
|
||
> Vector (5, 0, 0) </pre>
|
||
<h5><span class="mw-headline" id="Mostrare_la_forma_sullo_schermo">Mostrare la forma sullo schermo</span></h5>
|
||
<p>Con le operazioni precedenti abbiamo creato un oggetto bordo, ma esso non è visibile da nessuna parte sullo schermo. Questo perché fino a qui abbiamo manipolato solo oggetti Python. La scena 3D di FreeCAD mostra solo quello che gli si chiede di visualizzare. Per farlo, usiamo questo semplice metodo:
|
||
</p>
|
||
<pre>Part.show(edge) </pre>
|
||
<p>Nel nostro documento FreeCAD viene creato un oggetto, e la nostra forma "edge" viene attribuita ad esso. Utilizzare questo metodo ogni volta che si vuole visulizzare il proprio prodotto sullo schermo.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_un_contorno">Creare un contorno</span></h5>
|
||
<p>Un contorno è una polilinea e può essere creato da una serie di bordi o anche da una serie di contorni:
|
||
</p>
|
||
<pre>edge1 = Part.makeLine((0,0,0), (10,0,0))
|
||
edge2 = Part.makeLine((10,0,0), (10,10,0))
|
||
wire1 = Part.Wire([edge1,edge2])
|
||
edge3 = Part.makeLine((10,10,0), (0,10,0))
|
||
edge4 = Part.makeLine((0,10,0), (0,0,0))
|
||
wire2 = Part.Wire([edge3,edge4])
|
||
wire3 = Part.Wire([wire1,wire2])
|
||
wire3.Edges
|
||
> [<Edge object at 016695F8>, <Edge object at 0197AED8>, <Edge object at 01828B20>, <Edge object at 0190A788>]
|
||
Part.show(wire3) </pre>
|
||
<p>Part.show(wire3) serve per visualizzare i 4 bordi che compongono il nostro contorno. Si possono facilmente recuperare altre informazioni utili con:
|
||
</p>
|
||
<pre>wire3.Length
|
||
> 40.0
|
||
wire3.CenterOfMass
|
||
> Vector (5, 5, 0)
|
||
wire3.isClosed()
|
||
> True
|
||
wire2.isClosed()
|
||
> False </pre>
|
||
<h5><span class="mw-headline" id="Creare_una_faccia">Creare una faccia</span></h5>
|
||
<p>Sono valide solo le facce create da contorni chiusi. Nell'esempio, wire3 è un contorno chiuso, ma wire2 non è un contorno chiuso (vedi esempio precedente)
|
||
</p>
|
||
<pre>face = Part.Face(wire3)
|
||
face.Area
|
||
> 99.999999999999972
|
||
face.CenterOfMass
|
||
> Vector (5, 5, 0)
|
||
face.Length
|
||
> 40.0
|
||
face.isValid()
|
||
> True
|
||
sface = Part.Face(wire2)
|
||
face.isValid()
|
||
> False </pre>
|
||
<p>Solamente le facce hanno un'area, non i contorni né i bordi.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_una_circonferenza">Creare una circonferenza</span></h5>
|
||
<p>Un cerchio può essere creato in questo semplice modo:
|
||
</p>
|
||
<pre>circle = Part.makeCircle(10)
|
||
circle.Curve
|
||
> Circle (Radius : 10, Position : (0, 0, 0), Direction : (0, 0, 1)) </pre>
|
||
<p>Se si vuole crearlo in una determinata posizione e con una direzione prestabilita:
|
||
</p>
|
||
<pre>ccircle = Part.makeCircle(10, Base.Vector(10,0,0), Base.Vector(1,0,0))
|
||
ccircle.Curve
|
||
> Circle (Radius : 10, Position : (10, 0, 0), Direction : (1, 0, 0)) </pre>
|
||
<p>ccircle verrà creato a distanza 10 dall'origine su x e sarà rivolto verso l'asse x. Nota: makeCircle accetta solo Base.Vector() per la posizione e le normali, ma non tuple. È inoltre possibile creare una parte di cerchio fornendo un angolo iniziale e un angolo finale come:
|
||
</p>
|
||
<pre>from math import pi
|
||
arc1 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 0, 180)
|
||
arc2 = Part.makeCircle(10, Base.Vector(0,0,0), Base.Vector(0,0,1), 180, 360) </pre>
|
||
<p>Unendo arc1 con arc2 (sono due semicerchi) si ottiene un cerchio completo.
|
||
Gli angoli devono essere forniti in gradi, se avete angoli in radianti convertirli usando semplicemente la formula: gradi = radianti * 180/PI o utilizzando il modulo matematico di Python (ovviamente, dopo aver importato il modulo math):
|
||
</p>
|
||
<pre>degrees = math.degrees(radians) </pre>
|
||
<div class="mw-translate-fuzzy">
|
||
<h5><span class="mw-headline" id="Creare_un_arco_attraverso_dei_punti">Creare un arco attraverso dei punti</span></h5>
|
||
<p>Purtroppo, per creare un arco lungo tre punti non esiste una funzione makeArc ma si deve usare la funzione Part.Arc. Fondamentalmente si può pensare come un arco che unisce il punto iniziale e finale passando per il punto medio. Part.Arc crea un oggetto arco nel quale deve essere chiamato .toShape() per ottenere un oggetto bordo, allo stesso modo di quando si usa Part.Line al posto di Part.makeLine.
|
||
</p>
|
||
</div>
|
||
<pre>arc = Part.Arc(Base.Vector(0,0,0),Base.Vector(0,5,0),Base.Vector(5,5,0))
|
||
arc
|
||
> <Arc object>
|
||
arc_edge = arc.toShape() </pre>
|
||
<p>Arc accetta solo punti Base.Vector(), ma non tuple. arc_edge è ciò che vogliamo e che possiamo visualizzare con Part.show(arc_edge). Inoltre è possibile ottenere un arco utilizzando una porzione di un cerchio:
|
||
</p>
|
||
<pre>from math import pi
|
||
circle = Part.Circle(Base.Vector(0,0,0),Base.Vector(0,0,1),10)
|
||
arc = Part.Arc(c,0,pi) </pre>
|
||
<p>Gli archi sono bordi validi, come le linee. Quindi possono essere usati anche nei contorni.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_un_poligono">Creare un poligono</span></h5>
|
||
<p>Un poligono è semplicemente un contorno composto da diversi bordi diritti. La funzione makePolygon prende una lista di punti e crea un contorno attraverso questi punti:
|
||
</p>
|
||
<pre>lshape_wire = Part.makePolygon([Base.Vector(0,5,0),Base.Vector(0,0,0),Base.Vector(5,0,0)]) </pre>
|
||
<h5><span class="mw-headline" id="Creare_una_curva_di_Bezier">Creare una curva di Bezier</span></h5>
|
||
<p>Le curve di Bézier sono utilizzate per modellare delle curve <i>morbide</i> utilizzando una serie di Poles (punti) e weight (pesi) opzionali. La funzione sottostante crea una Part.BezierCurve da una serie di punti FreeCAD.Vector. (Notare che gli indici di pole e di weight partono da 1, non da 0.)
|
||
</p>
|
||
<pre>def makeBCurveEdge(Points):
|
||
geomCurve = Part.BezierCurve()
|
||
geomCurve.setPoles(Points)
|
||
edge = Part.Edge(geomCurve)
|
||
return(edge) </pre>
|
||
<h5><span class="mw-headline" id="Creare_un_piano">Creare un piano</span></h5>
|
||
<p>Un Piano è semplicemente una superficie piana rettangolare. Il metodo utilizzato per crearlo è questo: <b>makePlane(lunghezza, larghezza, [start_pnt, dir_normal])</b>. Per impostazione predefinita start_pnt=Vector (0,0,0) e dir_normal=Vector(0,0,1). Utilizzando dir_normal=Vector(0,0,1) creeremo il piano orientato come l'asse z, mentre con dir_normal=Vector(1,0,0) creeremo il piano orientato come l'asse x:
|
||
</p>
|
||
<pre>plane = Part.makePlane(2,2)
|
||
plane
|
||
><Face object at 028AF990>
|
||
plane = Part.makePlane(2,2, Base.Vector(3,0,0), Base.Vector(0,1,0))
|
||
plane.BoundBox
|
||
> BoundBox (3, 0, 0, 5, 0, 2) </pre>
|
||
<p>BoundBox è il parallelepipedo che racchiude il piano e la cui diagonale parte da (3,0,0) e termina in (5,0,2). Qui lo spessore di BoundBox sull'asse y è zero, poiché la nostra forma è totalmente piatta.
|
||
</p><p>Nota: makePlane accetta solo Base.Vector() per start_pnt e dir_normal e non tuple
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_una_ellisse">Creare una ellisse</span></h5>
|
||
<p>Per creare un'ellisse ci sono diversi modi:
|
||
</p>
|
||
<pre>Part.Ellipse() </pre>
|
||
<p>Crea un'ellisse con raggio maggiore 2 e raggio minore 1 con centro in (0,0,0)
|
||
</p>
|
||
<pre>Part.Ellipse(Ellipse) </pre>
|
||
<p>Crea una copia dell'ellisse data
|
||
</p>
|
||
<pre>Part.Ellipse(S1,S2,Center) </pre>
|
||
<p>Crea un'ellisse centrato sul punto Center, in cui il piano dell'ellisse è definito da Center, S1 e S2, il suo asse maggiore è definito da Center e S1, il suo raggio maggiore è la distanza tra Center e S1, e il suo raggio minore è la distanza tra S2 e l'asse maggiore.
|
||
</p>
|
||
<pre>Part.Ellipse(Center,MajorRadius,MinorRadius) </pre>
|
||
<p>Crea un'ellisse con il raggio maggiore e il raggio minore MajorRadius e MinorRadius, e situata nel piano definito da Center e la normale (0,0,1)
|
||
</p>
|
||
<pre>eli = Part.Ellipse(Base.Vector(10,0,0),Base.Vector(0,5,0),Base.Vector(0,0,0))
|
||
Part.show(eli.toShape()) </pre>
|
||
<p>Nel codice precedente abbiamo passato S1, S2 e il centro. Analogamente a Arco, Ellisse crea un oggetto ellisse ma non un bordo, quindi, per visualizzarlo è necessario di convertirlo in bordo utilizzando toShape().
|
||
</p><p>Nota: Arc accetta solo Base.Vector() per i punti, ma non le tuple
|
||
</p>
|
||
<pre>eli = Part.Ellipse(Base.Vector(0,0,0),10,5)
|
||
Part.show(eli.toShape()) </pre>
|
||
<p>per il costruttore Ellisse precedente abbiamo passato il centro, MajorRadius e MinorRadius
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_un_toro">Creare un toro</span></h5>
|
||
<p>Utilizzando il metodo <b>makeTorus(radius1,radius2,[pnt,dir,angle1,angle2,angle])</b>. Per impostazione predefinita PNT=Vector(0,0,0), dir=Vector(0,0,1), angle1=0, angle2=360 e angolo=360. Si consideri un toro, come un cerchio piccolo che si muove lungo un cerchio grande. Radius1 è il raggio del cerchio grande, radius2 è il raggio del cerchio piccolo, pnt è il centro del toro e dir è la direzione normale. angle1 e angle2 sono angoli in radianti per il cerchio piccolo cerchio, l'ultimo parametro angolo serve per realizzare una porzione del toro:
|
||
</p>
|
||
<pre>torus = Part.makeTorus(10, 2) </pre>
|
||
<p>Il codice precedente creerà un toro con diametro 20 (raggio 10) e spessore di 4 (raggio del cerchio piccolo 2)
|
||
</p>
|
||
<pre>tor=Part.makeTorus(10,5,Base.Vector(0,0,0),Base.Vector(0,0,1),0,180) </pre>
|
||
<p>Il codice sopra creerà una fetta del toro
|
||
</p>
|
||
<pre>tor=Part.makeTorus(10,5,Base.Vector(0,0,0),Base.Vector(0,0,1),0,360,180) </pre>
|
||
<p>Il codice precedente creerà un semi toro, solo l'ultimo parametro viene modificato vale a dire l'angolo e gli angoli rimanenti sono predefiniti. Impostare il valore dell'angolo a 180 creerà il toro da 0 a 180, cioè, un mezzo toro.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Creare_un_cubo_o_parallelepipedo">Creare un cubo o parallelepipedo</span></h5>
|
||
<p>Utilizzando <b>makeBox(lunghezza, larghezza, altezza,[pnt,dir])</b>. Per impostazione predefinita pnt=Vector(0,0,0) e dir=Vector(0,0,1)
|
||
</p>
|
||
<pre>box = Part.makeBox(10,10,10)
|
||
len(box.Vertexes)
|
||
> 8 </pre>
|
||
<h5><span class="mw-headline" id="Creare_una_sfera">Creare una sfera</span></h5>
|
||
<p>Utilizzando <b>makeSphere(radius,[pnt, dir, angle1,angle2,angle3])</b>. Per impostazione predefinita pnt=Vector(0,0,0), dir=Vector(0,0,1), angle1=-90, angle2=90 e angle3=360. angle1 e angle2 sono il minimo e il massimo in verticale della sfera, angle3 è il diametro della sfera stessa.
|
||
</p>
|
||
<pre>sphere = Part.makeSphere(10)
|
||
hemisphere = Part.makeSphere(10,Base.Vector(0,0,0),Base.Vector(0,0,1),-90,90,180) </pre>
|
||
<h5><span class="mw-headline" id="Creare_un_cilindro">Creare un cilindro</span></h5>
|
||
<p>Utilizzando <b>makeCylinder(radius,height,[pnt,dir,angle])</b>. Per impostazione predefinita pnt=Vector(0,0,0),dir=Vector(0,0,1) e angle=360
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cylinder = Part.makeCylinder(5,20)
|
||
partCylinder = Part.makeCylinder(5,20,Base.Vector(20,0,0),Base.Vector(0,0,1),180)</pre></div>
|
||
<h5><span class="mw-headline" id="Creare_un_cono">Creare un cono</span></h5>
|
||
<p>Utilizzando <b>makeCone(radius1,radius2,height,[pnt,dir,angle])</b>. Per impostazione predefinita pnt=Vector(0,0,0), dir=Vector(0,0,1) e angle=360
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cone = Part.makeCone(10,0,20)
|
||
semicone = Part.makeCone(10,0,20,Base.Vector(20,0,0),Base.Vector(0,0,1),180)</pre></div>
|
||
<h3><span class="mw-headline" id="Modificare_delle_forme">Modificare delle forme</span></h3>
|
||
<p>Ci sono diversi modi per modificare le forme. Alcuni sono semplici operazioni di trasformazione come lo spostamento o la rotazione di forme, altri sono più complessi, come ad esempio unire e sottrarre una forma da un'altra. Tenere in considerazione questo.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Operazioni_di_trasformazione">Operazioni di trasformazione</span></h4>
|
||
<h5><span class="mw-headline" id="Traslare_una_forma">Traslare una forma</span></h5>
|
||
<p>Traslare è l'atto di spostare una forma da un luogo all'altro. Qualsiasi forma (bordo, faccia, cubo, ecc ..) può essere traslata in questo modo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myShape = Part.makeBox(2,2,2)
|
||
myShape.translate(Base.Vector(2,0,0))</pre></div>
|
||
<p>Questo sposterà la forma "myShape" di 2 unità nella direzione dell'asse x.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Ruotare_una_forma">Ruotare una forma</span></h5>
|
||
<p>Per ruotare una forma, è necessario specificare il centro di rotazione, l'asse e l'angolo di rotazione:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myShape.rotate(Vector(0,0,0),Vector(0,0,1),180)</pre></div>
|
||
<p>Il codice precedente ruota la forma di 180 gradi attorno all'asse z.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Trasformazioni_generiche.2C_con_matrici">Trasformazioni generiche, con matrici</span></h5>
|
||
<p>Una matrice è un modo molto conveniente per memorizzare le trasformazioni nel mondo 3D. In una matrice singola, è possibile impostare valori di traslazione, rotazione e scala da applicare ad un oggetto. Ad esempio:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myMat = Base.Matrix()
|
||
myMat.move(Base.Vector(2,0,0))
|
||
myMat.rotateZ(math.pi/2)</pre></div>
|
||
<p>Nota. Le matrici di FreeCAD lavorano in radianti. Inoltre, quasi tutte le operazioni di matrici che accettano un vettore possono anche accettare 3 numeri, quindi le seguenti 2 linee fanno la stessa cosa:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myMat.move(2,0,0)
|
||
myMat.move(Base.Vector(2,0,0))</pre></div>
|
||
<p>Quando la matrice è impostata, possiamo applicarla alla nostra forma. FreeCAD fornisce 2 metodi per farlo: transformShape() e transformGeometry(). La differenza è che con il primo, si è sicuri che non si verifichino deformazioni (vedi "scalare una forma" più avanti). Quindi possiamo applicare la nostra trasformazione in questo modo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> myShape.trasformShape(myMat)</pre></div>
|
||
<p>oppure
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myShape.transformGeometry(myMat)</pre></div>
|
||
<h5><span class="mw-headline" id="Scalare_una_forma">Scalare una forma</span></h5>
|
||
<p>Scalare (ridimensionare) una forma è una delle operazioni più pericolose perché, a differenza della traslazione o della rotazione, il ridimensionamento non uniforme (con valori diversi per gli assi x, y, z) può modificare la struttura della forma. Ad esempio, la scalatura di un cerchio con un valore in orizzontale diverso da quello in verticale lo trasformerà in un ellisse, forma che matematicamente si comporta in modo molto diverso. Per il ridimensionamento, non possiamo usare transformShape, ma dobbiamo usare transformGeometry():
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>myMat = Base.Matrix()
|
||
myMat.scale(2,1,1)
|
||
myShape=myShape.transformGeometry(myMat)</pre></div>
|
||
<h4><span class="mw-headline" id="Operazioni_Booleane_2">Operazioni Booleane</span></h4>
|
||
<h5><span class="mw-headline" id="Sottrazione">Sottrazione</span></h5>
|
||
<p>Nel gergo OCC/FreeCAD, la differenza (sottrazione) di una forma da un altra si chiama "cut" <i>taglia</i> e si esegue così:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cylinder = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
|
||
sphere = Part.makeSphere(5,Base.Vector(5,0,0))
|
||
diff = cylinder.cut(sphere)</pre></div>
|
||
<h5><span class="mw-headline" id="Intersezione">Intersezione</span></h5>
|
||
<p>Allo stesso modo, l'intersezione tra le forme 2 è chiamato "common" <i>intersezione</i> e viene eseguita in questo modo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cylinder1 = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
|
||
cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-5),Base.Vector(0,0,1))
|
||
common = cylinder1.common(cylinder2)</pre></div>
|
||
<h5><span class="mw-headline" id="Unione">Unione</span></h5>
|
||
<p>Unione è chiamata "fuse" <i>fusione</i> e funziona allo stesso modo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cylinder1 = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
|
||
cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-5),Base.Vector(0,0,1))
|
||
fuse = cylinder1.fuse(cylinder2)</pre></div>
|
||
<h5><span class="mw-headline" id="Sezione">Sezione</span></h5>
|
||
<p>Una sezione è l'intersezione tra una forma solida e una forma piana. Restituisce una curva di intersezione, un composto con i bordi:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>cylinder1 = Part.makeCylinder(3,10,Base.Vector(0,0,0),Base.Vector(1,0,0))
|
||
cylinder2 = Part.makeCylinder(3,10,Base.Vector(5,0,-5),Base.Vector(0,0,1))
|
||
section = cylinder1.section(cylinder2)
|
||
section.Wires
|
||
> []
|
||
section.Edges
|
||
> [<Edge object at 0D87CFE8>, <Edge object at 019564F8>, <Edge object at 0D998458>,
|
||
<Edge object at 0D86DE18>, <Edge object at 0D9B8E80>, <Edge object at 012A3640>,
|
||
<Edge object at 0D8F4BB0>]</pre></div>
|
||
<h5><span class="mw-headline" id="Estrusione">Estrusione</span></h5>
|
||
<p>Estrusione è l'atto di "spingere" una forma piatta in una certa direzione per produrre un corpo solido. Ad esempio, pensate di "spingere" un cerchio e di produrre un tubo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>circle = Part.makeCircle(10)
|
||
tube = circle.extrude(Base.Vector(0,0,2))</pre></div>
|
||
<p>Se il cerchio è vuoto (sola circonferenza), si ottiene un tubo (cavo). Se il cerchio è in realtà un disco, con una faccia piena, si ottiene un cilindro (pieno):
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>wire = Part.Wire(circle)
|
||
disc = Part.Face(wire)
|
||
cylinder = disc.extrude(Base.Vector(0,0,2))</pre></div>
|
||
<h3><span class="mw-headline" id="Esplorare_le_forme">Esplorare le forme</span></h3>
|
||
<p>Si può facilmente esplorare la struttura dei dati topologici:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
b = Part.makeBox(100,100,100)
|
||
b.Wires
|
||
w = b.Wires[0]
|
||
w
|
||
w.Wires
|
||
w.Vertexes
|
||
Part.show(w)
|
||
w.Edges
|
||
e = w.Edges[0]
|
||
e.Vertexes
|
||
v = e.Vertexes[0]
|
||
v.Point</pre></div>
|
||
<p>Digitando le righe di cui sopra nell'interprete Python, si otterrà una buona descrizione della struttura degli oggetti Parte. Qui, il nostro comando makeBox() crea una forma solida. Questo solido, come tutti i solidi Parte, contiene delle facce. Le facce contengono sempre delle linee (polilinee), che sono liste di bordi che delimitano la faccia. Ciascuna faccia ha almeno un contorno chiuso (ne può avere più di uno se la faccia presenta dei fori). Nel contorno, possiamo guardare a ciascun bordo separatamente, e all'interno di ogni bordo, possiamo vedere i vertici. Ovviamente, i bordi diritti hanno solo due vertici.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Analizzare_i_bordi">Analizzare i bordi</span></h4>
|
||
<p>Nel caso in cui il bordo è una curva arbitraria, è più probabile che si voglia fare una discretizzazione. In FreeCAD i bordi sono parametrizzati dalle loro lunghezze. Ciò significa che si può percorrere un bordo/curva con la sua lunghezza:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
box = Part.makeBox(100,100,100)
|
||
anEdge = box.Edges[0]
|
||
print anEdge.Length</pre></div>
|
||
<p>Ora è possibile accedere a un sacco di proprietà del bordo utilizzando la lunghezza come una posizione. Ciò significa che se il bordo è lungo 100 mm la posizione iniziale è 0 e la posizione finale è 100.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>anEdge.tangentAt(0.0) # tangent direction at the beginning
|
||
anEdge.valueAt(0.0) # Point at the beginning
|
||
anEdge.valueAt(100.0) # Point at the end of the edge
|
||
anEdge.derivative1At(50.0) # first derivative of the curve in the middle
|
||
anEdge.derivative2At(50.0) # second derivative of the curve in the middle
|
||
anEdge.derivative3At(50.0) # third derivative of the curve in the middle
|
||
anEdge.centerOfCurvatureAt(50) # center of the curvature for that position
|
||
anEdge.curvatureAt(50.0) # the curvature
|
||
anEdge.normalAt(50) # normal vector at that position (if defined)</pre></div>
|
||
<h4><span class="mw-headline" id="Utilizzare_la_selezione">Utilizzare la selezione</span></h4>
|
||
<p>Qui ora vediamo come possiamo usare la selezione che l'utente ha nel visualizzatore. Prima di tutto creiamo una scatola e la mostriamo nel visualizzatore:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
Part.show(Part.makeBox(100,100,100))
|
||
Gui.SendMsgToActiveView("ViewFit")</pre></div>
|
||
<p>Selezionate ora alcune facce o bordi. Con questo script è possibile iterare tutti gli oggetti selezionati e i relativi elementi secondari:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>for o in Gui.Selection.getSelectionEx():
|
||
print o.ObjectName
|
||
for s in o.SubElementNames:
|
||
print "name: ",s
|
||
for s in o.SubObjects:
|
||
print "object: ",s</pre></div>
|
||
<p>Selezionate alcuni bordi e questo script calcolerà la lunghezza:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>length = 0.0
|
||
for o in Gui.Selection.getSelectionEx():
|
||
for s in o.SubObjects:
|
||
length += s.Length
|
||
print "Length of the selected edges:" ,length</pre></div>
|
||
<h3><span class="mw-headline" id="Esempio_completo:_La_bottiglia_OCC">Esempio completo: La bottiglia OCC</span></h3>
|
||
<p>Un esempio tipico si trova nella pagina <a rel="nofollow" class="external text" href="http://www.opencascade.com/doc/occt-6.9.0/overview/html/occt__tutorial.html#sec1">OpenCasCade Technology Tutorial</a> che spiega come costruire una bottiglia. Questo è un buon esercizio anche per FreeCAD. In effetti, si può seguire il nostro esempio qui sotto e la pagina di OCC contemporaneamente, capirete bene come sono implementate le strutture di OCC in FreeCAD. Lo script completo è anche incluso nell'installazione di FreeCAD (all'interno della cartella Mod/Part) e può essere chiamato dall'interprete python digitando:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
import MakeBottle
|
||
bottle = MakeBottle.makeBottle()
|
||
Part.show(bottle)</pre></div>
|
||
<h4><span class="mw-headline" id="Lo_script_completo">Lo script completo</span></h4>
|
||
<p>Questo è lo script completo MakeBottle:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part, FreeCAD, math
|
||
from FreeCAD import Base
|
||
|
||
def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):
|
||
aPnt1=Base.Vector(-myWidth/2.,0,0)
|
||
aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
|
||
aPnt3=Base.Vector(0,-myThickness/2.,0)
|
||
aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
|
||
aPnt5=Base.Vector(myWidth/2.,0,0)
|
||
|
||
aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
|
||
aSegment1=Part.LineSegment(aPnt1,aPnt2)
|
||
aSegment2=Part.LineSegment(aPnt4,aPnt5)
|
||
aEdge1=aSegment1.toShape()
|
||
aEdge2=aArcOfCircle.toShape()
|
||
aEdge3=aSegment2.toShape()
|
||
aWire=Part.Wire([aEdge1,aEdge2,aEdge3])
|
||
|
||
aTrsf=Base.Matrix()
|
||
aTrsf.rotateZ(math.pi) # rotate around the z-axis
|
||
|
||
aMirroredWire=aWire.transformGeometry(aTrsf)
|
||
myWireProfile=Part.Wire([aWire,aMirroredWire])
|
||
myFaceProfile=Part.Face(myWireProfile)
|
||
aPrismVec=Base.Vector(0,0,myHeight)
|
||
myBody=myFaceProfile.extrude(aPrismVec)
|
||
myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)
|
||
neckLocation=Base.Vector(0,0,myHeight)
|
||
neckNormal=Base.Vector(0,0,1)
|
||
myNeckRadius = myThickness / 4.
|
||
myNeckHeight = myHeight / 10
|
||
myNeck = Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)
|
||
myBody = myBody.fuse(myNeck)
|
||
|
||
faceToRemove = 0
|
||
zMax = -1.0
|
||
|
||
for xp in myBody.Faces:
|
||
try:
|
||
surf = xp.Surface
|
||
if type(surf) == Part.Plane:
|
||
z = surf.Position.z
|
||
if z > zMax:
|
||
zMax = z
|
||
faceToRemove = xp
|
||
except:
|
||
continue
|
||
|
||
myBody = myBody.makeFillet(myThickness/12.0,myBody.Edges)
|
||
|
||
return myBody
|
||
|
||
el = makeBottle()
|
||
Part.show(el)</pre></div>
|
||
<h4><span class="mw-headline" id="Spiegazione_dettagliata">Spiegazione dettagliata</span></h4>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part, FreeCAD, math
|
||
from FreeCAD import Base</pre></div>
|
||
<p>Avremo bisogno, naturalmente, del modulo Parte, ma anche del modulo FreeCAD.Base, che contiene le strutture base di FreeCAD come vettori e matrici.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>def makeBottle(myWidth=50.0, myHeight=70.0, myThickness=30.0):
|
||
aPnt1=Base.Vector(-myWidth/2.,0,0)
|
||
aPnt2=Base.Vector(-myWidth/2.,-myThickness/4.,0)
|
||
aPnt3=Base.Vector(0,-myThickness/2.,0)
|
||
aPnt4=Base.Vector(myWidth/2.,-myThickness/4.,0)
|
||
aPnt5=Base.Vector(myWidth/2.,0,0)</pre></div>
|
||
<p>Qui definiamo la nostra funzione makeBottle. Questa funzione può essere chiamata senza argomenti, come abbiamo fatto in precedenza, nel qual caso si utilizzano i valori di default per la larghezza, l'altezza e lo spessore. Poi, si definisce un paio di punti che verranno utilizzati per costruire il nostro profilo base.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> aArcOfCircle = Part.Arc(aPnt2,aPnt3,aPnt4)
|
||
aSegment1=Part.LineSegment(aPnt1,aPnt2)
|
||
aSegment2=Part.LineSegment(aPnt4,aPnt5)</pre></div>
|
||
<p>Qui definiamo la geometria effettiva: un arco, creato da 3 punti, e due segmenti di linea, creati da 2 punti.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> aEdge1=aSegment1.toShape()
|
||
aEdge2=aArcOfCircle.toShape()
|
||
aEdge3=aSegment2.toShape()
|
||
aWire=Part.Wire([aEdge1,aEdge2,aEdge3])</pre></div>
|
||
<p>Ricordate la differenza tra geometria e forme? Qui costruiremo forme partendo dalla nostra geometria di costruzione. Prima costruiremo 3 bordi (i bordi possono essere dritti o curvi), poi costruiremo un contorno con quei tre bordi.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> aTrsf=Base.Matrix()
|
||
aTrsf.rotateZ(math.pi) # rotate around the z-axis
|
||
aMirroredWire=aWire.transformGeometry(aTrsf)
|
||
myWireProfile=Part.Wire([aWire,aMirroredWire])</pre></div>
|
||
<p>Prima abbiamo costruito solo metà profilo. È più facile che costruire tutto l'intero profilo nello stesso modo, successivamente possiamo semplicemente rispecchiare quello che abbiamo costruito, e poi unire le due parti. Quindi per prima cosa è necessario creare una matrice. Una matrice è un modo molto comune per applicare trasformazioni agli oggetti nel mondo 3D, in quanto essa può contenere in un'unica struttura tutte le trasformazioni di base che gli oggetti 3D possono subire (spostamento, rotazione e scalatura). Qui, dopo aver creato la matrice, la specchiamo e creiamo una copia del nostro contorno applicando ad esso quella matrice di trasformazione. Ora abbiamo due contorni, e con essi possiamo produrre un terzo profilo, dal momento che i contorni sono in realtà liste di bordi.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> myFaceProfile=Part.Face(myWireProfile)
|
||
aPrismVec=Base.Vector(0,0,myHeight)
|
||
myBody=myFaceProfile.extrude(aPrismVec)
|
||
myBody=myBody.makeFillet(myThickness/12.0,myBody.Edges)</pre></div>
|
||
<p>Ora che abbiamo un contorno chiuso, esso può essere trasformato in una faccia. Una volta che abbiamo una faccia, possiamo estruderla. In questo modo, abbiamo effettivamente creato un solido. Poi si applica un piccolo arrotondamento al nostro oggetto, perché vogliamo ottenere una forma graziosa, non è vero?
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> neckLocation=Base.Vector(0,0,myHeight)
|
||
neckNormal=Base.Vector(0,0,1)
|
||
myNeckRadius = myThickness / 4.
|
||
myNeckHeight = myHeight / 10
|
||
myNeck = Part.makeCylinder(myNeckRadius,myNeckHeight,neckLocation,neckNormal)</pre></div>
|
||
<p>A questo punto, il corpo della nostra bottiglia è creato, abbiamo ancora bisogno di creare un collo. Così facciamo un nuovo solido, con un cilindro.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> myBody = myBody.fuse(myNeck)</pre></div>
|
||
<p>L'operazione di fusione, che in altre applicazioni a volte è chiamata unione, è molto potente. Si prenderà cura di incollare ciò che deve essere incollato e di rimuovere le parti che devono essere rimosse.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> return myBody</pre></div>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>Poi, otteniamo il nostro solido Parte come risultato della nostra funzione. Questo solido Parte, come qualsiasi altra forma Parte, può essere attribuito a un oggetto in un documento FreeCAD, con:
|
||
</p>
|
||
</div>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>el = makeBottle()
|
||
Part.show(el)</pre></div>
|
||
<div class="mw-translate-fuzzy">
|
||
<p>oppure, più semplicemente con:
|
||
</p>
|
||
</div>
|
||
<h2><span class="mw-headline" id="Cubo_forato">Cubo forato</span></h2>
|
||
<p>Ecco un esempio completo della costruzione di una scatola forata.
|
||
</p><p>La costruzione è fatta lato per lato e quando il cubo è finito, viene scavato un foro con cilindro che l'attraversa.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Draft, Part, FreeCAD, math, PartGui, FreeCADGui, PyQt4
|
||
from math import sqrt, pi, sin, cos, asin
|
||
from FreeCAD import Base
|
||
|
||
size = 10
|
||
poly = Part.makePolygon( [ (0,0,0), (size, 0, 0), (size, 0, size), (0, 0, size), (0, 0, 0)])
|
||
|
||
face1 = Part.Face(poly)
|
||
face2 = Part.Face(poly)
|
||
face3 = Part.Face(poly)
|
||
face4 = Part.Face(poly)
|
||
face5 = Part.Face(poly)
|
||
face6 = Part.Face(poly)
|
||
|
||
myMat = FreeCAD.Matrix()
|
||
myMat.rotateZ(math.pi/2)
|
||
face2.transformShape(myMat)
|
||
face2.translate(FreeCAD.Vector(size, 0, 0))
|
||
|
||
myMat.rotateZ(math.pi/2)
|
||
face3.transformShape(myMat)
|
||
face3.translate(FreeCAD.Vector(size, size, 0))
|
||
|
||
myMat.rotateZ(math.pi/2)
|
||
face4.transformShape(myMat)
|
||
face4.translate(FreeCAD.Vector(0, size, 0))
|
||
|
||
myMat = FreeCAD.Matrix()
|
||
myMat.rotateX(-math.pi/2)
|
||
face5.transformShape(myMat)
|
||
|
||
face6.transformShape(myMat)
|
||
face6.translate(FreeCAD.Vector(0,0,size))
|
||
|
||
myShell = Part.makeShell([face1,face2,face3,face4,face5,face6])
|
||
|
||
mySolid = Part.makeSolid(myShell)
|
||
mySolidRev = mySolid.copy()
|
||
mySolidRev.reverse()
|
||
|
||
myCyl = Part.makeCylinder(2,20)
|
||
myCyl.translate(FreeCAD.Vector(size/2, size/2, 0))
|
||
|
||
cut_part = mySolidRev.cut(myCyl)
|
||
|
||
Part.show(cut_part)</pre></div>
|
||
<h3><span class="mw-headline" id="Caricare_e_salvare">Caricare e salvare</span></h3>
|
||
<p>Nel modulo Parte ci sono diversi modi per salvare il proprio lavoro. Naturalmente, è possibile salvare il documento in formato FreeCAD, ma è anche possibile salvare gli oggetti Parte direttamente nei comuni formati CAD, come ad esempio BREP, IGS, STEP e STL.
|
||
</p><p>Salvare una forma in un file è facile. Per tutti gli oggetti di forma sono disponibili i metodi exportBrep(), exportIges(), exportStl() e exportStep(). Così, facendo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
s = Part.makeBox(0,0,0,10,10,10)
|
||
s.exportStep("test.stp")</pre></div>
|
||
<p>salviamo il nostro box in un file STEP. Per caricare un file BREP, IGES o STEP, basta fare il contrario:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import Part
|
||
s = Part.Shape()
|
||
s.read("test.stp")</pre></div>
|
||
<p>Per convertire un file <b>.stp</b> in <b>.igs</b> fare semplicemente :
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> import Part
|
||
s = Part.Shape()
|
||
s.read("file.stp") # incoming file igs, stp, stl, brep
|
||
s.exportIges("file.igs") # outbound file igs</pre></div>
|
||
<p>Notare che l'importazione o l'apertura di file BREP, IGES o STEP può essere effettuata anche direttamente dal menu File -> Apri o File -> Importa, mentre l'esportazione si esegue con File -> Esporta.
|
||
</p>
|
||
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h2><span class="mw-headline" id="Convertire_oggetti_Parte_in_Mesh">Convertire oggetti Parte in Mesh</span></h2>
|
||
<p>La conversione di oggetti di alto livello come le <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">forme di Parte</a> in oggetti semplici come gli <a href="https://www.freecadweb.org/wiki/index.php?title=Mesh_Module/it" class="mw-redirect" title="Mesh Module/it">oggetti Mesh</a> è una operazione piuttosto semplice, nella quale tutte le facce di un oggetto Parte vengono triangolate (suddivise in maglie di una rete). Il risultato di tale triangolazione (tassellatura) viene poi utilizzato per costruire un oggetto mesh: (supponiamo che il nostro documento contenga un oggetto Parte)
|
||
</p>
|
||
<pre>#let's assume our document contains one part object
|
||
import Mesh
|
||
faces = []
|
||
shape = FreeCAD.ActiveDocument.ActiveObject.Shape
|
||
triangles = shape.tessellate(1) # the number represents the precision of the tessellation)
|
||
for tri in triangles[1]:
|
||
face = []
|
||
for i in range(3):
|
||
vindex = tri[i]
|
||
face.append(triangles[0][vindex])
|
||
faces.append(face)
|
||
m = Mesh.Mesh(faces)
|
||
Mesh.show(m) </pre>
|
||
<p>A volte la triangolazione di alcune facce offerta da OpenCascade è abbastanza brutta. Se la faccia ha una forma rettangolare e non contiene buchi o altre curve di taglio è possibile creare una tassellatura da soli:
|
||
</p>
|
||
<pre>import Mesh
|
||
def makeMeshFromFace(u,v,face):
|
||
(a,b,c,d)=face.ParameterRange
|
||
pts=[]
|
||
for j in range(v):
|
||
for i in range(u):
|
||
s=1.0/(u-1)*(i*b+(u-1-i)*a)
|
||
t=1.0/(v-1)*(j*d+(v-1-j)*c)
|
||
pts.append(face.valueAt(s,t))
|
||
|
||
mesh=Mesh.Mesh()
|
||
for j in range(v-1):
|
||
for i in range(u-1):
|
||
mesh.addFacet(pts[u*j+i],pts[u*j+i+1],pts[u*(j+1)+i])
|
||
mesh.addFacet(pts[u*(j+1)+i],pts[u*j+i+1],pts[u*(j+1)+i+1])
|
||
|
||
return mesh </pre>
|
||
<h2><span class="mw-headline" id="Convertire_oggetti_Mesh_in_Parte">Convertire oggetti Mesh in Parte</span></h2>
|
||
<p>La conversione di oggetti Mesh in oggetti Parte è un'operazione estremamente importante nel lavoro CAD perché molto spesso i dati 3D si ricevono da altri in formato mesh o sono generati da altre applicazioni. I mesh sono molto pratici per rappresentare le geometrie di forma libera e grandi scene visive in quanto sono molto leggeri, ma per lavori CAD si preferiscono generalmente oggetti di livello superiore, che contengono molte più informazioni, come il concetto di solido, o facce composte da curve invece che da triangoli.
|
||
</p><p>Convertire gli oggetti mesh in oggetti di livello superiore, come sono gli oggetti gestiti dal <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a> di FreeCAD non è un'operazione facile. L'oggetto Mesh può contenere migliaia di triangoli (per esempio quando è generato da uno scanner 3D), e manipolare solidi costituiti dallo stesso numero di facce sarebbe estremamente pesante. Quindi, in genere, si desidera ottimizzare l'oggetto durante la conversione.
|
||
</p><p>FreeCAD attualmente offre due metodi per convertire Mesh in oggetti Parte. Il primo metodo è una semplice conversione, diretta, senza alcuna ottimizzazione:
|
||
</p>
|
||
<pre>import Mesh,Part
|
||
mesh = Mesh.createTorus()
|
||
shape = Part.Shape()
|
||
shape.makeShapeFromMesh(mesh.Topology,0.05) # the second arg is the tolerance for sewing
|
||
solid = Part.makeSolid(shape)
|
||
Part.show(solid) </pre>
|
||
<p>Il secondo metodo offre la possibilità di considerare complanari le sfaccettature delle maglie quando l'angolo tra di loro è inferiore a un certo valore. Questo permette di costruire delle forme molto più semplici: (supponiamo che il nostro documento contenga un oggetto Mesh)
|
||
</p>
|
||
<pre># let's assume our document contains one Mesh object
|
||
import Mesh,Part,MeshPart
|
||
faces = []
|
||
mesh = App.ActiveDocument.ActiveObject.Mesh
|
||
segments = mesh.getPlanes(0.00001) # use rather strict tolerance here
|
||
|
||
for i in segments:
|
||
if len(i) > 0:
|
||
# a segment can have inner holes
|
||
wires = MeshPart.wireFromSegment(mesh, i)
|
||
# we assume that the exterior boundary is that one with the biggest bounding box
|
||
if len(wires) > 0:
|
||
ext=None
|
||
max_length=0
|
||
for i in wires:
|
||
if i.BoundBox.DiagonalLength > max_length:
|
||
max_length = i.BoundBox.DiagonalLength
|
||
ext = i
|
||
|
||
wires.remove(ext)
|
||
# all interior wires mark a hole and must reverse their orientation, otherwise Part.Face fails
|
||
for i in wires:
|
||
i.reverse()
|
||
|
||
# make sure that the exterior wires comes as first in the lsit
|
||
wires.insert(0, ext)
|
||
faces.append(Part.Face(wires))
|
||
|
||
shell=Part.Compound(faces)
|
||
Part.show(shell)
|
||
#solid = Part.Solid(Part.Shell(faces))
|
||
#Part.show(solid) </pre>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>FreeCAD è sostanzialmente un collage di potenti librerie. <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_CASCADE">OpenCascade</a> è la più importante ed è utilizzata per la gestione e la costruzione della geometria, <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Coin3D">Coin3d</a> serve per visualizzare questa geometria, e <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Qt_(toolkit)">Qt</a> per disporre il tutto in una gradevole interfaccia grafica (GUI).
|
||
</p><p>Le geometrie che appaiono nelle viste 3D di FreeCAD sono visualizzate (renderizzate) dalla libreria Coin3D. Coin3D è un'implementazione delle funzionalità standard di <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_Inventor">OpenInventor</a>. Anche il software openCascade fornisce queste funzionalità, ma, fin dagli inizi dello sviluppo di FreeCAD, è stato deciso di non utilizzare il visualizzatore di OpenCascade e di sostituirlo con il software Coin3D in quanto più performante. Un buon modo per conoscere questa libreria è quello di consultare il manuale <a rel="nofollow" class="external text" href="http://www-evasion.imag.fr/Membres/Francois.Faure/doc/inventorMentor/sgi_html/">Open Inventor Mentor</a>.
|
||
</p><p><a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Open_Inventor">OpenInventor</a> è in realtà un linguaggio di descrizione della scena 3D. La scena descritta in OpenInventor viene renderizzata (visualizzata) sul vostro schermo con OpenGL. Coin3D si occupa di questo processo, quindi non è necessario che il programmatore tratti complesse chiamate a OpenGL, ma deve solo fornire un codice OpenInventor valido. Il principale vantaggio è che OpenInventor è uno standard molto conosciuto e ben documentato.
|
||
</p><p>Sostanzialmente, uno dei lavori più importanti che FreeCAD esegue per noi consiste nel tradurre le informazioni sulla geometria OpenCascade in linguaggio OpenInventor.
|
||
</p><p>OpenInventor descrive una scena 3D in forma di <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Scene_graph">grafo di scena</a> (Scenegraph), come quello seguente:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Scenegraph.gif" class="image"><img alt="Scenegraph.gif" src="Scenegraph.gif" width="422" height="496" /></a>
|
||
immagine da <a rel="nofollow" class="external text" href="http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html">Inventor mentor</a>
|
||
</p><p>Un grafo di scena di OpenInventor è una struttura di tipo "grafico ad albero" e descrive tutto ciò che fa parte di una scena 3D, come ad esempio la geometria, i colori, i materiali, le luci, ecc, e organizza tutti i dati in una struttura gerarchica, pratica e chiara. Tutto può essere raggruppato in sotto-strutture (nodi-figlio), il che consente di organizzare i contenuti della scena più o meno nel modo desiderato. Ecco un esempio di un file di OpenInventor:
|
||
</p>
|
||
<pre>#Inventor V2.0 ascii
|
||
|
||
Separator {
|
||
RotationXYZ {
|
||
axis Z
|
||
angle 0
|
||
}
|
||
Transform {
|
||
translation 0 0 0.5
|
||
}
|
||
Separator {
|
||
Material {
|
||
diffuseColor 0.05 0.05 0.05
|
||
}
|
||
Transform {
|
||
rotation 1 0 0 1.5708
|
||
scaleFactor 0.2 0.5 0.2
|
||
}
|
||
Cylinder {
|
||
}
|
||
}
|
||
} </pre>
|
||
<p>Come si vede, la struttura è molto semplice. Si utilizzano i nodi (separator) per organizzare i dati in blocchi, un po' come si fa per organizzare i file in cartelle e sottocartelle. Ogni dichiarazione riguarda ciò che viene in seguito, per esempio, i primi due elementi del nostro nodo radice (root separator) sono una rotazione e una traslazione e agiscono entrambi sull'elemento successivo, che è un nodo (separator). In tale nodo sono definiti un materiale e una ulteriore trasformazione. Pertanto, il nostro cilindro sarà influenzato da entrambe le trasformazioni, da quella che è stata applicata direttamente ad esso e da quella che è stata applicata al suo nodo (separator) genitore.
|
||
</p><p>Per organizzare la una scena, sono disponibili molti altri tipi di elementi, come gruppi, commutatori o annotazioni. Per gli oggetti si possono definire dei materiali molto complessi, con colori, texture, modalità di ombreggiatura e trasparenza. Si possono anche definire luci, punti di vista (camera) e perfino il movimento. È anche possibile incorporare parti di script nei file di OpenInventor, per definire comportamenti più complessi.
|
||
</p><p>Se siete interessati a saperne di più su OpenInventor, consultate direttamente il suo manuale più famoso: il libro <a rel="nofollow" class="external text" href="http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html">Inventor mentor</a>.
|
||
</p><p>Normalmente, in FreeCAD, non è necessario interagire direttamente con il grafo della scena di OpenInventor. Ogni oggetto in un documento di FreeCAD, sia che si tratti di un Mesh, di una forma Parte o di qualsiasi altra cosa, viene automaticamente convertito in codice OpenInventor e inserito nel grafo della scena principale che appare in una vista 3D. Questo grafo di scena viene costantemente aggiornato tutte le volte che si apportano delle modifiche, oppure si aggiungono o si rimuovono degli oggetti nel documento. In realtà, ogni oggetto (nell'ambito App) ha un fornitore di vista (un corrispondente oggetto nell'ambito Gui), responsabile del rilascio del codice OpenInventor.
|
||
</p><p>Potere accedere al direttamente al grafico di scena presenta comunque molti vantaggi. Ad esempio, si può modificare temporaneamente la visualizzazione di un oggetto, oppure si possono aggiungere alla scena oggetti che nel documento di FreeCAD non hanno esistenza reale, come la geometria di costruzione, i riferimenti, i suggerimenti grafici oppure strumenti quali i manipolatori oppure informazioni sullo schermo.
|
||
</p><p>FreeCAD dispone di diversi strumenti per visualizzare o modificare il codice OpenInventor. Ad esempio, il seguente codice Python mostra la rappresentazione OpenInventor di un oggetto selezionato:
|
||
</p>
|
||
<pre>obj = FreeCAD.ActiveDocument.ActiveObject
|
||
viewprovider = obj.ViewObject
|
||
print viewprovider.toString() </pre>
|
||
<p>Inoltre, c'è anche un modulo Python che consente l'accesso completo a tutto quello che è gestito da Coin3D, come il grafico di scena di FreeCAD. Continuate quindi la lettura in <a href="https://www.freecadweb.org/wiki/index.php?title=Pivy/it" title="Pivy/it">Pivy</a>.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><a rel="nofollow" class="external text" href="http://pivy.coin3d.org/">Pivy</a> è una libreria che collega Python con <a rel="nofollow" class="external text" href="http://www.coin3d.org">Coin3d</a>, ed è la libreria di renderizzazione-3D utilizzata in FreeCAD. Quando viene importata in un interprete Python in esecuzione, permette di dialogare direttamente con qualsiasi <a href="https://www.freecadweb.org/wiki/index.php?title=Scenegraph/it" title="Scenegraph/it">grafo di scena</a> (scenegraph) di Coin3d in esecuzione, come ad esempio le viste 3D di FreeCAD, o addirittura di creare nuovi grafi di scena. Pivy è incluso nell'installazione standard di FreeCAD.
|
||
</p><p>La libreria Coin è divisa in vari moduli, Coin stessa, per manipolare grafi di scene e associarli a diversi sistemi GUI, come a Windows oppure, come nel nostro caso, a Qt. Tali moduli sono disponibili anche per Pivy, se sono presenti nel sistema. Il modulo Coin è sempre presente, ed è quello che useremo in tutti gli esempi, e non sarà necessario preoccuparsi di associare la nostra visualizzazione 3D ad alcuna interfaccia, perchè questo viene già fatto da FreeCAD stesso. Tutto quello che dobbiamo fare è:
|
||
</p>
|
||
<pre>from pivy import coin </pre>
|
||
<h2><span class="mw-headline" id="Accesso_e_modifica_del_Grafo_della_scena_.28Scenegraph.29">Accesso e modifica del Grafo della scena (Scenegraph)</span></h2>
|
||
<p>Abbiamo già visto nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Scenegraph/it" title="Scenegraph/it">Grafo della scena</a> (Scenegraph) come è organizzata una tipica scena di Coin. Tutto ciò che appare in una vista 3D di FreeCAD è un Scenegraph di Coin, organizzato allo stesso modo. Abbiamo un nodo radice (principale), e tutti gli oggetti sullo schermo sono suoi figli.
|
||
</p><p>FreeCAD dispone di un modo semplice per accedere al nodo radice (root) di una scena grafica in vista 3D:
|
||
</p>
|
||
<pre>sg = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph()
|
||
print sg </pre>
|
||
<p>Ciò restituisce il nodo principale (root):
|
||
</p>
|
||
<pre><pivy.coin.SoSelection; proxy of <Swig Object of type 'SoSelection *' at 0x360cb60> > </pre>
|
||
<p>Siamo in grado di ispezionare i figli immediati della nostra scena:
|
||
</p>
|
||
<pre>for node in sg.getChildren():
|
||
print node </pre>
|
||
<p>Alcuni di questi nodi, ad esempio SoSeparators o SoGroups, possono avere dei propri figli. L'elenco completo degli oggetti Coin disponibili si può trovare nella <a rel="nofollow" class="external text" href="http://coin3d.bitbucket.org/Coin/classes.html">documentazione ufficiale di Coin</a>.
|
||
</p><p>Ora proviamo ad aggiungere qualcosa al nostro Scenegraph. Aggiungiamo un bel cubo rosso:
|
||
</p>
|
||
<pre>col = coin.SoBaseColor()
|
||
col.rgb=(1,0,0)
|
||
cub = coin.SoCube()
|
||
myCustomNode = coin.SoSeparator()
|
||
myCustomNode.addChild(col)
|
||
myCustomNode.addChild(cub)
|
||
sg.addChild(myCustomNode) </pre>
|
||
<p>e questo è il nostro (bel) cubo rosso. Ora, proviamo questo:
|
||
</p>
|
||
<pre>col.rgb=(1,1,0) </pre>
|
||
<p>Visto? Tutto è sempre accessibile e modificabile al volo. Non c'è bisogno di ricalcolare o ridisegnare nulla, Coin si prende cura di tutto. È possibile aggiungere elementi al grafo di scena, modificare le proprietà, nascondere delle cose, mostrare oggetti temporanei, qualsiasi cosa. Naturalmente, questo riguarda solo la visualizzazione nella vista 3D. Questa visualizzazione viene determinata da FreeCAD all'apertura del file attivo e quando un oggetto ha bisogno di essere ricalcolato. Quindi, se si modifica l'aspetto di un oggetto di FreeCAD esistente, tali modifiche andranno perse se l'oggetto viene ricalcolato o quando si riapre il file.
|
||
</p><p>Per lavorare con i grafi di scena nei nostri script è fondamentale saper accedere a specifiche proprietà dei nodi aggiunti quando questo è necessario. Per esempio, se avessimo voluto spostare il nostro cubo, avremmo aggiunto un nodo SoTranslation al nostro nodo personalizzato, e lo script apparirebbe così:
|
||
</p>
|
||
<pre>col = coin.SoBaseColor()
|
||
col.rgb=(1,0,0)
|
||
trans = coin.SoTranslation()
|
||
trans.translation.setValue([0,0,0])
|
||
cub = coin.SoCube()
|
||
myCustomNode = coin.SoSeparator()
|
||
myCustomNode.addChild(col)
|
||
mtCustomNode.addChild(trans)
|
||
myCustomNode.addChild(cub)
|
||
sg.addChild(myCustomNode) </pre>
|
||
<p>Ricordate che, in un Scenegraph di OpenInventor, l'ordine è importante. Un nodo riguarda ciò che viene dopo, quindi permette di definire qualcosa come: colore rosso, cubo, colore giallo, sfera, e di ottenere un cubo rosso e una sfera gialla. Se aggiungiamo ora la traslazione al nostro nodo personalizzato esistente, essa viene dopo il cubo, e non lo condiziona. Se lo avessimo inserito durante la creazione, come qui sopra, ora si potrebbe fare:
|
||
</p>
|
||
<pre>trans.translation.setValue([2,0,0]) </pre>
|
||
<p>E il nostro cubo si sposterebbe di 2 unità a destra.
|
||
</p><p>Infine, la rimozione di qualcosa si fà con:
|
||
</p>
|
||
<pre>sg.removeChild(myCustomNode) </pre>
|
||
<h2><span class="mw-headline" id="Utilizzo_dei_meccanismi_di_richiamo_.28callback.29">Utilizzo dei meccanismi di richiamo (callback)</span></h2>
|
||
<p>Un <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Callback_%28computer_science%29">callback mechanism</a> (meccanismo di richiamo) è un sistema che permette a una libreria che si sta utilizzando, come la nostra libreria Coin, di richiamare, cioè, di chiamare una determinata funzione dell'oggetto Python attualmente in esecuzione. Ciò è estremamente utile, perché in questo modo Coin può avvisarci se nella scena si verifica qualche evento specifico. Coin può controllare cose molto diverse, come la posizione del mouse, i clic di un pulsante del mouse, i tasti della tastiera che vengono premuti e tante altre cose.
|
||
</p><p>FreeCAD fornisce un modo semplice per utilizzare tali callback:
|
||
</p>
|
||
<pre>class ButtonTest:
|
||
def __init__(self):
|
||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getMouseClick)
|
||
def getMouseClick(self,event_cb):
|
||
event = event_cb.getEvent()
|
||
if event.getState() == SoMouseButtonEvent.DOWN:
|
||
print "Alert!!! A mouse button has been improperly clicked!!!"
|
||
self.view.removeEventCallbackSWIG(SoMouseButtonEvent.getClassTypeId(),self.callback)
|
||
|
||
ButtonTest() </pre>
|
||
<p>Il richiamo deve essere iniziato da un oggetto, perché questo oggetto deve essere ancora in esecuzione quando il callback si verifica. Vedere anche la <a href="/wiki/Code_snippets/it#Observaci.C3.B3n_de_Eventos_del_rat.C3.B3n_en_el_visor_3D_a_trav.C3.A9s_de_Python" title="Code snippets/it">lista completa</a> degli eventi possibili e dei loro parametri, o la <a rel="nofollow" class="external text" href="http://doc.coin3d.org/Coin/classes.html">documentazione ufficiale di Coin</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Documentazione">Documentazione</span></h2>
|
||
<p>Purtroppo, Pivy non ha ancora una propria documentazione adeguata, ma dato che è una traduzione esatta di Coin, si può tranquillamente utilizzare la documentazione di Coin come riferimento, e utilizzare lo stile Python al posto dello stile C++; ad esempio SoFile::getClassTypeId() in Pivy si scrive SoFile.getClassId().
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h2><span class="mw-headline" id="PySide">PySide</span></h2>
|
||
<p><a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/PySide">PySide</a> è il legame tra Python e la multi-piattaforma GUI degli strumenti di Qt. FreeCAD usa PySide all'interno di Python per tutti gli effetti GUI (Interfaccia grafica per l'utente). PySide è una alternativa al pacchetto PyQt che è stato utilizzato in precedenza da FreeCAD per la sua GUI. PySide ha una licenza più permissiva. Per maggiori informazioni sulla differenza vedere <a rel="nofollow" class="external text" href="http://qt-project.org/wiki/Differences_Between_PySide_and_PyQt">Differences Between PySide and PyQt</a>.
|
||
</p><p>Spesso gli utenti di FreeCAD accedono a tutto tramite l'interfaccia integrata. Per gli utenti che desiderano personalizzare le loro operazioni esiste l'interfaccia Python, che è documentata nel <a href="https://www.freecadweb.org/wiki/index.php?title=Python_scripting_tutorial/it" title="Python scripting tutorial/it">Tutorial degli script Python</a>. L'interfaccia Python di FreeCAD è molto flessibile e potente. Questa pagina documenta l'interazione di Python con FreeCAD tramite PySide.
|
||
</p><p>Python offre la dichiarazione 'print', data dal codice:
|
||
</p>
|
||
<pre>print 'Hello World' </pre>
|
||
<p>Con l'istruzione print di Python si ha solo un limitato controllo dell'aspetto e del comportamento. PySide fornisce il controllo mancante e gestisce anche gli ambienti dove le funzionalità incorporate in Python non sono sufficienti, come ad esempio i file dell'ambiente macro di FreeCAD.
|
||
</p><p>Le funzionalità di PySide vanno da:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:PySideScreenSnapshot1.jpg" class="image"><img alt="PySideScreenSnapshot1.jpg" src="PySideScreenSnapshot1.jpg" width="279" height="163" /></a>
|
||
</p><p>a:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:PySideScreenSnapshot2.jpg" class="image"><img alt="PySideScreenSnapshot2.jpg" src="PySideScreenSnapshot2.jpg" width="400" height="311" /></a>
|
||
</p><p>PySide è descritto nelle 3 pagine seguenti che dovrebbero essere lette nell'ordine:
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=PySide_Beginner_Examples/it" title="PySide Beginner Examples/it">Esempi di livello base di PySide</a> (Hello World, avvisi, inserire un testo, inserire un numero)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=PySide_Medium_Examples/it" title="PySide Medium Examples/it">Esempi di livello medio di PySide</a> (dimensionare le finestre, nascondere i widget, i menu popup, la posizione del mouse, gli eventi del mouse)</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=PySide_Advanced_Examples/it" title="PySide Advanced Examples/it">Esempi di livello avanzato di PySide</a> (widget etc.)</li></ul>
|
||
<p>Esse suddividono l'argomento in 3 parti, e si differenziano per livello di esposizione per PySide, Python e le parti incorporate in FreeCAD. La prima pagina contiene una panoramica e le basi della materia, fornisce una descrizione di PySide e di come è organizzato, mentre la seconda e la terza pagina contengono soprattutto degli esempi di codice di diversi livelli.
|
||
</p><p>Con le pagine allegate si intende fornire del semplice codice Python per eseguire PySide, in modo che l'utente possa facilmente copiarlo, incollarlo nel proprio lavoro, adattarlo se necessario, e risolvere i suoi problemi con FreeCAD. Sperando che non abbia bisogno di andare alla ricerca di risposte alle domande su PySide attraverso internet. Allo stesso tempo, queste pagine non vogliono sostituirsi ai vari tutorial completi e ai siti di riferimento a PySide presenti nel web.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Oltre ai tipi di oggetti standard, come le Annotazioni, gli oggetti Mesh e gli oggetti Parte, FreeCAD offre anche la straordinaria possibilità di costruire al 100% oggetti in script di Python, chiamati Python Feature (<i>Caratteristiche</i> Python). Questi oggetti si comportano esattamente come un qualsiasi altro oggetto di FreeCAD, e sono salvati e ripristinati automaticamente con salva/apri il file.
|
||
</p><p>Deve essere conosciuta una loro particolarità: questi oggetti vengono salvati in un file FcStd di FreeCAD con il modulo <a rel="nofollow" class="external text" href="http://docs.python.org/2/library/json.html">json</a> di Python. Tale modulo converte un oggetto Python in una stringa, permettendo di aggiungerlo al file salvato. Quando l'oggetto viene caricato, il modulo json utilizza questa stringa per ricreare l'oggetto originale, fornendo l'accesso al codice sorgente da cui ha creato l'oggetto. Questo significa che se si salva un oggetto personalizzato e lo si apre su una macchina in cui non è presente il codice Python che ha generato l'oggetto, l'oggetto non può essere ricreato. Quando si forniscono ad altri utenti questi oggetti, è necessario fornire anche gli script di Python che li hanno creati.
|
||
</p><p>Le Python Features seguono le stesse regole di tutte le altre funzionalità di FreeCAD: sono divise in una parte App e una parte GUI. La parte App, cioè il Document Object (oggetto del documento), definisce la geometria dell'oggetto, mentre la sua parte grafica, cioè il View Provider Object (fornitore della vista dell'oggetto), definisce come l'oggetto viene disegnato sullo schermo. Il View Provider Object, come qualsiasi altro elemento di FreeCAD, è disponibile solo quando si esegue FreeCAD nella sua GUI (interfaccia grafica). Per costruire il proprio oggetto, sono disponibili diversi metodi e proprietà. La Proprietà deve essere una qualsiasi dei tipi di proprietà predefinite che FreeCAD mette a disposizione. Le proprietà disponibili sono quelle che appaiono nella finestra di visualizzazione delle proprietà per consentire all'utente di modificarle. Con questa procedura, gli oggetti FeaturePython sono realmente e totalmente parametrici. E' possibile definire separatamente le proprietà per l'oggetto e per la sua ViewObject (rappresentazione).
|
||
</p><p><b>Nota</b>. In versioni precedenti abbiamo usato il modulo <a rel="nofollow" class="external text" href="http://docs.python.org/release/2.5/lib/module-cPickle.html">cPickle</a> di Python. Questo modulo, però, esegue un codice arbitrario e provoca quindi un problema di sicurezza. Per questo motivo ora utilizziamo il modulo json di Python.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Esempio_base">Esempio base</span></h3>
|
||
<p>L'esempio seguente si trova nel file <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/TemplatePyMod/FeaturePython.py">src/Mod/TemplatePyMod/FeaturePython.py</a>, con molti altri esempi:
|
||
</p>
|
||
<pre>'''Examples for a feature class and its view provider.'''
|
||
|
||
import FreeCAD, FreeCADGui
|
||
from pivy import coin
|
||
|
||
class Box:
|
||
def __init__(self, obj):
|
||
'''Add some custom properties to our box feature'''
|
||
obj.addProperty("App::PropertyLength","Length","Box","Length of the box").Length=1.0
|
||
obj.addProperty("App::PropertyLength","Width","Box","Width of the box").Width=1.0
|
||
obj.addProperty("App::PropertyLength","Height","Box", "Height of the box").Height=1.0
|
||
obj.Proxy = self
|
||
|
||
def onChanged(self, fp, prop):
|
||
'''Do something when a property has changed'''
|
||
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
|
||
|
||
def execute(self, fp):
|
||
'''Do something when doing a recomputation, this method is mandatory'''
|
||
FreeCAD.Console.PrintMessage("Recompute Python Box feature\n")
|
||
|
||
class ViewProviderBox:
|
||
def __init__(self, obj):
|
||
'''Set this object to the proxy object of the actual view provider'''
|
||
obj.addProperty("App::PropertyColor","Color","Box","Color of the box").Color=(1.0,0.0,0.0)
|
||
obj.Proxy = self
|
||
|
||
def attach(self, obj):
|
||
'''Setup the scene sub-graph of the view provider, this method is mandatory'''
|
||
self.shaded = coin.SoGroup()
|
||
self.wireframe = coin.SoGroup()
|
||
self.scale = coin.SoScale()
|
||
self.color = coin.SoBaseColor()
|
||
|
||
data=coin.SoCube()
|
||
self.shaded.addChild(self.scale)
|
||
self.shaded.addChild(self.color)
|
||
self.shaded.addChild(data)
|
||
obj.addDisplayMode(self.shaded,"Shaded");
|
||
style=coin.SoDrawStyle()
|
||
style.style = coin.SoDrawStyle.LINES
|
||
self.wireframe.addChild(style)
|
||
self.wireframe.addChild(self.scale)
|
||
self.wireframe.addChild(self.color)
|
||
self.wireframe.addChild(data)
|
||
obj.addDisplayMode(self.wireframe,"Wireframe");
|
||
self.onChanged(obj,"Color")
|
||
|
||
def updateData(self, fp, prop):
|
||
'''If a property of the handled feature has changed we have the chance to handle this here'''
|
||
# fp is the handled feature, prop is the name of the property that has changed
|
||
l = fp.getPropertyByName("Length")
|
||
w = fp.getPropertyByName("Width")
|
||
h = fp.getPropertyByName("Height")
|
||
self.scale.scaleFactor.setValue(float(l),float(w),float(h))
|
||
pass
|
||
|
||
def getDisplayModes(self,obj):
|
||
'''Return a list of display modes.'''
|
||
modes=[]
|
||
modes.append("Shaded")
|
||
modes.append("Wireframe")
|
||
return modes
|
||
|
||
def getDefaultDisplayMode(self):
|
||
'''Return the name of the default display mode. It must be defined in getDisplayModes.'''
|
||
return "Shaded"
|
||
|
||
def setDisplayMode(self,mode):
|
||
'''Map the display mode defined in attach with those defined in getDisplayModes.\
|
||
Since they have the same names nothing needs to be done. This method is optional'''
|
||
return mode
|
||
|
||
def onChanged(self, vp, prop):
|
||
'''Here we can do something when a single property got changed'''
|
||
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
|
||
if prop == "Color":
|
||
c = vp.getPropertyByName("Color")
|
||
self.color.rgb.setValue(c[0],c[1],c[2])
|
||
|
||
def getIcon(self):
|
||
'''Return the icon in XPM format which will appear in the tree view. This method is\
|
||
optional and if not defined a default icon is shown.'''
|
||
return """
|
||
/* XPM */
|
||
static const char * ViewProviderBox_xpm[] = {
|
||
"16 16 6 1",
|
||
" c None",
|
||
". c #141010",
|
||
"+ c #615BD2",
|
||
"@ c #C39D55",
|
||
"# c #000000",
|
||
"$ c #57C355",
|
||
" ........",
|
||
" ......++..+..",
|
||
" .@@@@.++..++.",
|
||
" .@@@@.++..++.",
|
||
" .@@ .++++++.",
|
||
" ..@@ .++..++.",
|
||
"###@@@@ .++..++.",
|
||
"##$.@@$#.++++++.",
|
||
"#$#$.$$$........",
|
||
"#$$####### ",
|
||
"#$$#$$$$$# ",
|
||
"#$$#$$$$$# ",
|
||
"#$$#$$$$$# ",
|
||
" #$#$$$$$# ",
|
||
" ##$$$$$# ",
|
||
" ####### "};
|
||
"""
|
||
|
||
def __getstate__(self):
|
||
'''When saving the document this object gets stored using Python's json module.\
|
||
Since we have some un-serializable parts here -- the Coin stuff -- we must define this method\
|
||
to return a tuple of all serializable objects or None.'''
|
||
return None
|
||
|
||
def __setstate__(self,state):
|
||
'''When restoring the serialized object from document we have the chance to set some internals here.\
|
||
Since no data were serialized nothing needs to be done here.'''
|
||
return None
|
||
|
||
|
||
def makeBox():
|
||
FreeCAD.newDocument()
|
||
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Box")
|
||
Box(a)
|
||
ViewProviderBox(a.ViewObject)
|
||
|
||
makeBox() </pre>
|
||
<h3><span class="mw-headline" id="Propriet.C3.A0_disponibili">Proprietà disponibili</span></h3>
|
||
<p>Le proprietà sono i veri e propri mattoni per la costruzione degli oggetti FeaturePython. Attraverso di esse, l'utente è in grado di interagire e modificare l'oggetto. Dopo aver creato un nuovo oggetto FeaturePython nel documento ( obj=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Box") ), è possibile ottenere un elenco delle proprietà disponibili digitando:
|
||
</p>
|
||
<pre>obj.supportedProperties() </pre>
|
||
<p>Si ottiene l'elenco delle proprietà disponibili:
|
||
</p>
|
||
<pre>App::PropertyBool
|
||
App::PropertyBoolList
|
||
App::PropertyFloat
|
||
App::PropertyFloatList
|
||
App::PropertyFloatConstraint
|
||
App::PropertyQuantity
|
||
App::PropertyQuantityConstraint
|
||
App::PropertyAngle
|
||
App::PropertyDistance
|
||
App::PropertyLength
|
||
App::PropertySpeed
|
||
App::PropertyAcceleration
|
||
App::PropertyForce
|
||
App::PropertyPressure
|
||
App::PropertyInteger
|
||
App::PropertyIntegerConstraint
|
||
App::PropertyPercent
|
||
App::PropertyEnumeration
|
||
App::PropertyIntegerList
|
||
App::PropertyIntegerSet
|
||
App::PropertyMap
|
||
App::PropertyString
|
||
App::PropertyUUID
|
||
App::PropertyFont
|
||
App::PropertyStringList
|
||
App::PropertyLink
|
||
App::PropertyLinkSub
|
||
App::PropertyLinkList
|
||
App::PropertyLinkSubList
|
||
App::PropertyMatrix
|
||
App::PropertyVector
|
||
App::PropertyVectorList
|
||
App::PropertyPlacement
|
||
App::PropertyPlacementLink
|
||
App::PropertyColor
|
||
App::PropertyColorList
|
||
App::PropertyMaterial
|
||
App::PropertyPath
|
||
App::PropertyFile
|
||
App::PropertyFileIncluded
|
||
App::PropertyPythonObject
|
||
Part::PropertyPartShape
|
||
Part::PropertyGeometryList
|
||
Part::PropertyShapeHistory
|
||
Part::PropertyFilletEdges
|
||
Sketcher::PropertyConstraintList </pre>
|
||
<p>Quando si aggiungono delle proprietà agli oggetti personalizzati, stare attenti a questo:
|
||
</p>
|
||
<ul><li> Non utilizzare i caratteri "<" o ">" nelle descrizioni delle proprietà (questo spezza le parti xml nel file .fcstd)</li>
|
||
<li> Le proprietà sono memorizzate in ordine alfabetico nel file .fcstd. Se si dispone di una forma (Shape) nelle proprietà, qualsiasi proprietà il cui nome, in ordine alfabetico, viene dopo "Shape", verrà caricato DOPO la forma (Shape), e questo può causare strani comportamenti.</li></ul>
|
||
<h3><span class="mw-headline" id="Tipi_di_Propriet.C3.A0">Tipi di Proprietà</span></h3>
|
||
<p>Di default, le proprietà possono essere aggiornate. È possibile creare delle proprietà di sola lettura, per esempio nel caso si vuole mostrare il risultato di un metodo. È anche possibile nascondere una proprietà. Il tipo di proprietà può essere impostata usando
|
||
</p>
|
||
<pre>obj.setEditorMode("MyPropertyName", mode) </pre>
|
||
<p>dove <i>mode</i> è un indice che può essere impostato:
|
||
</p>
|
||
<pre> 0 -- default mode, lettura e scrittura
|
||
1 -- solo lettura
|
||
2 -- nascosto
|
||
</pre>
|
||
<p>Gli EditorModes non sono fissati nel file reload di FreeCAD. Questo può essere fatto dalla funzione __setstate__ . Vedere <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=10#p108072">http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=10#p108072</a>. Usando setEditorMode le proprietà sono in sola lettura soltanto in PropertyEditor. Esse possono ancora essere modificate da un comando Python. Per renderle davvero in sola lettura le impostazioni devono essere passate direttamente all'interno della funzione addProperty. Per un esempio, vedere <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=20#p109709">http://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=20#p109709</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Altro_esempio_pi.C3.B9_complesso">Altro esempio più complesso</span></h3>
|
||
<p>In questo esempio si utilizza il <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a> per creare un ottaedro, quindi si crea la sua rappresentazione Coin con Pivy.
|
||
</p><p>Prima si crea l'oggetto del documento:
|
||
</p>
|
||
<pre>import FreeCAD, FreeCADGui, Part
|
||
import pivy
|
||
from pivy import coin
|
||
|
||
class Octahedron:
|
||
def __init__(self, obj):
|
||
"Add some custom properties to our box feature"
|
||
obj.addProperty("App::PropertyLength","Length","Octahedron","Length of the octahedron").Length=1.0
|
||
obj.addProperty("App::PropertyLength","Width","Octahedron","Width of the octahedron").Width=1.0
|
||
obj.addProperty("App::PropertyLength","Height","Octahedron", "Height of the octahedron").Height=1.0
|
||
obj.addProperty("Part::PropertyPartShape","Shape","Octahedron", "Shape of the octahedron")
|
||
obj.Proxy = self
|
||
|
||
def execute(self, fp):
|
||
# Define six vetices for the shape
|
||
v1 = FreeCAD.Vector(0,0,0)
|
||
v2 = FreeCAD.Vector(fp.Length,0,0)
|
||
v3 = FreeCAD.Vector(0,fp.Width,0)
|
||
v4 = FreeCAD.Vector(fp.Length,fp.Width,0)
|
||
v5 = FreeCAD.Vector(fp.Length/2,fp.Width/2,fp.Height/2)
|
||
v6 = FreeCAD.Vector(fp.Length/2,fp.Width/2,-fp.Height/2)
|
||
|
||
# Make the wires/faces
|
||
f1 = self.make_face(v1,v2,v5)
|
||
f2 = self.make_face(v2,v4,v5)
|
||
f3 = self.make_face(v4,v3,v5)
|
||
f4 = self.make_face(v3,v1,v5)
|
||
f5 = self.make_face(v2,v1,v6)
|
||
f6 = self.make_face(v4,v2,v6)
|
||
f7 = self.make_face(v3,v4,v6)
|
||
f8 = self.make_face(v1,v3,v6)
|
||
shell=Part.makeShell([f1,f2,f3,f4,f5,f6,f7,f8])
|
||
solid=Part.makeSolid(shell)
|
||
fp.Shape = solid
|
||
|
||
# helper mehod to create the faces
|
||
def make_face(self,v1,v2,v3):
|
||
wire = Part.makePolygon([v1,v2,v3,v1])
|
||
face = Part.Face(wire)
|
||
return face </pre>
|
||
<p>In seguito si crea il fornitore della vista dell'oggetto (view provider object), responsabile di mostrare l'oggetto nella scena 3D:
|
||
</p>
|
||
<pre>class ViewProviderOctahedron:
|
||
def __init__(self, obj):
|
||
"Set this object to the proxy object of the actual view provider"
|
||
obj.addProperty("App::PropertyColor","Color","Octahedron","Color of the octahedron").Color=(1.0,0.0,0.0)
|
||
obj.Proxy = self
|
||
|
||
def attach(self, obj):
|
||
"Setup the scene sub-graph of the view provider, this method is mandatory"
|
||
self.shaded = coin.SoGroup()
|
||
self.wireframe = coin.SoGroup()
|
||
self.scale = coin.SoScale()
|
||
self.color = coin.SoBaseColor()
|
||
|
||
self.data=coin.SoCoordinate3()
|
||
self.face=coin.SoIndexedLineSet()
|
||
|
||
self.shaded.addChild(self.scale)
|
||
self.shaded.addChild(self.color)
|
||
self.shaded.addChild(self.data)
|
||
self.shaded.addChild(self.face)
|
||
obj.addDisplayMode(self.shaded,"Shaded");
|
||
style=coin.SoDrawStyle()
|
||
style.style = coin.SoDrawStyle.LINES
|
||
self.wireframe.addChild(style)
|
||
self.wireframe.addChild(self.scale)
|
||
self.wireframe.addChild(self.color)
|
||
self.wireframe.addChild(self.data)
|
||
self.wireframe.addChild(self.face)
|
||
obj.addDisplayMode(self.wireframe,"Wireframe");
|
||
self.onChanged(obj,"Color")
|
||
|
||
def updateData(self, fp, prop):
|
||
"If a property of the handled feature has changed we have the chance to handle this here"
|
||
# fp is the handled feature, prop is the name of the property that has changed
|
||
if prop == "Shape":
|
||
s = fp.getPropertyByName("Shape")
|
||
self.data.point.setNum(6)
|
||
cnt=0
|
||
for i in s.Vertexes:
|
||
self.data.point.set1Value(cnt,i.X,i.Y,i.Z)
|
||
cnt=cnt+1
|
||
|
||
self.face.coordIndex.set1Value(0,0)
|
||
self.face.coordIndex.set1Value(1,1)
|
||
self.face.coordIndex.set1Value(2,2)
|
||
self.face.coordIndex.set1Value(3,-1)
|
||
|
||
self.face.coordIndex.set1Value(4,1)
|
||
self.face.coordIndex.set1Value(5,3)
|
||
self.face.coordIndex.set1Value(6,2)
|
||
self.face.coordIndex.set1Value(7,-1)
|
||
|
||
self.face.coordIndex.set1Value(8,3)
|
||
self.face.coordIndex.set1Value(9,4)
|
||
self.face.coordIndex.set1Value(10,2)
|
||
self.face.coordIndex.set1Value(11,-1)
|
||
|
||
self.face.coordIndex.set1Value(12,4)
|
||
self.face.coordIndex.set1Value(13,0)
|
||
self.face.coordIndex.set1Value(14,2)
|
||
self.face.coordIndex.set1Value(15,-1)
|
||
|
||
self.face.coordIndex.set1Value(16,1)
|
||
self.face.coordIndex.set1Value(17,0)
|
||
self.face.coordIndex.set1Value(18,5)
|
||
self.face.coordIndex.set1Value(19,-1)
|
||
|
||
self.face.coordIndex.set1Value(20,3)
|
||
self.face.coordIndex.set1Value(21,1)
|
||
self.face.coordIndex.set1Value(22,5)
|
||
self.face.coordIndex.set1Value(23,-1)
|
||
|
||
self.face.coordIndex.set1Value(24,4)
|
||
self.face.coordIndex.set1Value(25,3)
|
||
self.face.coordIndex.set1Value(26,5)
|
||
self.face.coordIndex.set1Value(27,-1)
|
||
|
||
self.face.coordIndex.set1Value(28,0)
|
||
self.face.coordIndex.set1Value(29,4)
|
||
self.face.coordIndex.set1Value(30,5)
|
||
self.face.coordIndex.set1Value(31,-1)
|
||
|
||
def getDisplayModes(self,obj):
|
||
"Return a list of display modes."
|
||
modes=[]
|
||
modes.append("Shaded")
|
||
modes.append("Wireframe")
|
||
return modes
|
||
|
||
def getDefaultDisplayMode(self):
|
||
"Return the name of the default display mode. It must be defined in getDisplayModes."
|
||
return "Shaded"
|
||
|
||
def setDisplayMode(self,mode):
|
||
return mode
|
||
|
||
def onChanged(self, vp, prop):
|
||
"Here we can do something when a single property got changed"
|
||
FreeCAD.Console.PrintMessage("Change property: " + str(prop) + "\n")
|
||
if prop == "Color":
|
||
c = vp.getPropertyByName("Color")
|
||
self.color.rgb.setValue(c[0],c[1],c[2])
|
||
|
||
def getIcon(self):
|
||
return """
|
||
/* XPM */
|
||
static const char * ViewProviderBox_xpm[] = {
|
||
"16 16 6 1",
|
||
" c None",
|
||
". c #141010",
|
||
"+ c #615BD2",
|
||
"@ c #C39D55",
|
||
"# c #000000",
|
||
"$ c #57C355",
|
||
" ........",
|
||
" ......++..+..",
|
||
" .@@@@.++..++.",
|
||
" .@@@@.++..++.",
|
||
" .@@ .++++++.",
|
||
" ..@@ .++..++.",
|
||
"###@@@@ .++..++.",
|
||
"##$.@@$#.++++++.",
|
||
"#$#$.$$$........",
|
||
"#$$####### ",
|
||
"#$$#$$$$$# ",
|
||
"#$$#$$$$$# ",
|
||
"#$$#$$$$$# ",
|
||
" #$#$$$$$# ",
|
||
" ##$$$$$# ",
|
||
" ####### "};
|
||
"""
|
||
|
||
def __getstate__(self):
|
||
return None
|
||
|
||
def __setstate__(self,state):
|
||
return None </pre>
|
||
<p>Infine, dopo che l'oggetto e il suo visualizzatore sono definiti, basta solo chiamarli (La classe Octahedron e il codice della classe viewprovider possono essere copiati direttamente nella console Python di FreeCAD)::
|
||
</p>
|
||
<pre>FreeCAD.newDocument()
|
||
a=FreeCAD.ActiveDocument.addObject("App::FeaturePython","Octahedron")
|
||
Octahedron(a)
|
||
ViewProviderOctahedron(a.ViewObject) </pre>
|
||
<h3><span class="mw-headline" id="Rendere_gli_oggetti_selezionabili">Rendere gli oggetti selezionabili</span></h3>
|
||
<p>Se volete rendere il vostro oggetto selezionabile, o almeno una parte di esso, facendo clic su di esso nella finestra, è necessario includere la sua geometria Coin all'interno di un nodo SoFCSelection. Se l'oggetto ha una rappresentazione complessa, con widget, annotazioni, etc, si potrebbe voler includere solo una parte di esso in un SoFCSelection. Tutto quello che compone un SoFCSelection viene costantemente analizzato da FreeCAD per rilevare selezioni/preselezioni, quindi non ha senso sovraccaricarlo con delle scansioni non necessarie. Ecco ciò che si dovrebbe fare per includere un self.face nell'esempio precedente:
|
||
</p>
|
||
<pre>selectionNode = coin.SoType.fromName("SoFCSelection").createInstance()
|
||
selectionNode.documentName.setValue(FreeCAD.ActiveDocument.Name)
|
||
selectionNode.objectName.setValue(obj.Object.Name) # here obj is the ViewObject, we need its associated App Object
|
||
selectionNode.subElementName.setValue("Face")
|
||
selectNode.addChild(self.face)
|
||
...
|
||
self.shaded.addChild(selectionNode)
|
||
self.wireframe.addChild(selectionNode) </pre>
|
||
<p>Praticamente, si crea un nodo SoFCSelection, quindi si aggiungono ad esso i nodi della geometria, e poi lo si aggiunge al nodo principale, invece di aggiungere direttamente i nodi geometria.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Lavorare_con_le_forme_semplici">Lavorare con le forme semplici</span></h3>
|
||
<p>Se l'oggetto parametrico produce semplicemente una forma, non è necessario utilizzare un fornitore di vista dell'oggetto (view provider object). La forma viene visualizzata utilizzando la rappresentazione della forma standard di FreeCAD:
|
||
</p>
|
||
<pre>import FreeCAD as App
|
||
import FreeCADGui
|
||
import FreeCAD
|
||
import Part
|
||
class Line:
|
||
def __init__(self, obj):
|
||
'''"App two point properties" '''
|
||
obj.addProperty("App::PropertyVector","p1","Line","Start point")
|
||
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(1,0,0)
|
||
obj.Proxy = self
|
||
|
||
def execute(self, fp):
|
||
'''"Print a short message when doing a recomputation, this method is mandatory" '''
|
||
fp.Shape = Part.makeLine(fp.p1,fp.p2)
|
||
|
||
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Line")
|
||
Line(a)
|
||
a.ViewObject.Proxy=0 # just set it to something different from None (this assignment is needed to run an internal notification)
|
||
FreeCAD.ActiveDocument.recompute() </pre>
|
||
<p>Lo stesso codice con l'uso di <b>ViewProviderLine</b>
|
||
</p>
|
||
<pre>import FreeCAD as App
|
||
import FreeCADGui
|
||
import FreeCAD
|
||
import Part
|
||
|
||
class Line:
|
||
def __init__(self, obj):
|
||
'''"App two point properties" '''
|
||
obj.addProperty("App::PropertyVector","p1","Line","Start point")
|
||
obj.addProperty("App::PropertyVector","p2","Line","End point").p2=FreeCAD.Vector(100,0,0)
|
||
obj.Proxy = self
|
||
|
||
def execute(self, fp):
|
||
'''"Print a short message when doing a recomputation, this method is mandatory" '''
|
||
fp.Shape = Part.makeLine(fp.p1,fp.p2)
|
||
|
||
class ViewProviderLine:
|
||
def __init__(self, obj):
|
||
''' Set this object to the proxy object of the actual view provider '''
|
||
obj.Proxy = self
|
||
|
||
def getDefaultDisplayMode(self):
|
||
''' Return the name of the default display mode. It must be defined in getDisplayModes. '''
|
||
return "Flat Lines"
|
||
|
||
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Line")
|
||
Line(a)
|
||
ViewProviderLine(a.ViewObject)
|
||
App.ActiveDocument.recompute() </pre>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Ulteriori_informazioni">Ulteriori informazioni</span></h2>
|
||
<p>Ci sono alcune discussioni nel forum molto interessanti su script di oggetti:
|
||
</p><p>- <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/viewtopic.php?f=22&t=13740">http://forum.freecadweb.org/viewtopic.php?f=22&t=13740</a>
|
||
</p><p>- <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/viewtopic.php?t=12139">http://forum.freecadweb.org/viewtopic.php?t=12139</a>
|
||
</p><p>- <a rel="nofollow" class="external free" href="https://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=20#p109709">https://forum.freecadweb.org/viewtopic.php?f=18&t=13460&start=20#p109709</a>
|
||
</p><p>- <a rel="nofollow" class="external free" href="https://forum.freecadweb.org/viewtopic.php?f=22&t=21330">https://forum.freecadweb.org/viewtopic.php?f=22&t=21330</a>
|
||
</p><p><br />
|
||
Oltre agli esempi presentati qui dare un'occhiata al codice sorgente di FreeCAD <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/blob/master/src/Mod/TemplatePyMod/FeaturePython.py">src/Mod/TemplatePyMod/FeaturePython.py</a> per ulteriori esempi.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>FreeCAD ha la sorprendente capacità di essere importabile come modulo Python in altri programmi o in una console autonoma di Python, insieme con tutti i suoi moduli e componenti. E' anche possibile importare la GUI di FreeCAD come modulo Python, anche se con alcune restrizioni. Però con <a href="/wiki/Embedding_FreeCAD/it#Avvertenze" title="Embedding FreeCAD/it">alcune restrizioni</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzare_FreeCAD_senza_GUI">Utilizzare FreeCAD senza GUI</span></h3>
|
||
Una prima, diretta, facile e utile applicazione che si può fare di questo è quella di importare i documenti di FreeCAD in un vostro programma. Nell'esempio che segue, si importa la geometria Parte di un documento di FreeCAD in <a rel="nofollow" class="external text" href="http://www.blender.org">Blender</a>. Ecco lo script completo. Spero che sarete impressionati dalla sua semplicità:<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>FREECADPATH = '/opt/FreeCAD/lib' # path to your FreeCAD.so or FreeCAD.dll file
|
||
import Blender, sys
|
||
sys.path.append(FREECADPATH)
|
||
|
||
def import_fcstd(filename):
|
||
try:
|
||
import FreeCAD
|
||
except ValueError:
|
||
Blender.Draw.PupMenu('Error%t|FreeCAD library not found. Please check the FREECADPATH variable in the import script is correct')
|
||
else:
|
||
scene = Blender.Scene.GetCurrent()
|
||
import Part
|
||
doc = FreeCAD.open(filename)
|
||
objects = doc.Objects
|
||
for ob in objects:
|
||
if ob.Type[:4] == 'Part':
|
||
shape = ob.Shape
|
||
if shape.Faces:
|
||
mesh = Blender.Mesh.New()
|
||
rawdata = shape.tessellate(1)
|
||
for v in rawdata[0]:
|
||
mesh.verts.append((v.x,v.y,v.z))
|
||
for f in rawdata[1]:
|
||
mesh.faces.append.append(f)
|
||
scene.objects.new(mesh,ob.Name)
|
||
Blender.Redraw()
|
||
|
||
def main():
|
||
Blender.Window.FileSelector(import_fcstd, 'IMPORT FCSTD',
|
||
Blender.sys.makename(ext='.fcstd'))
|
||
|
||
# This lets you import the script without running it
|
||
if __name__=='__main__':
|
||
main()</pre></div>La prima parte importante è fare in modo che Python trovi la nostra libreria di FreeCAD. Se la trova, tutti i moduli di FreeCAD, come il modulo Parte, che useremo anche, saranno automaticamente disponibili. Così noi prendiamo semplicemente la variabile sys.path, che è il posto dove Python cerca i moduli, e vi aggiungiamo il percorso di FreeCAD lib. Questa modifica è solo temporanea, e sarà persa quando chiuderemo il nostro interprete Python. Un altro modo potrebbe essere quello di creare un collegamento alla propria libreria di FreeCAD in uno dei percorsi di ricerca di Python. Io ho posto il percorso in una costante (FREECADPATH) in modo che per un altro utente dello script sarà più facile configurarlo per il proprio sistema.
|
||
<p>Quando siamo sicuri che la libreria viene caricata (la sequenza try/except), possiamo lavorare con FreeCAD, allo stesso modo come faremmo all'interno dell'interprete Python di FreeCAD. Apriamo il documento FreeCAD che è passato a noi dalla funzione main(), e facciamo una lista dei suoi oggetti. Poi, siccome abbiamo deciso di preoccuparci solo della geometria del pezzo, controlliamo se la proprietà Type di ogni oggetto contiene "Parte", e dopo la <i>tasselliamo</i>.
|
||
</p><p>Il tassellamento produce una lista di vertici e un elenco di facce definite dai vertici indicizzati. Questo è perfetto, poiché è esattamente lo stesso modo in cui Blender definisce i Mesh. Quindi, il nostro compito è ridicolmente semplice, basta aggiungere il contenuto di entrambi gli elenchi ai vertici e alle facce di una mesh di Blender. Quando tutto è fatto, basta ridisegnare lo schermo, e questo è tutto!
|
||
</p><p>Ovviamente questo script è molto semplice (in realtà ne ho fatto uno più avanzato <a rel="nofollow" class="external text" href="http://yorik.orgfree.com/scripts/import_freecad.py">qui</a>), è probabile che si voglia estenderlo, per esempio per importare anche oggetti mesh, o importare la geometria di una parte che non ha facce, o importare altri formati di file che FreeCAD è in grado di leggere. Si potrebbe anche voler esportare la geometria in un documento di FreeCAD, cosa che può essere fatto allo stesso modo. Si potrebbe anche voler costruire un dialogo per permettere all'utente di scegliere cosa importare, ecc.. La bellezza di tutto questo risiede proprio nel fatto che lasciate lavorare FreeCAD in ombra, mentre i suoi risultati sono presentati nel programma di vostra scelta.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzare_FreeCAD_con_GUI">Utilizzare FreeCAD con GUI</span></h3>
|
||
<p>Dalla versione 4.2, Qt ha la capacità affascinante di incorporare i plug-in della GUI dipendenti da Qt in applicazioni ospite (host) non-Qt e condividere il ciclo di eventi dell'ospite.
|
||
</p><p>In particolare, per FreeCAD questo significa che esso può essere importato (incorporato) all'interno di un'altra applicazione con tutta la sua interfaccia utente dentro un'altra applicazione ospite la quale ha, a questo punto, il pieno controllo di FreeCAD.
|
||
</p><p>L'intero codice python per ottenere questo ha solo due linee:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>
|
||
import FreeCADGui
|
||
FreeCADGui.showMainWindow()</pre></div>
|
||
<p>Se l'applicazione ospite è basata su Qt, allora questa soluzione dovrebbe funzionare su tutte le piattaforme che supportano Qt. Tuttavia, l'ospite deve basarsi sulla stessa versione Qt di FreeCAD perché altrimenti si potrebbe incorrere in errori di esecuzione inaspettati.
|
||
</p><p>Per le applicazioni non-Qt, tuttavia, ci sono alcune limitazioni di cui è necessario essere a conoscenza. Questa soluzione probabilmente non funziona con tutti gli altri toolkit.
|
||
Per Windows funziona fintanto che l'applicazione ospite è basata direttamente su Win32 o su qualsiasi altro toolkit che utilizza internamente l'API Win32, come wxWidgets, MFC o WinForms. Al fine di farla funzionare sotto X11 l'applicazione ospite deve linkare la libreria "glib".
|
||
</p><p>Notare che, questa soluzione, naturalmente, non funziona per nessuna applicazione da console perché non c'è nessun ciclo di eventi in esecuzione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Avvertenze">Avvertenze</span></h3>
|
||
<p>Anche se è possibile importare FreeCAD con un interprete Python esterno, questo non è uno scenario di utilizzo comune e richiede una certa cura. In generale, è meglio usare il Python incluso con FreeCAD, eseguire FreeCAD da linea di comando, o come un sottoprocesso. Vedere <a href="https://www.freecadweb.org/wiki/index.php?title=Start_up_and_Configuration/it" title="Start up and Configuration/it">Avvio e configurazione</a> per maggiori informazioni sulle ultime due opzioni.
|
||
</p><p>Dato che il modulo Python di FreeCAD viene compilato da C ++ (invece di essere un puro modulo Python), esso può essere importato solo da un interprete Python compatibile. Generalmente questo significa che l'interprete Python deve essere compilato con lo stesso compilatore C che è stato utilizzato per costruire FreeCAD. Le informazioni sul compilatore utilizzato per costruire un interprete Python (compreso quello costruito con FreeCAD) si possono trovare nel seguente modo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>>>> import sys
|
||
>>> sys.version
|
||
'2.7.13 (default, Dec 17 2016, 23:03:43) \n[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]'</pre></div>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<table class="fcinfobox wikitable ct" style="width: 230px; float: right; margin-left: 1em">
|
||
<tr>
|
||
<td class="ctTitle">
|
||
<h3><span class="mw-headline" id="Tutorial_6"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Base_ExampleCommandModel.png" class="image"><img alt="Base ExampleCommandModel.png" src="32px-Base_ExampleCommandModel.png" width="32" height="30" srcset="/wiki/images/thumb/9/93/Base_ExampleCommandModel.png/48px-Base_ExampleCommandModel.png 1.5x, /wiki/images/9/93/Base_ExampleCommandModel.png 2x" /></a> Tutorial</span></h3>
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Argomento
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Python
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Livello di difficoltà
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">Base
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Tempo di esecuzione
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Autore
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">Versione di FreeCAD
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<th class="ctOdd">File di esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td class="ctEven">
|
||
</td></tr>
|
||
<tr>
|
||
<td class="ctToc"><br />
|
||
</td></tr></table>
|
||
<p><br />
|
||
</p><p>Questa pagina contiene degli esempi di codice Python utilizzabili in FreeCAD, raccolti dalle esperienze degli utenti e dalle discussioni nel forum. Dopo averli letti, è possibile usarli per iniziare a creare degli script personali ...
|
||
</p><p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Un_tipico_file_InitGui.py">Un tipico file InitGui.py</span></h3>
|
||
<p>Ogni modulo deve contenere, oltre al file del modulo principale, un file InitGui.py che ha il compito di inserire il modulo nella finestra grafica principale (GUI).
|
||
</p><p>Questo è un esempio semplice di un file InitGui.py:
|
||
</p>
|
||
<pre>class ScriptWorkbench (Workbench):
|
||
MenuText = "Scripts"
|
||
def Initialize(self):
|
||
import Scripts # assuming Scripts.py is your module
|
||
list = ["Script_Cmd"] # That list must contain command names, that can be defined in Scripts.py
|
||
self.appendToolbar("My Scripts",list)
|
||
|
||
Gui.addWorkbench(ScriptWorkbench()) </pre>
|
||
<h3><span class="mw-headline" id="Un_tipico_file_del_modulo">Un tipico file del modulo</span></h3>
|
||
<p>Il seguente è un esempio di un file del modulo principale. Esso contiene tutto ciò che il modulo deve seguire. È il file Scripts.py richiamato dall'esempio precedente. In esso è possibile inserire tutti i comandi personalizzati.
|
||
</p>
|
||
<pre>import FreeCAD, FreeCADGui
|
||
|
||
class ScriptCmd:
|
||
def Activated(self):
|
||
# Here your write what your ScriptCmd does...
|
||
FreeCAD.Console.PrintMessage('Hello, World!')
|
||
def GetResources(self):
|
||
return {'Pixmap' : 'path_to_an_icon/myicon.png', 'MenuText': 'Short text', 'ToolTip': 'More detailed text'}
|
||
|
||
FreeCADGui.addCommand('Script_Cmd', ScriptCmd()) </pre>
|
||
<h3><span class="mw-headline" id="Importare_un_nuovo_tipo_di_file">Importare un nuovo tipo di file</span></h3>
|
||
<p>In FreeCAD, è facile creare un importatore per un nuovo tipo di file. FreeCAD non considera che si importano dati in un documento aperto, ma piuttosto che si può semplicemente aprire direttamente il nuovo tipo di file. Quindi, quello che si deve fare è aggiungere la nuova estensione di file alla lista delle estensioni conosciute di FreeCAD, scrivere il codice che legge il file e creare gli oggetti di FreeCAD che si desidera:
|
||
</p><p>Per aggiungere la nuova estensione di file all'elenco si deve aggiungere questa riga al file InitGui.py :
|
||
</p>
|
||
<pre># Assumes Import_Ext.py is the file that has the code for opening and reading .ext files
|
||
FreeCAD.addImportType("Your new File Type (*.ext)","Import_Ext") </pre>
|
||
<p>Poi nel file Import_Ext.py:
|
||
</p>
|
||
<pre>def open(filename):
|
||
doc=App.newDocument()
|
||
# here you do all what is needed with filename, read, classify data, create corresponding FreeCAD objects
|
||
doc.recompute() </pre>
|
||
<p>L'esportazione di un proprio documento in un nuovo tipo di file funziona allo stesso modo, ma si utilizza:
|
||
</p>
|
||
<pre>FreeCAD.addExportType("Your new File Type (*.ext)","Export_Ext")
|
||
</pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_una_linea">Aggiungere una linea</span></h3>
|
||
<p>Una linea ha semplicemente 2 punti.
|
||
</p>
|
||
<pre>import Part,PartGui
|
||
doc=App.activeDocument()
|
||
# add a line element to the document and set its points
|
||
l=Part.LineSegment()
|
||
l.StartPoint=(0.0,0.0,0.0)
|
||
l.EndPoint=(1.0,1.0,1.0)
|
||
doc.addObject("Part::Feature","Line").Shape=l.toShape()
|
||
doc.recompute() </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_un_poligono">Aggiungere un poligono</span></h3>
|
||
<p>Un poligono è semplicemente un insieme di segmenti di linea collegati tra di loro (una polilinea in AutoCAD). Non è necessario che sia chiuso.
|
||
</p>
|
||
<pre>import Part,PartGui
|
||
doc=App.activeDocument()
|
||
n=list()
|
||
# create a 3D vector, set its coordinates and add it to the list
|
||
v=App.Vector(0,0,0)
|
||
n.append(v)
|
||
v=App.Vector(10,0,0)
|
||
n.append(v)
|
||
#... repeat for all nodes
|
||
# Create a polygon object and set its nodes
|
||
p=doc.addObject("Part::Polygon","Polygon")
|
||
p.Nodes=n
|
||
doc.recompute() </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_e_rimuovere_un_oggetto_in_un_gruppo">Aggiungere e rimuovere un oggetto in un gruppo</span></h3>
|
||
<pre>doc=App.activeDocument()
|
||
grp=doc.addObject("App::DocumentObjectGroup", "Group")
|
||
lin=doc.addObject("Part::Feature", "Line")
|
||
grp.addObject(lin) # adds the lin object to the group grp
|
||
grp.removeObject(lin) # removes the lin object from the group grp </pre>
|
||
<p>Nota: È anche possibile annidare dei gruppi in altri gruppi e creare dei sottogruppi...
|
||
</p>
|
||
<h3><span class="mw-headline" id="Aggiungere_un_Mesh">Aggiungere un Mesh</span></h3>
|
||
<pre>import Mesh
|
||
doc=App.activeDocument()
|
||
# create a new empty mesh
|
||
m = Mesh.Mesh()
|
||
# build up box out of 12 facets
|
||
m.addFacet(0.0,0.0,0.0, 0.0,0.0,1.0, 0.0,1.0,1.0)
|
||
m.addFacet(0.0,0.0,0.0, 0.0,1.0,1.0, 0.0,1.0,0.0)
|
||
m.addFacet(0.0,0.0,0.0, 1.0,0.0,0.0, 1.0,0.0,1.0)
|
||
m.addFacet(0.0,0.0,0.0, 1.0,0.0,1.0, 0.0,0.0,1.0)
|
||
m.addFacet(0.0,0.0,0.0, 0.0,1.0,0.0, 1.0,1.0,0.0)
|
||
m.addFacet(0.0,0.0,0.0, 1.0,1.0,0.0, 1.0,0.0,0.0)
|
||
m.addFacet(0.0,1.0,0.0, 0.0,1.0,1.0, 1.0,1.0,1.0)
|
||
m.addFacet(0.0,1.0,0.0, 1.0,1.0,1.0, 1.0,1.0,0.0)
|
||
m.addFacet(0.0,1.0,1.0, 0.0,0.0,1.0, 1.0,0.0,1.0)
|
||
m.addFacet(0.0,1.0,1.0, 1.0,0.0,1.0, 1.0,1.0,1.0)
|
||
m.addFacet(1.0,1.0,0.0, 1.0,1.0,1.0, 1.0,0.0,1.0)
|
||
m.addFacet(1.0,1.0,0.0, 1.0,0.0,1.0, 1.0,0.0,0.0)
|
||
# scale to a edge langth of 100
|
||
m.scale(100.0)
|
||
# add the mesh to the active document
|
||
me=doc.addObject("Mesh::Feature","Cube")
|
||
me.Mesh=m </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_un_arco_o_un_cerchio">Aggiungere un arco o un cerchio</span></h3>
|
||
<pre>import Part
|
||
doc = App.activeDocument()
|
||
c = Part.Circle()
|
||
c.Radius=10.0
|
||
f = doc.addObject("Part::Feature", "Circle") # create a document with a circle feature
|
||
f.Shape = c.toShape() # Assign the circle shape to the shape property
|
||
doc.recompute() </pre>
|
||
<h3><span class="mw-headline" id="Accedere_alla_rappresentazione_di_un_oggetto_e_modificarla">Accedere alla rappresentazione di un oggetto e modificarla</span></h3>
|
||
<p>A ogni oggetto di un documento di FreeCAD è associato un oggetto di rappresentazione della sua vista in cui sono memorizzati tutti i parametri che definiscono il modo in cui l'oggetto deve apparire, come il colore, la larghezza di linea, ecc ..
|
||
</p>
|
||
<pre>gad=Gui.activeDocument() # access the active document containing all
|
||
# view representations of the features in the
|
||
# corresponding App document
|
||
|
||
v=gad.getObject("Cube") # access the view representation to the Mesh feature 'Cube'
|
||
v.ShapeColor # prints the color to the console
|
||
v.ShapeColor=(1.0,1.0,1.0) # sets the shape color to white </pre>
|
||
<h3><span class="mw-headline" id="Controllare_gli_eventi_del_mouse_nel_visualizzatore_3D_tramite_Python">Controllare gli eventi del mouse nel visualizzatore 3D tramite Python</span></h3>
|
||
<p>La struttura di Inventor permette di aggiungere uno o più nodi di richiamo (callback) al grafo di scena (Scenegraph) della vista. In FreeCAD è installato di default un nodo callback per la vista che permette di aggiungere funzioni C++ globali o statiche. In appropriate associazioni Python vengono forniti alcuni metodi per utilizzare questa tecnica all'interno del codice Python.
|
||
</p>
|
||
<pre>App.newDocument()
|
||
v=Gui.activeDocument().activeView()
|
||
|
||
#This class logs any mouse button events. As the registered callback function fires twice for 'down' and
|
||
#'up' events we need a boolean flag to handle this.
|
||
class ViewObserver:
|
||
def logPosition(self, info):
|
||
down = (info["State"] == "DOWN")
|
||
pos = info["Position"]
|
||
if (down):
|
||
FreeCAD.Console.PrintMessage("Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n")
|
||
|
||
o = ViewObserver()
|
||
c = v.addEventCallback("SoMouseButtonEvent",o.logPosition) </pre>
|
||
<p>Ora, cliccate in qualche parte nella zona nella vista 3D e osservate i messaggi nella finestra di output. Per terminare l'osservazione basta chiamare:
|
||
</p>
|
||
<pre>v.removeEventCallback("SoMouseButtonEvent",c) </pre>
|
||
<p>Sono supportati i seguenti tipi di eventi:
|
||
</p>
|
||
<ul><li> SoEvent -- Tutti i tipi di eventi</li>
|
||
<li> SoButtonEvent -- Tutti gli eventi del mouse e della tastiera</li>
|
||
<li> SoLocation2Event -- Eventi di movimento 2D (normalmente i movimenti del mouse)</li>
|
||
<li> SoMotion3Event -- Eventi di movimento 3D (normalmente di spaceball)</li>
|
||
<li> SoKeyboardEvent -- Eventi dei tasti alto e basso</li>
|
||
<li> SoMouseButtonEvent -- Eventi dei pulsanti del mouse verso il basso e verso l'alto</li>
|
||
<li> SoSpaceballButtonEvent -- Eventi di SpaceBall in basso e in alto</li></ul>
|
||
<p>La funzione di Python che può essere registrata con addEventCallback() si aspetta una difinizione. Secondo l'evento controllato la definizione può contenere chiavi differenti.
|
||
</p><p>Per tutti gli eventi esistono le seguenti chiavi:
|
||
</p>
|
||
<ul><li> Type -- Il nome del tipo di evento, ad esempio SoMouseEvent, SoLocation2Event, ... </li>
|
||
<li> Time -- L'ora corrente come stringa </li>
|
||
<li> Position -- Una tupla di due interi, dipendenti dalla posizione del mouse </li>
|
||
<li> ShiftDown -- un valore booleano, vero (true) se Shift è stato premuto altrimenti false</li>
|
||
<li> CtrlDown -- un valore booleano, true se è stato premuto Ctrl altrimenti false </li>
|
||
<li> AltDown -- un valore booleano, true se è stato premuto Alt altrimenti false </li></ul>
|
||
<p>Per tutti gli eventi dei pulsanti, ad esempio eventi di tastiera, mouse o spaceball:
|
||
</p>
|
||
<ul><li> State -- Una stringa 'UP' se il pulsante è verso l'alto, 'DOWN' se è verso il basso o 'UNKNOWN' per tutti gli altri casi</li></ul>
|
||
<p>Per gli eventi da tastiera:
|
||
</p>
|
||
<ul><li> Key -- Un carattere del tasto premuto </li></ul>
|
||
<p>Per gli eventi del pulsante del mouse
|
||
</p>
|
||
<ul><li> Button -- Il pulsante premuto, potrebbe essere BUTTON1, ..., BUTTON5 o ANY </li></ul>
|
||
<p>Per gli eventi di Spaceball:
|
||
</p>
|
||
<ul><li> Button -- Il pulsante premuto, potrebbe essere BUTTON1, ..., BUTTON7 o ANY </li></ul>
|
||
<p>E infine eventi di movimento:
|
||
</p>
|
||
<ul><li> Translation -- Una tupla di tre numeri in virgola mobile </li>
|
||
<li> Rotation -- Un quaternione per la rotazione, cioè una tupla di quattro numeri in virgola mobile</li></ul>
|
||
<h3><span class="mw-headline" id="Visualizzare_i_tasti_premuti_e_gli_eventi_dei_comandi">Visualizzare i tasti premuti e gli eventi dei comandi</span></h3>
|
||
<p>Questa macro visualizza nel report i tasti premuti e tutti gli eventi dei comandi
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>App.newDocument()
|
||
v=Gui.activeDocument().activeView()
|
||
class ViewObserver:
|
||
def logPosition(self, info):
|
||
try:
|
||
down = (info["Key"])
|
||
FreeCAD.Console.PrintMessage(str(down)+"\n") # here the character pressed
|
||
FreeCAD.Console.PrintMessage(str(info)+"\n") # list all events command
|
||
FreeCAD.Console.PrintMessage("_______________________________________"+"\n")
|
||
except Exception:
|
||
None
|
||
|
||
o = ViewObserver()
|
||
c = v.addEventCallback("SoEvent",o.logPosition)
|
||
|
||
#v.removeEventCallback("SoEvent",c) # remove ViewObserver</pre></div>
|
||
<h3><span class="mw-headline" id="Manipolare_il_grafo_della_scena_in_Python">Manipolare il grafo della scena in Python</span></h3>
|
||
<p>È anche possibile ottenere il Scenegraph (grafo della scena) in Python e modificarlo, con il modulo 'Pivy '- una associazione di Python per Coin.
|
||
</p>
|
||
<pre>from pivy.coin import * # load the pivy module
|
||
view = Gui.ActiveDocument.ActiveView # get the active viewer
|
||
root = view.getSceneGraph() # the root is an SoSeparator node
|
||
root.addChild(SoCube())
|
||
view.fitAll() </pre>
|
||
<p>L'API in Python di Pivy viene creato utilizzando lo strumento SWIG. In FreeCAD si usano alcuni nodi auto-scritti che non è possibile creare direttamente in Python. Tuttavia, è possibile creare un nodo dal suo nome interno.
|
||
Si può creare una istanza di tipo 'SoFCSelection' con:
|
||
</p>
|
||
<pre>type = SoType.fromName("SoFCSelection")
|
||
node = type.createInstance() </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_e_rimuovere_oggetti_nel_grafo_della_scena">Aggiungere e rimuovere oggetti nel grafo della scena</span></h3>
|
||
<p>Questo è un modo per aggiungere dei nuovi nodi al Scenegraph. Accertarsi di aggiungere sempre un SoSeparator per contenere la geometria, le coordinate e le informazioni sui materiale di uno stesso oggetto.
|
||
L'esempio seguente aggiunge una linea rossa da (0,0,0) a (10,0,0):
|
||
</p>
|
||
<pre>from pivy import coin
|
||
sg = Gui.ActiveDocument.ActiveView.getSceneGraph()
|
||
co = coin.SoCoordinate3()
|
||
pts = [[0,0,0],[10,0,0]]
|
||
co.point.setValues(0,len(pts),pts)
|
||
ma = coin.SoBaseColor()
|
||
ma.rgb = (1,0,0)
|
||
li = coin.SoLineSet()
|
||
li.numVertices.setValue(2)
|
||
no = coin.SoSeparator()
|
||
no.addChild(co)
|
||
no.addChild(ma)
|
||
no.addChild(li)
|
||
sg.addChild(no) </pre>
|
||
<p>Per rimuoverla, è sufficiente scrivere:
|
||
</p>
|
||
<pre>sg.removeChild(no) </pre>
|
||
<h3><span class="mw-headline" id="Salvare_il_grafo_della_scaena_con_una_rotazione_in_una_serie_di_36_file_negli_assi_X_Y_Z.">Salvare il grafo della scaena con una rotazione in una serie di 36 file negli assi X Y Z.</span></h3>
|
||
<pre>import math
|
||
import time
|
||
from FreeCAD import Base
|
||
from pivy import coin
|
||
|
||
size=(1000,1000)
|
||
dirname = "C:/Temp/animation/"
|
||
steps=36
|
||
angle=2*math.pi/steps
|
||
|
||
matX=Base.Matrix()
|
||
matX.rotateX(angle)
|
||
stepsX=Base.Placement(matX).Rotation
|
||
|
||
matY=Base.Matrix()
|
||
matY.rotateY(angle)
|
||
stepsY=Base.Placement(matY).Rotation
|
||
|
||
matZ=Base.Matrix()
|
||
matZ.rotateZ(angle)
|
||
stepsZ=Base.Placement(matZ).Rotation
|
||
|
||
view=Gui.ActiveDocument.ActiveView
|
||
cam=view.getCameraNode()
|
||
rotCamera=Base.Rotation(*cam.orientation.getValue().getValue())
|
||
|
||
# this sets the lookat point to the center of circumsphere of the global bounding box
|
||
view.fitAll()
|
||
|
||
# the camera's position, i.e. the user's eye point
|
||
position=Base.Vector(*cam.position.getValue().getValue())
|
||
distance=cam.focalDistance.getValue()
|
||
|
||
# view direction
|
||
vec=rotCamera.multVec(Base.Vector(0,0,-1))
|
||
|
||
# this is the point on the screen the camera looks at
|
||
# when rotating the camera we should make this point fix
|
||
lookat=position+vec*distance
|
||
|
||
# around x axis
|
||
for i in range(steps):
|
||
rotCamera=stepsX.multiply(rotCamera)
|
||
cam.orientation.setValue(*rotCamera.Q)
|
||
vec=rotCamera.multVec(Base.Vector(0,0,-1))
|
||
pos=lookat-vec*distance
|
||
cam.position.setValue(pos.x,pos.y,pos.z)
|
||
Gui.updateGui()
|
||
time.sleep(0.3)
|
||
view.saveImage(dirname+"x-%d.png" % i,*size)
|
||
|
||
# around y axis
|
||
for i in range(steps):
|
||
rotCamera=stepsY.multiply(rotCamera)
|
||
cam.orientation.setValue(*rotCamera.Q)
|
||
vec=rotCamera.multVec(Base.Vector(0,0,-1))
|
||
pos=lookat-vec*distance
|
||
cam.position.setValue(pos.x,pos.y,pos.z)
|
||
Gui.updateGui()
|
||
time.sleep(0.3)
|
||
view.saveImage(dirname+"y-%d.png" % i,*size)
|
||
|
||
# around z axis
|
||
for i in range(steps):
|
||
rotCamera=stepsZ.multiply(rotCamera)
|
||
cam.orientation.setValue(*rotCamera.Q)
|
||
vec=rotCamera.multVec(Base.Vector(0,0,-1))
|
||
pos=lookat-vec*distance
|
||
cam.position.setValue(pos.x,pos.y,pos.z)
|
||
Gui.updateGui()
|
||
time.sleep(0.3)
|
||
view.saveImage(dirname+"z-%d.png" % i,*size) </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_dei_widget_personalizzati_all.27interfaccia">Aggiungere dei widget personalizzati all'interfaccia</span></h3>
|
||
<p>È possibile creare widget personalizzati con Qt designer, trasformarli in uno script Python e poi caricarli nell'interfaccia di FreeCAD con PySide.
|
||
</p><p>Il codice Python prodotto dal compilatore Ui di Python (lo strumento che converte i file .ui di Qt-designer nel codice Python) appare in genere come questo (è semplice, si può anche codificare direttamente in Python):
|
||
</p>
|
||
<pre>class myWidget_Ui(object):
|
||
def setupUi(self, myWidget):
|
||
myWidget.setObjectName("my Nice New Widget")
|
||
myWidget.resize(QtCore.QSize(QtCore.QRect(0,0,300,100).size()).expandedTo(myWidget.minimumSizeHint())) # sets size of the widget
|
||
|
||
self.label = QtGui.QLabel(myWidget) # creates a label
|
||
self.label.setGeometry(QtCore.QRect(50,50,200,24)) # sets its size
|
||
self.label.setObjectName("label") # sets its name, so it can be found by name
|
||
|
||
def retranslateUi(self, draftToolbar): # built-in QT function that manages translations of widgets
|
||
myWidget.setWindowTitle(QtGui.QApplication.translate("myWidget", "My Widget", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.label.setText(QtGui.QApplication.translate("myWidget", "Welcome to my new widget!", None, QtGui.QApplication.UnicodeUTF8)) </pre>
|
||
<p>Dopo, basta creare un riferimento alla finestra Qt di FreeCAD, inserire un widget personalizzato in essa, e "trasformare" questo widget nel proprio con il codice Ui che abbiamo appena creato:
|
||
</p>
|
||
<pre>app = QtGui.qApp
|
||
FCmw = app.activeWindow() # the active qt window, = the freecad window since we are inside it
|
||
# FCmw = FreeCADGui.getMainWindow() # use this line if the 'addDockWidget' error is declared
|
||
myNewFreeCADWidget = QtGui.QDockWidget() # create a new dckwidget
|
||
myNewFreeCADWidget.ui = myWidget_Ui() # load the Ui script
|
||
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
|
||
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_una_scheda_alla_Combo_View">Aggiungere una scheda alla Combo View</span></h3>
|
||
<p>Il seguente codice consente di aggiungere una nuova scheda nel pannello ComboView (vista combinata) di FreeCAD, oltre le schede standard "Progetto" e "Attività" . Questo codice utilizza anche il modulo UIC per caricare un file ui direttamente nella nuova scheda.
|
||
</p>
|
||
<pre># create new Tab in ComboView
|
||
from PySide import QtGui,QtCore
|
||
#from PySide import uic
|
||
|
||
def getMainWindow():
|
||
"returns the main window"
|
||
# using QtGui.qApp.activeWindow() isn't very reliable because if another
|
||
# widget than the mainwindow is active (e.g. a dialog) the wrong widget is
|
||
# returned
|
||
toplevel = QtGui.qApp.topLevelWidgets()
|
||
for i in toplevel:
|
||
if i.metaObject().className() == "Gui::MainWindow":
|
||
return i
|
||
raise Exception("No main window found")
|
||
|
||
def getComboView(mw):
|
||
dw=mw.findChildren(QtGui.QDockWidget)
|
||
for i in dw:
|
||
if str(i.objectName()) == "Combo View":
|
||
return i.findChild(QtGui.QTabWidget)
|
||
elif str(i.objectName()) == "Python Console":
|
||
return i.findChild(QtGui.QTabWidget)
|
||
raise Exception ("No tab widget found")
|
||
|
||
mw = getMainWindow()
|
||
tab = getComboView(getMainWindow())
|
||
tab2=QtGui.QDialog()
|
||
tab.addTab(tab2,"A Special Tab")
|
||
|
||
#uic.loadUi("/myTaskPanelforTabs.ui",tab2)
|
||
tab2.show()
|
||
#tab.removeTab(2) </pre>
|
||
<h3><span class="mw-headline" id="Abilitare_o_disabilitare_una_finestra">Abilitare o disabilitare una finestra</span></h3>
|
||
<pre>from PySide import QtGui
|
||
mw=FreeCADGui.getMainWindow()
|
||
dws=mw.findChildren(QtGui.QDockWidget)
|
||
|
||
# objectName may be :
|
||
# "Report view"
|
||
# "Tree view"
|
||
# "Property view"
|
||
# "Selection view"
|
||
# "Combo View"
|
||
# "Python console"
|
||
# "draftToolbar"
|
||
|
||
for i in dws:
|
||
if i.objectName() == "Report view":
|
||
dw=i
|
||
break
|
||
|
||
va=dw.toggleViewAction()
|
||
va.setChecked(True) # True or False
|
||
dw.setVisible(True) # True or False </pre>
|
||
<h3><span class="mw-headline" id="Aprire_una_specifica_pagina_Web">Aprire una specifica pagina Web</span></h3>
|
||
<pre>import WebGui
|
||
WebGui.openBrowser("http://www.example.com") </pre>
|
||
<h3><span class="mw-headline" id="Ottenere_il_contenuto_HTML_di_una_pagina_web_aperta">Ottenere il contenuto HTML di una pagina web aperta</span></h3>
|
||
<pre>from PyQt4 import QtGui,QtWebKit
|
||
a = QtGui.qApp
|
||
mw = a.activeWindow()
|
||
v = mw.findChild(QtWebKit.QWebFrame)
|
||
html = unicode(v.toHtml())
|
||
print html </pre>
|
||
<h3><span class="mw-headline" id="Reperire_e_utilizzare_le_coordinate_di_3_punti_o_oggetti_selezionati">Reperire e utilizzare le coordinate di 3 punti o oggetti selezionati</span></h3>
|
||
<pre># -*- coding: utf-8 -*-
|
||
# the line above to put the accentuated in the remarks
|
||
# If this line is missing, an error will be returned
|
||
# extract and use the coordinates of 3 objects selected
|
||
import Part, FreeCAD, math, PartGui, FreeCADGui
|
||
from FreeCAD import Base, Console
|
||
sel = FreeCADGui.Selection.getSelection() # " sel " contains the items selected
|
||
if len(sel)!=3 :
|
||
# If there are no 3 objects selected, an error is displayed in the report view
|
||
# The \r and \n at the end of line mean return and the newline CR + LF.
|
||
Console.PrintError("Select 3 points exactly\r\n")
|
||
else :
|
||
points=[]
|
||
for obj in sel:
|
||
points.append(obj.Shape.BoundBox.Center)
|
||
|
||
for pt in points:
|
||
# display of the coordinates in the report view
|
||
Console.PrintMessage(str(pt.x)+"\r\n")
|
||
Console.PrintMessage(str(pt.y)+"\r\n")
|
||
Console.PrintMessage(str(pt.z)+"\r\n")
|
||
|
||
Console.PrintMessage(str(pt[1]) + "\r\n") </pre>
|
||
<h3><span class="mw-headline" id="Lista_di_oggetti">Lista di oggetti</span></h3>
|
||
<pre># -*- coding: utf-8 -*-
|
||
import FreeCAD,Draft
|
||
# List all objects of the document
|
||
doc = FreeCAD.ActiveDocument
|
||
objs = FreeCAD.ActiveDocument.Objects
|
||
#App.Console.PrintMessage(str(objs) + "\n")
|
||
#App.Console.PrintMessage(str(len(FreeCAD.ActiveDocument.Objects)) + " Objects" + "\n")
|
||
|
||
for obj in objs:
|
||
a = obj.Name # list the Name of the object (not modifiable)
|
||
b = obj.Label # list the Label of the object (modifiable)
|
||
try:
|
||
c = obj.LabelText # list the LabeText of the text (modifiable)
|
||
App.Console.PrintMessage(str(a) +" "+ str(b) +" "+ str(c) + "\n") # Displays the Name the Label and the text
|
||
except:
|
||
App.Console.PrintMessage(str(a) +" "+ str(b) + "\n") # Displays the Name and the Label of the object
|
||
|
||
#doc.removeObject("Box") # Clears the designated object </pre>
|
||
<h3><span class="mw-headline" id="Ottenere_la_dimensione_di_un_oggetto.2C_dato_il_suo_nome">Ottenere la dimensione di un oggetto, dato il suo nome</span></h3>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>for edge in FreeCAD.ActiveDocument.MyObjectName.Shape.Edges: # replace "MyObjectName" for list
|
||
print edge.Length</pre></div>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Funzione_residente_per_una_azione_con_un_clic_del_mouse">Funzione residente per una azione con un clic del mouse</span></h3>
|
||
<p>Here with <b>SelObserver</b> on a object select
|
||
</p>
|
||
<pre># -*- coding: utf-8 -*-
|
||
# causes an action to the mouse click on an object
|
||
# This function remains resident (in memory) with the function "addObserver(s)"
|
||
# "removeObserver(s) # Uninstalls the resident function
|
||
class SelObserver:
|
||
def setPreselection(self,doc,obj,sub): # Preselection object
|
||
App.Console.PrintMessage(str(sub)+ "\n") # The part of the object name
|
||
|
||
def addSelection(self,doc,obj,sub,pnt): # Selection object
|
||
App.Console.PrintMessage("addSelection"+ "\n")
|
||
App.Console.PrintMessage(str(doc)+ "\n") # Name of the document
|
||
App.Console.PrintMessage(str(obj)+ "\n") # Name of the object
|
||
App.Console.PrintMessage(str(sub)+ "\n") # The part of the object name
|
||
App.Console.PrintMessage(str(pnt)+ "\n") # Coordinates of the object
|
||
App.Console.PrintMessage("______"+ "\n")
|
||
|
||
def removeSelection(self,doc,obj,sub): # Delete the selected object
|
||
App.Console.PrintMessage("removeSelection"+ "\n")
|
||
|
||
def setSelection(self,doc): # Selection in ComboView
|
||
App.Console.PrintMessage("setSelection"+ "\n")
|
||
|
||
def clearSelection(self,doc): # If click on the screen, clear the selection
|
||
App.Console.PrintMessage("clearSelection"+ "\n") # If click on another object, clear the previous object
|
||
s =SelObserver()
|
||
FreeCADGui.Selection.addObserver(s) # install the function mode resident
|
||
#FreeCADGui.Selection.removeObserver(s) # Uninstall the resident function </pre>
|
||
<p>Other example with <b>ViewObserver</b> on a object select or view
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>App.newDocument()
|
||
v=Gui.activeDocument().activeView()
|
||
|
||
#This class logs any mouse button events. As the registered callback function fires twice for 'down' and
|
||
#'up' events we need a boolean flag to handle this.
|
||
class ViewObserver:
|
||
def __init__(self, view):
|
||
self.view = view
|
||
|
||
def logPosition(self, info):
|
||
down = (info["State"] == "DOWN")
|
||
pos = info["Position"]
|
||
if (down):
|
||
FreeCAD.Console.PrintMessage("Clicked on position: ("+str(pos[0])+", "+str(pos[1])+")\n")
|
||
pnt = self.view.getPoint(pos)
|
||
FreeCAD.Console.PrintMessage("World coordinates: " + str(pnt) + "\n")
|
||
info = self.view.getObjectInfo(pos)
|
||
FreeCAD.Console.PrintMessage("Object info: " + str(info) + "\n")
|
||
|
||
o = ViewObserver(v)
|
||
c = v.addEventCallback("SoMouseButtonEvent",o.logPosition)</pre></div>
|
||
<h3><span class="mw-headline" id="Trovare-selezionare_tutti_gli_elementi_sotto_il_cursore">Trovare-selezionare tutti gli elementi sotto il cursore</span></h3>
|
||
<pre>from pivy import coin
|
||
import FreeCADGui
|
||
|
||
def mouse_over_cb( event_callback):
|
||
event = event_callback.getEvent()
|
||
pos = event.getPosition().getValue()
|
||
listObjects = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo((int(pos[0]),int(pos[1])))
|
||
obj = []
|
||
if listObjects:
|
||
FreeCAD.Console.PrintMessage("\n *** Objects under mouse pointer ***")
|
||
for o in listObjects:
|
||
label = str(o["Object"])
|
||
if not label in obj:
|
||
obj.append(label)
|
||
FreeCAD.Console.PrintMessage("\n"+str(obj))
|
||
|
||
|
||
view = FreeCADGui.ActiveDocument.ActiveView
|
||
|
||
mouse_over = view.addEventCallbackPivy( coin.SoLocation2Event.getClassTypeId(), mouse_over_cb )
|
||
|
||
# to remove Callback :
|
||
#view.removeEventCallbackPivy( coin.SoLocation2Event.getClassTypeId(), mouse_over)
|
||
|
||
####
|
||
#The easy way is probably to use FreeCAD's selection.
|
||
#FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo(mouse_coords)
|
||
|
||
####
|
||
#you get that kind of result :
|
||
#'Document': 'Unnamed', 'Object': 'Box', 'Component': 'Face2', 'y': 8.604081153869629, 'x': 21.0, 'z': 8.553047180175781
|
||
|
||
####
|
||
#You can use this data to add your element to FreeCAD's selection :
|
||
#FreeCADGui.Selection.addSelection(FreeCAD.ActiveDocument.Box,'Face2',21.0,8.604081153869629,8.553047180175781) </pre>
|
||
<h3><span class="mw-headline" id="Elencare_i_componenti_di_un_oggetto">Elencare i componenti di un oggetto</span></h3>
|
||
<p>Questa funzione elenca i componenti ed estrae le coordinate XYZ di un oggetto, i bordi (edge) e le loro lunghezze, le sue facce e la loro superficie.
|
||
</p>
|
||
<pre># -*- coding: utf-8 -*-
|
||
# This function list the components of an object
|
||
# and extract this object its XYZ coordinates,
|
||
# its edges and their lengths center of mass and coordinates
|
||
# its faces and their center of mass
|
||
# its faces and their surfaces and coordinates
|
||
# 8/05/2014
|
||
|
||
import Draft,Part
|
||
def detail():
|
||
sel = FreeCADGui.Selection.getSelection() # Select an object
|
||
if len(sel) != 0: # If there is a selection then
|
||
Vertx=[]
|
||
Edges=[]
|
||
Faces=[]
|
||
compt_V=0
|
||
compt_E=0
|
||
compt_F=0
|
||
pas =0
|
||
perimetre = 0.0
|
||
EdgesLong = []
|
||
|
||
# Displays the "Name" and the "Label" of the selection
|
||
App.Console.PrintMessage("Selection > " + str(sel[0].Name) + " " + str(sel[0].Label) +"\n"+"\n")
|
||
|
||
for j in enumerate(sel[0].Shape.Edges): # Search the "Edges" and their lengths
|
||
compt_E+=1
|
||
Edges.append("Edge%d" % (j[0]+1))
|
||
EdgesLong.append(str(sel[0].Shape.Edges[compt_E-1].Length))
|
||
perimetre += (sel[0].Shape.Edges[compt_E-1].Length) # calculates the perimeter
|
||
|
||
# Displays the "Edge" and its length
|
||
App.Console.PrintMessage("Edge"+str(compt_E)+" Length > "+str(sel[0].Shape.Edges[compt_E-1].Length)+"\n")
|
||
|
||
# Displays the "Edge" and its center mass
|
||
App.Console.PrintMessage("Edge"+str(compt_E)+" Center > "+str(sel[0].Shape.Edges[compt_E-1].CenterOfMass)+"\n")
|
||
|
||
num = sel[0].Shape.Edges[compt_E-1].Vertexes[0]
|
||
Vertx.append("X1: "+str(num.Point.x))
|
||
Vertx.append("Y1: "+str(num.Point.y))
|
||
Vertx.append("Z1: "+str(num.Point.z))
|
||
# Displays the coordinates 1
|
||
App.Console.PrintMessage("X1: "+str(num.Point[0])+" Y1: "+str(num.Point[1])+" Z1: "+str(num.Point[2])+"\n")
|
||
|
||
try:
|
||
num = sel[0].Shape.Edges[compt_E-1].Vertexes[1]
|
||
Vertx.append("X2: "+str(num.Point.x))
|
||
Vertx.append("Y2: "+str(num.Point.y))
|
||
Vertx.append("Z2: "+str(num.Point.z))
|
||
except:
|
||
Vertx.append("-")
|
||
Vertx.append("-")
|
||
Vertx.append("-")
|
||
# Displays the coordinates 2
|
||
App.Console.PrintMessage("X2: "+str(num.Point[0])+" Y2: "+str(num.Point[1])+" Z2: "+str(num.Point[2])+"\n")
|
||
|
||
App.Console.PrintMessage("\n")
|
||
App.Console.PrintMessage("Perimeter of the form  : "+str(perimetre)+"\n")
|
||
|
||
App.Console.PrintMessage("\n")
|
||
FacesSurf = []
|
||
for j in enumerate(sel[0].Shape.Faces): # Search the "Faces" and their surface
|
||
compt_F+=1
|
||
Faces.append("Face%d" % (j[0]+1))
|
||
FacesSurf.append(str(sel[0].Shape.Faces[compt_F-1].Area))
|
||
|
||
# Displays 'Face' and its surface
|
||
App.Console.PrintMessage("Face"+str(compt_F)+" > Surface "+str(sel[0].Shape.Faces[compt_F-1].Area)+"\n")
|
||
|
||
# Displays 'Face' and its CenterOfMass
|
||
App.Console.PrintMessage("Face"+str(compt_F)+" > Center "+str(sel[0].Shape.Faces[compt_F-1].CenterOfMass)+"\n")
|
||
|
||
# Displays 'Face' and its Coordinates
|
||
FacesCoor = []
|
||
fco = 0
|
||
for f0 in sel[0].Shape.Faces[compt_F-1].Vertexes: # Search the Vertexes of the face
|
||
fco += 1
|
||
FacesCoor.append("X"+str(fco)+": "+str(f0.Point.x))
|
||
FacesCoor.append("Y"+str(fco)+": "+str(f0.Point.y))
|
||
FacesCoor.append("Z"+str(fco)+": "+str(f0.Point.z))
|
||
|
||
# Displays 'Face' and its Coordinates
|
||
App.Console.PrintMessage("Face"+str(compt_F)+" > Coordinate"+str(FacesCoor)+"\n")
|
||
|
||
# Displays 'Face' and its Volume
|
||
App.Console.PrintMessage("Face"+str(compt_F)+" > Volume "+str(sel[0].Shape.Faces[compt_F-1].Volume)+"\n")
|
||
App.Console.PrintMessage("\n")
|
||
|
||
# Displays the total surface of the form
|
||
App.Console.PrintMessage("Surface of the form  : "+str(sel[0].Shape.Area)+"\n")
|
||
|
||
# Displays the total Volume of the form
|
||
App.Console.PrintMessage("Volume of the form  : "+str(sel[0].Shape.Volume)+"\n")
|
||
|
||
detail() </pre>
|
||
<h3><span class="mw-headline" id="List_the_PropertiesList">List the PropertiesList</span></h3>
|
||
<pre>import FreeCADGui
|
||
from FreeCAD import Console
|
||
o = App.ActiveDocument.ActiveObject
|
||
op = o.PropertiesList
|
||
for p in op:
|
||
Console.PrintMessage("Property: "+ str(p)+ " Value: " + str(o.getPropertyByName(p))+"\r\n") </pre>
|
||
<h3><span class="mw-headline" id="Aggiungere_una_Propriet.C3.A0_.22Comment.22">Aggiungere una Proprietà "Comment"</span></h3>
|
||
<pre>import Draft
|
||
obj = FreeCADGui.Selection.getSelection()[0]
|
||
obj.addProperty("App::PropertyString","GComment","Draft","Font name").GComment = "Comment here"
|
||
App.activeDocument().recompute() </pre>
|
||
<h3><span class="mw-headline" id="Ricerca_e_estrazione_di_dati">Ricerca e estrazione di dati</span></h3>
|
||
<p>Esempi di ricerca e decodifica di informazioni su un oggetto.
|
||
</p><p>Ogni sezione separata da "############" è indipendente e può essere copiata direttamente nella console Python, o in una macro o usata come macro a sè stante. La descrizione della macro si trova nel commento.
|
||
</p><p>Le informazioni ricercate in questo modo sono visualizzate nella finestra dei rapporti attivabile con Visualizza -> Viste -> Report
|
||
</p>
|
||
<pre># -*- coding: utf-8 -*-
|
||
from __future__ import unicode_literals
|
||
|
||
# Exemples de recherche et de decodage d'informations sur un objet
|
||
# Chaque section peut etre copiee directement dans la console Python ou dans une macro ou utilisez la macro tel quel
|
||
# Certaines commandes se repetent seul l'approche est differente
|
||
# L'affichage se fait dans la Vue rapport : Menu Affichage > Vues > Vue rapport
|
||
#
|
||
# Examples of research and decoding information on an object
|
||
# Each section can be copied directly into the Python console, or in a macro or uses this macro
|
||
# Certain commands as repeat alone approach is different
|
||
# Displayed on Report view : Menu View > Views > report view
|
||
#
|
||
# rev:30/08/2014:29/09/2014:17/09/2015
|
||
|
||
from FreeCAD import Base
|
||
import DraftVecUtils, Draft, Part
|
||
|
||
mydoc = FreeCAD.activeDocument().Name # Name of active Document
|
||
App.Console.PrintMessage("Active docu  : "+(mydoc)+"\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
object_Label = sel[0].Label # Label of the object (modifiable)
|
||
App.Console.PrintMessage("object_Label  : "+(object_Label)+"\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
App.Console.PrintMessage("sel  : "+str(sel[0])+"\n\n") # sel[0] first object selected
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
object_Name = sel[0].Name # Name of the object (not modifiable)
|
||
App.Console.PrintMessage("object_Name  : "+str(object_Name)+"\n\n")
|
||
##################################################################################
|
||
|
||
try:
|
||
SubElement = FreeCADGui.Selection.getSelectionEx() # sub element name with getSelectionEx()
|
||
element_ = SubElement[0].SubElementNames[0] # name of 1 element selected
|
||
App.Console.PrintMessage("elementSelec  : "+str(element_)+"\n\n")
|
||
except:
|
||
App.Console.PrintMessage("Oups"+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
App.Console.PrintMessage("sel  : "+str(sel[0])+"\n\n") # sel[0] first object selected
|
||
##################################################################################
|
||
|
||
SubElement = FreeCADGui.Selection.getSelectionEx() # sub element name with getSelectionEx()
|
||
App.Console.PrintMessage("SubElement  : "+str(SubElement[0])+"\n\n") # name of sub element
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
i = 0
|
||
for j in enumerate(sel[0].Shape.Edges): # list all Edges
|
||
i += 1
|
||
App.Console.PrintMessage("Edges n : "+str(i)+"\n")
|
||
a = sel[0].Shape.Edges[j[0]].Vertexes[0]
|
||
App.Console.PrintMessage("X1  : "+str(a.Point.x)+"\n") # coordinate XYZ first point
|
||
App.Console.PrintMessage("Y1  : "+str(a.Point.y)+"\n")
|
||
App.Console.PrintMessage("Z1  : "+str(a.Point.z)+"\n")
|
||
try:
|
||
a = sel[0].Shape.Edges[j[0]].Vertexes[1]
|
||
App.Console.PrintMessage("X2  : "+str(a.Point.x)+"\n") # coordinate XYZ second point
|
||
App.Console.PrintMessage("Y2  : "+str(a.Point.y)+"\n")
|
||
App.Console.PrintMessage("Z2  : "+str(a.Point.z)+"\n")
|
||
except:
|
||
App.Console.PrintMessage("Oups"+"\n")
|
||
App.Console.PrintMessage("\n")
|
||
##################################################################################
|
||
|
||
try:
|
||
SubElement = FreeCADGui.Selection.getSelectionEx() # sub element name with getSelectionEx()
|
||
subElementName = Gui.Selection.getSelectionEx()[0].SubElementNames[0] # sub element name with getSelectionEx()
|
||
App.Console.PrintMessage("subElementName : "+str(subElementName)+"\n")
|
||
|
||
subObjectLength = Gui.Selection.getSelectionEx()[0].SubObjects[0].Length # sub element Length
|
||
App.Console.PrintMessage("subObjectLength: "+str(subObjectLength)+"\n\n")
|
||
|
||
subObjectX1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.x # sub element coordinate X1
|
||
App.Console.PrintMessage("subObject_X1  : "+str(subObjectX1)+"\n")
|
||
subObjectY1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.y # sub element coordinate Y1
|
||
App.Console.PrintMessage("subObject_Y1  : "+str(subObjectY1)+"\n")
|
||
subObjectZ1 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[0].Point.z # sub element coordinate Z1
|
||
App.Console.PrintMessage("subObject_Z1  : "+str(subObjectZ1)+"\n\n")
|
||
|
||
subObjectX2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.x # sub element coordinate X2
|
||
App.Console.PrintMessage("subObject_X2  : "+str(subObjectX2)+"\n")
|
||
subObjectY2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.y # sub element coordinate Y2
|
||
App.Console.PrintMessage("subObject_Y2  : "+str(subObjectY2)+"\n")
|
||
subObjectZ2 = Gui.Selection.getSelectionEx()[0].SubObjects[0].Vertexes[1].Point.z # sub element coordinate Z2
|
||
App.Console.PrintMessage("subObject_Z2  : "+str(subObjectZ2)+"\n\n")
|
||
|
||
subObjectBoundBox = Gui.Selection.getSelectionEx()[0].SubObjects[0].BoundBox # sub element BoundBox coordinates
|
||
App.Console.PrintMessage("subObjectBBox  : "+str(subObjectBoundBox)+"\n")
|
||
|
||
subObjectBoundBoxCenter = Gui.Selection.getSelectionEx()[0].SubObjects[0].BoundBox.Center # sub element BoundBoxCenter
|
||
App.Console.PrintMessage("subObjectBBoxCe: "+str(subObjectBoundBoxCenter)+"\n")
|
||
|
||
surfaceFace = Gui.Selection.getSelectionEx()[0].SubObjects[0].Area # Area of the face selected
|
||
App.Console.PrintMessage("surfaceFace  : "+str(surfaceFace)+"\n\n")
|
||
except:
|
||
App.Console.PrintMessage("Oups"+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
surface = sel[0].Shape.Area # Area object complete
|
||
App.Console.PrintMessage("surfaceObjet  : "+str(surface)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
CenterOfMass = sel[0].Shape.CenterOfMass # Center of Mass of the object
|
||
App.Console.PrintMessage("CenterOfMass  : "+str(CenterOfMass)+"\n")
|
||
App.Console.PrintMessage("CenterOfMassX  : "+str(CenterOfMass[0])+"\n") # coordinates [0]=X [1]=Y [2]=Z
|
||
App.Console.PrintMessage("CenterOfMassY  : "+str(CenterOfMass[1])+"\n")
|
||
App.Console.PrintMessage("CenterOfMassZ  : "+str(CenterOfMass[2])+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
for j in enumerate(sel[0].Shape.Faces): # List alles faces of the object
|
||
App.Console.PrintMessage("Face  : "+str("Face%d" % (j[0]+1))+"\n")
|
||
App.Console.PrintMessage("\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
volume_ = sel[0].Shape.Volume # Volume of the object
|
||
App.Console.PrintMessage("volume_  : "+str(volume_)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
boundBox_= sel[0].Shape.BoundBox # BoundBox of the object
|
||
App.Console.PrintMessage("boundBox_  : "+str(boundBox_)+"\n")
|
||
|
||
boundBoxLX = boundBox_.XLength # Length x boundBox rectangle
|
||
boundBoxLY = boundBox_.YLength # Length y boundBox rectangle
|
||
boundBoxLZ = boundBox_.ZLength # Length z boundBox rectangle
|
||
boundBoxDiag= boundBox_.DiagonalLength # Diagonal Length boundBox rectangle
|
||
|
||
App.Console.PrintMessage("boundBoxLX  : "+str(boundBoxLX)+"\n")
|
||
App.Console.PrintMessage("boundBoxLY  : "+str(boundBoxLY)+"\n")
|
||
App.Console.PrintMessage("boundBoxLZ  : "+str(boundBoxLZ)+"\n")
|
||
App.Console.PrintMessage("boundBoxDiag  : "+str(boundBoxDiag)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
pl = sel[0].Shape.Placement # Placement Vector XYZ and Yaw-Pitch-Roll
|
||
App.Console.PrintMessage("Placement  : "+str(pl)+"\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
pl = sel[0].Shape.Placement.Base # Placement Vector XYZ
|
||
App.Console.PrintMessage("PlacementBase  : "+str(pl)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
Yaw = sel[0].Shape.Placement.Rotation.toEuler()[0] # decode angle Euler Yaw
|
||
App.Console.PrintMessage("Yaw  : "+str(Yaw)+"\n")
|
||
Pitch = sel[0].Shape.Placement.Rotation.toEuler()[1] # decode angle Euler Pitch
|
||
App.Console.PrintMessage("Pitch  : "+str(Pitch)+"\n")
|
||
Roll = sel[0].Shape.Placement.Rotation.toEuler()[2] # decode angle Euler Yaw
|
||
App.Console.PrintMessage("Roll  : "+str(Roll)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
oripl_X = sel[0].Placement.Base[0] # decode Placement X
|
||
oripl_Y = sel[0].Placement.Base[1] # decode Placement Y
|
||
oripl_Z = sel[0].Placement.Base[2] # decode Placement Z
|
||
|
||
App.Console.PrintMessage("oripl_X  : "+str(oripl_X)+"\n")
|
||
App.Console.PrintMessage("oripl_Y  : "+str(oripl_Y)+"\n")
|
||
App.Console.PrintMessage("oripl_Z  : "+str(oripl_Z)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
rotation = sel[0].Placement.Rotation # decode Placement Rotation
|
||
App.Console.PrintMessage("rotation  : "+str(rotation)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
pl = sel[0].Shape.Placement.Rotation # decode Placement Rotation other method
|
||
App.Console.PrintMessage("Placement Rot  : "+str(pl)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
pl = sel[0].Shape.Placement.Rotation.Angle # decode Placement Rotation Angle
|
||
App.Console.PrintMessage("Placement Rot Angle  : "+str(pl)+"\n\n")
|
||
##################################################################################
|
||
|
||
sel = FreeCADGui.Selection.getSelection() # select object with getSelection()
|
||
Rot_0 = sel[0].Placement.Rotation.Q[0] # decode Placement Rotation 0
|
||
App.Console.PrintMessage("Rot_0  : "+str(Rot_0)+ " rad , "+str(180 * Rot_0 / 3.1416)+" deg "+"\n")
|
||
|
||
Rot_1 = sel[0].Placement.Rotation.Q[1] # decode Placement Rotation 1
|
||
App.Console.PrintMessage("Rot_1  : "+str(Rot_1)+ " rad , "+str(180 * Rot_1 / 3.1416)+" deg "+"\n")
|
||
|
||
Rot_2 = sel[0].Placement.Rotation.Q[2] # decode Placement Rotation 2
|
||
App.Console.PrintMessage("Rot_2  : "+str(Rot_2)+ " rad , "+str(180 * Rot_2 / 3.1416)+" deg "+"\n")
|
||
|
||
Rot_3 = sel[0].Placement.Rotation.Q[3] # decode Placement Rotation 3
|
||
App.Console.PrintMessage("Rot_3  : "+str(Rot_3)+"\n\n")
|
||
################################################################################## </pre>
|
||
<h3><span class="mw-headline" id="Ricerca_manuale_di_un_elemento_dall.27etichetta">Ricerca manuale di un elemento dall'etichetta</span></h3>
|
||
<pre># Extract the coordinate X,Y,Z and Angle giving the label
|
||
App.Console.PrintMessage("Base.x  : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.x)+"\n")
|
||
App.Console.PrintMessage("Base.y  : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.y)+"\n")
|
||
App.Console.PrintMessage("Base.z  : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Base.z)+"\n")
|
||
App.Console.PrintMessage("Base.Angle  : "+str(FreeCAD.ActiveDocument.getObjectsByLabel("Cylindre")[0].Placement.Rotation.Angle)+"\n\n")
|
||
################################################################################## </pre>
|
||
<p>Note: Di solito gli angoli sono espressi in radianti da convertire con:
|
||
</p>
|
||
<ol><li>da gradi a radianti :
|
||
<ul><li>angolo in radianti = <b>pi * (angolo in gradi) / 180</b> </li>
|
||
<li>angolo in radianti = math.radians(angolo in gradi) </li></ul></li>
|
||
<li>da radianti a gradi :
|
||
<ul><li>angolo in gradi = <b>180 * (angolo in radianti) / pi</b> </li>
|
||
<li>angolo in gradi = math.degrees(angolo in radianti)</li></ul></li></ol>
|
||
<h3><span class="mw-headline" id="Coordinate_Cartesiane">Coordinate Cartesiane</span></h3>
|
||
<p>Questo codice visualizza le coordinate cartesiane dell'elemento selezionato.
|
||
</p><p>Modificare il valore di "numberOfPoints" se si desidera un diverso numero di punti (modificare la precisione)
|
||
</p>
|
||
<pre>numberOfPoints = 100 # Decomposition number (or precision you can change)
|
||
selectedEdge = FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0].copy() # select one element
|
||
points = selectedEdge.discretize(numberOfPoints) # discretize the element
|
||
i=0
|
||
for p in points: # list and display the coordinates
|
||
i+=1
|
||
print i, " X", p.x, " Y", p.y, " Z", p.z </pre>
|
||
<p>Altro metodo per visualizzare "Int" e "Float" (interi e valori in virgola mobile)
|
||
</p>
|
||
<pre>import Part
|
||
from FreeCAD import Base
|
||
|
||
c=Part.makeCylinder(2,10) # create the circle
|
||
Part.show(c) # display the shape
|
||
|
||
# slice accepts two arguments:
|
||
#+ the normal of the cross section plane
|
||
#+ the distance from the origin to the cross section plane. Here you have to find a value so that the plane intersects your object
|
||
s=c.slice(Base.Vector(0,1,0),0) #
|
||
|
||
# here the result is a single wire
|
||
# depending on the source object this can be several wires
|
||
s=s[0]
|
||
|
||
# if you only need the vertexes of the shape you can use
|
||
v=[]
|
||
for i in s.Vertexes:
|
||
v.append(i.Point)
|
||
|
||
# but you can also sub-sample the section to have a certain number of points (int) ...
|
||
p1=s.discretize(20)
|
||
ii=0
|
||
for i in p1:
|
||
ii+=1
|
||
print i # Vector()
|
||
print ii, ": X:", i.x, " Y:", i.y, " Z:", i.z # Vector decode
|
||
Draft.makeWire(p1,closed=False,face=False,support=None) # to see the difference accuracy (20)
|
||
|
||
## uncomment to use
|
||
#import Draft
|
||
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # first transform the DWire in Wire "downgrade"
|
||
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # second split the Wire in single objects "downgrade"
|
||
#
|
||
##Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) # to attach lines contiguous SELECTED use "upgrade"
|
||
|
||
|
||
# ... or define a sampling distance (float)
|
||
p2=s.discretize(0.5)
|
||
ii=0
|
||
for i in p2:
|
||
ii+=1
|
||
print i # Vector()
|
||
print ii, ": X:", i.x, " Y:", i.y, " Z:", i.z # Vector decode
|
||
Draft.makeWire(p2,closed=False,face=False,support=None) # to see the difference accuracy (0.5)
|
||
|
||
## uncomment to use
|
||
#import Draft
|
||
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # first transform the DWire in Wire "downgrade"
|
||
#Draft.downgrade(App.ActiveDocument.ActiveObject,delete=True) # second split the Wire in single objects "downgrade"
|
||
#
|
||
##Draft.upgrade(FreeCADGui.Selection.getSelection(),delete=True) # to attach lines contiguous SELECTED use "upgrade" </pre>
|
||
<h3><span class="mw-headline" id="Selezionare_tutti_gli_oggetti_nel_documento">Selezionare tutti gli oggetti nel documento</span></h3>
|
||
<pre>import FreeCAD
|
||
for obj in FreeCAD.ActiveDocument.Objects:
|
||
print obj.Name # display the object Name
|
||
objName = obj.Name
|
||
obj = App.ActiveDocument.getObject(objName)
|
||
Gui.Selection.addSelection(obj) # select the object </pre>
|
||
<h3><span class="mw-headline" id="Selezionare_la_faccia_di_un_oggetto">Selezionare la faccia di un oggetto</span></h3>
|
||
<pre># select one face of the object
|
||
import FreeCAD, Draft
|
||
App=FreeCAD
|
||
nameObject = "Box" # objet
|
||
faceSelect = "Face3" # face to selection
|
||
loch=App.ActiveDocument.getObject(nameObject) # objet
|
||
Gui.Selection.clearSelection() # clear all selection
|
||
Gui.Selection.addSelection(loch,faceSelect) # select the face specified
|
||
s = Gui.Selection.getSelectionEx()
|
||
#Draft.makeFacebinder(s) # </pre>
|
||
<h3><span class="mw-headline" id="Creare_un_oggetto_della_posizione_della_fotocamera">Creare un oggetto della posizione della fotocamera</span></h3>
|
||
<pre># create one object of the position to camera with "getCameraOrientation()"
|
||
# the object is still facing the screen
|
||
import Draft
|
||
|
||
plan = FreeCADGui.ActiveDocument.ActiveView.getCameraOrientation()
|
||
plan = str(plan)
|
||
###### extract data
|
||
a = ""
|
||
for i in plan:
|
||
if i in ("0123456789e.- "):
|
||
a+=i
|
||
a = a.strip(" ")
|
||
a = a.split(" ")
|
||
####### extract data
|
||
|
||
#print a
|
||
#print a[0]
|
||
#print a[1]
|
||
#print a[2]
|
||
#print a[3]
|
||
|
||
xP = float(a[0])
|
||
yP = float(a[1])
|
||
zP = float(a[2])
|
||
qP = float(a[3])
|
||
|
||
pl = FreeCAD.Placement()
|
||
pl.Rotation.Q = (xP,yP,zP,qP) # rotation of object
|
||
pl.Base = FreeCAD.Vector(0.0,0.0,0.0) # here coordinates XYZ of Object
|
||
rec = Draft.makeRectangle(length=10.0,height=10.0,placement=pl,face=False,support=None) # create rectangle
|
||
#rec = Draft.makeCircle(radius=5,placement=pl,face=False,support=None) # create circle
|
||
print rec.Name </pre>
|
||
<p>stesso codice semplificato
|
||
</p>
|
||
<pre>import Draft
|
||
pl = FreeCAD.Placement()
|
||
pl.Rotation = FreeCADGui.ActiveDocument.ActiveView.getCameraOrientation()
|
||
pl.Base = FreeCAD.Vector(0.0,0.0,0.0)
|
||
rec = Draft.makeRectangle(length=10.0,height=10.0,placement=pl,face=False,support=None) </pre>
|
||
<h3><span class="mw-headline" id="Trovare_il_vettore_normale_alla_superficie">Trovare il vettore normale alla superficie</span></h3>
|
||
<p>Questo esempio mostra come trovare vettore normale alla superficie trovando prima i parametri u, v di un punto sulla superficie e utilizzando poi i parametri u, v per trovare il vettore normale
|
||
</p>
|
||
<pre>def normal(self):
|
||
ss=FreeCADGui.Selection.getSelectionEx()[0].SubObjects[0].copy()#SubObjects[0] is the edge list
|
||
points = ss.discretize(3.0)#points on the surface edge,
|
||
#this example just use points on the edge for example.
|
||
#However point is not necessary on the edge, it can be anywhere on the surface.
|
||
face=FreeCADGui.Selection.getSelectionEx()[0].SubObjects[1]
|
||
for pp in points:
|
||
pt=FreeCAD.Base.Vector(pp.x,pp.y,pp.z)#a point on the surface edge
|
||
uv=face.Surface.parameter(pt)# find the surface u,v parameter of a point on the surface edge
|
||
u=uv[0]
|
||
v=uv[1]
|
||
normal=face.normalAt(u,v)#use u,v to find normal vector
|
||
print normal
|
||
line=Part.makeLine((pp.x,pp.y,pp.z), (normal.x,normal.y,normal.z))
|
||
Part.show(line) </pre>
|
||
<h3><span class="mw-headline" id="Leggere_e_scrivere_una_Expression">Leggere e scrivere una Expression</span></h3>
|
||
<pre>import Draft
|
||
doc = FreeCAD.ActiveDocument
|
||
|
||
pl=FreeCAD.Placement()
|
||
pl.Rotation.Q=(0.0,-0.0,-0.0,1.0)
|
||
pl.Base=FreeCAD.Vector(0.0,0.0,0.0)
|
||
obj = Draft.makeCircle(radius=1.0,placement=pl,face=False,support=None) # create circle
|
||
|
||
print obj.PropertiesList # properties disponible in the obj
|
||
|
||
doc.getObject(obj.Name).setExpression('Radius', u'2mm') # modify the radius
|
||
doc.getObject(obj.Name).setExpression('Placement.Base.x', u'10mm') # modify the placement
|
||
doc.getObject(obj.Name).setExpression('FirstAngle', u'90') # modify the first angle
|
||
doc.recompute()
|
||
|
||
expressions = obj.ExpressionEngine # read the expression list
|
||
print expressions
|
||
|
||
for i in expressions: # list and separate the data expression
|
||
print i[0]," = ",i[1] </pre>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questa pagina mostra come si possono facilmente costruire delle funzionalità avanzate con Python.
|
||
</p><p>In questo esercizio, costruiremo un nuovo strumento che disegna una linea partendo da due punti cliccati nella vista 3D.
|
||
</p><p>Questo strumento può essere collegato a un comando di FreeCAD, e tale comando può essere chiamato da un qualsiasi elemento dell'interfaccia, ad esempio da una voce di menu o da un pulsante in una barra degli strumenti.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Lo_script_principale">Lo script principale</span></h3>
|
||
<p>Per prima cosa scriviamo uno script che contenga tutta la nostra funzionalità.
|
||
</p><p>Dopo, salviamo questo script in un file e lo importiamo in FreeCAD, in modo che tutte le classi e le funzioni che scriviamo diventino disponibili in FreeCAD.
|
||
</p><p>Lanciamo perciò il nostro editor di testo preferito, e digitiamo le seguenti righe:
|
||
</p>
|
||
<pre>import FreeCADGui, Part
|
||
from pivy.coin import *
|
||
|
||
class line:
|
||
"this class will create a line after the user clicked 2 points on the screen"
|
||
def __init__(self):
|
||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||
self.stack = []
|
||
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getpoint)
|
||
|
||
def getpoint(self,event_cb):
|
||
event = event_cb.getEvent()
|
||
if event.getState() == SoMouseButtonEvent.DOWN:
|
||
pos = event.getPosition()
|
||
point = self.view.getPoint(pos[0],pos[1])
|
||
self.stack.append(point)
|
||
if len(self.stack) == 2:
|
||
l = Part.Line(self.stack[0],self.stack[1])
|
||
shape = l.toShape()
|
||
Part.show(shape)
|
||
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.callback) </pre>
|
||
<h3><span class="mw-headline" id="Spiegazione_dettagliata_2">Spiegazione dettagliata</span></h3>
|
||
<pre>import Part, FreeCADGui
|
||
from pivy.coin import * </pre>
|
||
<p>In Python, quando si desidera utilizzare le funzioni di un altro modulo è necessario importarlo.
|
||
</p><p>Nel nostro caso, abbiamo bisogno delle funzioni del <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a> per creare la linea, e del modulo Gui (FreeCADGui) per accedere alla visualizzazione 3D.
|
||
</p><p>Inoltre, abbiamo anche bisogno del contenuto completo della libreria di Coin, in modo da poter utilizzare direttamente tutti gli oggetti Coin, come, ad esempio, SoMouseButtonEvent, ecc ..
|
||
</p>
|
||
<pre>class line: </pre>
|
||
<p>Qui definiamo la nostra classe principale.
|
||
</p><p>Perché utilizzare una classe e non una funzione? Il motivo è che abbiamo bisogno che il nostro strumento rimanga "vivo" mentre aspettiamo che l'utente clicchi sullo schermo.
|
||
</p><p>Una funzione termina quando il suo compito è stato svolto, invece un oggetto (una classe definisce un oggetto) rimane attivo finché non viene distrutto.
|
||
</p>
|
||
<pre>"this class will create a line after the user clicked 2 points on the screen" </pre>
|
||
<p>In Python, ogni classe o funzione può avere una stringa di descrizione.
|
||
</p><p>In FreeCAD, questo è particolarmente utile perché quando chiameremo la classe nell'interprete, la stringa di descrizione verrà visualizzata come tooltip (nota di descrizione o aiuto).
|
||
</p>
|
||
<pre>def __init__(self): </pre>
|
||
<p>Le classi di Python possono sempre contenere una funzione __init__, che viene eseguita quando la classe viene chiamata per creare un oggetto. Quindi, metteremo qui tutto quello che vogliamo che accada quando il nostro strumento line (linea) inizia.
|
||
</p>
|
||
<pre>self.view = FreeCADGui.ActiveDocument.ActiveView </pre>
|
||
<p>In una classe, di solito si aggiunge <i>self.</i> prima di un nome di variabile, in modo che sia facilmente accessibile a tutte le funzioni dentro e fuori questa classe. In questo script, usiamo self.view per accedere e manipolare la vista 3D attiva.
|
||
</p>
|
||
<pre>self.stack = [] </pre>
|
||
<p>Qui creiamo una lista vuota per archiviare i punti 3D inviati dalla funzione getpoint.
|
||
</p>
|
||
<pre>self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getpoint) </pre>
|
||
<p>Questa è la parte importante.
|
||
</p><p>Dato che in realtà si tratta una scena <a rel="nofollow" class="external text" href="http://www.coin3d.org/">Coin3d</a>, FreeCAD utilizza il meccanismo di callback (richiamo) di Coin, il quale permette di chiamare una funzione ogni volta che nella scena accade un determinato evento.
|
||
</p><p>Nel nostro caso, stiamo creando un callback per gli eventi <a rel="nofollow" class="external text" href="http://doc.coin3d.org/Coin/group__events.html">SoMouseButtonEvent</a> e li colleghiamo alla funzione getpoint. Adesso, ogni volta che un pulsante del mouse viene premuto o rilasciato, viene eseguita la funzione getpoint.
|
||
</p><p>Notare che alla addEventCallbackPivy() esiste anche un'alternativa, chiamata addEventCallback() la quale dispensa dall'uso di pivy. Ma, dal momento che pivy è un modo molto efficace e naturale per accedere a ogni parte di una scena di Coin, è meglio utilizzarlo il più possibile!
|
||
</p>
|
||
<pre>def getpoint(self,event_cb): </pre>
|
||
<p>Ora definiamo la funzione getpoint, che sarà eseguita quando un pulsante del mouse verrà premuto in una vista 3D. Questa funzione riceverà un argomento, che chiamiamo event_cb.
|
||
</p><p>Da questo evento callback possiamo accedere all'oggetto event, che contiene diverse parti di informazioni
|
||
</p><p>Per maggiori informazioni sugli eventi controllabili consultate <a href="/wiki/Code_snippets/it#Observing_mouse_events_in_the_3D_viewer_via_Python" title="Code snippets/it">questa pagina</a>.
|
||
</p>
|
||
<pre>if event.getState() == SoMouseButtonEvent.DOWN: </pre>
|
||
<p>La funzione getpoint viene chiamata ogni volta che un pulsante del mouse viene premuto o rilasciato. Invece, noi vogliamo definire un punto 3D solo quando viene premuto (altrimenti otteniamo due punti 3D molto vicini l'uno all'altro). Pertanto quì dobbiamo verificare e stabilire questo.
|
||
</p>
|
||
<pre>pos = event.getPosition() </pre>
|
||
<p>Qui otteniamo le coordinate dello schermo nella posizione del cursore del mouse
|
||
</p>
|
||
<pre>point = self.view.getPoint(pos[0],pos[1]) </pre>
|
||
<p>Questa funzione ci fornisce un vettore di FreeCAD (x, y, z) contenente il punto 3D che giace sul piano focale, esattamente sotto il cursore del mouse. Se siamo in vista camera, immaginiamo un raggio proveniente dalla fotocamera, passante per il cursore del mouse, che colpisce il piano focale. Questo è il nostro punto 3D. Se siamo in vista ortogonale, il raggio è parallelo alla direzione di visualizzazione.
|
||
</p>
|
||
<pre>self.stack.append(point) </pre>
|
||
<p>Aggiungiamo il nostro nuovo punto nella pila (stack)
|
||
</p>
|
||
<pre>if len(self.stack) == 2: </pre>
|
||
<p>Abbiamo già abbastanza punti? Se sì, allora disegnamo la linea!
|
||
</p>
|
||
<pre>l = Part.Line(self.stack[0],self.stack[1]) </pre>
|
||
<p>Qui usiamo la funzione Line() del <a href="https://www.freecadweb.org/wiki/index.php?title=Part_Module/it" title="Part Module/it">Modulo Parte</a> che crea una linea da due vettori di FreeCAD.
|
||
</p><p>Tutto quanto che si crea e si modifica all'interno del modulo Parte, rimane nel modulo Parte. Quindi, fino ad ora, abbiamo creato una linea Parte. Essa non è legata ad alcun oggetto del nostro documento attivo, perciò sullo schermo non viene ancora visualizzato nulla.
|
||
</p>
|
||
<pre>shape = l.toShape() </pre>
|
||
<p>Il documento di FreeCAD può accettare solo shape (forme) dal modulo Parte. Le shape sono il tipo più generico di forme del modulo Part. Dobbiamo quindi convertire la nostra linea in una shape prima di poterla aggiunge al documento.
|
||
</p>
|
||
<pre>Part.show(shape) </pre>
|
||
<p>Il modulo Parte ha una funzione molto utile, show(), che crea un nuovo oggetto nel documento e collega ad esso una shape (forma).
|
||
</p><p>Possiamo anche creare prima un nuovo oggetto nel documento, poi associare manualmente ad esso la shape.
|
||
</p>
|
||
<pre>self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.callback) </pre>
|
||
<p>Siccome con la nostra linea abbiamo finito, terminiamo il meccanismo di callback, che consuma preziosi cicli di CPU.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Test_e_Utilizzo_dello_script">Test e Utilizzo dello script</span></h3>
|
||
<p>Ora, salviamo il nostro script in qualche posizione in cui l'interprete Python di FreeCAD possa trovarlo.
|
||
</p><p>Durante l'importazione dei moduli, l'interprete punta nei seguenti luoghi: i percorsi di installazione di Python, la directory bin di FreeCAD, e tutte le directory dei moduli FreeCAD. Quindi, la soluzione migliore è quella di creare una nuova directory in una delle FreeCAD <a href="https://www.freecadweb.org/wiki/index.php?title=Installing_more_workbenches/it" title="Installing more workbenches/it">Mod directories</a>, e salvare in essa il nostro script. Per esempio, creiamo una directory "MyScripts", e salviamo il nostro script come "exercise.py".
|
||
</p><p>Adesso che tutto è pronto, basta avviare FreeCAD, creare un nuovo documento, e, nell'interprete Python, eseguire:
|
||
</p>
|
||
<pre>import exercise </pre>
|
||
<p>Se non viene visualizzato nessun messaggio di errore, significa che il nostro script "exercise" è stato caricato.
|
||
</p><p>Ora possiamo controllare il suo contenuto con:
|
||
</p>
|
||
<pre>dir(exercise) </pre>
|
||
<p>Il comando dir() è un comando integrato di Python che elenca il contenuto di un modulo. Possiamo vedere che la nostra classe line() è lì, in attesa.
|
||
</p><p>Non rimane che provarla scrivendo:
|
||
</p>
|
||
<pre>exercise.line() </pre>
|
||
<p>Poi, clicchiamo due volte nella vista 3D, e bingo, ecco la nostra linea! Per farne una nuova, basta riscrivere ancora exercise.line(), e ancora, e ancora ... Siete contenti, no?
|
||
</p>
|
||
<h3><span class="mw-headline" id="Includere_lo_script_nell.27interfaccia_di_FreeCAD">Includere lo script nell'interfaccia di FreeCAD</span></h3>
|
||
<p>Per essere davvero efficace il nostro nuovo strumento linea (line) dovrebbe avere un suo pulsante sull'interfaccia, in modo da non dover digitare ogni volta tutte queste cose.
|
||
</p><p>Il modo più semplice è quello di trasformare la nostra nuova directory MyScripts in un ambiente di lavoro completo di FreeCAD.
|
||
</p><p>È facile. Basta solo inserire un file chiamato <b>InitGui.py</b> nella directory MyScripts. Il file InitGui.py conterrà le istruzioni per creare un nuovo ambiente di lavoro (workbench), poi aggiungere ad esso il nostro nuovo strumento.
|
||
</p><p>Oltre a questo dobbiamo anche modificare un po' il nostro codice di exercise, in modo che lo strumento line() sia riconosciuto come un comando ufficiale di FreeCAD.
|
||
</p><p>Cominciamo creando un file InitGui.py, e scriviamo in esso il seguente codice:
|
||
</p>
|
||
<pre>class MyWorkbench (Workbench):
|
||
MenuText = "MyScripts"
|
||
def Initialize(self):
|
||
import exercise
|
||
commandslist = ["line"]
|
||
self.appendToolbar("My Scripts",commandslist)
|
||
Gui.addWorkbench(MyWorkbench()) </pre>
|
||
<p>A questo punto, penso che dovreste già capire da soli lo script precedente.
|
||
</p><p>Creiamo una nuova classe che chiamiamo MyWorkbench, le diamo un titolo (MenuText), e definiamo una funzione Initialize() che verrà eseguita quando l'ambiente di lavoro verrà caricato in FreeCAD. In tale funzione, si carica il contenuto del nostro file exercise, e si aggiungono i comandi di FreeCAD contenuti in una lista di comandi.
|
||
</p><p>Dopo, costruiamo una barra degli strumenti denominata "My Scripts" a cui assegniamo la nostra lista comandi. Al momento, ovviamente, disponiamo di un solo strumento, quindi la nostra lista dei comandi contiene un solo elemento.
|
||
</p><p>Quando il nostro ambiente di lavoro è pronto, lo aggiungiamo all'interfaccia principale.
|
||
</p><p>Questo non basta ancora perché un comando di FreeCAD deve essere formattato in un certo modo per poter funzionare. Quindi è necessario modificare un po' il nostro strumento line().
|
||
</p><p>Ora il nostro nuovo script exercise.py deve essere come questo:
|
||
</p>
|
||
<pre>import FreeCADGui, Part
|
||
from pivy.coin import *
|
||
class line:
|
||
"this class will create a line after the user clicked 2 points on the screen"
|
||
def Activated(self):
|
||
self.view = FreeCADGui.ActiveDocument.ActiveView
|
||
self.stack = []
|
||
self.callback = self.view.addEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.getpoint)
|
||
def getpoint(self,event_cb):
|
||
event = event_cb.getEvent()
|
||
if event.getState() == SoMouseButtonEvent.DOWN:
|
||
pos = event.getPosition()
|
||
point = self.view.getPoint(pos[0],pos[1])
|
||
self.stack.append(point)
|
||
if len(self.stack) == 2:
|
||
l = Part.Line(self.stack[0],self.stack[1])
|
||
shape = l.toShape()
|
||
Part.show(shape)
|
||
self.view.removeEventCallbackPivy(SoMouseButtonEvent.getClassTypeId(),self.callback)
|
||
def GetResources(self):
|
||
return {'Pixmap' : 'path_to_an_icon/line_icon.png', 'MenuText': 'Line', 'ToolTip': 'Creates a line by clicking 2 points on the screen'}
|
||
FreeCADGui.addCommand('line', line()) </pre>
|
||
<p>Quì abbiamo trasformato la nostra funzione __init__() in una funzione Activated(), perchè, quando i comandi di FreeCAD vengono eseguiti, essi eseguono automaticamente la funzione Activated().
|
||
</p><p>Inoltre, abbiamo aggiunto una funzione GetResources(), che fornisce a FreeCAD le informazioni per trovare l'icona dello strumento, il nome e la descrizione (tooltip) del nostro strumento.
|
||
</p><p>Qualunque immagine jpg, png o svg può fungere da icona, essa può essere di qualsiasi dimensione, ma è meglio usare una dimensione vicina all'aspetto finale, come, ad esempio, 16x16, 24x24 o 32x32.
|
||
</p><p>Poi, abbiamo aggiunto la classe line() come un comando ufficiale di FreeCAD con il metodo AddCommand().
|
||
</p><p>Questo è tutto, ora basta riavviare FreeCAD e avremo un bell'ambiente di lavoro con il nostro nuovo strumento line()!
|
||
</p>
|
||
<h3><span class="mw-headline" id="Cosa_si_pu.C3.B2_aggiungere.3F">Cosa si può aggiungere?</span></h3>
|
||
<p>Se questo esercizio vi è piaciuto, perché non cercare di migliorare questo piccolo strumento? Si possono fare molte cose, come ad esempio:
|
||
</p>
|
||
<ul><li> Aggiungere assistenza per gli utenti: fino ad ora abbiamo fatto uno strumento molto spoglio, l'utente potrebbe essere un po' disorientato quando lo utilizza. Perciò si potrebbe aggiungere qualche informazione, che suggerisca come procedere. Ad esempio, si potrebbero mostrare dei messaggi nella console di FreeCAD. In merito, visita il modulo FreeCAD.Console</li>
|
||
<li> Aggiungere la possibilità di digitare manualmente le coordinate dei punti 3D. Guarda la funzione input() di Python, per esempio</li>
|
||
<li> Aggiungere la possibilità di definire più di 2 punti</li>
|
||
<li> Aggiungere controlli per altri eventi. Al momento verifichiamo solo gli eventi del pulsante del mouse, ma se vogliamo anche fare qualcosa quando il mouse viene spostato oppure visualizzare le coordinate attuali?</li>
|
||
<li> Assegnare un nome all'oggetto creato</li></ul>
|
||
<p>Non esitate a scrivere le vostre domande o idee nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/">forum</a>!
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>In questa pagina vi mostreremo come creare una semplice finestra di dialogo di Qt con <a rel="nofollow" class="external text" href="http://qt-project.org/doc/qt-4.8/designer-manual.html">Qt Designer</a>, lo strumento ufficiale di Qt per la progettazione di interfacce, quindi come convertirla in codice Python e poi utilizzarla all'interno di FreeCAD.
|
||
</p><p>Nell'esempio si assume che sappiate già come modificare ed eseguire gli script di Python, e sappiate anche fare delle cose semplici in una finestra di terminale, come navigare, ecc.
|
||
</p><p>Naturalmente, è necessario che PyQt sia installato.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Progettare_la_finestra">Progettare la finestra</span></h3>
|
||
<p>Nelle applicazioni CAD, il disegno di una buona UI (interfaccia utente) è molto importante. L'utente esegue quasi tutte le operazioni tramite qualche componente dell'interfaccia: legge le finestre di dialogo, preme i pulsanti, sceglie tra le icone, ecc. Quindi è molto importante pensare attentamente a ciò che si intende fare, a come si desidera che l'utente si comporti, e a quale sarà il flusso di lavoro delle proprie azioni.
|
||
</p><p>Quando si progetta l'interfaccia, è bene tenere presenti alcune cose:
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Modal_window">Finestre di dialogo modali e non-modali</a>: una finestra di dialogo modale appare sullo schermo in primo piano, blocca l'azione della finestra principale e costringe l'utente a rispondere alla finestra di dialogo, mentre un dialogo non-modale permette di continuare a lavorare sulla finestra principale. In alcuni casi è meglio usare la prima soluzione, in altri casi no.</li>
|
||
<li> Identificare ciò che è necessario e ciò che è facoltativo. Accertarsi che l'utente sappia esattamente quello che deve fare. Etichettare tutto con una descrizione adeguata, realizzare dei suggerimenti per l'uso degli strumenti, ecc.</li>
|
||
<li> Separare i comandi dei parametri. Questo solitamente si ottiene con pulsanti e campi per inserire i testi. L'utente sa che cliccando su un pulsante si produce una azione, e che, invece, sostituendo un valore all'interno di un campo di testo si modifica un parametro da qualche parte. In genere, oggi gli utenti sanno bene che cosa è un pulsante, che cosa è un campo di input, ecc. Il toolkit Qt, che stiamo per usare, è il più avanzato strumento di costruzione di interfacce. Non dovrete preoccuparvi molto di fare le cose chiare, dal momento che sarà già esso stesso molto chiaro.</li></ul>
|
||
<p>Ora che abbiamo definito con precisione quello che faremo, è il momento di aprire Qt Designer.
|
||
</p><p>Disegneremo una finestra di dialogo molto semplice, simile a questa:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qttestdialog.jpg" class="image"><img alt="Qttestdialog.jpg" src="Qttestdialog.jpg" width="210" height="216" /></a>
|
||
</p><p>Dopo utilizzeremo questa finestra di dialogo all'interno di FreeCAD per produrre un bel piano rettangolare. Forse pensate che produrre dei bei piani rettangolari non è particolarmente utile, però, in un secondo tempo, sarà facile apportarvi delle modifiche e creare delle cose più complesse.
|
||
</p><p>Quando viene aperto, Qt Designer ha questo aspetto:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qtdesigner-screenshot.jpg" class="image"><img alt="Qtdesigner-screenshot.jpg" src="Qtdesigner-screenshot.jpg" width="800" height="486" /></a>
|
||
</p><p>È molto semplice da utilizzare.
|
||
</p><p>Sulla barra di sinistra ci sono gli elementi che possono essere trascinati nel proprio widget (componente aggiuntivo).
|
||
</p><p>Sul lato destro sono disposti i pannelli delle proprietà che mostrano tutti i tipi di proprietà modificabili degli elementi selezionati.
|
||
</p><p>Per iniziare, creare un nuovo widget o complemento. Selezionare "Dialog without buttons", in quanto non vogliamo i pulsanti Ok e Annulla predefiniti. Quindi, trascinare nel proprio widget <b>3 labels</b> (etichette), una per il titolo, una per inserire il testo "Altezza" e un'altra per inserire il testo "Larghezza". Le etichette sono semplici testi che appaiono nel widget, al solo scopo di informare l'utente. Quando si seleziona un'etichetta, sul lato destro appaiono diverse proprietà che volendo si possono modificare, come, ad esempio, lo stile del carattere, la sua altezza, ecc.
|
||
</p><p>Poi, aggiungere <b>2 LineEdits</b>, che sono campi di testo che l'utente può riempire, uno per l'altezza e uno per la larghezza. Anche di questi oggetti si possono modificare le proprietà. Ad esempio, perché non impostare un valore predefinito? Per esempio digitiamo 1,00 per ciascuno. In questo modo, quando l'utente vedrà la finestra di dialogo, entrambi i valori saranno già compilati e se gli vanno bene può premere direttamente il tasto, risparmiando tempo prezioso. Dopo, aggiungere un <b>PushButton</b>, che è il tasto che l'utente dovrà premere dopo aver compilato i 2 campi.
|
||
</p><p>Notare che qui che ho scelto dei comandi molto semplici, ma Qt dispone di molte altre opzioni, ad esempio, è possibile utilizzare Spinboxes invece di LineEdits, ecc .. Date un'occhiata a ciò che è disponibile, vi verranno sicuramente altre idee.
|
||
</p><p>Questo è tutto quello che si deve fare in Qt Designer.
|
||
</p><p>Un'ultima cosa, però, rinominare tutti i propri elementi con nomi più adeguati, così negli script sarà più facile identificarli:
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qtpropeditor.jpg" class="image"><img alt="Qtpropeditor.jpg" src="Qtpropeditor.jpg" width="348" height="321" /></a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Convertire_il_dialogo_in_Python">Convertire il dialogo in Python</span></h3>
|
||
<p>Ora, salviamo il nostro widget da qualche parte. Esso verrà salvato come un file .ui, che potremo facilmente convertire in script di Python tramite pyuic. Su Windows, il programma pyuic è incluso con PyQt (da verificare), su Linux probabilmente è necessario installarlo separatamente tramite il proprio gestore di pacchetti (su sistemi debian-based è parte del pacchetto di strumenti PyQt4-dev-tools). Per fare la conversione, è necessario aprire una finestra di terminale (o una finestra del prompt dei comandi in Windows), portarsi nella cartella in cui si è salvato il file .ui, e digitare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>pyuic mywidget.ui > mywidget.py</pre></div>
|
||
<p>In Windows pyuic.py si trova in "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py"
|
||
Per creare il file batch "compQt4.bat:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>@"C:\Python27\python" "C:\Python27\Lib\site-packages\PyQt4\uic\pyuic.py" -x %1.ui > %1.py</pre></div>
|
||
<p>Nella console Dos digitare senza estensione
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>compQt4 myUiFile</pre></div>
|
||
<p>In Linux : da fare
|
||
</p><p>Dato che, dopo la versione 0.13, FreeCAD si è progressivamente allontanato da PyQt a favore di <a rel="nofollow" class="external text" href="http://qt-project.org/wiki/PySide">PySide</a> (Choice your PySide install <a rel="nofollow" class="external text" href="http://pyside.readthedocs.org/en/latest/building/">building PySide</a>), per costruire il file basato su PySide ora è necessario utilizzare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>pyside-uic mywidget.ui -o mywidget.py</pre></div>
|
||
<p>In Windows uic.py si trova in "C:\Python27\Lib\site-packages\PySide\scripts\uic.py"
|
||
Per creare il file batch "compSide.bat":
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>@"C:\Python27\python" "C:\Python27\Lib\site-packages\PySide\scripts\uic.py" %1.ui > %1.py</pre></div>
|
||
<p>Nella console Dos digitare senza estensione
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>compSide myUiFile</pre></div>
|
||
<p>In Linux : da fare
|
||
</p><p><br />
|
||
Su alcuni sistemi il programma si chiama pyuic4 invece di pyuic. Questa operazione converte semplicemente il file .ui in uno script Python. Se apriamo il file mywidget.py, è molto facile capire il suo contenuto:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>from PySide import QtCore, QtGui
|
||
|
||
class Ui_Dialog(object):
|
||
def setupUi(self, Dialog):
|
||
Dialog.setObjectName("Dialog")
|
||
Dialog.resize(187, 178)
|
||
self.title = QtGui.QLabel(Dialog)
|
||
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
|
||
self.title.setObjectName("title")
|
||
self.label_width = QtGui.QLabel(Dialog)
|
||
...
|
||
|
||
self.retranslateUi(Dialog)
|
||
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||
|
||
def retranslateUi(self, Dialog):
|
||
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.title.setText(QtGui.QApplication.translate("Dialog", "Plane-O-Matic", None, QtGui.QApplication.UnicodeUTF8))
|
||
...</pre></div>
|
||
<p>Come potete vedere ha una struttura molto semplice: viene creata una classe denominata Ui_Dialog, che memorizza gli elementi dell'interfaccia del nostro widget. Questa classe ha due metodi, uno per la creazione del widget, e uno per la traduzione del suo contenuto, questo fa parte del meccanismo generale di Qt per tradurre gli elementi dell'interfaccia. Il metodo di installazione crea semplicemente, uno per uno, i widget come li abbiamo definiti in Qt Designer, e imposta le loro opzioni come abbiamo deciso in precedenza. Poi, viene tradotta l'intera interfaccia e, infine, vengono collegati gli slot (di cui parleremo più avanti).
|
||
</p><p>Ora possiamo creare un nuovo widget, e utilizzare questa classe per creare la sua interfaccia. A questo punto, possiamo già vedere in azione il nostro widget e, per provarlo, mettiamo il nostro file mywidget.py in un luogo dove FreeCAD possa trovarlo (nella directory bin di FreeCAD, o in una qualsiasi delle sottodirectory Mod), e, nell'interprete Python di FreeCAD, digitiamo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>from PySide import QtGui
|
||
import mywidget
|
||
d = QtGui.QWidget()
|
||
d.ui = mywidget.Ui_Dialog()
|
||
d.ui.setupUi(d)
|
||
d.show()</pre></div>
|
||
<p>Ecco apparire la nostra finestra di dialogo! Notare che il nostro interprete Python sta ancora funzionando in quanto stiamo usando un dialogo non-modale. Per chiudere la finestra, (ovviamente, oltre a cliccare sulla sua icona di chiusura) possiamo digitare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>d.hide()</pre></div>
|
||
<h3><span class="mw-headline" id="Utilizzare_la_finestra_di_dialogo">Utilizzare la finestra di dialogo</span></h3>
|
||
<p>Ora che siamo in grado di mostrare e nascondere la nostra finestra di dialogo, basta solo aggiungere una ultima parte: per fargli fare qualcosa!
|
||
</p><p>Provando per un po' Qt Designer, scoprirete presto un'intera sezione chiamata "signals and slots" (segnali e porte di ingresso dei segnali).
|
||
</p><p>In pratica, funziona così: i componenti dei widget (nella terminologia Qt, questi elementi sono a loro volta dei widget) sono in grado di inviare dei segnali. Tali segnali differiscono a seconda del tipo widget. Ad esempio, un pulsante può inviare un segnale quando viene premuto e quando viene rilasciato. Questi segnali possono essere collegati agli slot. Gli slot possono essere una funzionalità speciale di altri widget (ad esempio una finestra di dialogo ha uno slot "close" al quale è possibile collegare il segnale di un pulsante di chiusura), o possono essere funzioni personalizzate.
|
||
</p><p>La <a rel="nofollow" class="external text" href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html">Documentazione di riferimento di PyQt</a> elenca tutti i widget Qt, che cosa possono fare, quali segnali possono inviare, ecc..
|
||
</p><p>Qui, come esempio, creiamo una nuova funzione che genera un piano basato su altezza e larghezza, e colleghiamo tale funzione al segnale "pressed" (premuto) emesso dal pulsante "Create!".
|
||
</p><p>Allora, cominciamo con l'importazione dei nostri moduli FreeCAD, inserendo la seguente riga all'inizio dello script, dove importiamo già QtCore e QtGui:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import FreeCAD, Part</pre></div>
|
||
<p>Dopo, aggiungiamo una nuova funzione alla nostra classe Ui_Dialog:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>def createPlane(self):
|
||
try:
|
||
# first we check if valid numbers have been entered
|
||
w = float(self.width.text())
|
||
h = float(self.height.text())
|
||
except ValueError:
|
||
print "Error! Width and Height values must be valid numbers!"
|
||
else:
|
||
# create a face from 4 points
|
||
p1 = FreeCAD.Vector(0,0,0)
|
||
p2 = FreeCAD.Vector(w,0,0)
|
||
p3 = FreeCAD.Vector(w,h,0)
|
||
p4 = FreeCAD.Vector(0,h,0)
|
||
pointslist = [p1,p2,p3,p4,p1]
|
||
mywire = Part.makePolygon(pointslist)
|
||
myface = Part.Face(mywire)
|
||
Part.show(myface)
|
||
self.hide()</pre></div>
|
||
<p>Poi, bisogna dire a Qt di collegare il pulsante alla funzione, inserendo la seguente riga appena prima di QtCore.QMetaObject.connectSlotsByName (Dialog):
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.createPlane)</pre></div>
|
||
<p>Questo, come vedete, collega il segnale "pressed()" del nostro oggetto create (il pulsante "Create!"), allo slot chiamato createPlane, che abbiamo appena definito. Questo è tutto!
|
||
</p><p>Ora, come tocco finale, possiamo aggiungere una piccola funzione per creare il dialogo, così sarà più facile chiamarlo.
|
||
</p><p>Fuori dalla classe Ui_Dialog, aggiungiamo questo codice:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>class plane():
|
||
def __init__(self):
|
||
self.d = QtGui.QWidget()
|
||
self.ui = Ui_Dialog()
|
||
self.ui.setupUi(self.d)
|
||
self.d.show()</pre></div>
|
||
<p>(Promemoria di Python: ogni volta che viene creato un nuovo oggetto il metodo __init__ di una classe viene eseguito automaticamente!)
|
||
</p><p>Poi, da FreeCAD, basta solo fare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import mywidget
|
||
myDialog = mywidget.plane()</pre></div>
|
||
<p>Questo è tutto amici ... Ora è possibile provare diverse cose, come ad esempio inserire il widget nell'interfaccia di FreeCAD (vedere la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Code_snippets/it" title="Code snippets/it">Esempi di codici</a>), oppure creare strumenti personalizzati molto più avanzati, utilizzando altri elementi nel proprio widget.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Lo_script_completo_2">Lo script completo</span></h3>
|
||
<p>Questo è lo script completo di riferimento:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
|
||
# Form implementation generated from reading ui file 'mywidget.ui'
|
||
#
|
||
# Created: Mon Jun 1 19:09:10 2009
|
||
# by: PyQt4 UI code generator 4.4.4
|
||
# Modified for PySide 16:02:2015
|
||
# WARNING! All changes made in this file will be lost!
|
||
|
||
from PySide import QtCore, QtGui
|
||
import FreeCAD, Part
|
||
|
||
class Ui_Dialog(object):
|
||
def setupUi(self, Dialog):
|
||
Dialog.setObjectName("Dialog")
|
||
Dialog.resize(187, 178)
|
||
self.title = QtGui.QLabel(Dialog)
|
||
self.title.setGeometry(QtCore.QRect(10, 10, 271, 16))
|
||
self.title.setObjectName("title")
|
||
self.label_width = QtGui.QLabel(Dialog)
|
||
self.label_width.setGeometry(QtCore.QRect(10, 50, 57, 16))
|
||
self.label_width.setObjectName("label_width")
|
||
self.label_height = QtGui.QLabel(Dialog)
|
||
self.label_height.setGeometry(QtCore.QRect(10, 90, 57, 16))
|
||
self.label_height.setObjectName("label_height")
|
||
self.width = QtGui.QLineEdit(Dialog)
|
||
self.width.setGeometry(QtCore.QRect(60, 40, 111, 26))
|
||
self.width.setObjectName("width")
|
||
self.height = QtGui.QLineEdit(Dialog)
|
||
self.height.setGeometry(QtCore.QRect(60, 80, 111, 26))
|
||
self.height.setObjectName("height")
|
||
self.create = QtGui.QPushButton(Dialog)
|
||
self.create.setGeometry(QtCore.QRect(50, 140, 83, 26))
|
||
self.create.setObjectName("create")
|
||
|
||
self.retranslateUi(Dialog)
|
||
QtCore.QObject.connect(self.create,QtCore.SIGNAL("pressed()"),self.createPlane)
|
||
QtCore.QMetaObject.connectSlotsByName(Dialog)
|
||
|
||
def retranslateUi(self, Dialog):
|
||
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.title.setText(QtGui.QApplication.translate("Dialog", "Plane-O-Matic", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.label_width.setText(QtGui.QApplication.translate("Dialog", "Width", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.label_height.setText(QtGui.QApplication.translate("Dialog", "Height", None, QtGui.QApplication.UnicodeUTF8))
|
||
self.create.setText(QtGui.QApplication.translate("Dialog", "Create!", None, QtGui.QApplication.UnicodeUTF8))
|
||
|
||
def createPlane(self):
|
||
try:
|
||
# first we check if valid numbers have been entered
|
||
w = float(self.width.text())
|
||
h = float(self.height.text())
|
||
except ValueError:
|
||
print "Error! Width and Height values must be valid numbers!"
|
||
else:
|
||
# create a face from 4 points
|
||
p1 = FreeCAD.Vector(0,0,0)
|
||
p2 = FreeCAD.Vector(w,0,0)
|
||
p3 = FreeCAD.Vector(w,h,0)
|
||
p4 = FreeCAD.Vector(0,h,0)
|
||
pointslist = [p1,p2,p3,p4,p1]
|
||
mywire = Part.makePolygon(pointslist)
|
||
myface = Part.Face(mywire)
|
||
Part.show(myface)
|
||
|
||
class plane():
|
||
def __init__(self):
|
||
self.d = QtGui.QWidget()
|
||
self.ui = Ui_Dialog()
|
||
self.ui.setupUi(self.d)
|
||
self.d.show()</pre></div>
|
||
<h3><span class="mw-headline" id="Creare_una_finestra_di_dialogo_con_i_pulsanti">Creare una finestra di dialogo con i pulsanti</span></h3>
|
||
<h4><span class="mw-headline" id="Metodo_1">Metodo 1</span></h4>
|
||
<p>Esempio di una finestra di dialogo completa con le sue connessioni.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
# Create by flachyjoe
|
||
|
||
from PySide import QtCore, QtGui
|
||
|
||
try:
|
||
_fromUtf8 = QtCore.QString.fromUtf8
|
||
except AttributeError:
|
||
def _fromUtf8(s):
|
||
return s
|
||
|
||
try:
|
||
_encoding = QtGui.QApplication.UnicodeUTF8
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||
except AttributeError:
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig)
|
||
|
||
|
||
class Ui_MainWindow(object):
|
||
|
||
def __init__(self, MainWindow):
|
||
self.window = MainWindow
|
||
|
||
MainWindow.setObjectName(_fromUtf8("MainWindow"))
|
||
MainWindow.resize(400, 300)
|
||
self.centralWidget = QtGui.QWidget(MainWindow)
|
||
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
|
||
|
||
self.pushButton = QtGui.QPushButton(self.centralWidget)
|
||
self.pushButton.setGeometry(QtCore.QRect(30, 170, 93, 28))
|
||
self.pushButton.setObjectName(_fromUtf8("pushButton"))
|
||
self.pushButton.clicked.connect(self.on_pushButton_clicked) #connection pushButton
|
||
|
||
self.lineEdit = QtGui.QLineEdit(self.centralWidget)
|
||
self.lineEdit.setGeometry(QtCore.QRect(30, 40, 211, 22))
|
||
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
|
||
self.lineEdit.returnPressed.connect(self.on_lineEdit_clicked) #connection lineEdit
|
||
|
||
self.checkBox = QtGui.QCheckBox(self.centralWidget)
|
||
self.checkBox.setGeometry(QtCore.QRect(30, 90, 81, 20))
|
||
self.checkBox.setChecked(True)
|
||
self.checkBox.setObjectName(_fromUtf8("checkBoxON"))
|
||
self.checkBox.clicked.connect(self.on_checkBox_clicked) #connection checkBox
|
||
|
||
self.radioButton = QtGui.QRadioButton(self.centralWidget)
|
||
self.radioButton.setGeometry(QtCore.QRect(30, 130, 95, 20))
|
||
self.radioButton.setObjectName(_fromUtf8("radioButton"))
|
||
self.radioButton.clicked.connect(self.on_radioButton_clicked) #connection radioButton
|
||
|
||
MainWindow.setCentralWidget(self.centralWidget)
|
||
|
||
self.menuBar = QtGui.QMenuBar(MainWindow)
|
||
self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 26))
|
||
self.menuBar.setObjectName(_fromUtf8("menuBar"))
|
||
MainWindow.setMenuBar(self.menuBar)
|
||
|
||
self.mainToolBar = QtGui.QToolBar(MainWindow)
|
||
self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
|
||
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
|
||
|
||
self.statusBar = QtGui.QStatusBar(MainWindow)
|
||
self.statusBar.setObjectName(_fromUtf8("statusBar"))
|
||
MainWindow.setStatusBar(self.statusBar)
|
||
|
||
self.retranslateUi(MainWindow)
|
||
|
||
def retranslateUi(self, MainWindow):
|
||
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
|
||
self.pushButton.setText(_translate("MainWindow", "OK", None))
|
||
self.lineEdit.setText(_translate("MainWindow", "tyty", None))
|
||
self.checkBox.setText(_translate("MainWindow", "CheckBox", None))
|
||
self.radioButton.setText(_translate("MainWindow", "RadioButton", None))
|
||
|
||
def on_checkBox_clicked(self):
|
||
if self.checkBox.checkState()==0:
|
||
App.Console.PrintMessage(str(self.checkBox.checkState())+" CheckBox KO\r\n")
|
||
else:
|
||
App.Console.PrintMessage(str(self.checkBox.checkState())+" CheckBox OK\r\n")
|
||
# App.Console.PrintMessage(str(self.lineEdit.setText("tititi"))+" LineEdit\r\n") #write text to the lineEdit window !
|
||
# str(self.lineEdit.setText("tititi")) #écrit le texte dans la fenêtre lineEdit
|
||
App.Console.PrintMessage(str(self.lineEdit.displayText())+" LineEdit\r\n")
|
||
|
||
def on_radioButton_clicked(self):
|
||
if self.radioButton.isChecked():
|
||
App.Console.PrintMessage(str(self.radioButton.isChecked())+" Radio OK\r\n")
|
||
else:
|
||
App.Console.PrintMessage(str(self.radioButton.isChecked())+" Radio KO\r\n")
|
||
|
||
def on_lineEdit_clicked(self):
|
||
# if self.lineEdit.textChanged():
|
||
App.Console.PrintMessage(str(self.lineEdit.displayText())+" LineEdit Display\r\n")
|
||
|
||
def on_pushButton_clicked(self):
|
||
App.Console.PrintMessage("Terminé\r\n")
|
||
self.window.hide()
|
||
|
||
MainWindow = QtGui.QMainWindow()
|
||
ui = Ui_MainWindow(MainWindow)
|
||
MainWindow.show()</pre></div>
|
||
<p>Ecco la stessa finestra, ma con una icona per ogni pulsante.
|
||
</p><p>Scaricare le icone associate (Clic destro "Salva immagine con nome")
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Icone01.png" class="image"><img alt="Icone01.png" src="Icone01.png" width="64" height="64" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Icone02.png" class="image"><img alt="Icone02.png" src="Icone02.png" width="64" height="64" /></a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Icone03.png" class="image"><img alt="Icone03.png" src="Icone03.png" width="64" height="64" /></a>
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
|
||
from PySide import QtCore, QtGui
|
||
|
||
try:
|
||
_fromUtf8 = QtCore.QString.fromUtf8
|
||
except AttributeError:
|
||
def _fromUtf8(s):
|
||
return s
|
||
|
||
try:
|
||
_encoding = QtGui.QApplication.UnicodeUTF8
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||
except AttributeError:
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig)
|
||
|
||
|
||
class Ui_MainWindow(object):
|
||
|
||
def __init__(self, MainWindow):
|
||
self.window = MainWindow
|
||
path = FreeCAD.ConfigGet("UserAppData")
|
||
# path = FreeCAD.ConfigGet("AppHomePath")
|
||
|
||
MainWindow.setObjectName(_fromUtf8("MainWindow"))
|
||
MainWindow.resize(400, 300)
|
||
self.centralWidget = QtGui.QWidget(MainWindow)
|
||
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
|
||
|
||
self.pushButton = QtGui.QPushButton(self.centralWidget)
|
||
self.pushButton.setGeometry(QtCore.QRect(30, 170, 93, 28))
|
||
self.pushButton.setObjectName(_fromUtf8("pushButton"))
|
||
self.pushButton.clicked.connect(self.on_pushButton_clicked) #connection pushButton
|
||
|
||
self.lineEdit = QtGui.QLineEdit(self.centralWidget)
|
||
self.lineEdit.setGeometry(QtCore.QRect(30, 40, 211, 22))
|
||
self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
|
||
self.lineEdit.returnPressed.connect(self.on_lineEdit_clicked) #connection lineEdit
|
||
|
||
self.checkBox = QtGui.QCheckBox(self.centralWidget)
|
||
self.checkBox.setGeometry(QtCore.QRect(30, 90, 100, 20))
|
||
self.checkBox.setChecked(True)
|
||
self.checkBox.setObjectName(_fromUtf8("checkBoxON"))
|
||
self.checkBox.clicked.connect(self.on_checkBox_clicked) #connection checkBox
|
||
|
||
self.radioButton = QtGui.QRadioButton(self.centralWidget)
|
||
self.radioButton.setGeometry(QtCore.QRect(30, 130, 95, 20))
|
||
self.radioButton.setObjectName(_fromUtf8("radioButton"))
|
||
self.radioButton.clicked.connect(self.on_radioButton_clicked) #connection radioButton
|
||
|
||
MainWindow.setCentralWidget(self.centralWidget)
|
||
|
||
self.menuBar = QtGui.QMenuBar(MainWindow)
|
||
self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 26))
|
||
self.menuBar.setObjectName(_fromUtf8("menuBar"))
|
||
MainWindow.setMenuBar(self.menuBar)
|
||
|
||
self.mainToolBar = QtGui.QToolBar(MainWindow)
|
||
self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
|
||
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
|
||
|
||
self.statusBar = QtGui.QStatusBar(MainWindow)
|
||
self.statusBar.setObjectName(_fromUtf8("statusBar"))
|
||
MainWindow.setStatusBar(self.statusBar)
|
||
|
||
self.retranslateUi(MainWindow)
|
||
|
||
# Affiche un icone sur le bouton PushButton
|
||
# self.image_01 = "C:\Program Files\FreeCAD0.13\Icone01.png" # adapt the icon name
|
||
self.image_01 = path+"Icone01.png" # adapt the name of the icon
|
||
icon01 = QtGui.QIcon()
|
||
icon01.addPixmap(QtGui.QPixmap(self.image_01),QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||
self.pushButton.setIcon(icon01)
|
||
self.pushButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button
|
||
|
||
# Affiche un icone sur le bouton RadioButton
|
||
# self.image_02 = "C:\Program Files\FreeCAD0.13\Icone02.png" # adapt the name of the icon
|
||
self.image_02 = path+"Icone02.png" # adapter le nom de l'icone
|
||
icon02 = QtGui.QIcon()
|
||
icon02.addPixmap(QtGui.QPixmap(self.image_02),QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||
self.radioButton.setIcon(icon02)
|
||
# self.radioButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button
|
||
|
||
# Affiche un icone sur le bouton CheckBox
|
||
# self.image_03 = "C:\Program Files\FreeCAD0.13\Icone03.png" # the name of the icon
|
||
self.image_03 = path+"Icone03.png" # adapter le nom de l'icone
|
||
icon03 = QtGui.QIcon()
|
||
icon03.addPixmap(QtGui.QPixmap(self.image_03),QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||
self.checkBox.setIcon(icon03)
|
||
# self.checkBox.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button
|
||
|
||
|
||
def retranslateUi(self, MainWindow):
|
||
MainWindow.setWindowTitle(_translate("MainWindow", "FreeCAD", None))
|
||
self.pushButton.setText(_translate("MainWindow", "OK", None))
|
||
self.lineEdit.setText(_translate("MainWindow", "tyty", None))
|
||
self.checkBox.setText(_translate("MainWindow", "CheckBox", None))
|
||
self.radioButton.setText(_translate("MainWindow", "RadioButton", None))
|
||
|
||
def on_checkBox_clicked(self):
|
||
if self.checkBox.checkState()==0:
|
||
App.Console.PrintMessage(str(self.checkBox.checkState())+" CheckBox KO\r\n")
|
||
else:
|
||
App.Console.PrintMessage(str(self.checkBox.checkState())+" CheckBox OK\r\n")
|
||
# App.Console.PrintMessage(str(self.lineEdit.setText("tititi"))+" LineEdit\r\n") # write text to the lineEdit window !
|
||
# str(self.lineEdit.setText("tititi")) #écrit le texte dans la fenêtre lineEdit
|
||
App.Console.PrintMessage(str(self.lineEdit.displayText())+" LineEdit\r\n")
|
||
|
||
def on_radioButton_clicked(self):
|
||
if self.radioButton.isChecked():
|
||
App.Console.PrintMessage(str(self.radioButton.isChecked())+" Radio OK\r\n")
|
||
else:
|
||
App.Console.PrintMessage(str(self.radioButton.isChecked())+" Radio KO\r\n")
|
||
|
||
def on_lineEdit_clicked(self):
|
||
# if self.lineEdit.textChanged():
|
||
App.Console.PrintMessage(str(self.lineEdit.displayText())+" LineEdit Display\r\n")
|
||
|
||
def on_pushButton_clicked(self):
|
||
App.Console.PrintMessage("Terminé\r\n")
|
||
self.window.hide()
|
||
|
||
MainWindow = QtGui.QMainWindow()
|
||
ui = Ui_MainWindow(MainWindow)
|
||
MainWindow.show()</pre></div>
|
||
<p>Ecco il codice per visualizzare l'icona sul <b>pushButton</b>, cambiare il nome di un altro pulsante, (<b>radioButton, checkBox</b>) e il percorso per l'icona.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> # Affiche un icône sur le bouton PushButton
|
||
# self.image_01 = "C:\Program Files\FreeCAD0.13\icone01.png" # the name of the icon
|
||
self.image_01 = path+"icone01.png" # the name of the icon
|
||
icon01 = QtGui.QIcon()
|
||
icon01.addPixmap(QtGui.QPixmap(self.image_01),QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||
self.pushButton.setIcon(icon01)
|
||
self.pushButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button</pre></div>
|
||
<p>Il comando
|
||
<b>UserAppData</b> dà il percorso dell'utente
|
||
<b>AppHomePath</b> dà il percorso di installazione di FreeCAD
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># path = FreeCAD.ConfigGet("UserAppData")
|
||
path = FreeCAD.ConfigGet("AppHomePath")</pre></div>
|
||
<p>Questo comando inverte il pulsante orizzontale, da destra a sinistra.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>self.pushButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button</pre></div>
|
||
<h4><span class="mw-headline" id="Metodo_2">Metodo 2</span></h4>
|
||
<p>Un altro metodo per visualizzare una finestra. In questo caso creando un file <b>QtForm.py</b> che contiene il programma di intestazione (modulo chiamato con <b>import QtForm</b>), e un secondo modulo che contiene il codice della finestra di tutti questi accessori e il vostro codice (il modulo di chiamata).
|
||
</p><p>Questo metodo richiede due file separati, ma permette di accorciare il programma utilizzando il file <i> QtForm.py </i> con import. Poi distribuire insieme i due file, essi sono inseparabili.
|
||
</p><p>Il file <b>QtForm.py</b>
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
# Create by flachyjoe
|
||
from PySide import QtCore, QtGui
|
||
|
||
try:
|
||
_fromUtf8 = QtCore.QString.fromUtf8
|
||
except AttributeError:
|
||
def _fromUtf8(s):
|
||
return s
|
||
|
||
try:
|
||
_encoding = QtGui.QApplication.UnicodeUTF8
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig, _encoding)
|
||
except AttributeError:
|
||
def _translate(context, text, disambig):
|
||
return QtGui.QApplication.translate(context, text, disambig)
|
||
|
||
class Form(object):
|
||
def __init__(self, title, width, height):
|
||
self.window = QtGui.QMainWindow()
|
||
self.title=title
|
||
self.window.setObjectName(_fromUtf8(title))
|
||
self.window.setWindowTitle(_translate(self.title, self.title, None))
|
||
self.window.resize(width, height)
|
||
|
||
def show(self):
|
||
self.createUI()
|
||
self.retranslateUI()
|
||
self.window.show()
|
||
|
||
def setText(self, control, text):
|
||
control.setText(_translate(self.title, text, None))</pre></div>
|
||
<p>L'appellante, il file che contiene la finestra e il tuo codice
|
||
</p><p>Il file my_file.py
|
||
</p><p>I collegamenti sono da fare, sono un buon esercizio.
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
# Create by flachyjoe
|
||
from PySide import QtCore, QtGui
|
||
import QtForm
|
||
|
||
class myForm(QtForm.Form):
|
||
def createUI(self):
|
||
self.centralWidget = QtGui.QWidget(self.window)
|
||
self.window.setCentralWidget(self.centralWidget)
|
||
|
||
self.pushButton = QtGui.QPushButton(self.centralWidget)
|
||
self.pushButton.setGeometry(QtCore.QRect(30, 170, 93, 28))
|
||
self.pushButton.clicked.connect(self.on_pushButton_clicked)
|
||
|
||
self.lineEdit = QtGui.QLineEdit(self.centralWidget)
|
||
self.lineEdit.setGeometry(QtCore.QRect(30, 40, 211, 22))
|
||
|
||
self.checkBox = QtGui.QCheckBox(self.centralWidget)
|
||
self.checkBox.setGeometry(QtCore.QRect(30, 90, 81, 20))
|
||
self.checkBox.setChecked(True)
|
||
|
||
self.radioButton = QtGui.QRadioButton(self.centralWidget)
|
||
self.radioButton.setGeometry(QtCore.QRect(30, 130, 95, 20))
|
||
|
||
def retranslateUI(self):
|
||
self.setText(self.pushButton, "Fermer")
|
||
self.setText(self.lineEdit, "essai de texte")
|
||
self.setText(self.checkBox, "CheckBox")
|
||
self.setText(self.radioButton, "RadioButton")
|
||
|
||
def on_pushButton_clicked(self):
|
||
self.window.hide()
|
||
|
||
myWindow=myForm("Fenetre de test",400,300)
|
||
myWindow.show()</pre></div>
|
||
<p><b>Altro esempio</b>
|
||
</p>
|
||
<center>
|
||
<ul class="gallery mw-gallery-traditional">
|
||
<li class="gallerybox" style="width: 435px"><div style="width: 435px">
|
||
<div class="thumb" style="width: 430px;"><div style="margin:15px auto;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qt_Example_00.png" class="image"><img alt="" src="167px-Qt_Example_00.png" width="167" height="200" srcset="/wiki/images/thumb/f/fe/Qt_Example_00.png/250px-Qt_Example_00.png 1.5x, /wiki/images/thumb/f/fe/Qt_Example_00.png/333px-Qt_Example_00.png 2x" /></a></div></div>
|
||
<div class="gallerytext">
|
||
<p>Qt esempio 1
|
||
</p>
|
||
</div>
|
||
</div></li>
|
||
<li class="gallerybox" style="width: 435px"><div style="width: 435px">
|
||
<div class="thumb" style="width: 430px;"><div style="margin:15px auto;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qt_Example_01.png" class="image"><img alt="" src="167px-Qt_Example_01.png" width="167" height="200" srcset="/wiki/images/thumb/d/d4/Qt_Example_01.png/250px-Qt_Example_01.png 1.5x, /wiki/images/thumb/d/d4/Qt_Example_01.png/333px-Qt_Example_01.png 2x" /></a></div></div>
|
||
<div class="gallerytext">
|
||
<p>Qt descrizione dell'esempio
|
||
</p>
|
||
</div>
|
||
</div></li>
|
||
</ul>
|
||
</center>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
Sono trattati:
|
||
</p>
|
||
<ol><li> Icona per la finestra</li>
|
||
<li> Cursore orizzontale</li>
|
||
<li> Barra di progressione orizzontale</li>
|
||
<li> Cursore verticale</li>
|
||
<li> Barra di progressione verticale</li>
|
||
<li> Riga editabile</li>
|
||
<li> Riga editabile</li>
|
||
<li> Casella di selezione bidirezionale</li>
|
||
<li> Casella di selezione bidirezionale</li>
|
||
<li> Casella di selezione bidirezionale</li>
|
||
<li> Pulsante</li>
|
||
<li> Pulsante</li>
|
||
<li> Pulsante di opzione con icona</li>
|
||
<li> Casella di controllo con l'icona di attivazione e disattivazione</li>
|
||
<li> Campo editabile con un testo</li>
|
||
<li> Campo di vista grafica con 2 grafici</li></ol>
|
||
<p>La pagina del codice e delle icone: <a href="https://www.freecadweb.org/wiki/index.php?title=Qt_Example/it" title="Qt Example/it">Qt_Example</a>
|
||
</p>
|
||
<h2><span class="mw-headline" id="Icone_personalizzate_nella_Vista_combinata">Icone personalizzate nella Vista combinata</span></h2>
|
||
<p>Questo esempio crea oggetti con proprietà e icona personalizzate in ComboView
|
||
</p><p>Scaricare l'icona di esempio e posizionarla nella stessa directory della macro <a href="https://www.freecadweb.org/wiki/index.php?title=File:FreeCADIco.png" class="image" title="icon Example for the macro"><img alt="icon Example for the macro" src="24px-FreeCADIco.png" width="24" height="22" srcset="/wiki/images/thumb/8/86/FreeCADIco.png/36px-FreeCADIco.png 1.5x, /wiki/images/thumb/8/86/FreeCADIco.png/48px-FreeCADIco.png 2x" /></a>
|
||
</p><p>Vengono elaborati tre metodi per assegnare un'icona a un oggetto, un'icona in formato .png presente in un file sul disco, un'icona salvata in formato .xpm inclusa nella macro stessa e un'icona disponibile nelle risorse di FreeCAD.
|
||
</p><p><a href="https://www.freecadweb.org/wiki/index.php?title=File:Qt_Example_02.png" class="image" title="icon personalized"><img alt="icon personalized" src="Qt_Example_02.png" width="338" height="490" /></a>
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>import PySide
|
||
import FreeCAD, FreeCADGui, Part
|
||
from pivy import coin
|
||
from PySide import QtGui ,QtCore
|
||
from PySide.QtGui import *
|
||
from PySide.QtCore import *
|
||
import Draft
|
||
|
||
global path
|
||
param = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macro")# macro path in FreeCAD preferences
|
||
path = param.GetString("MacroPath","") + "/" # macro path
|
||
path = path.replace("\\","/") # convert the "\" to "/"
|
||
|
||
|
||
class IconViewProviderToFile: # Class ViewProvider create Property view of object
|
||
def __init__( self, obj, icon):
|
||
self.icone = icon
|
||
|
||
def getIcon(self): # GetIcon
|
||
return self.icone
|
||
|
||
def attach(self, obj): # Property view of object
|
||
self.modes = []
|
||
self.modes.append("Flat Lines")
|
||
self.modes.append("Shaded")
|
||
self.modes.append("Wireframe")
|
||
self.modes.append("Points")
|
||
obj.addDisplayMode( coin.SoGroup(),"Flat Lines" ) # Display Mode
|
||
obj.addDisplayMode( coin.SoGroup(),"Shaded" )
|
||
obj.addDisplayMode( coin.SoGroup(),"Wireframe" )
|
||
obj.addDisplayMode( coin.SoGroup(),"Points" )
|
||
return self.modes
|
||
|
||
def getDisplayModes(self,obj):
|
||
return self.modes
|
||
|
||
#####################################################
|
||
########## Example with icon to file # begin ########
|
||
#####################################################
|
||
|
||
object1 = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Icon_In_File_Disk") # create your object
|
||
object1.addProperty("App::PropertyString","Identity", "ExampleTitle0", "Identity of object").Identity = "FCSpring" # Identity of object
|
||
object1.addProperty("App::PropertyFloat" ,"Pitch", "ExampleTitle0", "Pitch betwen 2 heads").Pitch = 2.0 # other Property Data
|
||
object1.addProperty("App::PropertyBool" ,"View", "ExampleTitle1", "Hello world").View = True # ...
|
||
object1.addProperty("App::PropertyColor" ,"LineColor","ExampleTitle2", "Color to choice").LineColor = (0.13,0.15,0.37) # ...
|
||
#...other Property Data
|
||
#...other Property Data
|
||
#
|
||
object1.ViewObject.Proxy = IconViewProviderToFile( object1, path + "FreeCADIco.png") # icon download to file
|
||
App.ActiveDocument.recompute()
|
||
#
|
||
#__Detail__:
|
||
# FreeCAD.ActiveDocument.addObject( = create now object personalized
|
||
# "App::FeaturePython", = object as FeaturePython
|
||
# "Icon_In_File_Disk") = internal name of your object
|
||
#
|
||
#
|
||
# "App::PropertyString", = type of Property , availlable : PropertyString, PropertyFloat, PropertyBool, PropertyColor
|
||
# "Identity", = name of the feature
|
||
# "ExampleTitle0", = title of the "section"
|
||
# "Identity of object") = tooltip displayed on mouse
|
||
# .Identity = variable (same of name of the feature)
|
||
# object1.ViewObject.Proxy = create the view object and gives the icon
|
||
#
|
||
########## example with icon to file end
|
||
|
||
|
||
|
||
#####################################################
|
||
########## Example with icon in macro # begin #######
|
||
#####################################################
|
||
|
||
def setIconInMacro(self): # def contener the icon in format .xpm
|
||
# File format XPM created by Gimp "https://www.gimp.org/"
|
||
# Choice palette Tango
|
||
# Create your masterwork ...
|
||
# For export the image in XPM format
|
||
# Menu File > Export as > .xpm
|
||
# (For convert image true color in Tango color palette :
|
||
# Menu Image > Mode > Indexed ... > Use custom palette > Tango Icon Theme > Convert)
|
||
return """
|
||
/* XPM */
|
||
static char * XPM[] = {
|
||
"22 24 5 1",
|
||
" c None",
|
||
".c #CE5C00",
|
||
"+c #EDD400",
|
||
"@c #F57900",
|
||
"#c #8F5902",
|
||
" ",
|
||
" ",
|
||
" .... ",
|
||
" ..@@@@.. ",
|
||
" . ...@...... ",
|
||
" .+++++++++... ",
|
||
" . ....++... ",
|
||
" .@..@@@@@@.+++++.. ",
|
||
" .@@@@@..# ++++ .. ",
|
||
" . ++++ .@.. ",
|
||
" .++++++++ .@@@.+. ",
|
||
" . ..@@@@@. ++. ",
|
||
" ..@@@@@@@@@. +++ . ",
|
||
" ....@...# +++++ @.. ",
|
||
" . ++++++++ .@. . ",
|
||
" .++++++++ .@@@@ . ",
|
||
" . #....@@@@. ++. ",
|
||
" .@@@@@@@@@.. +++ . ",
|
||
" ........ +++++... ",
|
||
" ... ..+++++ ..@.. ",
|
||
" ...... .@@@ +. ",
|
||
" ......++. ",
|
||
" ... ",
|
||
" "};
|
||
"""
|
||
|
||
object2 = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Icon_XPM_In_Macro") #
|
||
object2.addProperty("App::PropertyString","Identity","ExampleTitle","Identity of object").Identity = "FCSpring"
|
||
#...other Property Data
|
||
#...other Property Data
|
||
#
|
||
object2.ViewObject.Proxy = IconViewProviderToFile( object2, setIconInMacro("")) # icon in macro (.XPM)
|
||
App.ActiveDocument.recompute()
|
||
########## example with icon in macro end
|
||
|
||
|
||
|
||
####################################################################
|
||
########## Example with icon to FreeCAD ressource # begin ##########
|
||
####################################################################
|
||
|
||
object3 = FreeCAD.ActiveDocument.addObject("App::FeaturePython", "Icon_Ressource_FreeCAD") #
|
||
object3.addProperty("App::PropertyString","Identity","ExampleTitle","Identity of object").Identity = "FCSpring"
|
||
#...other Property Data
|
||
#...other Property Data
|
||
#
|
||
object3.ViewObject.Proxy = IconViewProviderToFile( object3, ":/icons/Draft_Draft.svg") # icon to FreeCAD ressource
|
||
App.ActiveDocument.recompute()
|
||
########## example with icon to FreeCAD ressource end</pre></div>
|
||
<p>Altro esempio completo di creazione di un cubo con l'icona nella macro
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>#https://forum.freecadweb.org/viewtopic.php?t=10255#p83319
|
||
import FreeCAD, Part, math
|
||
from FreeCAD import Base
|
||
from PySide import QtGui
|
||
|
||
global path
|
||
param = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Macro")# macro path in FreeCAD preferences
|
||
path = param.GetString("MacroPath","") + "/" # macro path
|
||
path = path.replace("\\","/") # convert the "\" to "/"
|
||
|
||
def setIconInMacro(self):
|
||
return """
|
||
/* XPM */
|
||
static char * xpm[] = {
|
||
"22 22 12 1",
|
||
" c None",
|
||
".c #A40000",
|
||
"+c #2E3436",
|
||
"@c #CE5C00",
|
||
"#c #F57900",
|
||
"$c #FCAF3E",
|
||
"%c #5C3566",
|
||
"&c #204A87",
|
||
"*c #555753",
|
||
"=c #3465A4",
|
||
"-c #4E9A06",
|
||
";c #729FCF",
|
||
" ",
|
||
" ",
|
||
" ",
|
||
" .. .. ",
|
||
" +@#+++.$$ ",
|
||
" +.#+%..$$ ",
|
||
" &*$ &*#* ",
|
||
" & =&= = ",
|
||
" ++& +.== %= ",
|
||
" ++$@ ..$ %= & ",
|
||
" ..-&%.#$$ &## +=$ ",
|
||
" .# ..$ ..#%%.#$$ ",
|
||
" ; =+=## %-$# ",
|
||
" &= ;& %= ",
|
||
" ;+ &=; %= ",
|
||
" ++$- +*$- ",
|
||
" .#&&+.@$$ ",
|
||
" ..$# ..$# ",
|
||
" .. .. ",
|
||
" ",
|
||
" ",
|
||
" "};
|
||
"""
|
||
|
||
class PartFeature:
|
||
def __init__(self, obj):
|
||
obj.Proxy = self
|
||
|
||
class Box(PartFeature):
|
||
def __init__(self, obj):
|
||
PartFeature.__init__(self, obj)
|
||
obj.addProperty("App::PropertyLength", "Length", "Box", "Length of the box").Length = 1.0
|
||
obj.addProperty("App::PropertyLength", "Width", "Box", "Width of the box" ).Width = 1.0
|
||
obj.addProperty("App::PropertyLength", "Height", "Box", "Height of the box").Height = 1.0
|
||
|
||
def onChanged(self, fp, prop):
|
||
try:
|
||
if prop == "Length" or prop == "Width" or prop == "Height":
|
||
fp.Shape = Part.makeBox(fp.Length,fp.Width,fp.Height)
|
||
except:
|
||
pass
|
||
|
||
def execute(self, fp):
|
||
fp.Shape = Part.makeBox(fp.Length,fp.Width,fp.Height)
|
||
|
||
class ViewProviderBox:
|
||
def __init__(self, obj, icon):
|
||
obj.Proxy = self
|
||
self.icone = icon
|
||
|
||
def getIcon(self):
|
||
return self.icone
|
||
|
||
def attach(self, obj):
|
||
return
|
||
|
||
def setupContextMenu(self, obj, menu):
|
||
action = menu.addAction("Set default height")
|
||
action.triggered.connect(lambda f=self.setDefaultHeight, arg=obj:f(arg))
|
||
|
||
action = menu.addAction("Hello World")
|
||
action.triggered.connect(self.showHelloWorld)
|
||
|
||
def setDefaultHeight(self, view):
|
||
view.Object.Height = 15.0
|
||
|
||
def showHelloWorld(self):
|
||
QtGui.QMessageBox.information(None, "Hi there", "Hello World")
|
||
|
||
def makeBox():
|
||
FreeCAD.newDocument()
|
||
a=FreeCAD.ActiveDocument.addObject("Part::FeaturePython","Box")
|
||
Box(a)
|
||
# ViewProviderBox(a.ViewObject, path + "FreeCADIco.png") # icon download to file
|
||
# ViewProviderBox(a.ViewObject, ":/icons/Draft_Draft.svg") # icon to FreeCAD ressource
|
||
ViewProviderBox(a.ViewObject, setIconInMacro("")) # icon in macro (.XPM)
|
||
App.ActiveDocument.recompute()
|
||
|
||
makeBox()</pre></div>
|
||
<h2><span class="mw-headline" id="Scrivere_il_file_con_QFileDialog">Scrivere il file con QFileDialog</span></h2>
|
||
<p>Codice completo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
import PySide
|
||
from PySide import QtGui ,QtCore
|
||
from PySide.QtGui import *
|
||
from PySide.QtCore import *
|
||
path = FreeCAD.ConfigGet("UserAppData")
|
||
|
||
try:
|
||
SaveName = QFileDialog.getSaveFileName(None,QString.fromLocal8Bit("Save a file txt"),path, "*.txt") # PyQt4
|
||
# "here the text displayed on windows" "here the filter (extension)"
|
||
except Exception:
|
||
SaveName, Filter = PySide.QtGui.QFileDialog.getSaveFileName(None, "Save a file txt", path, "*.txt") # PySide
|
||
# "here the text displayed on windows" "here the filter (extension)"
|
||
if SaveName == "": # if the name file are not selected then Abord process
|
||
App.Console.PrintMessage("Process aborted"+"\n")
|
||
else: # if the name file are selected or created then
|
||
App.Console.PrintMessage("Registration of "+SaveName+"\n") # text displayed to Report view (Menu > View > Report view checked)
|
||
try: # detect error ...
|
||
file = open(SaveName, 'w') # open the file selected to write (w)
|
||
try: # if error detected to write ...
|
||
# here your code
|
||
print "here your code"
|
||
file.write(str(1)+"\n") # write the number convert in text with (str())
|
||
file.write("FreeCAD the best") # write the the text with (" ")
|
||
except Exception: # if error detected to write
|
||
App.Console.PrintError("Error write file "+"\n") # detect error ... display the text in red (PrintError)
|
||
finally: # if error detected to write ... or not the file is closed
|
||
file.close() # if error detected to write ... or not the file is closed
|
||
except Exception:
|
||
App.Console.PrintError("Error Open file "+SaveName+"\n") # detect error ... display the text in red (PrintError)</pre></div>
|
||
<h2><span class="mw-headline" id="Leggere_il_file_con_QFileDialog">Leggere il file con QFileDialog</span></h2>
|
||
<p>Codice completo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
import PySide
|
||
from PySide import QtGui ,QtCore
|
||
from PySide.QtGui import *
|
||
from PySide.QtCore import *
|
||
path = FreeCAD.ConfigGet("UserAppData")
|
||
|
||
OpenName = ""
|
||
try:
|
||
OpenName = QFileDialog.getOpenFileName(None,QString.fromLocal8Bit("Read a file txt"),path, "*.txt") # PyQt4
|
||
# "here the text displayed on windows" "here the filter (extension)"
|
||
except Exception:
|
||
OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "Read a file txt", path, "*.txt") #PySide
|
||
# "here the text displayed on windows" "here the filter (extension)"
|
||
if OpenName == "": # if the name file are not selected then Abord process
|
||
App.Console.PrintMessage("Process aborted"+"\n")
|
||
else:
|
||
App.Console.PrintMessage("Read "+OpenName+"\n") # text displayed to Report view (Menu > View > Report view checked)
|
||
try: # detect error to read file
|
||
file = open(OpenName, "r") # open the file selected to read (r) # (rb is binary)
|
||
try: # detect error ...
|
||
# here your code
|
||
print "here your code"
|
||
op = OpenName.split("/") # decode the path
|
||
op2 = op[-1].split(".") # decode the file name
|
||
nomF = op2[0] # the file name are isolated
|
||
|
||
App.Console.PrintMessage(str(nomF)+"\n") # the file name are displayed
|
||
|
||
for ligne in file: # read the file
|
||
X = ligne.rstrip('\n\r') #.split() # decode the line
|
||
print X # print the line in report view other method
|
||
# (Menu > Edit > preferences... > Output window > Redirect internal Python output (and errors) to report view checked)
|
||
except Exception: # if error detected to read
|
||
App.Console.PrintError("Error read file "+"\n") # detect error ... display the text in red (PrintError)
|
||
finally: # if error detected to read ... or not error the file is closed
|
||
file.close() # if error detected to read ... or not error the file is closed
|
||
except Exception: # if one error detected to read file
|
||
App.Console.PrintError("Error in Open the file "+OpenName+"\n") # if one error detected ... display the text in red (PrintError)</pre></div>
|
||
<h2><span class="mw-headline" id="Ottenere_i_colori_con_QColorDialog">Ottenere i colori con QColorDialog</span></h2>
|
||
<p>Codice completo:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># -*- coding: utf-8 -*-
|
||
# https://deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/PySide/QtGui/QColor.html
|
||
import PySide
|
||
from PySide import QtGui ,QtCore
|
||
from PySide.QtGui import *
|
||
from PySide.QtCore import *
|
||
path = FreeCAD.ConfigGet("UserAppData")
|
||
|
||
couleur = QtGui.QColorDialog.getColor()
|
||
if couleur.isValid():
|
||
red = int(str(couleur.name()[1:3]),16) # decode hexadecimal to int()
|
||
green = int(str(couleur.name()[3:5]),16) # decode hexadecimal to int()
|
||
blue = int(str(couleur.name()[5:7]),16) # decode hexadecimal to int()
|
||
|
||
print couleur #
|
||
print "hexadecimal ",couleur.name() # color format hexadecimal mode 16
|
||
print "Red color ",red # color format decimal
|
||
print "Green color ",green # color format decimal
|
||
print "Blue color ",blue # color format decimal</pre></div>
|
||
<h3><span class="mw-headline" id="Alcuni_comandi_utili">Alcuni comandi utili</span></h3>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># Here the code to display the icon on the '''pushButton''',
|
||
# change the name to another button, ('''radioButton, checkBox''') as well as the path to the icon,
|
||
|
||
# Displays an icon on the button PushButton
|
||
# self.image_01 = "C:\Program Files\FreeCAD0.13\icone01.png" # he name of the icon
|
||
self.image_01 = path+"icone01.png" # the name of the icon
|
||
icon01 = QtGui.QIcon()
|
||
icon01.addPixmap(QtGui.QPixmap(self.image_01),QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||
self.pushButton.setIcon(icon01)
|
||
self.pushButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the direction of the button
|
||
|
||
|
||
# path = FreeCAD.ConfigGet("UserAppData") # gives the user path
|
||
path = FreeCAD.ConfigGet("AppHomePath") # gives the installation path of FreeCAD
|
||
|
||
# This command reverses the horizontal button, right to left
|
||
self.pushButton.setLayoutDirection(QtCore.Qt.RightToLeft) # This command reverses the horizontal button
|
||
|
||
# Displays an info button
|
||
self.pushButton.setToolTip(_translate("MainWindow", "Quitter la fonction", None)) # Displays an info button
|
||
|
||
# This function gives a color button
|
||
self.pushButton.setStyleSheet("background-color: red") # This function gives a color button
|
||
|
||
# This function gives a color to the text of the button
|
||
self.pushButton.setStyleSheet("color : #ff0000") # This function gives a color to the text of the button
|
||
|
||
# combinaison des deux, bouton et texte
|
||
self.pushButton.setStyleSheet("color : #ff0000; background-color : #0000ff;" ) # combination of the two, button, and text
|
||
|
||
# replace the icon in the main window
|
||
MainWindow.setWindowIcon(QtGui.QIcon('C:\Program Files\FreeCAD0.13\View-C3P.png'))
|
||
|
||
# connects a lineEdit on execute
|
||
self.lineEdit.returnPressed.connect(self.execute) # connects a lineEdit on "def execute" after validation on enter
|
||
# self.lineEdit.textChanged.connect(self.execute) # connects a lineEdit on "def execute" with each keystroke on the keyboard
|
||
|
||
# display text in a lineEdit
|
||
self.lineEdit.setText(str(val_X)) # Displays the value in the lineEdit (convert to string)
|
||
|
||
# extract the string contained in a lineEdit
|
||
val_X = self.lineEdit.text() # extract the (string) string contained in lineEdit
|
||
val_X = float(val_X0) # converted the string to an floating
|
||
val_X = int(val_X0) # convert the string to an integer
|
||
|
||
# This code allows you to change the font and its attributes
|
||
font = QtGui.QFont()
|
||
font.setFamily("Times New Roman")
|
||
font.setPointSize(10)
|
||
font.setWeight(10)
|
||
font.setBold(True) # same result with tags "<b>your text</b>" (in quotes)
|
||
self.label_6.setFont(font)
|
||
self.label_6.setObjectName("label_6")
|
||
self.label_6.setStyleSheet("color : #ff0000") # This function gives a color to the text
|
||
self.label_6.setText(_translate("MainWindow", "Select a view", None))</pre></div>
|
||
<p>Utilizzando i caratteri accentati, si ottiene l'errore :
|
||
</p><p>Sono possibili diverse suluzioni
|
||
</p><p><font color="#FF0000"><b>UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data</b></font>
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># conversion from a lineEdit
|
||
App.activeDocument().CopyRight.Text = str(unicode(self.lineEdit_20.text() , 'ISO-8859-1').encode('UTF-8'))
|
||
DESIGNED_BY = unicode(self.lineEdit_01.text(), 'ISO-8859-1').encode('UTF-8')</pre></div>
|
||
<p>o con la procedura
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>def utf8(unio):
|
||
return unicode(unio).encode('UTF8')</pre></div>
|
||
<p><font color="#FF0000"><b>UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 9: ordinal not in range(128)</b></font>
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre># conversion
|
||
a = u"Nom de l'élément : "
|
||
f.write('''a.encode('iso-8859-1')'''+str(element_)+"\n")</pre></div>
|
||
<p>o con la procedura
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>def iso8859(encoder):
|
||
return unicode(encoder).encode('iso-8859-1')</pre></div>
|
||
<p>oppure
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>iso8859(unichr(176))</pre></div>
|
||
<p>oppure
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>unichr(ord(176))</pre></div>
|
||
<p>oppure
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>uniteSs = "mm"+iso8859(unichr(178))
|
||
print unicode(uniteSs, 'iso8859')</pre></div>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Sviluppare_applicazioni_per_FreeCAD">Sviluppare applicazioni per FreeCAD</span></h2>
|
||
<h2><span class="mw-headline" id="Statement_of_the_main_developer">Statement of the main developer</span></h2>
|
||
<p>I know that the discussion on the <i>"right"</i> licence for open source occupied a significant portion of internet bandwidth and so is here the reason why, in my opinion, FreeCAD should have this one.
|
||
</p><p>I chose the <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/LGPL">LGPL</a> for the project and I know the pro and cons about the LGPL and will give you some reasons for that decision.
|
||
</p><p>FreeCAD is a mixture of a library and an application, so the GPL would be a little bit strong for that. It would prevent writing commercial modules for FreeCAD because it would prevent linking with the FreeCAD base libs. You may ask why commercial modules at all? Therefore Linux is good example. Would Linux be so successful when the GNU C Library would be GPL and therefore prevent linking against non-GPL applications? And although I love the freedom of Linux, I also want to be able to use the very good NVIDIA 3D graphic driver. I understand and accept the reason NVIDIA does not wish to give away driver code. We all work for companies and need payment or at least food. So for me, a coexistence of open source and closed source software is not a bad thing, when it obeys the rules of the LGPL. I would like to see someone writing a Catia import/export processor for FreeCAD and distribute it for free or for some money. I don't like to force him to give away more than he wants to. That wouldn't be good neither for him nor for FreeCAD.
|
||
</p><p>Nevertheless this decision is made only for the core system of FreeCAD. Every writer of an application module may make his own decision.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Licences_used_in_FreeCAD">Licences used in FreeCAD</span></h2>
|
||
<p>FreeCAD uses two different licenses, one for the application itself, and one for the documentation:
|
||
</p>
|
||
<dl><dt><a href="http://en.wikipedia.org/wiki/LGPL" class="extiw" title="wikipedia:LGPL">Lesser General Public Licence, version 2 or superior (LGPL2+)</a></dt>
|
||
<dd> For the core libs as stated in the .h and .cpp files in src/App src/Gui src/Base and all <a href="Workbenches.html" title="Workbenches">modules</a> in src/Mod and for the executable as stated in the .h and .cpp files in src/main. The icons and other graphic parts are also LGPL.</dd>
|
||
<dt><a href="http://en.wikipedia.org/wiki/Open_Publication_License" class="extiw" title="wikipedia:Open Publication License">Open Publication Licence</a></dt>
|
||
<dd> For the documentation on <a rel="nofollow" class="external free" href="http://www.freecadweb.org">http://www.freecadweb.org</a> when not marked differently by the author </dd></dl>
|
||
<p><br />
|
||
See FreeCAD's <a rel="nofollow" class="external text" href="http://sourceforge.net/p/free-cad/code/ci/master/tree/package/debian/copyright">debian copyright file</a> for more details about the licenses used by the different components found in FreeCAD
|
||
</p>
|
||
<h3><span class="mw-headline" id="Impact_of_the_licences">Impact of the licences</span></h3>
|
||
<h4><span class="mw-headline" id="Private_users">Private users</span></h4>
|
||
<p>Private users can use FreeCAD free of charge and can do basically whatever they want to do with it: use it, copy it, modify it, redistribute it.
|
||
They are always master of their data, they are not forced to update FreeCAD, change their usage of FreeCAD. Using FreeCAD doesn't bind them to any kind of contract or obligation.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Professional_users">Professional users</span></h4>
|
||
<p>Can use FreeCAD freely, for any kind of private or professional work. They can customize the application as they wish. They can write open or closed source extensions to FreeCAD. They are always master of their data, they are not forced to update FreeCAD, change their usage of FreeCAD. Using FreeCAD doesn't bind them to any kind of contract or obligation.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Open_Source_developers">Open Source developers</span></h4>
|
||
<p>Can use FreeCAD as the groundwork for own extension modules for special purposes. They can choose either the GPL or the LGPL to allow the use of their work in proprietary software or not.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Commercial_developers">Commercial developers</span></h4>
|
||
<p>Commercial developers can use FreeCAD as the groundwork for their own extension modules for special purposes and are not forced to make their modules open source. They can use all modules which use the LGPL. They are allowed to distribute FreeCAD along with their proprietary software. They will get the support of the author(s) as long as it is not a one way street.
|
||
</p>
|
||
<h2><span class="mw-headline" id="OpenCasCade_License_side_effects_.28for_FreeCAD_version_0.13_and_older.29">OpenCasCade License side effects (for FreeCAD version 0.13 and older)</span></h2>
|
||
<p>The following is no more applicable since version 0.14, since both FreeCAD and OpenCasCade are now fully LGPL.
|
||
</p><p><br />
|
||
Up to Version 0.13 FreeCAD is delivered as GPL2+, although the source itself is under LGPL2+. Thats because of linkage of Coin3D (GPL2) and PyQt(GPL). Starting with 0.14 we will be completely GPL free. PyQt will be replaced by PySide, and Coin3D was re-licensed under BSD. One problem, we still have to face, license-wise, the <a rel="nofollow" class="external text" href="http://www.opencascade.org/getocc/license/">OCTPL (Open CASCADE Technology Public License)</a>. Its a License mostly LGPL similar, with certain changes. On of the originators, Roman Lygin, elaborated on the License on his <a rel="nofollow" class="external text" href="http://opencascade.blogspot.de/2008/12/license-to-kill-license-to-use.html">Blog</a>. The home-brew OCTPL license leads to all kind of side effects for FreeCAD, which where widely discussed on different forums and mailing lists, e.g. on <a rel="nofollow" class="external text" href="http://www.opencascade.org/org/forum/thread_15859/?forum=3">OpenCasCade forum itself</a>. I will link here some articles for the biggest problems.
|
||
</p>
|
||
<h4><span class="mw-headline" id="GPL2.2FGPL3.2FOCTLP_incompatibility">GPL2/GPL3/OCTLP incompatibility</span></h4>
|
||
<p>We first discovered the problem by a discussion on the <a rel="nofollow" class="external text" href="http://www.fsf.org/">FSF</a> high priority project <a rel="nofollow" class="external text" href="https://groups.google.com/forum/#!topic/polignu/XRergtwsm80">discussion list</a>. It was about a library we look at, which was licensed with GPL3. Since we linked back then with Coin3D, with GPL2 only, we was not able to adopt that lib. Also the
|
||
OCTPL is considered <a rel="nofollow" class="external text" href="http://www.opencascade.org/occt/faq/">GPL incompatible</a>. This Libre Graphics World article <a rel="nofollow" class="external text" href="http://libregraphicsworld.org/blog/entry/libredwg-drama-the-end-or-the-new-beginning">"LibreDWG drama: the end or the new beginning?"</a> shows up the drama of LibreDWG project not acceptably in FreeCAD or LibreCAD.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Debian">Debian</span></h4>
|
||
<p>The incompatibility of the OCTPL <a rel="nofollow" class="external text" href="http://lists.debian.org/debian-legal/2009/10/msg00000.html">was discussed on the debian legal list</a> and lead to a <a rel="nofollow" class="external text" href="http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=617613">bug report on the FreeCAD package</a> which prevent (ignor-tag) the transition from debian-testing to the main distribution. But its also mentioned thats a FreeCAD, which is free of GPL code and libs, would be acceptably. With a re-licensed Coin3D V4 and a substituted PyQt we will hopefully reach GPL free with the 0.14 release.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Fedora.2FRedHat_non-free">Fedora/RedHat non-free</span></h4>
|
||
<p>In the Fedora project OpenCasCade is listed "non-free". This means basically it won't make it into Fedora or RedHat. This means also FreeCAD won't make it into Fedora/RedHat until OCC is changing its license. Here the links to the license evaluation:
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://lists.fedoraproject.org/pipermail/legal/2011-September/001713.html">Discussion on the Fedora-legal-list</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="https://bugzilla.redhat.com/show_bug.cgi?id=458974#c10">License review entry in the RedHat bug tracker</a></li></ul>
|
||
<p>The main problem they have AFIK is that the OCC license demand non discriminatory support fees if you want to do paid support. It has nothing to do with "free" or OpenSource, its all about RedHat's business model!
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<div class="floatright"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantis_logo_262x90.png" class="image" title="link=https://freecadweb.org/tracker/MantisBT is the bugtracker framework FreeCAD uses"><img alt="link=https://freecadweb.org/tracker/MantisBT is the bugtracker framework FreeCAD uses" src="Mantis_logo_262x90.png" width="262" height="90" /></a></div>
|
||
<p>L'indirizzo del nostro bug tracker è:
|
||
</p><p><a rel="nofollow" class="external free" href="https://www.freecadweb.org/tracker">https://www.freecadweb.org/tracker</a>
|
||
</p><p>Potete segnalare i bug, presentare le richieste di funzionalità, patch, o richiedere di fondere un proprio ramo, se avete sviluppato qualcosa usando git. Il tracker è suddiviso in moduli, quindi cercate di essere specifici e di presentare la richiesta nella sottosezione appropriata. In caso di dubbio, lasciare il messaggio nella sezione "FreeCAD".
|
||
</p><p><br />
|
||
Prima di creare istanze, si prega di discutere sempre prima il bug nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewforum.php?f=3">Help forum</a> e le richieste di nuove funzionalità in <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewforum.php?f=8">Open discussion forum</a>.
|
||
</p><p>As shown in the above flowchart, before creating tickets, please always first search the forums and bugtracker to discover if your issue is a known issue. This saves a lot of time/work for developers and volunteers that could be spending said time making FreeCAD even more awesome.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Segnalare_bug">Segnalare bug</span></h3>
|
||
<p>Quando si pensa di aver trovato un bug, si è invitati a segnalarlo lì, se si è prima discusso la questione nelle sedi opportune.
|
||
</p><p>Prima di segnalare un bug, si prega di verificare i seguenti punti:
|
||
</p>
|
||
<ul><li> Assicurarsi che il problema è veramente un bug, cioè, qualcosa che dovrebbe funzionare e che non funziona. Se non si è sicuri, non esitare a esporre il problema nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/">forum</a> e chiedere cosa fare.</li>
|
||
<li> Prima di inviare qualsiasi cosa, leggere le <a href="https://www.freecadweb.org/wiki/index.php?title=FAQ/it" title="FAQ/it">FAQ - domande frequenti</a>, fare una ricerca nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/">forum</a> e assicurarsi che lo stesso bug non è ancora stato segnalato, facendo una ricerca nel bug tracker.</li>
|
||
<li> Descrivere il più chiaramente possibile il problema e come può essere riprodotto. Se non possiamo verificare il bug, potremmo non essere in grado di risolvere il problema.</li>
|
||
<li> Includere tutte le informazioni usando il pulsante "Copia negli Appunti" del menu Aiuto -> A proposito di FreeCAD e farlo sia dall'ambiente Parte che dall'ambiente PartDesign in modo che siano inseriti i dati sulla versione OCC o OCE del sistema operativo utilizzato. </li>
|
||
<li> Si prega di inviare una relazione separata per ogni bug.</li>
|
||
<li> Quando si usa un sistema Linux e il bug causa un crash in FreeCAD, si può provare a eseguire un debug backtrace: Da un terminale eseguire <i>gdb freecad</i> (supponendo che il pacchetto gdb è installato), poi, all'interno di gdb, digitare <i>run</i>. FreeCAD viene eseguito e probabilmente causa un crash. A crash avvenuto, digitare <i>bt</i>, per ottenere il backtrace completo. Accludere al rapporto sul bug il risultato del backtrace emesso.</li></ul>
|
||
<h3><span class="mw-headline" id="Richiedere_delle_nuove_funzionalit.C3.A0">Richiedere delle nuove funzionalità</span></h3>
|
||
<p>Se desiderate qualcosa che in FreeCAD che non è ancora implementato, <u>questo non è un bug, ma una richiesta di nuove funzionalità</u>.
|
||
</p>
|
||
<ol><li> <b>IMPORTANTː</b> Before requesting a potential Feature Request <b>please be certain that you are the first one doing so by searching the forums and the bugtracker</b>. If you have concluded that there are no pre-existing tickets/discussions the next step is toː </li>
|
||
<li> Start a forum thread to discuss your feature request with the community via the <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewforum.php?f=8">Open Discussion forum</a>. </li>
|
||
<li> Once the community agrees that this is a valid Feature, you then can open a ticket on the tracker (file it under <i>feature request</i> instead of <i>bug</i>). </li></ol>
|
||
<ul><li> <b>NOTE #1</b> To keep things organized please remember to link the forum thread URL into the ticket and the ticket number (as a link) in to the forum thread. </li>
|
||
<li> <b>NOTE #2</b> Keep in mind there are no guarantees that your wish will be fulfilled. </li></ul>
|
||
<div class="thumb tright"><div class="thumbinner" style="width:302px;"><a href="https://www.freecadweb.org/wiki/index.php?title=File:MantisBT-setting-Feature-Request.jpg" class="image"><img alt="" src="300px-MantisBT-setting-Feature-Request.jpg" width="300" height="219" class="thumbimage" srcset="/wiki/images/thumb/b/bb/MantisBT-setting-Feature-Request.jpg/450px-MantisBT-setting-Feature-Request.jpg 1.5x, /wiki/images/thumb/b/bb/MantisBT-setting-Feature-Request.jpg/600px-MantisBT-setting-Feature-Request.jpg 2x" /></a> <div class="thumbcaption"><div class="magnify"><a href="https://www.freecadweb.org/wiki/index.php?title=File:MantisBT-setting-Feature-Request.jpg" class="internal" title="Enlarge"></a></div>FreeCAD Bugtracker report page - use the dropdown to correctly designate what the ticket is</div></div></div>
|
||
<h3><span class="mw-headline" id="Inviare_patch">Inviare patch</span></h3>
|
||
<p>Se avete creato il programma di correzione a un bug, una estensione o altro che può essere di uso pubblico in FreeCAD, create una patch utilizzando lo strumento Git diff e presentatela utilizzando il medesimo tracker (file di patch).
|
||
</p><p>Addendumː FreeCAD development has switched to the <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD">GitHub</a> development model so the workflow for submitting patches has been greatly enhanced/streamlined by submitting Pull Requests.
|
||
</p>
|
||
<ul><li> Open a forum thread in the Developer subforum to announce and discuss your patch. </li>
|
||
<li> Submit your PR to the <a rel="nofollow" class="external text" href="http://github.com/FreeCAD/FreeCAD">FreeCAD GitHub repo</a>. Be sure to link the forum thread in to the git commit summary. </li>
|
||
<li> Paste the PR link in to the forum thread for the devs/testers to test. </li>
|
||
<li> Be present for the discussion so that your code can potentially be merged more effectively. </li></ul>
|
||
<p><b>NOTEː</b> the FreeCAD community recommends to first discuss any large revision to the source code in advance to save everyone time.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Richiedere_la_fusione">Richiedere la fusione</span></h3>
|
||
<p>Se avete creato un ramo git contenente delle modifiche che desiderate far confluire nel codice di FreeCAD, potete fare la richiesta di avere la recensione e la fusione del vostro ramo, se gli sviluppatori di FreeCAD sono d'accordo. È necessario pubblicare prima il ramo in un repository git pubblico (github, bitbucket, sourceforge ...) e poi fornire l'URL del vostro ramo nella richiesta di unione.
|
||
</p><p>If you have created a git branch containing changes that you would like to see merged into the FreeCAD code, you can ask there to have your branch reviewed and merged if the FreeCAD developers are OK with it. You must first publish your branch to a public git repository (github, gitlab, bitbucket, sourceforge etc...) and then give the URL of your branch in your merge request.
|
||
</p>
|
||
<h2><span class="mw-headline" id="MantisBT_Tips_and_Tricks">MantisBT Tips and Tricks</span></h2>
|
||
<h3><span class="mw-headline" id="MantisBT_Markup">MantisBT Markup</span></h3>
|
||
<p>MantisBT (Mantis Bug Tracker) has it's own unique markup.
|
||
</p>
|
||
<ul><li> <b>@</b>mention - works just like on GitHub where if you prepend '@' to someone's username they will receive an email that they have been 'mentioned' in a ticket thread</li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-mention-example.jpg" class="image"><img alt="Mantisbt-mention-example.jpg" src="600px-Mantisbt-mention-example.jpg" width="600" height="70" srcset="/wiki/images/thumb/b/ba/Mantisbt-mention-example.jpg/900px-Mantisbt-mention-example.jpg 1.5x, /wiki/images/b/ba/Mantisbt-mention-example.jpg 2x" /></a></div></div>
|
||
<ul><li> <b>#</b>1234 - By adding a hash tag in front of a number a shortcut to link to another ticket within MantisBT will present.
|
||
<dl><dd> <b>Note</b>: if you hover over a ticket it will show you the summary + if the ticket is closed, it will be struck-through like <s>#1234</s>.</dd></dl></li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-ticket-shortcut-example.jpg" class="image"><img alt="Mantisbt-ticket-shortcut-example.jpg" src="600px-Mantisbt-ticket-shortcut-example.jpg" width="600" height="112" srcset="/wiki/images/4/47/Mantisbt-ticket-shortcut-example.jpg 1.5x" /></a></div></div>
|
||
<ul><li> <b>~</b>5678 - a shortcut that links to a bug note within a ticket. This can be used to reference someone's response within the thread. Each person that posts will show a unique ~#### number next to their username. If you look at the image in the example, you see that the shortcut is referencing the <i>ticket number:comment number</i> of said ticket</li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-comment-shortcut-example.jpg" class="image"><img alt="Mantisbt-comment-shortcut-example.jpg" src="600px-Mantisbt-comment-shortcut-example.jpg" width="600" height="74" srcset="/wiki/images/thumb/2/23/Mantisbt-comment-shortcut-example.jpg/900px-Mantisbt-comment-shortcut-example.jpg 1.5x, /wiki/images/thumb/2/23/Mantisbt-comment-shortcut-example.jpg/1200px-Mantisbt-comment-shortcut-example.jpg 2x" /></a></div></div>
|
||
<ul><li> <b><del></del></b> - Using these tags will <s>strikeout text</s>. </li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-strikeout-text-example.jpg" class="image"><img alt="Mantisbt-strikeout-text-example.jpg" src="600px-Mantisbt-strikeout-text-example.jpg" width="600" height="30" srcset="/wiki/images/thumb/4/49/Mantisbt-strikeout-text-example.jpg/900px-Mantisbt-strikeout-text-example.jpg 1.5x, /wiki/images/4/49/Mantisbt-strikeout-text-example.jpg 2x" /></a></div></div>
|
||
<ul><li> <b><code></code></b> - To present a line or block of code, use this tag and it will colorize and differentiate it elegantly. </li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-colorized-code-example.jpg" class="image"><img alt="Mantisbt-colorized-code-example.jpg" src="600px-Mantisbt-colorized-code-example.jpg" width="600" height="191" srcset="/wiki/images/thumb/f/f3/Mantisbt-colorized-code-example.jpg/900px-Mantisbt-colorized-code-example.jpg 1.5x, /wiki/images/thumb/f/f3/Mantisbt-colorized-code-example.jpg/1200px-Mantisbt-colorized-code-example.jpg 2x" /></a></div></div>
|
||
<h3><span class="mw-headline" id="MantisBT_BBCode">MantisBT BBCode</span></h3>
|
||
<p>In addition to the above <a href="https://www.freecadweb.org/wiki/index.php?title=Tracker/MantisBT_%CC%A0Markup&action=edit&redlink=1" class="new" title="Tracker/MantisBT ̠Markup (page does not exist)">Tracker/MantisBT ̠Markup</a> one also has the possibility to use BBCode format. For a comprehensive list see the <a rel="nofollow" class="external text" href="https://github.com/mantisbt-plugins/BBCodePlus#supported-bbcode-tags">BBCode plus plugin page</a>. Here is a list of supported BBCode tagsː
|
||
<small><code><br />
|
||
[img][/img] - Images <br />
|
||
[url][/url] - Links <br />
|
||
[email][/email] - Email addresses <br />
|
||
[color=red][/color] - Colored text <br />
|
||
[highlight=yellow][/highlight] - Highlighted text <br />
|
||
[size][/size] - Font size <br />
|
||
[list][/list] - Lists <br />
|
||
[list=1][/list] - Numbered lists (number is starting number) <br />
|
||
[*] - List items <br />
|
||
[b][/b] - Bold <br />
|
||
[u][/u] - underline <br />
|
||
[i][/i] - Italic <br />
|
||
[s][/s] - Strikethrough <br />
|
||
[left][/left] - Left align <br />
|
||
[center][/center] - Center <br />
|
||
[right][/right] - Right align <br />
|
||
[justify][/justify] - Justify <br />
|
||
[hr] - Horizontal rule <br />
|
||
[sub][/sub] - Subscript <br />
|
||
[sup][/sup] - Superscript <br />
|
||
[table][/table] - Table <br />
|
||
[table=1][/table] - Table with border of specified width <br />
|
||
[tr][/tr] - Table row <br />
|
||
[td][/td] - Table column <br />
|
||
[code][/code] - Code block <br />
|
||
[code=sql][/code] - Code block with language definition <br />
|
||
[code start=3][/code] - Code block with line numbers starting at number <br />
|
||
[quote][/quote] - Quote by *someone* (no name) <br />
|
||
[quote=name][/quote] - Quote by *name* <br />
|
||
</code>
|
||
</small>
|
||
</p>
|
||
<h3><span class="mw-headline" id="MantisBT_.3C.3D.3E_GitHub_Markup">MantisBT <=> GitHub Markup</span></h3>
|
||
<p>Below are special MantisBT Source-Integration plugin keywords which will link to the FreeCAD GitHub repo. See <a href="/wiki/Tracker#GitHub_and_MantisBT" title="Tracker">Tracker#GitHub_and_MantisBT</a>.
|
||
</p>
|
||
<ul><li> <b>c:FreeCAD:git commit hash:</b> - <b>c</b> stands for 'commit'. FreeCAD stands for the FreeCAD GitHub repo. 'git commit hash' is the specific git commit hash to reference. Note: the trailing colon is necessary. Exampleː <code>cːFreeCADː709d2f325db0490016807b8fa6f49d1c867b6bd8ː</code> </li>
|
||
<li> <b>d:FreeCAD:git commit hash:</b> - similar to the above, <b>d</b> stands for 'diff' which will provide a Diff view of the commit. Exampleː <code>dːFreeCADː709d2f325db0490016807b8fa6f49d1c867b6bd8ː</code> </li>
|
||
<li> <b>p:FreeCAD:pullrequest:</b> - similar to the above, <b>p</b> stands for Pull Request. Exampleː <code>pːFreeCADː498ː</code> </li></ul>
|
||
<div class="center"><div class="floatnone"><a href="https://www.freecadweb.org/wiki/index.php?title=File:Mantisbt-source-integration-markup.jpg" class="image"><img alt="Mantisbt-source-integration-markup.jpg" src="600px-Mantisbt-source-integration-markup.jpg" width="600" height="75" srcset="/wiki/images/2/20/Mantisbt-source-integration-markup.jpg 1.5x" /></a></div></div>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="GitHub_and_MantisBT">GitHub and MantisBT</span></h2>
|
||
<p>The FreeCAD bugtracker has a plug-in called <a rel="nofollow" class="external text" href="https://github.com/mantisbt-plugins/source-integration">Source Integration</a> which essentially ties both the FreeCAD GitHub repo to our MantisBT tracker. It makes it easier to track and associate git commits with their respective MantisBT tickets. <b>The Source Integration plugin scans the git commit messages for specific keywords in order to execute the following actions:</b>
|
||
</p><p><b>Note</b> The below keywords need to be added in the <u>git commit message</u> and not the PR subject
|
||
</p>
|
||
<h3><span class="mw-headline" id="Attaching_a_git_commit_to_a_ticket">Attaching a git commit to a ticket</span></h3>
|
||
<p>The format MantisBT will recognize:
|
||
</p>
|
||
<ul><li> bug #1234</li>
|
||
<li> bugs #1234, #5678</li>
|
||
<li> issue #1234</li>
|
||
<li> issues #1234, #5678</li>
|
||
<li> report #1234</li>
|
||
<li> reports #1234, #5678</li></ul>
|
||
<p><small>For the inquisitive here is the regex MantisBT uses for this operation: <br />
|
||
<code>/(?:bugs?|issues?|reports?)+\s*:?\s+(?:#(?:\d+)[,\.\s]*)+/i</code></small>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Remotely_resolving_a_ticket">Remotely resolving a ticket</span></h3>
|
||
<p>The format MantisBT will recognize:
|
||
</p>
|
||
<ul><li> fix #1234</li>
|
||
<li> fixed #1234</li>
|
||
<li> fixes #1234</li>
|
||
<li> fixed #1234, #5678</li>
|
||
<li> fixes #1234, #5678</li>
|
||
<li> resolve #1234</li>
|
||
<li> resolved #1234</li>
|
||
<li> resolves #1234</li>
|
||
<li> resolved #1234, #5678</li>
|
||
<li> resolves #1234, #5678</li></ul>
|
||
<p><small>For the inquisitive here is the regex MantisBT uses for this operation: <br />
|
||
<code>/(?:fixe?d?s?|resolved?s?)+\s*:?\s+(?:#(?:\d+)[,\.\s]*)+/i</code></small>
|
||
</p>
|
||
<h2><span class="mw-headline" id="Related">Related</span></h2>
|
||
<ul><li> <a href="Bug_Triage.html" title="Bug Triage">Bug Triage</a></li>
|
||
<li> <a href="Source_Code_Management.html" class="mw-redirect" title="Source Code Management">Source Code Management</a></li></ul>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questo articolo spiega passo dopo passo <b>come compilare FreeCAD su Windows</b>.
|
||
</p>
|
||
<ul><li> Vedere anche <a href="https://www.freecadweb.org/wiki/index.php?title=Compile_on_Windows_with_VS2013/it" title="Compile on Windows with VS2013/it">Compilare in Windows con Visual Studio 2013</a></li>
|
||
<li> <a href="/wiki/Compiling_(Speeding_up)/it" title="Compiling (Speeding up)/it">Velocizzare la compilazione</a></li></ul>
|
||
<h2><span class="mw-headline" id="Prerequisiti">Prerequisiti</span></h2>
|
||
<h3><span class="mw-headline" id="Programmi_richiesti">Programmi richiesti</span></h3>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://git-scm.com/">Git</a> Ci sono una serie di alternative come GitCola, Tortoise Git, e altri.</li>
|
||
<li> <a rel="nofollow" class="external text" href="http://www.cmake.org/cmake/resources/software.html">CMake</a> versione 2.x.x oppure Cmake 3.x.x</li>
|
||
<li> Python >2.5 (Questo è necessario solo se non si utilizza il Libpack. Il Libpack è dotato come minimo di Python(2.7.x) idoneo per compilare e eseguire FreeCAD)</li></ul>
|
||
<h3><span class="mw-headline" id="Codice_sorgente">Codice sorgente</span></h3>
|
||
<h4><span class="mw-headline" id="Usando_Git_.28Preferito.29">Usando Git (Preferito)</span></h4>
|
||
<p>Per creare un ramo locale e scaricare il codice sorgente è necessario aprire un terminale (prompt dei comandi) e portarsi nella directory (cd) in cui si desidera creare il sorgente, quindi digitare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre>git clone https://github.com/FreeCAD/FreeCAD.git free-cad-code</pre></div>
|
||
<div class="mw-translate-fuzzy">
|
||
<h3><span class="mw-headline" id="Compilatore">Compilatore</span></h3>
|
||
<p>In Windows, il compilatore di default è MS Visual Studio, sia che si tratti della versione Express oppure Completa 2008, 2012, o 2013. Inoltre è necessario installare la piattaforma Windows SDK per disporre delle diverse librerie richieste (e.g. Windows.h), anche se esse possono non essere richieste con i compilatori MS (sia full che express).
|
||
</p>
|
||
</div>
|
||
<p>Per chi vuole evitare l'installazione completa dell'ingombrante Visual Studio al solo scopo di avere un compilatore può vedere <a href="https://www.freecadweb.org/wiki/index.php?title=CompileOnWindows_-_Reducing_Disk_Footprint/it" title="CompileOnWindows - Reducing Disk Footprint/it">Compilare in Windows - Occupare meno spazio</a>.
|
||
</p>
|
||
<div class="note"><b>Note</b>
|
||
<p>Though it may be possible to use Cygwin or MinGW gcc it's not tested or ported so far.
|
||
</p>
|
||
</div>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Librerie_di_terze_parti">Librerie di terze parti</span></h3>
|
||
<p>Per compilare correttamente FreeCAD, servono tutte le <a href="https://www.freecadweb.org/wiki/index.php?title=Third_Party_Libraries/it" title="Third Party Libraries/it">Librerie di terze parti</a> . Se si usa i compilatori MS si raccomanda di installare <a rel="nofollow" class="external text" href="http://sourceforge.net/projects/free-cad/files/FreeCAD%20LibPack/">FreeCAD LibPack</a>,che fornisce tutte le librerie necessarie per costruire FreeCAD in Windows.
|
||
Serve il Libpack adatto alla propria architettura e compilatore. Attualmente FreeCAD fornisce Libpack Version11 per x32 e x64, per VS9 2008, VS11 2012, e VS12 2013.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Programmi_opzionali">Programmi opzionali</span></h3>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://sourceforge.net/projects/nsis/">NSIS</a> installatore Windows (nota: prima era usato l'installatore <a rel="nofollow" class="external text" href="http://wixtoolset.org/">WiX</a> - ora è in corso il passaggio a NSIS) - per creare un installatore msi</li></ul>
|
||
<h3><span class="mw-headline" id="System_Path_Configuration">System Path Configuration</span></h3>
|
||
<p>All'interno del percorso di sistema assicurarsi di impostare i percorsi corretti per i seguenti programmi:
|
||
</p>
|
||
<ul><li> git (non tortoiseGit, ma git.exe) Serve a Cmake per aggiornare correttamente le informazioni "About FreeCAD" nel file version.h che consente a FreeCAD di riportare la versione corretta in About FreeCAD dal menu Aiuto.</li>
|
||
<li>Opzionalmente è possibile includere il Libpack nel percorso di sistema. Questo è utile se si prevede di costruire più configurazioni o versioni di FreeCAD, si dovranno copiare meno file, come spiegato più avanti nel processo di costruzione.</li></ul>
|
||
<p>Per aggiungere al percorso di sistema:
|
||
</p>
|
||
<ul><li> Start menu -> Right click on Computer -> Properties -> Advanced system settings</li>
|
||
<li> Advanced tab -> Environment Variables...</li>
|
||
<li> Add the PATH/TO/GIT to the <b>PATH</b></li>
|
||
<li> It should be separated from the others with a semicolon `;`</li></ul>
|
||
<h2><span class="mw-headline" id="Configuration_with_CMake">Configuration with CMake</span></h2>
|
||
<h3><span class="mw-headline" id="The_switch_to_CMake">The switch to CMake</span></h3>
|
||
<div class="note"><b>Warning</b>
|
||
<p>Since FreeCAD version 0.9 we have stopped providing .vcproj files.
|
||
</p>
|
||
</div>
|
||
<p>Currently, FreeCAD uses the CMake build system to generate build and make files that can be used between different operating systems and compilers.
|
||
If you want build former versions of FreeCAD (0.8 and older) see
|
||
<a href="#Building_older_versions">Building older versions</a> later in this article.
|
||
</p><p>We switched because it became more and more painful to maintain project files for 30+
|
||
build targets and x compilers. CMake gives us the possibility to support alternative
|
||
IDEs, like Code::Blocks, Qt Creator and Eclipse CDT.
|
||
The main compiler is still MS VC9 Express, though. But we plan for the future a build process on
|
||
Windows without proprietary compiler software.
|
||
</p>
|
||
<h3><span class="mw-headline" id="CMake">CMake</span></h3>
|
||
<p>The first step to build FreeCAD with CMake is to configure the environment. There
|
||
are two ways to do it:
|
||
</p>
|
||
<ul><li> Using the LibPack</li>
|
||
<li> Installing all the needed libraries and let CMake find them</li></ul>
|
||
<p><br />
|
||
The following process will assume you are using the LipPack. The second option may be discussed
|
||
in <a href="#Options_for_the_Build_Process">Options for the Build Process</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Configure_CMake_using_GUI">Configure CMake using GUI</span></h3>
|
||
<ul><li> Open the CMake GUI</li>
|
||
<li> Specify the source folder</li>
|
||
<li> Specify the build folder</li>
|
||
<li> Click <b>Configure</b></li>
|
||
<li> Specify the generator according to the IDE that you'll use. </li></ul>
|
||
<p><br />
|
||
This will begin configuration and should fail because the location of
|
||
<b>FREECAD_LIBPACK_DIR</b> is unset.
|
||
</p>
|
||
<ul><li> Expand the <b>FREECAD</b> category and set <b>FREECAD_LIBPACK_DIR</b> to the correct location</li>
|
||
<li> Check <b>FREECAD_USE_EXTERNAL_PIVY</b></li>
|
||
<li> Optionally Check <b>FREECAD_USE_FREETYPE</b> this is required to use the Draft WB's Shape String functionality</li>
|
||
<li> Click <b>Configure</b> again</li>
|
||
<li> There should be no errors</li>
|
||
<li> Click <b>Generate</b></li>
|
||
<li> Close CMake</li>
|
||
<li> Copy <b>libpack\bin</b> folder into the new build folder CMake created</li></ul>
|
||
<h3><span class="mw-headline" id="Options_for_the_Build_Process">Options for the Build Process</span></h3>
|
||
<p>The CMake build system gives us a lot more flexibility over the build process. That means
|
||
we can switch on and off some features or modules. It's in a way like the Linux kernel build.
|
||
You have a lot of switches to determine the build process.
|
||
</p><p>Here is the description of some of these switches. They will most likely change a lot in the future
|
||
because we want to increase the build flexibility a lot more.
|
||
</p><p><br />
|
||
</p>
|
||
<table class="wikitable" style="text-align:left">
|
||
<caption> Link table
|
||
</caption>
|
||
<tr>
|
||
<th> Variable name </th>
|
||
<th> Description </th>
|
||
<th> Default
|
||
</th></tr>
|
||
<tr>
|
||
<td> FREECAD_LIBPACK_USE </td>
|
||
<td> Switch the usage of the FreeCAD LibPack on or off </td>
|
||
<td> On Win32 on, otherwise off
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_LIBPACK_DIR </td>
|
||
<td> Directory where the LibPack is </td>
|
||
<td> FreeCAD SOURCE dir
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_BUILD_GUI </td>
|
||
<td> Build FreeCAD with all Gui related modules </td>
|
||
<td> ON
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_BUILD_CAM </td>
|
||
<td> Build the CAM module, experimental! </td>
|
||
<td> OFF
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_BUILD_INSTALLER </td>
|
||
<td> Create the project files for the Windows installer. </td>
|
||
<td> OFF
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_BUILD_DOXYGEN_DOCU </td>
|
||
<td> Create the project files for source code documentation. </td>
|
||
<td> OFF
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_MAINTAINERS_BUILD </td>
|
||
<td> Switch on stuff needed only when you do a Release build. </td>
|
||
<td> OFF
|
||
</td></tr></table>
|
||
<p>If you are building with Qt Creator, jump to
|
||
<a href="#Building_with_Qt_Creator">Building with Qt Creator</a>,
|
||
otherwise proceed to
|
||
<a href="#Building_with_Visual_Studio_9_2008">Building with Visual Studio 9 2008</a>.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Building_FreeCAD">Building FreeCAD</span></h2>
|
||
<p>Depending on your current setup, the process for building FreeCAD will be slightly different. This is due to the differences in available software and software versions for each operating system.
|
||
</p><p><br />
|
||
The following procedure will work for compiling on Windows Vista/7/8, for XP an alternate VS tool set is required for VS 2012 and 2013, which has not been tested successfully with the current Libpacks. To target XP(both x32 and x64) it is recommended to use VS2008 and Libpack FreeCADLibs_11.0_x86_VC9.7z
|
||
</p>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Building_with_Visual_Studio_12_2013">Building with Visual Studio 12 2013</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Make sure to specify <b>Visual Studio 12 x64</b>(or the alternate C-Compiler you are using) as the generator in CMake before you continue.
|
||
</p>
|
||
<ul><li>Start Visual Studio 12 2013 by clicking on the desktop icon created at installation.</li></ul>
|
||
<ul><li>Open the project by:</li></ul>
|
||
<p>File -> Open -> Project/Solution
|
||
</p>
|
||
<ul><li>Open FreeCAD_Trunk.sln from the build folder CMake created</li></ul>
|
||
<ul><li>Switch the Solutions Configuration drop down at the top to <b>Release</b> <b>X64</b></li></ul>
|
||
<p>This may take a while depending on your sytem
|
||
</p>
|
||
<ul><li>Build -> Build Solution</li></ul>
|
||
<ul><li>This will take a long time... </li></ul>
|
||
<p>If you don't get any errors you are done. Exit Visual Studio and start FreeCAD by double clicking the FreeCAD icon in the bin folder of the build directory.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Building_with_Visual_Studio_9_2008">Building with Visual Studio 9 2008</span></h3>
|
||
<div class="note"><b>Warning</b>
|
||
<p>Since early 0.17 cycle Freecad uses c++11 features that are not supported by 2008 version
|
||
</p>
|
||
</div>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Building_with_Qt_Creator">Building with Qt Creator</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<h4><span class="mw-headline" id="Installation_and_configuration_of_Qt_Creator">Installation and configuration of Qt Creator</span></h4>
|
||
<ul><li> Download and install <a rel="nofollow" class="external text" href="https://qt-project.org/downloads">Qt Creator</a></li>
|
||
<li> Tools -> Options -> Text Editor -> Behavior tab:
|
||
<ul><li> File Encodings -> Default Encodings:</li>
|
||
<li> Set to: <b>ISO-8859-1 /...csISOLatin1</b> (Certain characters create errors/warnings with Qt Creator if left set to UTF-8. This seems to fix it.)</li></ul></li>
|
||
<li> Tools -> Options -> Build & Run:
|
||
<ul><li> CMake tab
|
||
<ul><li> Fill Executable box with path to cmake.exe</li></ul></li>
|
||
<li> Kits tab
|
||
<ul><li> Name: MSVC 2008</li>
|
||
<li> Compiler: Microsoft Visual C++ Compiler 9.0 (x86)</li>
|
||
<li> Debugger: Auto detected...</li>
|
||
<li> Qt version: None</li></ul></li>
|
||
<li> General tab
|
||
<ul><li> Uncheck: Always build project before deploying it</li>
|
||
<li> Uncheck: Always deploy project before running it</li></ul></li></ul></li></ul>
|
||
<h4><span class="mw-headline" id="Import_project_and_Build">Import project and Build</span></h4>
|
||
<ul><li> File -> Open File or Project</li>
|
||
<li> Open <b>CMakeLists.txt</b> which is in the top level of the source</li>
|
||
<li> This will start CMake</li>
|
||
<li> Choose build directory and click next</li>
|
||
<li> Set generator to <b>NMake Generator (MSVC 2008)</b></li>
|
||
<li> Click Run CMake. Follow the instructions depicted above to configure CMake to your liking.</li></ul>
|
||
<p>Now FreeCAD can be built
|
||
</p>
|
||
<ul><li> Build -> Build All</li>
|
||
<li> This will take a long time...</li></ul>
|
||
<p>Once complete, it can be run:
|
||
There are 2 green triangles at the bottom left. One is debug.
|
||
The other is run. Pick whichever you want.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Command_line_build">Command line build</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Here an example how to build FreeCAD from the Command line:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> rem @echo off
|
||
rem Build script, uses vcbuild to completetly build FreeCAD
|
||
|
||
rem update trunc
|
||
d:
|
||
cd "D:\_Projekte\FreeCAD\FreeCAD_0.9"
|
||
"C:\Program Files (x86)\Subversion\bin\svn.exe" update
|
||
|
||
rem set the aprobiated Variables here or outside in the system
|
||
|
||
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
|
||
set INCLUDE=
|
||
set LIB=
|
||
|
||
rem Register VS Build programms
|
||
call "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
|
||
|
||
rem Set Standard include paths
|
||
set INCLUDE=%INCLUDE%;%FrameworkSDKDir%\include
|
||
set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include
|
||
|
||
rem Set lib Pathes
|
||
set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
|
||
set LIB=%LIB%;%PROGRAMFILES%\Microsoft Visual Studio\VC98\Lib
|
||
|
||
rem Start the Visuall Studio build process
|
||
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\vcpackages\vcbuild.exe" "D:\_Projekte\FreeCAD FreeCAD_0.9_build\FreeCAD_trunk.sln" /useenv</pre></div>
|
||
</div>
|
||
</div>
|
||
<p><br />
|
||
</p>
|
||
<h2><span class="mw-headline" id="Building_older_versions">Building older versions</span></h2>
|
||
<h3><span class="mw-headline" id="Using_LibPack">Using LibPack</span></h3>
|
||
<p>To make it easier to get FreeCAD compiled, we provide a collection of all
|
||
needed libraries. It's called the <a href="Third_Party_Libraries.html" title="Third Party Libraries">LibPack</a>. You can find it on the <a rel="nofollow" class="external text" href="http://sourceforge.net/project/showfiles.php?group_id=49159">download page</a> on
|
||
sourceforge.
|
||
</p><p>You need to set the following environment variables:
|
||
</p>
|
||
<dl><dd><b>FREECADLIB</b> = "D:\Wherever\LIBPACK"</dd></dl>
|
||
<dl><dd><b>QTDIR</b> = "%FREECADLIB%"</dd></dl>
|
||
<p>Add "%FREECADLIB%\bin" and "%FREECADLIB%\dll" to the system <i>PATH</i> variable. Keep in mind that you have to replace "%FREECADLIB%" with the path name, since Windows does not recursively replace environment variables.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Directory_setup_in_Visual_Studio">Directory setup in Visual Studio</span></h4>
|
||
<p>Some search path of Visual Studio need to be set.
|
||
To change them, use the menu <i>Tools→Options→Directory</i>
|
||
</p>
|
||
<h5><span class="mw-headline" id="Includes">Includes</span></h5>
|
||
<p>Add the following search path to the include path search list:
|
||
</p>
|
||
<ul><li> %FREECADLIB%\include</li>
|
||
<li> %FREECADLIB%\include\Python</li>
|
||
<li> %FREECADLIB%\include\boost</li>
|
||
<li> %FREECADLIB%\include\xercesc</li>
|
||
<li> %FREECADLIB%\include\OpenCascade</li>
|
||
<li> %FREECADLIB%\include\OpenCV</li>
|
||
<li> %FREECADLIB%\include\Coin</li>
|
||
<li> %FREECADLIB%\include\SoQt</li>
|
||
<li> %FREECADLIB%\include\QT</li>
|
||
<li> %FREECADLIB%\include\QT\Qt3Support</li>
|
||
<li> %FREECADLIB%\include\QT\QtCore</li>
|
||
<li> %FREECADLIB%\include\QT\QtGui</li>
|
||
<li> %FREECADLIB%\include\QT\QtNetwork</li>
|
||
<li> %FREECADLIB%\include\QT\QtOpenGL</li>
|
||
<li> %FREECADLIB%\include\QT\QtSvg</li>
|
||
<li> %FREECADLIB%\include\QT\QtUiTools</li>
|
||
<li> %FREECADLIB%\include\QT\QtXml</li>
|
||
<li> %FREECADLIB%\include\Gts</li>
|
||
<li> %FREECADLIB%\include\zlib</li></ul>
|
||
<h5><span class="mw-headline" id="Libs">Libs</span></h5>
|
||
<p>Add the following search path to the lib path search list:
|
||
</p>
|
||
<ul><li> %FREECADLIB%\lib</li></ul>
|
||
<h5><span class="mw-headline" id="Executables">Executables</span></h5>
|
||
<p>Add the following search path to the executable path search list:
|
||
</p>
|
||
<ul><li> %FREECADLIB%\bin</li>
|
||
<li> TortoiseSVN binary installation directory, usually "C:\Programm Files\TortoiseSVN\bin", this is needed for a distribution build when <i>SubWVRev.exe</i> is used to extract the version number from Subversion.</li></ul>
|
||
<h4><span class="mw-headline" id="Python_needed">Python needed</span></h4>
|
||
<p>During the compilation some Python scripts get executed. So the Python
|
||
interpreter has to function on the OS. Use a command box to check it. If
|
||
the Python library is not properly installed you will get an error message
|
||
like <i>Cannot find python.exe</i>. If you use the LibPack you can also use the
|
||
python.exe in the bin directory.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Special_for_VC8">Special for VC8</span></h4>
|
||
<p>When building the project with VC8, you have to change the link information for the WildMagic library, since you need a different version for VC6 and VC8. Both versions are supplied in <i>LIBPACK/dll</i>. In the project properties for <i>AppMesh</i> change the library name for the <i>wm.dll</i> to the VC8 version. Take care to change it in Debug <i>and</i> Release configuration.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Compile">Compile</span></h3>
|
||
<p>After you conform to all prerequisites the compilation is - hopefully - only a mouse click in VC
|
||
</p>
|
||
<h3><span class="mw-headline" id="After_Compiling">After Compiling</span></h3>
|
||
<p>To get FreeCAD up and running from the compiler environment you need to copy a few files from the <a href="Third_Party_Libraries.html" title="Third Party Libraries">LibPack</a> to the <i>bin</i> folder where FreeCAD.exe is installed after a successful build:
|
||
</p>
|
||
<ul><li> <i>python.exe</i> and <i>python_d.exe</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>python25.dll</i> and <i>python25_d.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>python25.zip</i> from <i>LIBPACK/bin</i></li>
|
||
<li> make a copy of <i>Python25.zip</i> and rename it to <i>Python25_d.zip</i></li>
|
||
<li> <i>QtCore4.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>QtGui4.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>boost_signals-vc80-mt-1_34_1.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>boost_program_options-vc80-mt-1_34_1.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>xerces-c_2_8.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>zlib1.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>coin2.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>soqt1.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>QtOpenGL4.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>QtNetwork4.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>QtSvg4.dll</i> from <i>LIBPACK/bin</i></li>
|
||
<li> <i>QtXml4.dll</i> from <i>LIBPACK/bin</i></li></ul>
|
||
<p>When using a <a href="Third_Party_Libraries.html" title="Third Party Libraries">LibPack</a> with a Python version older than 2.5 you have to copy two further files:
|
||
</p>
|
||
<ul><li> <i>zlib.pyd</i> and <i>zlib_d.pyd</i> from <i>LIBPACK/bin/lib</i>. This is needed by python to open the zipped python library.</li>
|
||
<li> <i>_sre.pyd</i> and <i>_sre_d.pyd</i> from <i>LIBPACK/bin/lib</i>. This is needed by python for the built in help system.</li></ul>
|
||
<p>If you don't get it running due to a Python error it is very likely that one of the <i>zlib*.pyd</i> files is missing.
|
||
</p><p>Alternatively, you can copy the whole bin folder of libpack into bin folder of the build. This is easier, but takes time and disk space. This can be substited by making links instead of copying files, see <a href="/wiki/CompileOnWindows_-_Reducing_Disk_Footprint#avoiding_copying_any_libpack_files_to_launch_FreeCAD" title="CompileOnWindows - Reducing Disk Footprint">CompileOnWindows - Reducing Disk Footprint</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Additional_stuff">Additional stuff</span></h3>
|
||
<p>If you whant to build the source code documentation you need <a rel="nofollow" class="external text" href="http://www.stack.nl/~dimitri/doxygen/">DoxyGen</a>.
|
||
</p><p>To create an intstaller package you need <a rel="nofollow" class="external text" href="http://wix.sourceforge.net/">WIX</a>.
|
||
</p><p><br />
|
||
During the compilation some Python scripts get executed. So the Python interpreter has to work properly.
|
||
</p><p>For more details have also a look to <i>README.Linux</i> in your sources.
|
||
</p><p>First of all you should build the Qt plugin that provides all custom widgets of FreeCAD we need for the Qt Designer. The sources are located under
|
||
</p>
|
||
<pre>
|
||
//src/Tools/plugins/widget//.
|
||
</pre>
|
||
<p>So far we don't provide a makefile -- but calling
|
||
</p>
|
||
<pre>
|
||
qmake plugin.pro
|
||
</pre>
|
||
<p>creates it. Once that's done, calling <i>make</i> will create the library
|
||
</p>
|
||
<pre>
|
||
//libFreeCAD_widgets.so//.
|
||
</pre>
|
||
<p>To make this library known to your <i>Qt Designer</i> you have to copy the file to
|
||
</p>
|
||
<pre>
|
||
//$QTDIR/plugin/designer//.
|
||
</pre>
|
||
<h2><span class="mw-headline" id="References">References</span></h2>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Nelle distribuzioni Linux recenti FreeCAD si compila facilmente, dato che di solito tutte le dipendenze sono fornite dal gestore di pacchetti. Fondamentalmente si tratta di eseguire 3 passaggi:
|
||
</p>
|
||
<ol><li> Ottenere il codice sorgente di FreeCAD</li>
|
||
<li> Ottenere le dipendenze (i pacchetti da cui dipende FreeCAD)</li>
|
||
<li> Configurare con "cmake" e compilare con "make"</li></ol>
|
||
<p>Qui, di seguito, troverete le spiegazioni dettagliate di tutto il processo, delle particolarità che si possono incontrare e alcuni <a href="#Script_di_build_automatico">script di build</a>,. Se trovate qualcosa di sbagliato o di non aggiornato nel testo successivo (le distribuzioni Linux cambiano spesso), o se utilizzate una distribuzione che non è elencata, per favore aiutateci a correggerlo.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Ottenere_il_sorgente">Ottenere il sorgente</span></h2>
|
||
<p>Per poter compilare FreeCAD è necessario il codice sorgente. Ci sono 3 modi per ottenerlo:
|
||
</p>
|
||
<h3><span class="mw-headline" id="Git">Git</span></h3>
|
||
<p>Il modo migliore e più veloce per ottenere il codice è quello di clonare il repository git di sola lettura ora ospitato in GitHub (bisogna avere il pacchetto <a rel="nofollow" class="external text" href="http://git-scm.com/">git</a> installato):
|
||
</p>
|
||
<pre>git clone https://github.com/FreeCAD/FreeCAD.git free-cad-code </pre>
|
||
<p>Questo crea una copia locale della versione più recente del codice sorgente di FreeCAD in una nuova directory chiamata "free-cad-code".
|
||
</p>
|
||
<h3><span class="mw-headline" id="Github">Github</span></h3>
|
||
<p>Il repository ufficiale di FreeCAD è su Github:
|
||
<a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD">github.com/FreeCAD/FreeCAD</a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Pacchetto_sorgente">Pacchetto sorgente</span></h3>
|
||
<p>In alternativa è possibile scaricare il pacchetto sorgente, ma potrebbe già essere abbastanza vecchio, e quindi è sempre meglio ottenere i sorgenti più recenti tramite git o github.
|
||
</p>
|
||
<ul><li> Pacchetto sorgente ufficiale di FreeCAD (distribution-independent): <a rel="nofollow" class="external text" href="https://github.com/FreeCAD/FreeCAD/archive/0.17_pre.zip">FreeCAD-0.17_pre.zip</a>.</li></ul>
|
||
<h2><span class="mw-headline" id="Ottenere_le_dipendenze">Ottenere le dipendenze</span></h2>
|
||
<p>Per compilare FreeCAD sotto Linux è necessario installare prima tutte le librerie indicate nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Third_Party_Libraries/it" title="Third Party Libraries/it">Librerie di terze parti</a>. Notare che i nomi e la disponibilità delle librerie dipendono dalla vostra distribuzione. Notare che se non si utilizza la versione più recente della propria distribuzione, alcuni dei pacchetti indicati in seguito potrebbero mancare dal vostro repository. In questo caso, cercare nel paragrafo sottostante dedicato alle <a href="#Distribuzioni_vecchie_e_non_convenzionali">Distribuzioni vecchie e non convenzionali</a>.
|
||
</p><p>Passa al paragrafo <a href="#Compilare_FreeCAD">Compilare FreeCAD</a>
|
||
</p>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Debian_e_Ubuntu">Debian e Ubuntu</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Su sistemi Debian-based (Debian, Ubuntu, Mint, etc...) è abbastanza facile ottenere tutte le dipendenze che devono essere installate. La maggior parte delle librerie sono disponibili tramite apt-get o il gestore dei pacchetti synaptic.
|
||
</p>
|
||
<ul><li>build-essential</li>
|
||
<li>cmake</li>
|
||
<li>python</li>
|
||
<li>python-matplotlib</li>
|
||
<li>libtool</li></ul>
|
||
<p>either:
|
||
</p>
|
||
<dl><dd><ul><li>libcoin60-dev (Debian Wheezy, Wheezy-backports, Ubuntu 13.04 and before)</li></ul></dd></dl>
|
||
<p>or:
|
||
</p>
|
||
<dl><dd><ul><li>libcoin80-dev (Debian unstable(Jesse), testing, Ubuntu 13.10 and forward)</li></ul></dd></dl>
|
||
<ul><li>libsoqt4-dev</li>
|
||
<li>libxerces-c-dev</li>
|
||
<li>libboost-dev</li>
|
||
<li>libboost-filesystem-dev</li>
|
||
<li>libboost-regex-dev</li>
|
||
<li>libboost-program-options-dev </li>
|
||
<li>libboost-signals-dev</li>
|
||
<li>libboost-thread-dev</li>
|
||
<li>libboost-python-dev</li>
|
||
<li>libqt4-dev</li>
|
||
<li>libqt4-opengl-dev</li>
|
||
<li>qt4-dev-tools</li>
|
||
<li>python-dev</li>
|
||
<li>python-pyside</li>
|
||
<li>pyside-tools</li></ul>
|
||
<p>either:
|
||
</p>
|
||
<dl><dd><ul><li>libopencascade-dev (official opencascade version)</li></ul></dd></dl>
|
||
<p>or:
|
||
</p>
|
||
<dl><dd><ul><li>liboce*-dev (opencascade community edition)</li>
|
||
<li>oce-draw</li></ul></dd></dl>
|
||
<ul><li>libeigen3-dev</li>
|
||
<li>libqtwebkit-dev</li>
|
||
<li>libshiboken-dev</li>
|
||
<li>libpyside-dev</li>
|
||
<li>libode-dev</li>
|
||
<li>swig</li>
|
||
<li>libzipios++-dev</li>
|
||
<li>libfreetype6</li>
|
||
<li>libfreetype6-dev</li></ul>
|
||
<p><a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=4&t=5096#p40018">Istruzioni supplementari</a> per libcoin80-dev Debian wheezy-backports, unstable, testing, Ubuntu 13.10 e successive
|
||
</p><p>Notare che liboce*-dev include le seguenti librerie:
|
||
</p>
|
||
<ul><li>liboce-foundation-dev </li>
|
||
<li>liboce-modeling-dev </li>
|
||
<li>liboce-ocaf-dev </li>
|
||
<li>liboce-visualization-dev </li>
|
||
<li>liboce-ocaf-lite-dev </li></ul>
|
||
<p>Potrebbe essere necessario installare singolarmente questi pacchetti tramite il loro nome.
|
||
</p><p>Opzionalmente è anche possibile installare questi pacchetti extra:
|
||
</p>
|
||
<ul><li>libsimage-dev (to make Coin to support additional image file formats)</li>
|
||
<li>checkinstall (to register your installed files into your system's package manager, so yo can easily uninstall later)</li>
|
||
<li>python-pivy (needed for the 2D Drafting module)</li>
|
||
<li>python-qt4 (needed for the 2D Drafting module)</li>
|
||
<li>doxygen and libcoin60-doc (if you intend to generate source code documentation)</li>
|
||
<li>libspnav-dev (for 3Dconnexion devices support like the Space Navigator or Space Pilot)</li></ul>
|
||
<p><br />
|
||
</p>
|
||
<pre>sudo apt install build-essential cmake python python-matplotlib libtool libcoin80-dev libsoqt4-dev libxerces-c-dev libboost-dev libboost-filesystem-dev libboost-regex-dev libboost-program-options-dev libboost-signals-dev libboost-thread-dev libboost-python-dev libqt4-dev libqt4-opengl-dev qt4-dev-tools python-dev python-pyside pyside-tools libeigen3-dev libqtwebkit-dev libshiboken-dev libpyside-dev libode-dev swig libzipios++-dev libfreetype6-dev liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-visualization-dev liboce-ocaf-lite-dev libsimage-dev checkinstall python-pivy python-qt4 doxygen libspnav-dev oce-draw liboce-foundation-dev liboce-modeling-dev liboce-ocaf-dev liboce-ocaf-lite-dev liboce-visualization-dev libmedc-dev libvtk6-dev libproj-dev </pre>
|
||
<p>Gli utenti di Ubuntu 16.04 vedano anche queste <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/viewtopic.php?f=4&t=16292">ulteriori instruzioni</a> .
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<div class="mw-translate-fuzzy">
|
||
<h3><span class="mw-headline" id="Fedora">Fedora</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Sono necessari i seguenti pacchetti:
|
||
</p>
|
||
<ul><li>gcc-c++ (or possibly another C++ compiler?)</li>
|
||
<li>cmake</li>
|
||
<li>doxygen</li>
|
||
<li>swig</li>
|
||
<li>gettext</li>
|
||
<li>dos2unix</li>
|
||
<li>desktop-file-utils</li>
|
||
<li>libXmu-devel</li>
|
||
<li>freeimage-devel</li>
|
||
<li>mesa-libGLU-devel</li>
|
||
<li>OCE-devel</li>
|
||
<li>python</li>
|
||
<li>python-devel</li>
|
||
<li>python-pyside-devel</li>
|
||
<li>pyside-tools</li>
|
||
<li>boost-devel</li>
|
||
<li>tbb-devel</li>
|
||
<li>eigen3-devel</li>
|
||
<li>qt-devel</li>
|
||
<li>qt-webkit-devel</li>
|
||
<li>ode-devel</li>
|
||
<li>xerces-c</li>
|
||
<li>xerces-c-devel</li>
|
||
<li>opencv-devel</li>
|
||
<li>smesh-devel</li>
|
||
<li>coin3-devel (if coin2 is the latest available for your version of Fedora, use packages from <a rel="nofollow" class="external free" href="http://www.zultron.com/rpm-repo/">http://www.zultron.com/rpm-repo/</a> )</li>
|
||
<li>soqt-devel</li>
|
||
<li>freetype</li>
|
||
<li>freetype-devel</li></ul>
|
||
<p>E opzionalmente:
|
||
</p>
|
||
<ul><li>libspnav-devel (for 3Dconnexion devices support like the Space Navigator or Space Pilot)</li>
|
||
<li>pivy ( <a rel="nofollow" class="external free" href="https://bugzilla.redhat.com/show_bug.cgi?id=458975">https://bugzilla.redhat.com/show_bug.cgi?id=458975</a> Pivy non è obbligatorio, ma è necessario per il modulo Draft )</li></ul>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
</div>
|
||
<div class="mw-collapsible-content">
|
||
<p>You need the following packages :
|
||
</p>
|
||
<ul><li>gcc-c++ (or possibly another C++ compiler?)</li>
|
||
<li>cmake</li>
|
||
<li>doxygen</li>
|
||
<li>swig</li>
|
||
<li>gettext</li>
|
||
<li>dos2unix</li>
|
||
<li>desktop-file-utils</li>
|
||
<li>libXmu-devel</li>
|
||
<li>freeimage-devel</li>
|
||
<li>mesa-libGLU-devel</li>
|
||
<li>OCE-devel</li>
|
||
<li>python</li>
|
||
<li>python-devel</li>
|
||
<li>python-pyside-devel</li>
|
||
<li>pyside-tools</li>
|
||
<li>boost-devel</li>
|
||
<li>tbb-devel</li>
|
||
<li>eigen3-devel</li>
|
||
<li>qt-devel</li>
|
||
<li>qt-webkit-devel</li>
|
||
<li>ode-devel</li>
|
||
<li>xerces-c</li>
|
||
<li>xerces-c-devel</li>
|
||
<li>opencv-devel</li>
|
||
<li>smesh-devel</li>
|
||
<li>coin3-devel</li></ul>
|
||
<p>(if coin2 is the latest available for your version of Fedora, use packages from <a rel="nofollow" class="external free" href="http://www.zultron.com/rpm-repo/">http://www.zultron.com/rpm-repo/</a>)
|
||
</p>
|
||
<ul><li>soqt-devel</li>
|
||
<li>freetype</li>
|
||
<li>freetype-devel</li></ul>
|
||
<p>And optionally :
|
||
</p>
|
||
<ul><li>libspnav-devel (for 3Dconnexion devices support like the Space Navigator or Space Pilot)</li>
|
||
<li>pivy ( <a rel="nofollow" class="external free" href="https://bugzilla.redhat.com/show_bug.cgi?id=458975">https://bugzilla.redhat.com/show_bug.cgi?id=458975</a> Pivy is not mandatory but needed for the Draft module)</li></ul>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Gentoo_2">Gentoo</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Il modo più semplice per controllare quali pacchetti sono necessari per compilare FreeCAD è quello di verificare tramite Portage:
|
||
</p><p><tt>emerge -pv freecad</tt>
|
||
</p><p>Questo dovrebbe dare una bella lista di pacchetti extra che è necessario installare sul proprio sistema.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="OpenSUSE_2">OpenSUSE</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Sono necessari i seguenti pacchetti:
|
||
</p>
|
||
<ul><li>gcc</li>
|
||
<li>cmake</li>
|
||
<li>OpenCASCADE-devel</li>
|
||
<li>libXerces-c-devel</li>
|
||
<li>python-devel</li>
|
||
<li>libqt4-devel</li>
|
||
<li>libshiboken-devel </li>
|
||
<li>python-pyside-devel</li>
|
||
<li>python-pyside-tools</li>
|
||
<li>Coin-devel</li>
|
||
<li>SoQt-devel</li>
|
||
<li>boost-devel</li>
|
||
<li>libode-devel</li>
|
||
<li>libQtWebKit-devel</li>
|
||
<li>libeigen3-devel</li>
|
||
<li>gcc-fortran</li>
|
||
<li>freetype2</li>
|
||
<li>freetype2-devel</li>
|
||
<li><a rel="nofollow" class="external text" href="http://software.opensuse.org/search?q=eigen3&baseproject=openSUSE%3A12.1&lang=en&exclude_debug=true">Eigen3</a></li>
|
||
<li><a rel="nofollow" class="external text" href="http://software.opensuse.org/search?q=swig&baseproject=openSUSE%3A12.1&lang=en&exclude_debug=true">swig</a></li></ul>
|
||
<p>Per FreeCAD 0.14 stable e 0.15 unstable, se le librerie Eigen3 e swig non sono disponibili nei repositori standard, è possibile ottenerle e installarle da qui:
|
||
</p>
|
||
<ul><li><a rel="nofollow" class="external text" href="http://software.opensuse.org/search?q=eigen3&baseproject=openSUSE%3A12.1&lang=en&exclude_debug=true">Eigen3</a></li>
|
||
<li><a rel="nofollow" class="external text" href="http://software.opensuse.org/search?q=swig&baseproject=openSUSE%3A12.1&lang=en&exclude_debug=true">swig</a></li></ul>
|
||
<p>Notare inoltre che la libreria Eigen3 da Factory Education ha causato talvolta dei problemi, quindi utilizzare quella dei repo Extra di KDE 4.8
|
||
</p><p>Starting with 0.17pre Opensuse 13.2 is too old to build due to too old boost.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Arch_Linux">Arch Linux</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>You will need the following libraries from the official repositories:
|
||
</p>
|
||
<ul><li>boost-libs</li>
|
||
<li>curl</li>
|
||
<li>hicolor-icon-theme</li>
|
||
<li>libspnav</li>
|
||
<li>opencascade</li>
|
||
<li>python2-pivy</li>
|
||
<li>python2-matplotlib</li>
|
||
<li>python2-pyside</li>
|
||
<li>python2-shiboken</li>
|
||
<li>qtwebkit</li>
|
||
<li>shared-mime-info</li>
|
||
<li>xerces-c</li>
|
||
<li>boost</li>
|
||
<li>cmake</li>
|
||
<li>coin</li>
|
||
<li>desktop-file-utils</li>
|
||
<li>eigen</li>
|
||
<li>gcc-fortran</li>
|
||
<li>swig</li></ul>
|
||
<p>Also, make sure to check the AUR for any missing packages that are not on the repositories, currently:
|
||
</p>
|
||
<ul><li>python2-pyside-tools</li>
|
||
<li>med (Modelisation et Echanges de Donnees)</li></ul>
|
||
<pre>sudo pacman -S boost-libs curl hicolor-icon-theme libspnav opencascade python2-pivy python2-matplotlib python2-pyside python2-shiboken qtwebkit shared-mime-info xerces-c boost cmake coin desktop-file-utils eigen gcc-fortran med python2-pyside-tools </pre>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Older_and_non-conventional_distributions">Older and non-conventional distributions</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>On other distributions, we have very few feedback from users, so it might be harder to find the required packages. Try first locating the required libraries mentioned in <a href="Third_Party_Libraries.html" title="Third Party Libraries">Third Party Libraries</a>. Beware that some of them might have a slightly different package name in your distribution (such as name, libname, name-dev, name-devel, etc...).
|
||
</p><p>You also need the <a href="http://en.wikipedia.org/wiki/GNU_Compiler_Collection" class="extiw" title="wikipedia:GNU Compiler Collection">GNU gcc compiler</a> version equal or above 3.0.0. g++ is also needed because FreeCAD is completely written in C++. During the compilation some Python scripts get executed. So the Python interpreter has to work properly. To avoid any linker problems during the build process it is also a good idea to have the library paths either in your <i>LD_LIBRARY_PATH</i> variable or in your <i>ld.so.conf</i> file. This is normally already the case in recent distributions.
|
||
</p><p>For more details have also a look to <i>README.Linux</i> in your sources.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
<h4><span class="mw-headline" id="Pivy">Pivy</span></h4>
|
||
<p>Pivy is not needed to build FreeCAD or to run it, but it is needed for the 2D Drafting module to work. If you are not going to use that module, you won't need pivy. By November 2015 the obsolete version of Pivy included with FreeCAD source code will no longer compile on many systems, due to its age. If you cannot find Pivy in your distribution's packages repository ort elsewhere, you can compile pivy yourself:
|
||
</p><p><a href="/wiki/Extra_python_modules#Pivy" title="Extra python modules">Pivy compilation instructions</a>
|
||
</p>
|
||
<h2><span class="mw-headline" id="Compilare_FreeCAD">Compilare FreeCAD</span></h2>
|
||
<h3><span class="mw-headline" id="Usando_cMake">Usando cMake</span></h3>
|
||
<p>cMake è il sistema di build più recente, che ha il grande vantaggio di essere comune a differenti sistemi (Linux, Windows, MacOSX, etc). Atualmente FreeCAD usa il sistema cMake come suo principale sistema. Di solito la compilazione con cMake è molto semplice e avviene in 2 fasi. Nella prima fase, cMake verifica se tutti i programmi e le librerie necessarie sono presenti nel sistema e imposta tutto ciò che è necessario per la successiva compilazione. In seguito sono proposte e descritte un paio di alternative, ma FreeCAD viene fornito con valide impostazioni predefinite. La seconda fase è la compilazione stessa, che produce l'eseguibile di FreeCAD.
|
||
Modificare le eventuali opzioni di cmake e renderle diverse dai loro valori di default, è molto più facile con cmake-gui o con altre applicazioni grafiche cmake che con cmake sulla riga di comando, dato che le applicazioni grafiche permettono un controllo interattivo.
|
||
</p><p>Poiché FreeCAD è un'applicazione pesante, la compilazione può richiedere un po' di tempo (circa 10 minuti su una macchina veloce, 30 minuti, o più, su una lenta)
|
||
</p>
|
||
<h4><span class="mw-headline" id="Costruzione_In-source">Costruzione In-source</span></h4>
|
||
<p>Se avete dei dubbi, a causa di suoi limiti, non fate una costruzione interna al sorgente, ma create una costruzione out-of-source, come spiegato nella sezione successiva. FreeCAD può essere costruito nel sorgente (in-source), il che significa che tutti i file risultanti dalla compilazione si trovano nella stessa cartella del codice sorgente. Questo va bene per "dare un'occhiata" a FreeCAD, e permette di rimuoverlo facilmente eliminando semplicemente la sua cartella. Quando si prevede di compilarlo spesso, si consiglia invece di fare una costruzione esterna al sorgente (out-of-source) perchè offre maggiori vantaggi. I seguenti comandi compilano FreeCAD:
|
||
</p>
|
||
<pre>$ cd freecad (the folder where you cloned the freecad source) </pre>
|
||
<p>If you want to use your system's copy of Pivy, which you most commonly will, then if not on Linux, set the compiler flag to use the correct pivy (via FREECAD_USE_EXTERNAL_PIVY=1). Using external Pivy became the default for Linux, during development of FreeCAD 0.16, so it does not need to be manually set when compiling this version onwards, on Linux. Also, set the build type to Debug if you want a debug build or Release if not. A Release build will run much faster than a Debug build. Sketcher becomes very slow with complex sketches if your FreeCAD is a Debug build. (NOTE: the space and "." after the cmake flags are CRITICAL!):
|
||
</p>
|
||
<h5><span class="mw-headline" id="Per_una_Degug_build">Per una Degug build</span></h5>
|
||
<pre>$ cmake -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Debug .
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
$ make </pre>
|
||
<h5><span class="mw-headline" id="Oppure_per_una_Release_build">Oppure per una Release build</span></h5>
|
||
<pre>$ cmake -DFREECAD_USE_EXTERNAL_PIVY=1 -DCMAKE_BUILD_TYPE=Release .
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
$ make </pre>
|
||
<p>L'eseguibile di FreeCAD risiede quindi nella cartella "bin", e può essere lanciato con:
|
||
</p>
|
||
<pre>$ ./bin/FreeCAD </pre>
|
||
<h4><span class="mw-headline" id="How_to_repair_your_source_code_directory_after_accidentally_running_an_in-source_build.">How to repair your source code directory after accidentally running an in-source build.</span></h4>
|
||
<p>This is a method, using Git, to repair your source code directory after accidentally running an in-source build.
|
||
</p>
|
||
<pre>1) delete everything in your source base directory EXCEPT the hidden .git folder
|
||
2) In terminal 'git reset --hard HEAD'
|
||
//any remnants of an 'in source' build will be gone.
|
||
3) delete everything from your 'out of source' build directory and start over again with cmake and a full new clean build. </pre>
|
||
<h4><span class="mw-headline" id="Costruzione_Out-of-source">Costruzione Out-of-source</span></h4>
|
||
<p>Se intendete seguire la rapida evoluzione di FreeCAD, convenie costruire in una cartella separata (Out-of-source build). Ogni volta che il codice sorgente viene aggiornato, cMake riconosce intelligentemente i file che sono stati modificati e ricompila solo ciò che è necessario. La costruzione Out-of-source è particolarmente utile quando si utilizza il sistema Git, perché si può facilmente provare altri rami senza confondere il sistema di compilazione. Per costruire out-of-source, è sufficiente creare una cartella di generazione, distinta dalla cartella di origine FreeCAD, e, dalla cartella di compilazione, indirizzare CMake (o se si usa cmake-gui sostituire nel codice seguente "cmake" con "cmake-gui") verso la cartella di origine :
|
||
</p>
|
||
<pre>mkdir freecad-build
|
||
cd freecad-build
|
||
cmake ../freecad (or whatever the path is to your FreeCAD source folder)
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
make </pre>
|
||
<p>L'eseguibile FreeCAD risiede quindi nella directory "bin" (all'interno della propria directory freecad-build).
|
||
</p>
|
||
<h4><span class="mw-headline" id="Opzioni_di_configurazione">Opzioni di configurazione</span></h4>
|
||
<p>Ci sono diversi moduli sperimentali o non finiti che devono essere costruiti, se si desidera lavorare su di essi. Per fare ciò, è necessario impostare le opzioni appropriate per la fase di configurazione. Fatelo dalla riga di comando, passando le opzioni -D <var>:<type>=<value> per cMake oppure utilizzando una delle interfaccie grafiche disponibili (gui-frontend) (ad es. i pacchetti cmake-qt-gui oppure cmake-curses-gui per Debian). Modificare le eventuali opzioni di cmake e renderle diverse dai loro valori di default, è molto più facile con cmake-gui o con altre applicazioni grafiche cmake che con cmake sulla riga di comando, dato che le applicazioni grafiche permettono un controllo interattivo.
|
||
</p><p>A titolo di esempio, per configurare FreeCAD con la costruzione del modulo Assembly, basta selezionare la casella in un'applicazione CMake gui (ad esempio cmake-gui) o nella riga di comando digitare l'istruzione:
|
||
</p>
|
||
<pre>cmake -D FREECAD_BUILD_ASSEMBLY:BOOL=ON ''path-to-freecad-root'' </pre>
|
||
<p>Le opzioni possibili sono elencate nel file CmakeLists.txt della radice FreeCAD.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Il_plugin_Qt_designer">Il plugin Qt designer</span></h4>
|
||
<p>Se si desidera sviluppare del materiale Qt per FreeCAD, è necessario il plugin Qt Designer, che fornisce tutti i widget personalizzati di FreeCAD. Andare in
|
||
</p>
|
||
<pre>freecad/src/Tools/plugins/widget </pre>
|
||
<p>Finora non forniamo un makefile -- ma chiamando
|
||
</p>
|
||
<pre>qmake plugin.pro </pre>
|
||
<p>lo creiamo. Una volta fatto, chiamando
|
||
</p>
|
||
<pre>make </pre>
|
||
<p>si crea la libreria libFreeCAD_widgets.so. Per rendere nota questa libreria a Qt Designer è necessario copiare il file in $QTDIR/plugin/designer
|
||
</p>
|
||
<h4><span class="mw-headline" id="Doxygen">Doxygen</span></h4>
|
||
<p>If you feel bold enough to dive in the code, you could take advantage to build and consult Doxygen generated FreeCAD's <a href="https://www.freecadweb.org/wiki/index.php?title=Source_documentation" title="Source documentation">Source documentation</a>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Making_a_debian_package">Making a debian package</span></h3>
|
||
<p>Se prevedete di costruire un pacchetto Debian indipendente dai sorgenti è necessario installare prima i seguenti pacchetti:
|
||
</p>
|
||
<pre>dh-make
|
||
devscripts
|
||
|
||
#optional, used for checking if packages are standard-compliant
|
||
lintian </pre>
|
||
<p>Per costruire un pacchetto, aprire una console, andare nella directory di FreeCAD e chiamare
|
||
</p>
|
||
<pre>debuild </pre>
|
||
<p>Quando il pacchetto è costruito, è possibile utilizzare lintian per verificare se il pacchetto contiene errori
|
||
</p>
|
||
<pre>#replace by the name of the package you just created
|
||
lintian your-fresh-new-freecad-package.deb </pre>
|
||
<h2><span class="mw-headline" id="Risoluzione_dei_problemi">Risoluzione dei problemi</span></h2>
|
||
<h3><span class="mw-headline" id="Note_for_64bit_systems">Note for 64bit systems</span></h3>
|
||
<p>When building FreeCAD for 64-bit there is a known issue with the OpenCASCADE 64-bit package. To get FreeCAD running properly you might need to run the ./configure script with the additional define _OCC64 set:
|
||
</p>
|
||
<pre>./configure CXXFLAGS="-D_OCC64" </pre>
|
||
<p>For Debian based systems this workaround is not needed when using the prebuilt package because there the OpenCASCADE package is built to set internally this define. Now you just need to compile FreeCAD the same way as described above.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Script_di_build_automatico">Script di build automatico</span></h2>
|
||
<p>Ecco tutto quello che vi serve per una compilazione completa di FreeCAD. Si tratta di uno script di approccio
|
||
e funziona su una distro di recente installazione. I comandi richiedono la password di root
|
||
(per l'installazione di pacchetti) e talvolta di riconoscere un'impronta digitale per
|
||
il server di un repository esterno o un repository https-subversion. Questi script dovrebbero
|
||
funzionare su versioni a 32 e 64 bit. Essi sono scritti per diverse versioni, e dovrebbero essere eseguibili anche su versioni successive, con o senza grandi cambiamenti.
|
||
</p><p>Se disponete di uno script per la vostra distribuzione preferita, siete pregati di inviarlo! Noi
|
||
lo incorporeremo in questo articolo.
|
||
</p>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Ubuntu">Ubuntu</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>These scripts provide a reliable way to install the correct set of dependencies required to build and run FreeCAD on Ubuntu. They make use of the FreeCAD Ubuntu PPA repositories, and should work on any version of Ubuntu targeted by the PPA. The <a rel="nofollow" class="external text" href="https://launchpad.net/~freecad-maintainers/+archive/ubuntu/freecad-daily">'daily' PPA</a> targets recent versions of Ubuntu, and the <a rel="nofollow" class="external text" href="https://launchpad.net/~freecad-maintainers/+archive/ubuntu/freecad-stable">'stable' PPA</a> targets all officially supported versions of Ubuntu.
|
||
</p><p>This script installs dependencies for the daily development snapshot of FreeCAD.
|
||
</p>
|
||
<pre>#!/bin/sh
|
||
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-daily && sudo apt-get update
|
||
# Install the dependencies needed to build FreeCAD
|
||
sudo apt-get build-dep freecad-daily
|
||
# Install the dependencies needed to run FreeCAD (and a build of FreeCAD itself)
|
||
sudo apt-get install freecad-daily </pre>
|
||
<p>This script installs dependencies for the latest stable release of FreeCAD.
|
||
(For Ubuntu 12.04, omit "--enable-source" from the add-apt-repository command.)
|
||
</p>
|
||
<pre>#!/bin/sh
|
||
sudo add-apt-repository --enable-source ppa:freecad-maintainers/freecad-stable && sudo apt-get update
|
||
# Install the dependencies needed to build FreeCAD
|
||
sudo apt-get build-dep freecad
|
||
# Install the dependencies needed to run FreeCAD (and a build of FreeCAD itself)
|
||
sudo apt-get install freecad </pre>
|
||
<p>(These scripts also install the PPA build of FreeCAD itself, as a side effect. You could then uninstall that while leaving the dependencies in place. However, leaving it installed will enable the package manager to keep the set of dependencies up to date, which is useful if you are following the development for a long time.)
|
||
</p><p>After installing the dependencies, please see the generic instructions for getting the source code, running CMake, and compiling. The following script is an example of one way to do this.
|
||
</p>
|
||
<pre>#!/bin/sh
|
||
|
||
# checkout the latest source
|
||
git clone https://github.com/FreeCAD/FreeCAD.git freecad
|
||
|
||
# go to source dir
|
||
cd freecad
|
||
|
||
# open cmake-gui window
|
||
cmake-gui .
|
||
|
||
# build configuration
|
||
cmake .
|
||
|
||
# build FreeCAD
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
make </pre>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="OpenSUSE_12.2">OpenSUSE 12.2</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>No external Repositories are needed to compile FreeCAD 0.13 with this release. However, there is an imcompatability with python3-devel which needs to be removed. FreeCAD can be compiled from GIT similar to in OpenSUSE 12.2
|
||
</p>
|
||
<pre># install needed packages for development
|
||
sudo zypper install gcc cmake OpenCASCADE-devel libXerces-c-devel \
|
||
python-devel libqt4-devel python-qt4 Coin-devel SoQt-devel boost-devel \
|
||
libode-devel libQtWebKit-devel libeigen3-devel gcc-fortran git swig
|
||
|
||
# create new dir, and go into it
|
||
mkdir FreeCAD-Compiled
|
||
cd FreeCAD-Compiled
|
||
|
||
# get the source
|
||
git clone https://github.com/FreeCAD/FreeCAD.git free-cad
|
||
|
||
# Now you will have subfolder in this location called free-cad. It contains the source
|
||
|
||
# make another dir for compilation, and go into it
|
||
mkdir FreeCAD-Build1
|
||
cd FreeCAD-Build1
|
||
|
||
# build configuration
|
||
cmake ../free-cad
|
||
|
||
# build FreeCAD
|
||
make
|
||
|
||
# test FreeCAD
|
||
cd bin
|
||
./FreeCAD -t 0 </pre>
|
||
<p>Since you are using git, next time you wish to compile you do not have to clone everything, just pull from git and compile once more
|
||
</p>
|
||
<pre># go into free-cad dir created earlier
|
||
cd free-cad
|
||
|
||
# pull
|
||
git pull
|
||
|
||
# get back to previous dir
|
||
cd ..
|
||
|
||
# Now repeat last few steps from before.
|
||
|
||
# make another dir for compilation, and go into it
|
||
mkdir FreeCAD-Build2
|
||
cd FreeCAD-Build2
|
||
|
||
# build configuration
|
||
cmake ../free-cad
|
||
|
||
# build FreeCAD
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
make
|
||
|
||
# test FreeCAD
|
||
cd bin
|
||
./FreeCAD -t 0 </pre>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Debian_Squeeze">Debian Squeeze</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<pre># get the needed tools and libs
|
||
sudo apt-get install build-essential python libcoin60-dev libsoqt4-dev \
|
||
libxerces-c2-dev libboost-dev libboost-date-time-dev libboost-filesystem-dev \
|
||
libboost-graph-dev libboost-iostreams-dev libboost-program-options-dev \
|
||
libboost-serialization-dev libboost-signals-dev libboost-regex-dev \
|
||
libqt4-dev qt4-dev-tools python2.5-dev \
|
||
libsimage-dev libopencascade-dev \
|
||
libsoqt4-dev libode-dev subversion cmake libeigen2-dev python-pivy \
|
||
libtool autotools-dev automake gfortran
|
||
|
||
# checkout the latest source
|
||
git clone https://github.com/FreeCAD/FreeCAD.git freecad
|
||
|
||
# go to source dir
|
||
cd freecad
|
||
|
||
# build configuration
|
||
cmake .
|
||
|
||
# build FreeCAD
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
make
|
||
|
||
# test FreeCAD
|
||
cd bin
|
||
./FreeCAD -t 0 </pre>
|
||
</div>
|
||
</div>
|
||
<div class="mw-collapsible mw-collapsed toccolours">
|
||
<h3><span class="mw-headline" id="Fedora_22.2F23.2F24">Fedora 22/23/24</span></h3>
|
||
<div class="mw-collapsible-content">
|
||
<p>Posted by user [<a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3666">PrzemoF</a>] in the forum.
|
||
</p>
|
||
<pre>#!/bin/bash
|
||
|
||
#ARCH=x86_64
|
||
#ARCH=i686
|
||
ARCH=$(arch)
|
||
|
||
MAIN_DIR=FreeCAD
|
||
BUILD_DIR=build
|
||
|
||
#FEDORA_VERSION=22
|
||
FEDORA_VERSION=23
|
||
#FEDORA_VERSION=24
|
||
|
||
echo "Installing packages required to build FreeCAD"
|
||
sudo dnf -y install gcc cmake gcc-c++ boost-devel zlib-devel swig eigen3 qt-devel \
|
||
shiboken shiboken-devel pyside-tools python-pyside python-pyside-devel xerces-c \
|
||
xerces-c-devel OCE-devel smesh graphviz python-pivy python-matplotlib tbb-devel \
|
||
freeimage-devel Coin3 Coin3-devel med-devel vtk-devel
|
||
|
||
cd ~
|
||
|
||
mkdir $MAIN_DIR || { echo "~/$MAIN_DIR already exist. Quitting.."; exit; }
|
||
|
||
cd $MAIN_DIR
|
||
|
||
git clone https://github.com/FreeCAD/FreeCAD.git
|
||
|
||
mkdir $BUILD_DIR || { echo "~/$BUILD_DIR already exist. Quitting.."; exit; }
|
||
|
||
cd $BUILD_DIR
|
||
|
||
cmake ../FreeCAD
|
||
|
||
# Note: to speed up build use all CPU cores: make -j$(nproc)
|
||
make </pre>
|
||
</div>
|
||
</div>
|
||
<h2><span class="mw-headline" id="Aggiornare_il_codice_sorgente">Aggiornare il codice sorgente</span></h2>
|
||
<p>Lo sviluppo di FreeCAD è veloce, quasi ogni giorno ci sono correzioni di bug o nuove funzionalità. Il sistema cmake consente di aggiornare il codice sorgente in modo intelligente e di ricompilare solo ciò che è cambiato, con delle compilazioni successive molto veloci. Con git o subversion è molto semplice aggiornare il codice sorgente:
|
||
</p>
|
||
<pre>#Replace with the location where you cloned the source code the first time
|
||
cd freecad
|
||
#If you are using git
|
||
git pull </pre>
|
||
<p>Move into the appropriate build directory and run cmake again (as cmake updates the version number data for the Help menu, ...about FreeCAD), however you do not need to add the path to source code after "cmake", just a space and a dot:
|
||
</p>
|
||
<pre>#Replace with the location of the build directory
|
||
cd ../freecad-build
|
||
cmake .
|
||
# to use all cpu cores change to: make -j$(nproc)
|
||
make </pre>
|
||
<h2><span class="mw-headline" id="Link_4">Link</span></h2>
|
||
<p>Vedere anche <a href="/wiki/Compiling_(Speeding_up)/it" title="Compiling (Speeding up)/it">Velocizzare la compilazione</a> Come velocizzare la compilazione di FreeCAD
|
||
</p>
|
||
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>This page explains how to compile the latest FreeCAD source code on Mac OS X. It is meant as a starting point for developing on FreeCAD; if you instead want to try using the latest pre-release version of FreeCAD, downloads are available from our continuous integration system at <a rel="nofollow" class="external free" href="https://github.com/FreeCAD/FreeCAD/releases">https://github.com/FreeCAD/FreeCAD/releases</a> .
|
||
</p>
|
||
<h2><span class="mw-headline" id="Prerequisiti_2">Prerequisiti</span></h2>
|
||
<p>Prima di tutto, è necessario installare il seguente software.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Package_Manager">Package Manager</span></h3>
|
||
<p>For FreeCAD, we usually use <a rel="nofollow" class="external text" href="https://brew.sh/">Homebrew</a>, though MacPorts was used previously.
|
||
</p>
|
||
<h3><span class="mw-headline" id="CMake_2">CMake</span></h3>
|
||
<p>FreeCAD uses <a rel="nofollow" class="external text" href="http://www.cmake.org/">CMake</a> to build the source. CMake comes in two versions, command-line and GUI. Use whichever you prefer.
|
||
</p><p>The command-line version of CMake will be automatically installed by Homebrew in the prerequisites step, or the GUI version can be downloaded directly from <a rel="nofollow" class="external free" href="https://www.cmake.org/download">https://www.cmake.org/download</a> .
|
||
</p>
|
||
<h2><span class="mw-headline" id="Installing_the_Dependencies">Installing the Dependencies</span></h2>
|
||
<p>All of the needed libraries can be installed using Homebrew. We maintain a "tap" including a formula for FreeCAD, it can be used to get the relevant dependencies.
|
||
</p><p>We are currently transitioning FreeCAD from Qt 4 to Qt 5; the Homebrew formula will default to installing Qt5.6 unless --with-qt4 is specified along with --only-dependencies.
|
||
</p><p><i>Note that there is currently a bug where the dependencies aren't all installed on the first run of brew install... - the duplicate line below is intentional</i>
|
||
</p>
|
||
<pre>
|
||
brew tap homebrew/science
|
||
brew tap freecad/freecad
|
||
brew install --only-dependencies freecad
|
||
brew install --only-dependencies freecad
|
||
</pre>
|
||
<h2><span class="mw-headline" id="Getting_the_source">Getting the source</span></h2>
|
||
<p>In this guide, the source and build folders are created in <b>/Users/username/FreeCAD</b>, but you can of course use whatever folder you want.
|
||
</p>
|
||
<pre>
|
||
mkdir ~/FreeCAD
|
||
cd ~/FreeCAD
|
||
</pre>
|
||
<p>To get the FreeCAD source code, this command will create a "clone" of the FreeCAD git repository in to a new directory called FreeCAD-git:
|
||
</p>
|
||
<pre>
|
||
git clone https://github.com/FreeCAD/FreeCAD FreeCAD-git
|
||
</pre>
|
||
<h2><span class="mw-headline" id="Building_FreeCAD_2">Building FreeCAD</span></h2>
|
||
<p>Create a new folder for the build:
|
||
</p>
|
||
<pre>
|
||
mkdir ~/FreeCAD/build
|
||
</pre>
|
||
<p>Now you will need to run CMake to generate the build files. Several options will need to be given to CMake, which can be accomplished either with the CMake GUI application, or via the command line.
|
||
</p>
|
||
<h3><span class="mw-headline" id="CMake_Options">CMake Options</span></h3>
|
||
<table class="wikitable" style="text-align:left">
|
||
|
||
<tr>
|
||
<th> Name </th>
|
||
<th> Value </th>
|
||
<th> Notes
|
||
</th></tr>
|
||
<tr>
|
||
<td> BUILD_QT5 </td>
|
||
<td> 1 (checked) </td>
|
||
<td> Set 0 (unchecked) if building with Qt4.
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_USE_EXTERNAL_KDL </td>
|
||
<td> 1 (checked) </td>
|
||
<td>
|
||
</td></tr>
|
||
<tr>
|
||
<td> CMAKE_BUILD_TYPE </td>
|
||
<td> Debug </td>
|
||
<td> Can be Debug or Release. Debug is generally used for development
|
||
</td></tr>
|
||
<tr>
|
||
<td> BUILD_FEM_NETGEN </td>
|
||
<td> 1 (checked) </td>
|
||
<td>
|
||
</td></tr>
|
||
<tr>
|
||
<td> FREECAD_CREATE_MAC_APP </td>
|
||
<td> 1 (checked) </td>
|
||
<td> If you want to make a FreeCAD.app , this CMake option will cause "make install" to create a FreeCAD.app bundle in CMAKE_INSTALL_PREFIX .
|
||
</td></tr></table>
|
||
<h3><span class="mw-headline" id="CMake_GUI">CMake GUI</span></h3>
|
||
<p>Open the CMake app, and fill in the source and build folder fields. In this case, it would be <b>/Users/username/FreeCAD/FreeCAD-git</b> for the source, and <b>/Users/username/FreeCAD/build</b> for the build folder.
|
||
</p><p>Next, click the <b>Configure</b> button to populate the list of configuration options. This will display a dialog asking you to specify what generator to use. Leave it at the default <b>Unix Makefiles.</b> Configuring will fail the first time because there are some options that need to be changed. Note: You will need to check the <b>Advanced</b> checkbox to get all of the options.
|
||
</p><p>Set options from the table above, then click <b>Configure</b> again and then <b>Generate</b>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="CMake_command_line">CMake command line</span></h3>
|
||
<p>Open a terminal, cd in to the build directory that was created above. Run cmake with options from the table above, following the formula -D(Name)="(Value)", and the path to your FreeCAD source directory as the final argument.
|
||
</p>
|
||
<pre>
|
||
$cd ~/FreeCAD/build
|
||
$cmake -DFREECAD_USE_EXTERNAL_KDL="1" ...options continue... -DFREECAD_CREATE_MAC_APP ="1" ../FreeCAD-git
|
||
</pre>
|
||
<h3><span class="mw-headline" id="Make">Make</span></h3>
|
||
<p>Finally, from a terminal run <b>make</b> to compile FreeCAD.
|
||
</p>
|
||
<pre>
|
||
cd ~/FreeCAD/build
|
||
make –j3
|
||
</pre>
|
||
<p>The -j option specifies how many make processes to run at once. One plus the number of CPU cores is usually a good number to use. However, if compiling fails for some reason, it is useful to rerun make without the -j option, so that you can see exactly where the error occurred.
|
||
</p><p>See also <a href="/wiki/Compiling_(Speeding_up)" title="Compiling (Speeding up)">Compiling - Speeding up</a>.
|
||
</p><p>If make finishes without any errors, you can now launch FreeCAD, either from Terminal with <b>./bin/FreeCAD</b>, or by double clicking the executable in Finder.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Updating">Updating</span></h2>
|
||
<p>FreeCAD development happens fast; every day or so there are bug fixes or new features. To get the latest changes, use git to update the source directory (see <a href="Source_code_management.html" title="Source code management">Source code management</a>), then re-run the CMake and make steps above. It is not usually necessary to start with a clean build directory in this case, and subsequent compiles will generally go much faster than the first one.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Troubleshooting">Troubleshooting</span></h2>
|
||
<h3><span class="mw-headline" id="Fortran">Fortran</span></h3>
|
||
<p><i>"No CMAKE_Fortran_COMPILER could be found."</i> during configuration - Older versions of FreeCAD will need a fortran compiler installed. With Homebrew, do "brew install gcc" and try configuring again, giving cmake the path to Fortran ie -DCMAKE_Fortran_COMPILER=/opt/local/bin/gfortran-mp-4.9 . Or, preferably use a more current version of FreeCAD source!
|
||
</p>
|
||
<h3><span class="mw-headline" id="OpenGL">OpenGL</span></h3>
|
||
<p>See <a href="OpenGL_on_MacOS.html" title="OpenGL on MacOS">OpenGL on MacOS</a> for OpenGL issues when Qt 4.8 and earlier are used on MacOS.
|
||
</p>
|
||
<h3><span class="mw-headline" id="FreeType">FreeType</span></h3>
|
||
<p>When using CMake versions older than 3.1.0, it's necessary to set CMake variable FREETYPE_INCLUDE_DIR_freetype2 manually, eg /usr/local/include/freetype2
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Panoramica">Panoramica</span></h3>
|
||
<p>Si tratta di librerie che nel progetto di FreeCAD non vengono modificate. Sono utilizzate sostanzialmente senza modifiche come librerie a collegamento dinamico (*.so o *.dll). Se è necessario modificarle o è necessaria una classe wrapper (classe involucro), allora il codice della wrapper o il codice della libreria modificata deve essere spostato nel pacchetto base di FreeCAD.
|
||
</p><p>Per l'ambiente Windows, considerare la possibilità di usare <a href="#LibPack.2Fit">LibPack</a> invece di scaricare e installare tutto da soli.
|
||
</p><p>Le librerie utilizzate sono:
|
||
</p>
|
||
<h3><span class="mw-headline" id="Link_5">Link</span></h3>
|
||
<table class="wikitable" style="text-align:left">
|
||
<caption> Link table
|
||
</caption>
|
||
<tr>
|
||
<th> Lib name </th>
|
||
<th> Version needed </th>
|
||
<th> Link to get it
|
||
</th></tr>
|
||
<tr>
|
||
<td> Python </td>
|
||
<td> >= 2.5.x </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.python.org/">http://www.python.org/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> OpenCasCade </td>
|
||
<td> >= 5.2 </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.opencascade.org">http://www.opencascade.org</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Qt </td>
|
||
<td> >= 4.1.x </td>
|
||
<td> <a rel="nofollow" class="external free" href="https://www.qt.io/">https://www.qt.io/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Coin3D </td>
|
||
<td> >= 2.x </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.coin3d.org">http://www.coin3d.org</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> SoQt </td>
|
||
<td> >= 1.2 </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.coin3d.org">http://www.coin3d.org</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Xerces-C++ </td>
|
||
<td> >= 2.7.x < 3.0 </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://xml.apache.org/xerces-c/">http://xml.apache.org/xerces-c/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Zlib </td>
|
||
<td> >= 1.x.x </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.zlib.net/">http://www.zlib.net/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Boost </td>
|
||
<td> >= 1.33.x </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://www.boost.org/">http://www.boost.org/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Eigen3 </td>
|
||
<td> >= 3.0.1 </td>
|
||
<td> <a rel="nofollow" class="external free" href="https://www.freecadweb.org/wiki/index.php?title=Main_Page">http://eigen.tuxfamily.org/index.php?title=Main_Page</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Shiboken </td>
|
||
<td> >= 1.1.2 </td>
|
||
<td> <a rel="nofollow" class="external free" href="http://shiboken.readthedocs.org/en/latest/">http://shiboken.readthedocs.org/en/latest/</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> libarea </td>
|
||
<td> N/A </td>
|
||
<td> <a rel="nofollow" class="external free" href="https://github.com/danielfalck/libarea">https://github.com/danielfalck/libarea</a>
|
||
</td></tr>
|
||
</table>
|
||
<h3><span class="mw-headline" id="Dettagli">Dettagli</span></h3>
|
||
<h4><span class="mw-headline" id="Python">Python</span></h4>
|
||
<p><b>Versione:</b> 2.5 o superiore
|
||
</p><p><b>Licenza:</b> licenza Python 2.5
|
||
</p><p>È possibile utilizzare il codice sorgente o i binari forniti da <a rel="nofollow" class="external free" href="http://www.python.org/">http://www.python.org/</a> oppure, in alternativa, utilizzare ActiveState Python fornito da <a rel="nofollow" class="external free" href="http://www.activestate.com/">http://www.activestate.com/</a> anche se è un po' difficile ottenere le librerie di debug da ActiveState.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Descrizione">Descrizione</span></h5>
|
||
<p>Python è il linguaggio di script primario ed è usato in tutta l'applicazione, ad esempio, per:
|
||
</p>
|
||
<ul><li> Implementare script di test per verificare:
|
||
<ul><li> perdite di memoria,</li>
|
||
<li> accertare la presenza di funzionalità dopo delle modifiche,</li>
|
||
<li> eseguire controlli dopo la costruzione,</li>
|
||
<li> verificare la copertura dei test.</li></ul></li>
|
||
<li> Macro e registrazione di macro.</li>
|
||
<li> Implementare la logica di applicazione di pacchetti standard.</li>
|
||
<li> Implementazione di ambienti completi.</li>
|
||
<li> Caricamento dinamico dei pacchetti.</li>
|
||
<li> Implementazione delle regole per il disegno (Knowledge engineering) Ndt: Migliorare i processi di progettazione (Base di conoscenza di ingegneria). </li>
|
||
<li> Fare varie cose in Internet quali i gruppi di lavoro e PDM (Product Data Management - Gestore dei Dati di Prodotto).</li>
|
||
<li> E altro ancora...</li></ul>
|
||
<p>In particolare il "caricamento dinamico dei pacchetti" di Python viene utilizzato per caricare le funzionalità aggiuntive e gli ambienti di lavoro solo al momento in cui essi sono necessari per eseguire le operazioni in atto.
|
||
</p><p>Per maggiori informazioni su Python vedere: www.python.org .
|
||
</p><p>Qualcuno potrebbe chiedere: perché proprio Python? Ci sono diversi motivi. Finora, nella mia vita professionale ho usato diversi linguaggi di script:
|
||
</p>
|
||
<ul><li> Perl</li>
|
||
<li> Tcl/Tk</li>
|
||
<li> VB</li>
|
||
<li> Java</li></ul>
|
||
<p>Python è più OO (programmazione a oggetti; object-oriented: orientato a oggetti) di Perl e Tcl, il codice non è legato come in Perl e VB. Java innanzitutto non è un linguaggio di script ed è difficile (o impossibile) da incorporare. Python è ben documentato e facile da incorporare e da estendere. E' anche ben testato e ha un buon supporto nella comunità del software open source.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Crediti">Crediti</span></h5>
|
||
<p>Un ringraziamento a Guido van Rossum e alle molte persone che hanno permesso tale successo a Python!
|
||
</p>
|
||
<h4><span class="mw-headline" id="OpenCasCade">OpenCasCade</span></h4>
|
||
<p><b>Versione:</b> 5.2 o superiore
|
||
</p><p><b>Licenza:</b> v6.7.0 and later are governed by GNU Lesser General Public License (LGPL) version 2.1 with additional exception. <a rel="nofollow" class="external free" href="https://www.opencascade.com/content/licensing">https://www.opencascade.com/content/licensing</a> Earlier versions use a slightly different license: <a rel="nofollow" class="external free" href="https://www.opencascade.com/content/occt-public-license">https://www.opencascade.com/content/occt-public-license</a>
|
||
</p><p>OCC è un kernel di CAD completo. Originariamente, è stato sviluppato da Matra Datavision in Francia per le applicazioni Strim e Euclid Quantum e successivamente è stato reso Open Source. E' una enorme libreria e sopratutto rende possibile un programma di CAD gratuito, mettendo a disposizione alcuni pacchetti che sarebbero difficili o impossibili da realizzare in un progetto Open Source:
|
||
</p>
|
||
<ul><li> Un kernel di geometria che supporta STEP</li>
|
||
<li> Un modello topologico di dati e tutte le funzioni necessarie per lavorare con essi (taglio, fusione, estrusione, ecc ...)</li>
|
||
<li> Processori standard di importazione / esportazione come STEP, IGES, VRML</li>
|
||
<li> Visualizzatore 3D e 2D con il supporto per la selezione</li>
|
||
<li> Un documento e una struttura di dati del progetto con il supporto per salvare e ripristinare, collegamenti esterni dei documenti, il ricalcolo della cronologia del progetto (modellazione parametrica) e un sistema per caricare nuovi tipi di dati in modo dinamico come un pacchetto di estensione.</li></ul>
|
||
<p>Per saperne di più su OpenCascade visitare la pagina di OpenCascade o consultare <a rel="nofollow" class="external free" href="http://www.opencascade.org">http://www.opencascade.org</a>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Qt">Qt</span></h4>
|
||
<p><b>Versione:</b> 4.1.x o superiore
|
||
</p><p><b>Licenza:</b> GPL v2.0/v3.0 o Commerciale (dalla versione 4.5 anche LPGL v2.1)
|
||
</p><p>Non credo sia necessario dire molto su Qt. E' uno degli strumenti più utilizzati per i progetti di GUI (Interfacce grafiche) Open Source. Secondo me, i motivi principali per utilizzare Qt sono Qt Designer e la possibilità di caricare intere finestre di dialogo come risorse (XML) e di incorporarvi dei widget (componenti accessori) specializzati. In un'applicazione CAX l'interazione tra l'utente e le finestre di dialogo costituiscono sicuramente la maggior parte del codice e disporre un buon disegnatore di dialoghi è molto importante per poter estendere facilmente FreeCAD con nuove funzionalità. Ulteriori informazioni e una buona documentazione online si trova in <a rel="nofollow" class="external free" href="http://www.qtsoftware.com">http://www.qtsoftware.com</a>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Coin3D">Coin3D</span></h4>
|
||
<p><b>Versione:</b> 2.0 o superiore
|
||
</p><p><b>Licenza:</b> GPL v2.0 o Commerciale
|
||
</p><p>Coin è una libreria di grafica 3D di alto livello con una interfaccia di programmazione delle applicazioni (Application Programming Interface) in C++. Per "renderizzare" i grafici in tempo reale Coin utilizza la struttura di dati scenegraph (grafo di scena) adatta alla maggior parte delle applicazioni di visualizzazione scientifica e ingegneristica.
|
||
</p><p>Coin è portabile su un'ampia gamma di piattaforme: qualsiasi piattaforma UNIX / Linux / * BSD, tutti i sistemi operativi Microsoft Windows, e Mac OS X.
|
||
</p><p>Coin è costruito secondo lo standard del settore OpenGL delle librerie di modalità di renderizzazione immediata, e aggiunge astrazioni per primitive di livello superiore, fornisce interattività 3D, aumenta enormemente la praticità e la produttività del programmatore, e contiene molte funzioni di ottimizzazione complesse per il rendering veloce che sono trasparenti per il programmatore di applicazioni.
|
||
</p><p>Coin si basa sul SGI (sistema di gestione integrato) della API (interfaccia di programmazione di applicazioni) di Open Inventor. Open Inventor, per coloro che non hanno familiarità con essa, è da tempo diventata di fatto la libreria standard per la visualizzazione grafica 3D e per i software di simulazione visiva nella comunità scientifica e di ingegneria. È stata sperimentata per un periodo di oltre 10 anni, la sua maturità contribuisce al suo successo. È utilizzata quale blocco di costruzione principale per migliaia di applicazioni di ingegneria in larga scala in tutto il mondo.
|
||
</p><p>In FreeCAD useremo OpenInventor come visualizzatore 3D perché il visualizzatore OpenCascade (AIS e Graphics3D) ha forti limitazione e costituisce una strozzatura delle prestazioni, soprattutto quando si tratta di grandi renderizzazioni di ingegneria. Altre cose quali texture o renderizzazione volumetrica non sono proprio supportate, ecc ....
|
||
</p><p>Dalla versione 2.0 Coin utilizza un nuovo modello di licenza. Non è più LGPL. Usa GPL per l'open source e una licenza commerciale per le applicazioni closed source. Questo significa che per vendere un proprio lavoro basato su FreeCAD (moduli di estensione) è necessario acquistare una licenza Coin!
|
||
</p>
|
||
<h4><span class="mw-headline" id="SoQt">SoQt</span></h4>
|
||
<p><b>Versione:</b> 1.2.0 o superiore
|
||
</p><p><b>Licenza:</b> GPL v2.0 o Commerciale
|
||
</p><p>SoQt è il collante tra il toolkit dei componenti GUI Qt e Inventor. Purtroppo, non è più LGPL quindi dobbiamo rimuoverlo dal codice base di FreeCAD e collegarlo come una libreria. Ha lo stesso modello di licenza di Coin. Deve essere compilato con la propria versione di Qt.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Xerces-C.2B.2B">Xerces-C++</span></h4>
|
||
<p><b>Versione:</b> 2.7.0 o superiore
|
||
</p><p><b>Licenza:</b> Apache Software License Versión 2.0
|
||
</p><p>Xerces-C++ è un analizzatore (parser) di convalida XML scritto in un sottoinsieme portatile di C++. Xerces-C++ rende più facile fornire alla propria applicazione la capacità di leggere e scrivere dati XML. Per l'analisi, la generazione, la manipolazione, e la convalida di documenti XML è prevista una libreria condivisa.
|
||
</p><p>Xerces-C++ è fedele alla raccomandazione XML 1.0 e ai molti standard associati (vedere Caratteristiche sotto).
|
||
</p><p>L'analizzatore offre elevate prestazioni, modularità e scalabilità. Il codice sorgente, gli esempi e la documentazione API sono forniti con l'analizzatore stesso. Per permettere la portabilità, si è avuto cura di fare il minimo uso di modelli, non RTTI, e il minimo uso di #ifdefs.
|
||
</p><p>In FreeCAD il parser è utilizzato per salvare e ripristinare i parametri.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Zlib">Zlib</span></h4>
|
||
<p><b>Versione:</b> 1.x.x
|
||
</p><p><b>Licenza:</b> zlib
|
||
</p><p>zlib è una libreria di compressione usabile praticamente su qualsiasi hardware e sistema operativo senza perdita di dati. Di proposito generale, è progettata per essere libera, giuridicamente svincolata, cioè non coperta da alcun brevetto. Il formato dei dati zlib è di per sé portabile sulle varie piattaforme. A differenza del metodo di compressione LZW utilizzato nella compressione Unix e nel formato immagine GIF, il metodo di compressione attualmente utilizzato in zlib sostanzialmente non espande mai i dati. (LZW può raddoppiare o triplicare le dimensioni del file in casi estremi.) Inoltre, l'utilizzo di memoria di Zlib è indipendente dai dati di input e, se necessario, può essere ridotta, ma con una perdita di efficienza di compressione.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Boost">Boost</span></h4>
|
||
<p><b>Versione:</b> 1.33.x
|
||
</p><p><b>Licenza:</b> Boost Software License - Versione 1.0
|
||
</p><p>Le librerie Boost C++ sono un insieme di librerie open source sottoposte a revisione paritaria, librerie che estendono le funzionalità di C++. Le librerie sono rilasciate sotto Licenza Boost Software, progettate per consentire a Boost di essere utilizzato sia con progetti aperti che chiusi. Molti dei fondatori di Boost fanno parte della commissione C++ standard e diverse librerie di Boost sono state accettate per l'incorporazione nel Technical Report 1 di C++0x.
|
||
</p><p>Le librerie sono destinate a una vasta gamma di utenti e di campi di applicazioni C++. Si va dalle librerie di carattere generale come SmartPtr, alle applicazioni del sistema operativo come FileSystem, alle librerie rivolte principalmente a sviluppatori di altre librerie e a utenti avanzati di C++, come la libreria MPL.
|
||
</p><p>Al fine di garantire efficienza e flessibilità, Boost fà ampio uso di modelli. Boost è stata una fonte di intenso lavoro e di ricerca nella programmazione generica e nella meta-programmazione in C++.
|
||
</p><p>Vedere: <a rel="nofollow" class="external free" href="http://www.boost.org/">http://www.boost.org/</a> per i dettagli.
|
||
</p>
|
||
<h4><span class="mw-headline" id="libarea">libarea</span></h4>
|
||
<p><b>Versione:</b> N/A
|
||
</p><p><b>Licenza:</b> New BSD (BSD 3-Clause)
|
||
</p><p>Area è una parte di software creato da Dan Heeks per HeeksCNC. Viene impiegato come una libreria per la generazione di operazioni CAM correlate all'ambiente Path.
|
||
</p>
|
||
<h3><span class="mw-headline" id="LibPack">LibPack</span></h3>
|
||
<p>LibPack è un utile pacchetto che comprende tutte le librerie di cui sopra. Attualmente è disponibile per la piattaforma Windows sulla pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Download/it" title="Download/it">Download</a>! Lavorando sotto Linux non si ha bisogno di LibPack, si deve invece fare uso dei repository di pacchetti della propria distribuzione Linux.
|
||
</p>
|
||
<h4><span class="mw-headline" id="FreeCADLibs7.x_Changelog">FreeCADLibs7.x Changelog</span></h4>
|
||
<p>(lista dei cambiamenti)
|
||
</p>
|
||
<ul><li> Utilizza QT 4.5.x e Coin 3.1.x</li>
|
||
<li> Aggiunta la libreria di modelli Eigen per Robot</li>
|
||
<li> SMESH sperimentale </li></ul>
|
||
<p><br />
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Strumenti_2">Strumenti</span></h3>
|
||
<p>Per sviluppare seriamente qualsiasi software servono degli strumenti. Ecco un elenco di quelli che usiamo per sviluppare FreeCAD:
|
||
</p>
|
||
<h4><span class="mw-headline" id="Strumenti_indipendenti_dalla_piattaforma">Strumenti indipendenti dalla piattaforma</span></h4>
|
||
<h5><span class="mw-headline" id="Qt-Toolkit">Qt-Toolkit</span></h5>
|
||
<p>Qt-toolkit è uno strumento avanzato per il disegno di interfacce utente indipendente dalla piattaforma. Esso è contenuto in <a href="/wiki/Third_Party_Libraries/it#LibPack" title="Third Party Libraries/it">LibPack</a> di FreeCAD, ma può anche essere scaricato da <a rel="nofollow" class="external text" href="http://qt-project.org/downloads">Qt project</a>.
|
||
</p>
|
||
<h5><span class="mw-headline" id="InkScape">InkScape</span></h5>
|
||
<p>Grande programma di disegno vettoriale. Aderisce allo standard SVG e viene utilizzato per disegnare icone e immagini. E' scaricabile da <a rel="nofollow" class="external text" href="http://www.inkscape.org">www.inkscape.org</a>.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Doxygen_2">Doxygen</span></h5>
|
||
<p>Uno strumento molto buono e stabile per generare la documentazione del codice partendo da file .h e .cpp.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Gimp">Gimp</span></h5>
|
||
<p>Non c'è molto da dire su GNU Image Manipulation Program (Programma di manipolazione di immagini di GNU). Può anche gestire i file .xpm che sono un modo molto pratico per gestire le icone nei programmi di QT. XPM è sostanzialmente un codice C compilabile in un programma.
|
||
</p><p>GIMP è scaricabile da: <a rel="nofollow" class="external text" href="http://www.gimp.org/">www.gimp.org</a>
|
||
</p>
|
||
<h4><span class="mw-headline" id="Strumenti_in_Windows">Strumenti in Windows</span></h4>
|
||
<h5><span class="mw-headline" id="Visual_Studio_8_Express">Visual Studio 8 Express</span></h5>
|
||
<p>Anche se VC8 è per lo sviluppo in C++ non è migliorato molto da VisualStudio 6 (a mio parere è stato un bel passo indietro), è un sistema di sviluppo gratuito su Windows. Per le applicazioni native Win32 è necessario scaricare il PlatformSDK da M$.
|
||
</p><p>L'edizione Express è difficile da trovare. Si può provare a <a rel="nofollow" class="external text" href="http://msdn.microsoft.com/vstudio/express/visualc/default.aspx">questo link</a>
|
||
</p>
|
||
<h5><span class="mw-headline" id="CamStudio">CamStudio</span></h5>
|
||
<p>È uno strumento Open Source per registrare Screencast (Webcast) (registrazione digitale dell'output dello schermo). È un ottimo strumento per creare tutorial registrandoli. Non è così noioso come scrivere la documentazione.
|
||
</p><p>Vedere <a rel="nofollow" class="external text" href="http://camstudio.org/">camstudio.org</a> per avere maggiori informazioni.
|
||
</p><p><br />
|
||
</p>
|
||
<h5><span class="mw-headline" id="Tortoise_SVN">Tortoise SVN</span></h5>
|
||
<p>Questo è uno strumento molto importante. Rende l'utilizzo di Subversion (il nostro sistema di controllo della versione in sf.net) un vero piacere. Tramite l'integrazione con l'esploratore, è possibile gestire facilmente le revisioni, controllare le differenze, risolvere conflitti, creare rami, ecc.... La finestra di dialogo commit è un capolavoro. Fornisce una panoramica sui propri file modificati e permette di metterli in commit o meno. Questo rende facile raggruppare le modifiche apportate alle unità logiche e commentarle con una efficace etichetta di commit.
|
||
</p><p>Potete trovare TortoiseSVN in <a rel="nofollow" class="external text" href="http://tortoisesvn.tigris.org/">tortoisesvn.tigris.org</a>.
|
||
</p>
|
||
<h5><span class="mw-headline" id="StarUML">StarUML</span></h5>
|
||
<p>Un programma UML open source completo di funzionalità. Ha un sacco di funzioni importanti, tra cui la generazione inversa del codice sorgente C++ codice .... (Permette, ad esempio, di generare codice C++ in automatico partendo da grafici).
|
||
</p><p>Scaricarlo da: <a rel="nofollow" class="external text" href="http://staruml.sourceforge.net/en/">staruml.sourceforge.net</a>
|
||
</p><p><br />
|
||
</p>
|
||
<h4><span class="mw-headline" id="Strumenti_in_Linux">Strumenti in Linux</span></h4>
|
||
<p>Da Fare
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questa pagina descrive i diversi modi per avviare FreeCAD e le principali caratteristiche di configurazione.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Avviare_FreeCAD_dalla_riga_di_comando">Avviare FreeCAD dalla riga di comando</span></h2>
|
||
<p>FreeCAD può essere avviato normalmente, facendo doppio clic sulla sua icona sul desktop o selezionandolo dal menu di avvio, ma può anche essere avviato direttamente dalla riga di comando. Ciò consente di modificare alcune delle opzioni di avvio di default.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Le_opzioni_della_riga_di_comando">Le opzioni della riga di comando</span></h3>
|
||
<p>Le opzioni della riga di comando sono soggette a frequenti cambiamenti, quindi è bene verificare le opzioni correnti digitando:
|
||
</p>
|
||
<pre>FreeCAD --help
|
||
</pre>
|
||
<p>Nella risposta sono elencati i parametri utilizzabili:
|
||
</p>
|
||
<pre>Usage:
|
||
FreeCAD [options] File1 File2 .....
|
||
Allowed options:
|
||
|
||
Generic options:
|
||
-v [ --version ] print version string
|
||
-h [ --help ] print help message
|
||
-c [ --console ] start in console mode
|
||
--response-file arg can be specified with '@name', too
|
||
</pre>
|
||
<pre>Configuration:
|
||
-l [ --write-log ] arg write a log file to default location(Run FreeCAD --h to see default location)
|
||
--log-file arg Unlike to --write-log this allows to log to an arbitrary file
|
||
-u [ --user-cfg] arg User config file to load/save user settings
|
||
-s [ --system-cfg] arg System config file to load/save system settings
|
||
-t [ --run-test ] arg test level
|
||
-M [ --module-path ] arg additional module paths
|
||
-P [ --python-path ] arg additional python paths
|
||
</pre>
|
||
<p>EX: (Windows)
|
||
</p>
|
||
<pre>"C:\Program Files\FreeCAD 0.14\bin\FreeCAD.exe" -M "N:\FreeCAD\Mod\Draft" -M "N:\FreeCAD\Mod\Part" -M "N:\FreeCAD\Mod\Drawing" -u "N:\FreeCAD\Config\user.cfg" -s "N:\FreeCAD\Config\system.cfg" </pre>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Risposta_e_file_di_configurazione">Risposta e file di configurazione</span></h3>
|
||
<p>FreeCAD può leggere alcune di queste opzioni da un file di configurazione. Questo file deve essere nella directory bin e deve essere nominato FreeCAD.cfg. Tenere presente che le opzioni specificate nella riga di comando sovrascrivono il file di configurazione!
|
||
</p><p>Alcuni sistemi operativi hanno una riga di comando estremamente corta. Il modo più comune per aggirare questa limitazione è quello di usare il file di risposta. Un file di risposta è semplicemente un file di configurazione che utilizza la stessa sintassi della riga di comando. Se la riga di comando specifica un nome di file di risposta da utilizzare, esso viene caricato e analizzato in aggiunta alla linea di comando:
|
||
</p>
|
||
<pre>FreeCAD @ResponseFile.txt </pre>
|
||
<p>oppure:
|
||
</p>
|
||
<pre>FreeCAD --response-file=ResponseFile.txt </pre>
|
||
<h3><span class="mw-headline" id="Opzioni_nascoste">Opzioni nascoste</span></h3>
|
||
<p>Per l'utente esistono alcune opzioni non visibili. Queste opzioni sono, per esempio, i parametri di X-Window analizzati dal sistema Windows:
|
||
</p>
|
||
<ul><li> -display display, imposta la visualizzazione di X (il valore predefinito è $DISPLAY).</li>
|
||
<li> -geometry geometry, imposta la geometria client della prima finestra che viene visualizzata.</li>
|
||
<li> -fn oppure -font font, definisce il tipo carattere dell'applicazione. Il carattere deve essere specificato utilizzando una descrizione logica dei font di X.</li>
|
||
<li> -bg oppure -background color, imposta il colore di sfondo predefinito e una tavolozza per applicarlo (sono calcolate le tonalità chiare e scure).</li>
|
||
<li> -fg oppure -foreground color, imposta il colore di primo piano predefinito.</li>
|
||
<li> -btn oppure -button color, imposta il colore predefinito dei pulsanti.</li>
|
||
<li> -name name, imposta il nome dell'applicazione.</li>
|
||
<li> -title title, imposta il titolo dell'applicazione.</li>
|
||
<li> -visual TrueColor, forza l'applicazione a utilizzare una visualizzazione TrueColor su un display a 8-bit.</li>
|
||
<li> -ncols count, limita il numero di colori allocati nel cubo di colori su un display a 8 bit, se l'applicazione sta usando la specifica di colore QApplication::ManyColor. Se count è 216 allora è utilizzato un cubo di colori di 6x6x6 (vale a dire 6 livelli di rosso, 6 di verde, e 6 di blu), per altri valori viene utilizzato un cubo approssimativamente proporzionale a un cubo 2x3x1.</li>
|
||
<li> -cmap, obbliga l'applicazione a installare una mappa privata di colori su un display a 8 bit.</li></ul>
|
||
<h2><span class="mw-headline" id="Eseguire_FreeCAD_senza_interfaccia_grafica">Eseguire FreeCAD senza interfaccia grafica</span></h2>
|
||
<p>FreeCAD si avvia normalmente in modalità GUI, ma si può anche forzare l'avvio in modalità console digitando:
|
||
</p>
|
||
<pre>FreeCAD -c
|
||
</pre>
|
||
<p>dalla riga di comando. In modalità console non viene visualizzata nessuna interfaccia utente, e appare un prompt dell'interprete di Python. Da questo prompt di Python, si ha le stesse funzionalità che si ha dall'interprete di Python che viene eseguito all'interno della GUI di FreeCAD e si ha normale accesso a tutti i moduli e plugin di FreeCAD, eccettuato il modulo FreeCADGui. Tenere presente che anche i moduli che dipendono da FreeCADGui potrebbero non essere disponibili.
|
||
</p><p>Gli script Python e i file di macro di FreeCAD possono essere specificati come argomenti della riga di comando di uno dei file eseguibili di cui sopra.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Il_set_di_configurazione">Il set di configurazione</span></h2>
|
||
<p>A ogni avvio FreeCAD esamina i suoi ambienti ed i parametri della riga di comando. Si costruisce un <b>set di configurazione</b> che contiene l'essenza delle informazioni per l'esecuzione. Queste informazioni vengono poi utilizzate per determinare il luogo dove salvare i dati dell'utente o file di log (registro). E' anche molto importante per le analisi post-mortem. Pertanto viene salvato nel file di registro.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Informazioni_relative_all.27utente">Informazioni relative all'utente</span></h3>
|
||
<table border="2" cellpadding="4" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:1px #aaa solid; border-collapse:collapse;">
|
||
<caption> Voci di configurazione utente
|
||
</caption>
|
||
<tr>
|
||
<th> Nome var config </th>
|
||
<th> Descrizione </th>
|
||
<th> Esempio M$ </th>
|
||
<th> Esempio Posix (Linux)
|
||
</th></tr>
|
||
<tr>
|
||
<td> UserAppData </td>
|
||
<td> Percorso dove FreeCAD archivia i dati dell'applicazione relativi all'utente. </td>
|
||
<td> C:\Documents and Settings\username\Application Data\FreeCAD </td>
|
||
<td>/home/username/.FreeCAD
|
||
</td></tr>
|
||
<tr>
|
||
<td> UserParameter </td>
|
||
<td> File in cui FreeCAD archivia i dati dell'applicazione relativi all'utente. </td>
|
||
<td> C:\Documents and Settings\username\Application Data\FreeCAD\user.cfg </td>
|
||
<td>/home/username/.FreeCAD/user.cfg
|
||
</td></tr>
|
||
<tr>
|
||
<td> SystemParameter </td>
|
||
<td> File in cui FreeCAD archivia i dati relativi all'applicazione. </td>
|
||
<td> C:\Documents and Settings\username\Application Data\FreeCAD\system.cfg </td>
|
||
<td>/home/username/.FreeCAD/system.cfg
|
||
</td></tr>
|
||
<tr>
|
||
<td> UserHomePath </td>
|
||
<td> Percorso home dell'utente corrente </td>
|
||
<td> C:\Documents and Settings\username\My Documents </td>
|
||
<td>/home/username
|
||
</td></tr></table>
|
||
<h3><span class="mw-headline" id="Argomenti_della_riga_di_comando">Argomenti della riga di comando</span></h3>
|
||
<table border="2" cellpadding="4" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:1px #aaa solid; border-collapse:collapse;">
|
||
<caption> Voci di configurazione utente
|
||
</caption>
|
||
<tr>
|
||
<th> Nome var config </th>
|
||
<th> Descrizione </th>
|
||
<th> Esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td> LoggingFile </td>
|
||
<td> 1 se il logging è attivato </td>
|
||
<td> 1
|
||
</td></tr>
|
||
<tr>
|
||
<td> LoggingFileName </td>
|
||
<td> Nome del file dove si trova il log </td>
|
||
<td> C:\Documents and Settings\username\Application Data\FreeCAD\FreeCAD.log
|
||
</td></tr>
|
||
<tr>
|
||
<td> RunMode </td>
|
||
<td> Indica come funzionerà il ciclo principale. <b>"Script"</b> significa che richiama il file di script fornito e poi esce. <b>"Cmd"</b> esegue l'interprete della riga di comando. <b>"Internal"</b> esegue uno script interno. <b>"Gui"</b> entra nel ciclo di evento Gui. <b>"Module"</b> carica un dato modulo python. </td>
|
||
<td> "Cmd"
|
||
</td></tr>
|
||
<tr>
|
||
<td> FileName </td>
|
||
<td> Il suo significato dipende da RunMode </td>
|
||
<td>
|
||
</td></tr>
|
||
<tr>
|
||
<td> ScriptFileName </td>
|
||
<td> Il suo significato dipende da RunMode </td>
|
||
<td>
|
||
</td></tr>
|
||
<tr>
|
||
<td> Verbose </td>
|
||
<td> Livello di verbosità di FreeCAD </td>
|
||
<td> "" o "strict"
|
||
</td></tr>
|
||
<tr>
|
||
<td> OpenFileCount </td>
|
||
<td>Contiene il numero di file aperti attraverso gli argomenti della riga di comando </td>
|
||
<td> "12"
|
||
</td></tr>
|
||
<tr>
|
||
<td> AdditionalModulePaths</td>
|
||
<td>Contiene i percorsi di moduli aggiuntivi indicati nella linea di cmd </td>
|
||
<td> "extraModules/"
|
||
</td></tr></table>
|
||
<h3><span class="mw-headline" id="Relativi_al_sistema">Relativi al sistema</span></h3>
|
||
<table border="2" cellpadding="4" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:1px #aaa solid; border-collapse:collapse;">
|
||
<caption> Voci di configurazione utente
|
||
</caption>
|
||
<tr>
|
||
<th> Nome var config </th>
|
||
<th> Descrizione </th>
|
||
<th> Esempioo M$ </th>
|
||
<th> Esempio Posix (Linux)
|
||
</th></tr>
|
||
<tr>
|
||
<td> AppHomePath </td>
|
||
<td> c:/Progam Files/FreeCAD_0.7</td>
|
||
<td> /user/local/FreeCAD_0.7
|
||
</td></tr>
|
||
<tr>
|
||
<td> PythonSearchPath </td>
|
||
<td> Contiene un elenco di percorsi dove python cerca i moduli. Questo vale all'avvio e può cambiare durante l'esecuzione </td>
|
||
<td> </td>
|
||
<td>
|
||
</td></tr></table>
|
||
<p>Alcune librerie hanno bisogno di chiamare le variabili di ambiente del sistema. A volte, quando c'è un problema con un'installazione FreeCAD, è perché qualche variabile d'ambiente è assente o è impostata in modo errato. Pertanto, alcune variabili importanti vengono duplicate in Config e salvate nel file di registro
|
||
</p><p><b>Variabili d'ambiente relative a Python:</b>
|
||
</p>
|
||
<ul><li> PYTHONPATH</li>
|
||
<li> PYTHONHOME</li>
|
||
<li> TCL_LIBRARY</li>
|
||
<li> TCLLIBPATH</li></ul>
|
||
<p><b>Variabili d'ambiente relative a OpenCascade:</b>
|
||
</p>
|
||
<ul><li> CSF_MDTVFontDirectory</li>
|
||
<li> CSF_MDTVTexturesDirectory</li>
|
||
<li> CSF_UnitsDefinition</li>
|
||
<li> CSF_UnitsLexicon</li>
|
||
<li> CSF_StandardDefaults</li>
|
||
<li> CSF_PluginDefaults</li>
|
||
<li> CSF_LANGUAGE</li>
|
||
<li> CSF_SHMessage</li>
|
||
<li> CSF_XCAFDefaults</li>
|
||
<li> CSF_GraphicShr</li>
|
||
<li> CSF_IGESDefaults</li>
|
||
<li> CSF_STEPDefaults</li></ul>
|
||
<p><b>Variabili d'ambiente relative al sistema:</b>
|
||
</p>
|
||
<ul><li> PATH</li></ul>
|
||
<h3><span class="mw-headline" id="Informazioni_relative_alla_costruzione">Informazioni relative alla costruzione</span></h3>
|
||
<p>La tabella seguente mostra le informazioni disponibili relative alla versione di costruzione. La maggior parte proviene dal repositorio di Subversion. Queste cose sono necessarie per ricostruire esattamente la versione!
|
||
</p>
|
||
<table border="2" cellpadding="4" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:1px #aaa solid; border-collapse:collapse;">
|
||
<caption> Voci di configurazione utente
|
||
</caption>
|
||
<tr>
|
||
<th> Nome var config </th>
|
||
<th> Descrizione </th>
|
||
<th> Esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td> BuildVersionMajor </td>
|
||
<td> Numero di versione principale della costruzione. Definito in src/Build/Version.h.in </td>
|
||
<td> 0
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildVersionMinor </td>
|
||
<td> Numero di versione secondario della costruzione. Definito in src/Build/Version.h.in </td>
|
||
<td> 7
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildRevision </td>
|
||
<td> Numero di revisione del repositorio SVN del src nella costruzione. Generato da SVN </td>
|
||
<td> 356
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildRevisionRange </td>
|
||
<td> Gamma di diversi cambiamenti </td>
|
||
<td> 123-356
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildRepositoryURL </td>
|
||
<td> URL del repositorio </td>
|
||
<td> <a rel="nofollow" class="external free" href="https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk/src">https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk/src</a>
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildRevisionDate </td>
|
||
<td> Data della revisione precedente </td>
|
||
<td> 2007/02/03 22:21:18
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildScrClean </td>
|
||
<td> Indica se il codice sorgente è stato modificato dopo il suo checkout </td>
|
||
<td>Src modified
|
||
</td></tr>
|
||
<tr>
|
||
<td> BuildScrMixed </td>
|
||
<td> </td>
|
||
<td> Src not mixed
|
||
</td></tr></table>
|
||
<h3><span class="mw-headline" id="Relative_al_marchio">Relative al marchio</span></h3>
|
||
<p>Queste voci di configurazione sono legate al meccanismo di marchiatura di FreeCAD. Vedere <a href="https://www.freecadweb.org/wiki/index.php?title=Branding/it" title="Branding/it">Marchiatura</a> per maggiori dettagli.
|
||
</p>
|
||
<table border="2" cellpadding="4" cellspacing="0" style="margin-top:1em; margin-bottom:1em; background:#f9f9f9; border:1px #aaa solid; border-collapse:collapse;">
|
||
<caption> Voci di configurazione utente
|
||
</caption>
|
||
<tr>
|
||
<th> Nome var config </th>
|
||
<th> Descrizione </th>
|
||
<th> Esempio
|
||
</th></tr>
|
||
<tr>
|
||
<td> ExeName </td>
|
||
<td> Nome del file di costruzione eseguibile. Può differire da quello di FreeCAD se è utilizzato un diverso main.cpp. </td>
|
||
<td> FreeCAD.exe
|
||
</td></tr>
|
||
<tr>
|
||
<td> ExeVersion </td>
|
||
<td> Versione globale mostrata all'inizio </td>
|
||
<td> V0.7
|
||
</td></tr>
|
||
<tr>
|
||
<td> AppIcon </td>
|
||
<td> Icona che viene utilizzata per l'eseguibile, mostrata in Application MainWindow. </td>
|
||
<td> "FCIcon"
|
||
</td></tr>
|
||
<tr>
|
||
<td> ConsoleBanner </td>
|
||
<td> Banner che viene mostrato in modalità console </td>
|
||
<td>
|
||
</td></tr>
|
||
<tr>
|
||
<td> SplashPicture </td>
|
||
<td> Nome dell'icona utilizzata per la schermata iniziale </td>
|
||
<td> "FreeCADSplasher"
|
||
</td></tr>
|
||
<tr>
|
||
<td> SplashAlignment </td>
|
||
<td> Allineamento del testo nella finestra di dialogo iniziale </td>
|
||
<td> "Bottom o Left"
|
||
</td></tr>
|
||
<tr>
|
||
<td> SplashTextColor </td>
|
||
<td> Colore del testo iniziale </td>
|
||
<td> "#000000"
|
||
</td></tr>
|
||
<tr>
|
||
<td> StartWorkbench </td>
|
||
<td> Nome del Workbench che viene attivato automaticamente dopo l'avvio </td>
|
||
<td> "Part design"
|
||
</td></tr>
|
||
<tr>
|
||
<td> HiddenDockWindow </td>
|
||
<td> Elenco dei dockwindows (separati da un punto e virgola) che saranno disabilitati </td>
|
||
<td> "Property editor"
|
||
</td></tr></table>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Lo <b>Strumento per la costruzione di FreeCAD</b> (FreeCAD build tool o <b>fcbt</b>) è uno script in Python ubicato in
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> trunc/src/Tools/fcbt.py</pre></div>
|
||
<p>Può essere usato per semplificare alcune frequenti operazioni nella costruzione, distribuzione e estensione di FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzo">Utilizzo</span></h3>
|
||
<p>Con <a href="http://en.wikipedia.org/wiki/Python_(programming_language)" class="extiw" title="wikipedia:Python (programming language)">Python</a> installato correttamente, <i>fcbt</i> può essere richiamato con il comando
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> python fbct.py</pre></div>
|
||
<p>che visualizza un menu, in cui è possibile selezionare l'operazione che si desidera utilizzare per:
|
||
</p>
|
||
<pre>FreeCAD Build Tool
|
||
Usage:
|
||
fcbt <command name> [command parameter]
|
||
possible commands are:
|
||
- DistSrc (DS) Build a source Distr. of the current source tree
|
||
- DistBin (DB) Build a binary Distr. of the current source tree
|
||
- DistSetup (DI) Build a Setup Distr. of the current source tree
|
||
- DistSetup (DUI) Build a User Setup Distr. of the current source tree
|
||
- DistAll (DA) Run all three above modules
|
||
- NextBuildNumber (NBN) Increase the Build Number of this Version
|
||
- CreateModule (CM) Insert a new FreeCAD Module in the module directory
|
||
|
||
For help on the modules type:
|
||
fcbt <command name> ?
|
||
</pre>
|
||
<p>Al prompt inserire il comando abbreviato che si desidera utilizzare. Ad esempio digitare "CM" per <a href="https://www.freecadweb.org/wiki/index.php?title=Module_Creation/it" title="Module Creation/it">creare un modulo</a>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="DistSrc">DistSrc</span></h4>
|
||
<p>Il comando "DS" <b>crea una distribuzione di codice sorgente</b> dell'albero di codice sorgente attuale.
|
||
</p>
|
||
<h4><span class="mw-headline" id="DistBin">DistBin</span></h4>
|
||
<p>Il comando "DB" <b>crea una distribuzione binaria</b> dell'albero di codice sorgente attuale.
|
||
</p>
|
||
<h4><span class="mw-headline" id="DistSetup">DistSetup</span></h4>
|
||
<p>Il comando "DI" <b>crea una distribuzione di setup</b> dell'albero di codice sorgente attuale.
|
||
</p>
|
||
<h4><span class="mw-headline" id="DistSetup_2">DistSetup</span></h4>
|
||
<p>Il comando "DUI" <b>crea una distribuzione di setup dell'utente</b> dell'albero di codice sorgente attuale.
|
||
</p>
|
||
<h4><span class="mw-headline" id="DistAll">DistAll</span></h4>
|
||
<p>Il comando "DA" esegue "DS", "DB" e "DI" in sequenza.
|
||
</p>
|
||
<h4><span class="mw-headline" id="NextBuildNumber">NextBuildNumber</span></h4>
|
||
<p>Il comando "NBN" <b>incrementa il numero della costruzione</b> per creare una nuova versione di FreeCAD.
|
||
</p>
|
||
<h4><span class="mw-headline" id="CreateModule">CreateModule</span></h4>
|
||
<p>Il comando "CM" <a href="https://www.freecadweb.org/wiki/index.php?title=Module_Creation/it" title="Module Creation/it">crea un nuovo modulo dell'applicazione</a>.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Aggiungere in FreeCAD dei nuovi moduli e dei nuovi ambienti di lavoro è molto facile.
|
||
</p><p>Chiameremo modulo qualsiasi estensione di FreeCAD, invece un ambiente di lavoro (workbench) è una configurazione speciale della GUI che raggruppa alcune barre degli strumenti e dei menu.
|
||
</p><p>Di solito si crea un nuovo modulo che contiene un proprio ambiente di lavoro.
|
||
</p><p>I moduli possono essere programmati in C++ o in Python, o in una miscela di entrambi, ma i file di inizializzazione (init) del modulo devono essere in Python.
|
||
</p><p>Impostare un nuovo modulo con questi file init è facile, e può essere fatto manualmente o con lo <i>Strumento per la costruzione di FreeCAD</i>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzare_lo_strumento_di_costruzione_di_FreeCAD">Utilizzare lo strumento di costruzione di FreeCAD</span></h3>
|
||
<p><b>Creare un nuovo modulo dell'applicazione</b> in FreeCAD è piuttosto semplice. Nella struttura di sviluppo FreeCAD esiste lo <i><a href="https://www.freecadweb.org/wiki/index.php?title=FreeCAD_Build_Tool/it" title="FreeCAD Build Tool/it">Strumento per la costruzione di FreeCAD</a></i> (fcbt) che fa per voi le cose più importanti. Si tratta di uno script <a rel="nofollow" class="external text" href="http://es.wikipedia.org/wiki/Python">Python</a> e si trova in:
|
||
</p>
|
||
<pre>
|
||
trunk/src/Tools/fcbt.py
|
||
</pre>
|
||
<p>Quando l'interprete Python è stato installato correttamente è possibile eseguire lo script da una riga di comando con:
|
||
</p>
|
||
<pre>
|
||
python fcbt.py
|
||
</pre>
|
||
<p>Viene visualizzato il seguente menu:
|
||
</p>
|
||
<pre>
|
||
FreeCAD Build Tool
|
||
Usage:
|
||
fcbt <command name> [command parameter]
|
||
possible commands are:
|
||
- DistSrc (DS) Build a source Distr. of the current source tree
|
||
- DistBin (DB) Build a binary Distr. of the current source tree
|
||
- DistSetup (DI) Build a Setup Distr. of the current source tree
|
||
- DistSetup (DUI) Build a User Setup Distr. of the current source tree
|
||
- DistAll (DA) Run all three above modules
|
||
- NextBuildNumber (NBN) Increase the Build Number of this Version
|
||
- CreateModule (CM) Insert a new FreeCAD Module in the module directory
|
||
- CreatePyModule (CP) Insert a new FreeCAD Python Module in the module directory
|
||
|
||
For help on the modules type:
|
||
fcbt <command name> ?
|
||
</pre>
|
||
<p>Al prompt dei comandi digitare <i>CM</i> per avviare la creazione di un modulo:
|
||
</p>
|
||
<pre>
|
||
Insert command: ''CM''
|
||
</pre>
|
||
<p>Ora viene chiesto di specificare un nome per il nuovo modulo. Supponiamo, ad esempio, di chiamarlo <i>TestMod</i>:
|
||
</p>
|
||
<pre>
|
||
Please enter a name for your application: ''TestMod''
|
||
</pre>
|
||
<p>Dopo aver premuto <i>Invio</i> fcbt inizia a copiare tutti i file necessari per il nuovo modulo in una nuova cartella in
|
||
</p>
|
||
<pre>
|
||
trunk/src/Mod/TestMod/
|
||
</pre>
|
||
<p>Dopo tutti i file vengono modificati con il nome del nuovo modulo. Ora l'unica cosa da fare è aggiungere i due nuovi progetti "appTestMod" e "appTestModGui" al proprio workspace (su Windows) o al proprio makefile targets (unix). Ecco fatto!
|
||
</p>
|
||
<h3><span class="mw-headline" id="Impostare_manualmente_un_nuovo_modulo">Impostare manualmente un nuovo modulo</span></h3>
|
||
<p>Per creare un nuovo modulo servono due cose:
|
||
</p>
|
||
<ul><li> Una nuova <b>cartella</b> nella cartella Mod di FreeCAD (entrambe in InstalledPath/FreeCAD/Mod oppure in UserPath/.FreeCAD/Mod). È possibile assegnare alla cartella un nome a piacere.</li>
|
||
<li> All'interno di tale cartella, un file <b>InitGui.py</b>. Tale file verrà eseguito automaticamente all'avvio di FreeCAD (come esempio, mettere un print ("hello world") all'interno)</li></ul>
|
||
<p>In aggiunta, è anche possibile mettere un file <b>Init.py</b>. La differenza è che il file InitGui.py viene caricato solo quando FreeCAD viene eseguito in modalità GUI mentre il file Init.py viene sempre caricato. Dato che stiamo creando un ambiente di lavoro, lo metteremo in InitGui.py, perché gli ambienti di lavoro, ovviamente, vengono utilizzati solo in modalità GUI.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Creare_un_nuovo_ambiente_.28workbench.29">Creare un nuovo ambiente (workbench)</span></h3>
|
||
<p>All'interno del file InitGui.py, una delle prima cosa da fare è quella di definire un ambiente di lavoro. Ecco il codice minimo che è possibile utilizzare:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> class MyWorkbench ( Workbench ):
|
||
"My workbench object"
|
||
Icon = """
|
||
/* XPM */
|
||
static const char *test_icon[]={
|
||
"16 16 2 1",
|
||
"a c #000000",
|
||
". c None",
|
||
"................",
|
||
"................",
|
||
"..############..",
|
||
"..############..",
|
||
"..############..",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"................",
|
||
"................"};
|
||
"""
|
||
MenuText = "My Workbench"
|
||
ToolTip = "This is my extraordinary workbench"
|
||
|
||
def GetClassName(self):
|
||
return "Gui::PythonWorkbench"
|
||
|
||
def Initialize(self):
|
||
import myModule1, myModule2
|
||
self.appendToolbar("My Tools", ["MyCommand1","MyCommand2"])
|
||
self.appendMenu("My Tools", ["MyCommand1","MyCommand2"])
|
||
Log ("Loading MyModule... done\n")
|
||
|
||
def Activated(self):
|
||
# do something here if needed...
|
||
Msg ("MyWorkbench.Activated()\n")
|
||
|
||
def Deactivated(self):
|
||
# do something here if needed...
|
||
Msg ("MyWorkbench.Deactivated()\n")
|
||
|
||
FreeCADGui.addWorkbench(MyWorkbench)</pre></div>
|
||
<p>L'ambiente di lavoro deve avere tutti questi attributi definiti:
|
||
</p>
|
||
<ul><li> L'attributo Icon è un'immagine XPM (la maggior parte dei software come GIMP sono in grado di convertire un'immagine in formato xpm, che è un file di testo. È quindi possibile incollare qui il contenuto)</li>
|
||
<li> MenuText è il nome dell'ambiente di lavoro così come appare nella lista degli ambienti</li>
|
||
<li> Tooltip appare quando vi si passa sopra con il mouse</li>
|
||
<li> Initialize() viene eseguito all'avvio di FreeCAD, e deve creare tutti i menu e le barre degli strumenti che l'ambiente di lavoro userà. Se avete intenzione di costruire il vostro modulo in C++, è possibile definire anche i menu e barre degli strumenti all'interno del modulo C++, invece di definirli in questo file InitGui.py. Importante è che siano creati ora, e non quando il modulo viene attivato.</li>
|
||
<li> Activated() viene eseguito quando l'utente passa a questo ambiente di lavoro</li>
|
||
<li> Deactivated() viene eseguito quando l'utente passa da questo ad un altro ambiente di lavoro o chiude FreeCAD</li></ul>
|
||
<h3><span class="mw-headline" id="Creare_dei_comandi_di_FreeCAD_in_Python">Creare dei comandi di FreeCAD in Python</span></h3>
|
||
<p>Di solito si definiscono tutti gli strumenti (chiamati comandi in FreeCAD) in un altro modulo, quindi si importa quel modulo prima di creare le barre degli strumenti e i menu. Questo è il codice minimo che è possibile utilizzare per definire un comando:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> import FreeCAD,FreeCADGui
|
||
|
||
class MyTool:
|
||
"My tool object"
|
||
|
||
def GetResources(self):
|
||
return {"MenuText": "My Command",
|
||
"Accel": "Ctrl+M",
|
||
"ToolTip": "My extraordinary command",
|
||
"Pixmap" : """
|
||
/* XPM */
|
||
static const char *test_icon[]={
|
||
"16 16 2 1",
|
||
"a c #000000",
|
||
". c None",
|
||
"................",
|
||
"................",
|
||
"..############..",
|
||
"..############..",
|
||
"..############..",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"......####......",
|
||
"................",
|
||
"................"};
|
||
"""}
|
||
|
||
def IsActive(self):
|
||
if FreeCAD.ActiveDocument == None:
|
||
return False
|
||
else:
|
||
return True
|
||
|
||
def Activated(self):
|
||
# do something here...
|
||
|
||
FreeCADGui.addCommand('MyCommand1',MyTool())</pre></div>
|
||
<ul><li> Il metodo GetResources() deve restituire un dizionario con gli attributi visivi del vostro strumento. Accel definisce un tasto di scelta rapida, ma non è obbligatorio.</li>
|
||
<li> Il metodo IsActive() definisce se il comando è attivo o disattivo (grigio) nei menu e nelle barre degli strumenti.</li>
|
||
<li> Il metodo Activated() viene eseguito quando il comando viene richiamato tramite un pulsante della barra degli strumenti o del menu o anche da uno script.</li></ul>
|
||
<h3><span class="mw-headline" id="Creare_dei_comandi_di_FreeCAD_in_C.2B.2B">Creare dei comandi di FreeCAD in C++</span></h3>
|
||
<p>Ancora da documentare.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Link_6">Link</span></h2>
|
||
<ul><li> Alcuni esempi di come gli utenti avanzati hanno ampliato FreeCAD con vari ambienti personalizzati sono raccolti nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=External_workbenches/it" title="External workbenches/it">Ambienti complementari</a></li>
|
||
<li> Altri esempi in <a href="https://www.freecadweb.org/wiki/index.php?title=Workbench_creation/it" title="Workbench creation/it">Creare nuovi ambienti</a></li>
|
||
<li> Creare dei <a href="https://www.freecadweb.org/wiki/index.php?title=Command/it" title="Command/it">Comandi</a></li></ul>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h3><span class="mw-headline" id="Prova_preliminare">Prova preliminare</span></h3>
|
||
<p>Prima di provare il debug usare la <a href="https://www.freecadweb.org/wiki/index.php?title=Testing/it" title="Testing/it">La struttura di Test</a> (test framework - macro) per verificare se i test standard funzionano correttamente. Se non funzionano, è possibile che l'installazione sia danneggiata.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Riga_di_comando">Riga di comando</span></h3>
|
||
<p>Il debug di FreeCAD è supportato da alcuni meccanismi interni. La versione a riga di comando di FreeCAD fornisce delle opzioni di supporto del debug:
|
||
</p><p>Queste sono le opzioni attualmente riconosciute in FreeCAD 0.15:
|
||
</p><p>Opzioni generiche:
|
||
</p>
|
||
<pre> -v [ --version ] Stampa una stringa della versione
|
||
-h [ --help ] Stampa un messaggio di aiuto
|
||
-c [ --console ] Avvia in modalità console
|
||
--response-file arg Può anche essere specificato con '@name'
|
||
</pre>
|
||
<p>Configurazione:
|
||
</p>
|
||
<pre> -l [ --write-log ] Scrive un file di log file in: $HOME/.FreeCAD/FreeCAD.log
|
||
--log-file arg A differenza di --write-log permette di scrivere il file di log in un file arbitrario
|
||
-u [ --user-cfg ] arg File per caricare/salvare le impostazioni dell'utente
|
||
-s [ --system-cfg ] arg File per caricare/salvare le impostazioni di sistema
|
||
-t [ --run-test ] arg Livello di Test
|
||
-M [ --module-path ] arg Percorsi di moduli aggiuntivi
|
||
-P [ --python-path ] arg Percorsi aggiuntivi di python
|
||
</pre>
|
||
<h2><span class="mw-headline" id="Generare_un_Backtrace">Generare un Backtrace</span></h2>
|
||
<p>Se si esegue una versione sperimentale di FreeCAD ancora in fase sviluppo, essa potrebbe "bloccarsi". Si può aiutare gli sviluppatori a risolvere questi problemi fornendo loro un "backtrace". Per fare questo, è necessario eseguire un "debug build" del software. "Debug build" è un parametro che viene impostato al momento della compilazione, perciò bisogna auto-compilare FreeCAD, oppure ottenere una versione "debug" precompilata.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Per_Linux">Per Linux</span></h3>
|
||
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">
|
||
<p>Linux Debugging ---->
|
||
</p>
|
||
<div class="mw-collapsible-content">
|
||
<p>Prerequisiti:
|
||
</p>
|
||
<ul><li> pacchetto software gdb installato</li>
|
||
<li> un debug build di FreeCAD (in questo momento disponibili solo per la <a href="/wiki/CompileOnUnix#For_a_Debug_build" title="CompileOnUnix">compilazione da sorgenti</a>)</li>
|
||
<li> un modello di FreeCAD che causa un crash</li></ul>
|
||
<p>Passaggi:
|
||
</p><p>Immettere quanto segue nella finestra del terminale:
|
||
</p>
|
||
<pre>
|
||
$ cd FreeCAD/bin
|
||
$ gdb FreeCAD
|
||
</pre>
|
||
<p>GNUdebugger will output some initializing information. The (gdb) shows GNUDebugger is running in the terminal, now input:
|
||
</p>
|
||
<pre>
|
||
(gdb) handle SIG33 noprint nostop
|
||
(gdb) run
|
||
</pre>
|
||
<p>Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
|
||
</p>
|
||
<pre>
|
||
(gdb) bt
|
||
</pre>
|
||
<p>Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.
|
||
</p>
|
||
</div></div>
|
||
<h3><span class="mw-headline" id="Per_MacOSX">Per MacOSX</span></h3>
|
||
<div class="toccolours mw-collapsible mw-collapsed" style="width:800px;">
|
||
<p>MacOSX Debugging ---->
|
||
</p>
|
||
<div class="mw-collapsible-content">
|
||
<p>Prerequisiti:
|
||
</p>
|
||
<ul><li> pacchetto software lldb installato</li>
|
||
<li> un debug build di FreeCAD</li>
|
||
<li> un modello di FreeCAD che causa un crash</li></ul>
|
||
<p>Passaggi:
|
||
</p><p>Immettere quanto segue nella finestra del terminale:
|
||
</p>
|
||
<pre>
|
||
$ cd FreeCAD/bin
|
||
$ lldb FreeCAD
|
||
</pre>
|
||
<p>LLDB produrrà alcune informazioni di inizializzazione. Il (lldb) mostra che il debugger è in esecuzione nel terminale, ora dare:
|
||
</p>
|
||
<pre>
|
||
(lldb) run
|
||
</pre>
|
||
<p>Ora FreeCAD viene avviato. Effettuare le operazioni che causano il crash o il blocco di FreeCAD, quindi immettere 'bt' nella finestra del terminale.
|
||
</p>
|
||
<pre>
|
||
(lldb) bt
|
||
</pre>
|
||
<p>Questo genera una lunga lista che descrive esattamente ciò che il programma stava facendo quando è andato in crash o in blocco. Includere questa lista nel vostro rapporto sul problema.
|
||
</p>
|
||
</div></div>
|
||
<h2><span class="mw-headline" id="Eliminare_errori_Python">Eliminare errori Python</span></h2>
|
||
<p>Ecco un esempio di utilizzo di winpdb all'interno di FreeCAD:
|
||
</p>
|
||
<ol><li> Eseguire winpdb e impostare la password (ad esempio test)</li>
|
||
<li> Creare un file Python con questo contenuto</li></ol>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> import rpdb2
|
||
rpdb2.start_embedded_debugger("test")
|
||
import FreeCAD
|
||
import Part
|
||
import Draft
|
||
print "hello"
|
||
print "hello"
|
||
import Draft
|
||
points=[FreeCAD.Vector(-3.0,-1.0,0.0),FreeCAD.Vector(-2.0,0.0,0.0)]
|
||
Draft.makeWire(points,closed=False,face=False,support=None)</pre></div>
|
||
<ol><li> Avviare FreeCAD e caricare il file precedente in FreeCAD.</li>
|
||
<li> Premere F6 per eseguirlo.</li>
|
||
<li> Ora FreeCAD non risponde perché il debugger Python è in attesa</li>
|
||
<li> Passare alla GUI di Windpdb e cliccare su "Attach". Dopo pochi secondi appare una voce "<Input>" su cui si deve fare doppio clic.</li>
|
||
<li> Ora in Winpdb viene visualizzato lo script attualmente in esecuzione.</li>
|
||
<li> Impostare un break nell'ultima riga e premere F5.</li>
|
||
<li> Ora premere F7 per entrare nel codice Python di Draft.makeWire</li></ol>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>FreeCAD possiede una sua struttura di estensione per le prove. Le prove si basano su un insieme di script Python che si trovano nel modulo test.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Introduzione_4">Introduzione</span></h2>
|
||
<p>Questa è la lista delle applicazioni di test di 0.15 Git 4207:
|
||
</p>
|
||
<h3><span class="mw-headline" id="TestAPP.All">TestAPP.All</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="BaseTests">BaseTests</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="UnitTests">UnitTests</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="Document">Document</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="UnicodeTests">UnicodeTests</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="MeshTestsApp">MeshTestsApp</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="TestSketcherApp">TestSketcherApp</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="TestPartApp">TestPartApp</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="TestPartDesignApp">TestPartDesignApp</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="Workbench">Workbench</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="Menu">Menu</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="Menu.MenuDeleteCases">Menu.MenuDeleteCases</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
<h3><span class="mw-headline" id="Menu.MenuCreateCases">Menu.MenuCreateCases</span></h3>
|
||
<p>Add test function
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questo articolo descrive la personalizzazione o <b>Marchiatura</b> di FreeCAD.
|
||
</p><p>Marchiare (Branding) significa avviare la realizzazione di una propria applicazione basata su FreeCAD. La personalizzazione può riguardare solo il proprio eseguibile oppure andare dalla <a href="https://www.freecadweb.org/wiki/index.php?title=Splash_screen/it" title="Splash screen/it">schermata iniziale</a> fino alla rielaborazione completa del programma.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Generale_2">Generale</span></h4>
|
||
<p>La maggior parte della marchiatura avviene in <b>MainCmd.cpp</b> oppure in <b>MainGui.cpp</b>. Questi Progetti generano i file eseguibili di FreeCAD. Per costruire il proprio marchio è sufficiente copiare i progetti Main o MainGui e dare all'eseguibile un nome diverso, ad esempio, FooApp.exe.
|
||
</p><p>Le impostazioni più importanti per dare all'applicazione un nuovo aspetto possono essere fatte all'interno della funzione main().
|
||
</p><p>Ecco la sezione di codice che controlla la marchiatura:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> int main( int argc, char ** argv )
|
||
{
|
||
// Name and Version of the Application
|
||
App::Application::Config()["ExeName"] = "FooApp";
|
||
App::Application::Config()["ExeVersion"] = "0.7";
|
||
|
||
// set the banner (for loging and console)
|
||
App::Application::Config()["CopyrightInfo"] = sBanner;
|
||
App::Application::Config()["AppIcon"] = "FooAppIcon";
|
||
App::Application::Config()["SplashScreen"] = "FooAppSplasher";
|
||
App::Application::Config()["StartWorkbench"] = "Part design";
|
||
App::Application::Config()["HiddenDockWindow"] = "Property editor";
|
||
App::Application::Config()["SplashAlignment" ] = "Bottom|Left";
|
||
App::Application::Config()["SplashTextColor" ] = "#000000"; // black
|
||
|
||
// Inits the Application
|
||
App::Application::Config()["RunMode"] = "Gui";
|
||
App::Application::init(argc,argv);
|
||
|
||
Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** ) splash_screen);
|
||
|
||
Gui::Application::initApplication();
|
||
Gui::Application::runApplication();
|
||
App::Application::destruct();
|
||
|
||
return 0;
|
||
}</pre></div>
|
||
<p>La prima voce Config definisce il nome del programma. Questo nome non è il nome del file eseguibile, il quale può essere modificato rinominandolo o tramite le impostazioni del compilatore, ma è il nome che viene visualizzato nella barra delle applicazioni di Windows o nell'elenco dei programmi sui sistemi Unix.
|
||
</p><p>Le righe successive definiscono le voci di configurazione della vostra applicazione FooApp. Una descrizione di Config e delle sue voci si trova in <a href="https://www.freecadweb.org/wiki/index.php?title=Start_up_and_Configuration/it" title="Start up and Configuration/it">Avvio e Configurazione</a>.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Immagini">Immagini</span></h4>
|
||
<p>In FreeCAD tutte le risorse immagine vengono compilate utilizzando <a rel="nofollow" class="external text" href="http://qt-project.org/doc/qt-4.8/resources.html">Qt's resource system</a>. Pertanto è necessario scrivere un file .qrc, un file basato sul formato XML, che elenca i file di immagine sul disco, ma anche qualsiasi altro tipo di file di risorse. Per caricare all'interno dell'applicazione le risorse compilate è necessario aggiungere una riga
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> Q_INIT_RESOURCE(FooApp);</pre></div>
|
||
<p>nella funzione main(). In alternativa, se si dispone di un'immagine in formato XPM è possibile includerla direttamente nella propria main.cpp e aggiungere la seguente riga per registrarla:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> Gui::BitmapFactory().addXPM("FooAppSplasher", ( const char** ) splash_screen);</pre></div>
|
||
<h3><span class="mw-headline" id="Branding_XML">Branding XML</span></h3>
|
||
<p>In FreeCAD c'è anche un metodo supportato senza scrivere una funzione main() personalizzata. Per questo metodo basta scrivere un file chiamato branding.xml e metterlo nella directory di installazione di FreeCAD. Ecco un esempio con tutti i tag supportati:
|
||
</p>
|
||
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre> <?xml version="1.0" encoding="utf-8"?>
|
||
<Branding>
|
||
<Application>FooApp</Application>
|
||
<WindowTitle>Foo App in title bar</WindowTitle>
|
||
<BuildVersionMajor>1</BuildVersionMajor>
|
||
<BuildVersionMinor>0</BuildVersionMinor>
|
||
<BuildRevision>1234</BuildRevision>
|
||
<BuildRevisionDate>2014/1/1</BuildRevisionDate>
|
||
<CopyrightInfo>(c) My copyright</CopyrightInfo>
|
||
<MaintainerUrl>Foo App URL</MaintainerUrl>
|
||
<ProgramLogo>Path to logo (appears in bottom right corner)</ProgramLogo>
|
||
<WindowIcon>Path to icon file</WindowIcon>
|
||
<ProgramIcons>Path to program icons</ProgramIcons>
|
||
<SplashScreen>splashscreen.png</SplashScreen>
|
||
<SplashAlignment>Bottom|Left</SplashAlignment>
|
||
<SplashTextColor>#ffffff</SplashTextColor>
|
||
<SplashInfoColor>#c8c8c8</SplashInfoColor>
|
||
<StartWorkbench>PartDesignWorkbench</StartWorkbench>
|
||
</Branding></pre></div>
|
||
<p>Tutti i tag elencati sono opzionali.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><b>Localizzazione</b> è in generale il processo che fornisce un software con una interfaccia utente (GUI) multilingua.
|
||
</p><p>In FreeCAD è possibile impostare la lingua dell'interfaccia utente in <b>Modifica → Preferenze → Applicazione</b>.
|
||
</p><p>FreeCAD utilizza <a href="http://en.wikipedia.org/wiki/Qt_(toolkit)" class="extiw" title="wikipedia:Qt (toolkit)">Qt</a> per abilitare il supporto di più lingue. Sui sistemi Unix / Linux, FreeCAD utilizza le impostazioni locali di default del sistema.
|
||
</p>
|
||
<h2><span class="mw-headline" id="Contribuire_a_tradurre_FreeCAD">Contribuire a tradurre FreeCAD</span></h2>
|
||
<p>Una cosa importante che si può fare per FreeCAD, se non si è un programmatore, è quella di contribuire a tradurre il programma nella propria lingua.
|
||
</p><p>Ora, con l'uso di <a rel="nofollow" class="external text" href="http://crowdin.net">Crowdin</a> <a href="https://www.freecadweb.org/wiki/index.php?title=File:Crowdin.png" class="image"><img alt="Crowdin.png" src="64px-Crowdin.png" width="64" height="17" srcset="/wiki/images/thumb/d/d3/Crowdin.png/96px-Crowdin.png 1.5x, /wiki/images/thumb/d/d3/Crowdin.png/128px-Crowdin.png 2x" /></a>, un sistema collaborativo di traduzione on line, contribuire è più facile che mai.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Come_tradurre">Come tradurre</span></h3>
|
||
<ul><li> Andare alla pagina <a rel="nofollow" class="external text" href="http://crowdin.net/project/freecad">Traduzione del progetto FreeCAD</a> in Crowdin;</li>
|
||
<li> Accedere creando un nuovo profilo, o utilizzando un account di terze parti come il proprio indirizzo Gmail;</li>
|
||
<li> Fare clic sulla lingua su cui si desidera lavorare;</li>
|
||
<li> Iniziare a tradurre facendo clic sul pulsante Traduci accanto a uno dei file. Ad esempio, su FreeCAD.ts che contiene le stringhe di testo per la Gui principale di FreeCAD.</li>
|
||
<li> Si può convalidare le traduzioni esistenti, oppure è possibile crearne di proprie.</li></ul>
|
||
<pre> <b>Note</b>: Se si partecipa alla traduzione di FreeCAD, e si desidera essere informati prima della pubblicazione
|
||
di una prossima versione che è il momento di rivedere la propria traduzione,
|
||
si prega di iscriversi a: <a rel="nofollow" class="external free" href="http://www.freecadweb.org/tracker/view.php?id=137">http://www.freecadweb.org/tracker/view.php?id=137</a>
|
||
</pre>
|
||
<p><br />
|
||
</p>
|
||
<h3><span class="mw-headline" id="Traduzione_con_Qt-Linguist_.28forma_antiquata_-_OBSOLETA.29">Traduzione con Qt-Linguist (forma antiquata - OBSOLETA)</span></h3>
|
||
<table class="mw-collapsible mw-collapsed wikitable">
|
||
<tr>
|
||
<td>Le seguenti informazioni non devono più essere utilizzate ed è probabile che diventino obsolete.
|
||
<p>Sono mantenute qui in modo che i programmatori possano conoscere come funziona.
|
||
</p>
|
||
</td></tr>
|
||
<tr>
|
||
<td>
|
||
<ul><li> Aprire tutte le cartelle di lingua di FreeCAD riportate in seguito </li>
|
||
<li> Verificare che non esista un file .ts file con il codice della lingua ("fr" per francese, "de" per tedesco, etc...)</li>
|
||
<li> Se esiste, è possibile scaricare il file, se si vuole modificare / rivedere / megliorare la traduzione (fare clic sul file, quindi scaricare)</li>
|
||
<li> Se non esiste, scaricare i file .ts senza il codice della lingua (o qualsiasi altro .ts disponibile, funzionerà ugualmente)</li>
|
||
<li> Rinominare il file con il codice della propria lingua</li>
|
||
<li> Aprirlo con il programma Qt-Linguist</li>
|
||
<li> Iniziare la traduzione (Qt Linguist è molto semplice da usare)</li>
|
||
<li> Terminata la traduzione, salvare il file</li>
|
||
<li> <a rel="nofollow" class="external text" href="http://www.freecadweb.org/tracker/main_page.php">Inviare i file</a> in modo da poterli includere nel codice sorgente di FreeCAD e consentire l'utilizzo della traduzione anche ad altri utenti.<br /></li></ul>
|
||
<p><b>Archivio dei file di traduzione disponibili</b><br />
|
||
</p>
|
||
<ul><li> I seguenti collegamenti sono tutti diretti a sourceforge che non è più utilizzato da FreeCAD. Il codice è ospitato in <a rel="nofollow" class="external free" href="https://github.com/FreeCAD/FreeCAD">https://github.com/FreeCAD/FreeCAD</a>.</li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Gui/Language/">FreeCAD main GUI</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Complete/Gui/Resources/translations/">Complete Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Drawing/Gui/Resources/translations/">Drawing Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Draft/Resources/translations/">Draft Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/ReverseEngineering/Gui/Resources/translations/">Reverse Engineering Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Fem/Gui/Resources/translations/">FEM Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Robot/Gui/Resources/translations/">Robot Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Image/Gui/Resources/translations/">Image Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Sketcher/Gui/Resources/translations/">Sketcher Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Mesh/Gui/Resources/translations/">Mesh Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Test/Gui/Resources/translations/">Test Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Points/Gui/Resources/translations/">Points Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Raytracing/Gui/Resources/translations/">Raytracing Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Part/Gui/Resources/translations/">Part Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/PartDesign/Gui/Resources/translations/">PartDesign Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/Assembly/Gui/Resources/translations/">Assembly Workbench</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://free-cad.svn.sourceforge.net/viewvc/free-cad/trunk/src/Mod/MeshPart/Gui/Resources/translations/">MeshPart Workbench</a></li>
|
||
<li>Riguardo al vecchio modo di traduzione nel forun c'è un post molto interessante , ma è in tedesco. Vedere <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/viewtopic.php?f=13&t=19496&start=60#p152655">http://forum.freecadweb.org/viewtopic.php?f=13&t=19496&start=60#p152655</a></li></ul>
|
||
</td></tr></table>
|
||
<h2><span class="mw-headline" id="Preparare_i_propri_moduli_o_applicazioni_per_la_traduzione">Preparare i propri moduli o applicazioni per la traduzione</span></h2>
|
||
<h3><span class="mw-headline" id="Prerequisiti_3">Prerequisiti</span></h3>
|
||
<p>Per realizzare la traduzione del modulo dell'applicazione servono delle utility fornite con <i>Qt</i>. Esse si possono scaricare da <a rel="nofollow" class="external text" href="http://www.trolltech.com/products/qt/downloads">Trolltech-Website</a>, ma sono anche contenute in <a href="/wiki/Third_Party_Libraries/it#LibPack" title="Third Party Libraries/it">LibPack</a>:
|
||
</p>
|
||
<dl><dt>qmake</dt>
|
||
<dd> Genera i file del progetto</dd>
|
||
<dt>lupdate</dt>
|
||
<dd> Estrae o aggiorna i testi originali del progetto tramite la scansione del codice sorgente</dd>
|
||
<dt>Qt-Linguist</dt>
|
||
<dd> <i>Qt-Linguist</i> è molto facile da usare, agevola la traduzione con pratiche funzioni e dispone di un frasario per le espressioni più comuni.</dd></dl>
|
||
<h3><span class="mw-headline" id="Setup_del_progetto">Setup del progetto</span></h3>
|
||
<p>Per iniziare la localizzazione del proprio progetto andare alla GUI-Part del modulo e digitare sulla riga di comando:
|
||
</p>
|
||
<pre>
|
||
qmake -project
|
||
</pre>
|
||
<p>Questo esegue la scansione della directory del progetto alla ricerca dei file contenenti stringhe di testo e crea un file di progetto come nel seguente esempio:
|
||
</p>
|
||
<pre>
|
||
######################################################################
|
||
# Automatically generated by qmake (1.06c) Do 2. Nov 14:44:21 2006
|
||
######################################################################
|
||
|
||
TEMPLATE = app
|
||
DEPENDPATH += .\Icons
|
||
INCLUDEPATH += .
|
||
|
||
# Input
|
||
HEADERS += ViewProvider.h Workbench.h
|
||
SOURCES += AppMyModGui.cpp \
|
||
Command.cpp \
|
||
ViewProvider.cpp \
|
||
Workbench.cpp
|
||
TRANSLATIONS += MyMod_de.ts
|
||
</pre>
|
||
<p>È possibile aggiungere manualmente i file qui. La sezione <tt>TRANSLATIONS</tt> contiene un elenco di file con la traduzione per ogni lingua. Nell'esempio precedente <i>MyMod_de.ts</i> è la traduzione in tedesco.
|
||
</p><p>Ora è necessario eseguire <tt>lupdate</tt> per estrarre tutte le stringhe letterali nella propria GUI. Eseguire <tt>lupdate</tt> dopo le modifiche del codice sorgente è sempre una operazione sicura in quanto non cancella mai stringhe dai file di traduzione. Aggiunge solo le nuove stringhe.
|
||
</p><p>Ora è necessario aggiungere i file <tt>.ts</tt> al proprio progetto VisualStudio. Specificare per essi il seguente metodo di costruzione personalizzato:
|
||
</p>
|
||
<pre>python ..\..\..\Tools\qembed.py "$(InputDir)\$(InputName).ts"
|
||
"$(InputDir)\$(InputName).h" "$(InputName)" </pre>
|
||
<p>Nota: Inserire questo comando in un'unica riga, l'interruzione di riga è finalizzata solo alla visualizzazione.
|
||
</p><p>Compilando il file <tt>.ts</tt> dell'esempio precedente, si crea un file di di intestazione <i>MyMod_de.h</i>. La posizione migliore per memorizzare questo file è <i>App<Modul>Gui.cpp</i>. In questo esempio potrebbe essere <i>AppMyModGui.cpp</i>. Aggiungere lì la riga:
|
||
</p>
|
||
<pre>new Gui::LanguageProducer("Deutsch", <Modul>_de_h_data, <Modul>_de_h_len); </pre>
|
||
<p>per pubblicare la traduzione nell'applicazione.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Configurare_i_file_python_per_la_traduzione">Configurare i file python per la traduzione</span></h3>
|
||
<p>Per facilitare la localizzazione dei file .py è possibile utilizzare lo strumento <i>pylupdate4</i> che accetta uno o più file .py. Con l'opzione -ts si può preparare / aggiornare uno o più file .ts. Ad esempio per preparare un file .ts per la traduzione in francese è sufficiente inserire nella riga di comando:
|
||
</p>
|
||
<pre>
|
||
pylupdate4 *.py -ts YourModule_fr.ts
|
||
</pre>
|
||
<p>lo strumento pylupdate esegue la scansione dei file .py per le funzioni translate() o tr() e crea un file YourModule_fr.ts. Si può tradurre questo file con QLinguist e produrre il file YourModule_fr.qm con QLinguist o con il comando:
|
||
</p>
|
||
<pre>
|
||
lrelease YourModule_fr.ts
|
||
</pre>
|
||
<p>Attenzione che lo strumento pylupdate4 non è molto efficace nel riconoscere le funzioni translate(), esse devono essere formattate in modo molto specifico (vedere come esempio i file del modulo Draft). All'interno del file, è possibile impostare un traduttore come questo (dopo il caricamento delle QApplication però PRIMA di creare qualsiasi widget Qt):
|
||
</p>
|
||
<pre>
|
||
translator = QtCore.QTranslator()
|
||
translator.load("YourModule_"+languages[ln])
|
||
QtGui.QApplication.installTranslator(translator)
|
||
</pre>
|
||
<p>Facoltativamente, è possibile anche creare il file XML Draft.qrc con questo contenuto:
|
||
</p>
|
||
<pre>
|
||
<RCC>
|
||
<qresource prefix="/translations" >
|
||
<file>Draft_fr.qm</file>
|
||
</qresource>
|
||
</RCC>
|
||
</pre>
|
||
<p>e eseguire pyrcc4 Draft.qrc -o qrc_Draft.py che crea un grande file Python contenente tutte le risorse. Questo metodo funziona anche per inserire i file di icona in un file di risorse
|
||
</p>
|
||
<h2><span class="mw-headline" id="Tradurre_il_wiki">Tradurre il wiki</span></h2>
|
||
<p>Questo wiki ospita svariati contenuti. Il materiale più aggiornato e interessante viene raccolto nel <a href="https://www.freecadweb.org/wiki/index.php?title=Online_Help_Toc/it" title="Online Help Toc/it">manuale</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Plugin_di_traduzione">Plugin di traduzione</span></h3>
|
||
<p>Quando il Wiki è stato spostato da SourceForge, <a href="https://www.freecadweb.org/wiki/index.php?title=User:Yorik" title="User:Yorik">Yorik</a> ha installato un <a class="external text" href="http://www.mediawiki.org/wiki/Help:Extension:Translate">plugin di traduzione</a> che facilita la traduzione delle pagine. Ad esempio, ora può essere tradotto anche il titolo della pagina. Altri vantaggi del plugin di traduzione sono che tiene traccia delle traduzioni, notifica se la pagina originale è stata aggiornata, e mantiene le traduzioni sincronizzate con la pagina originale inglese.
|
||
</p><p>Lo strumento è documentato in <a class="external text" href="http://www.mediawiki.org/wiki/Help:Extension:Translate">Extension:Translate</a>, ed è parte di <a class="external text" href="http://www.mediawiki.org/wiki/MediaWiki_Language_Extension_Bundle">Language Extension Bundle</a>.
|
||
</p><p>Per sapere come preparare rapidamente una pagina per la traduzione e attivare il plugin, si prega di leggere <a class="external text" href="http://www.mediawiki.org/wiki/Help:Extension:Translate/Page_translation_example">Page translation example</a>.
|
||
</p><p>Per vedere un esempio di come funziona lo strumento di traduzione quando il plugin di traduzione è attivo su una pagina, è possibile visitare la <a href="https://www.freecadweb.org/wiki/index.php?title=Main_Page" title="Main Page">Main Page</a>. Verrà visualizzata una nuova barra del menu lingua in basso. Esso viene generato automaticamente. Cliccando, per esempio, sul link tedesco, si apre la pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Main_Page/de" title="Main Page/de">Main Page/de</a>. Immediatamente sotto al titolo, è possibile leggere "This page is a <b>translated version</b> of a page Main Page and the translation is xx% complete." "Questa pagina è una <i>versione tradotta</i> di Main Page e la traduzione è xx% completa."
|
||
(xx è la percentuale attuale di traduzione). Cliccare sul link "Translate this page" per avviare la traduzione, o per aggiornare o correggere la traduzione esistente.
|
||
</p><p>Noterete che quando la pagina è stata contrassegnata per la traduzione non è possibile modificarla direttamente, ma che si deve passare attraverso l'utility di traduzione.
|
||
</p><p>Quando si aggiungono nuovi contenuti, prima deve essere creata la pagina inglese, e poi la pagina inglese può essere tradotta in un'altra lingua. Se qualcuno vuole cambiare o aggiungere dei contenuti in una pagina esistente, deve farlo nella pagina inglese, marcarla per la traduzione e poi tradurre i contenuti editati.
|
||
</p><p>È necessario avere una conoscenza di base sulla formattazione dello stile wiki e sulle linee guida generali del wiki di FreeCAD, perché durante la traduzione bisogna sapere cosa fare con alcuni tag. Potete trovare queste informazioni in <a href="WikiPages.html" title="WikiPages">WikiPages</a>.
|
||
</p><p>Anche la barra laterale (il menu di navigazione a sinistra) è traducibile. Si prega di seguire le istruzioni dedicate a questo nella pagina <a href="https://www.freecadweb.org/wiki/index.php?title=Localisation_Sidebar/it" title="Localisation Sidebar/it">Localisation Sidebar</a>.
|
||
</p><p><b>NOTA: La prima volta che una pagina viene passata al nuovo sistema di traduzione perde tutte le sue vecchie traduzioni "manuali". Per recuperare le traduzioni, è necessario aprire una versione precedente dalla cronologia (pulsante History), e fare manualmente il copia/incolla dei precedenti paragrafi nel nuovo sistema di traduzione. </b>
|
||
</p><p>Nota: ovviamente, per poter tradurre nel wiki, è necessario <a href="/wiki/FAQ#How_can_I_get_edit_permission_on_the_wiki.3F" title="FAQ">richiedere l'autorizzazione</a>.
|
||
</p><p><br />
|
||
Se non siete sicuri su come procedere, non esitate a chiedere aiuto nel <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/">forum</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Vecchie_istruzioni_di_traduzione">Vecchie istruzioni di traduzione</span></h3>
|
||
<table class="mw-collapsible mw-collapsed wikitable">
|
||
<tr>
|
||
<td>Queste istruzioni sono solo un background storico, mentre le pagine vengono passate al nuovo plugin di traduzione.
|
||
</td></tr>
|
||
<tr>
|
||
<td>
|
||
<p>Quindi il primo passo è <b>controllare se è già stato avviata la traduzione del manuale per la propria lingua</b> (cercare nella barra laterale sinistra, sotto "manual").<br />
|
||
In caso contrario, andare al <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/">forum</a> e comunicare che si intende avviare una nuova traduzione, creeremo le impostazioni di base per la lingua che si desidera lavorare.<br />
|
||
È necessario <a href="/wiki/FAQ/es#C.C3.B3mo_consigo_permisos_de_edici.C3.B3n_para_esta_wiki.3F" title="FAQ/es">ottenere il permesso di modifica del wiki</a>.<br />
|
||
Se la lingua è già presente, vedere quali pagine da tradurre sono ancora mancanti (sono quelle elencate in rosso). La tecnica è semplice: <b>entrare in una pagina rossa, copiare e incollare il contenuto della corrispondente pagina inglese, e iniziare a tradurre.</b>.<br />
|
||
Non dimenticare di includere tutti i tag e i modelli dalla pagina originale in inglese. Alcuni di questi modelli avranno un equivalente nella nuova lingua (per esempio, esiste un modello di Docnav in francese denominato Docnav/fr). Si deve utilizzare <b>una barra slash e il codice della proria lingua</b> in quasi tutti i collegamenti. Guardare altre pagine già tradotte per vedere come procedere.<br />
|
||
Aggiungere una barra e il codice della propria lingua nelle categorie, come [[Category:Developer Documentation/it]]<br />
|
||
Se non si è sicuri, andare nel forum e richiedere un controllo su quello che si è fatto, qualcuno vi dirà se và bene oppure no.<br />
|
||
Nelle pagine del manuale sono comunemente utilizzati due modelli (maschere standard). Questi 2 modelli hanno versioni localizzate (Template:Docnav/it, Template:it, etc...)
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=Template:GuiCommand" title="Template:GuiCommand">Template:GuiCommand</a> : è il blocco di informazioni del comando Gui in alto a destra nella documentazione del comando.</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=Template:Docnav" title="Template:Docnav">Template:Docnav</a> : è la barra di navigazione visualizzata nella parte inferiore delle pagine, mostra le pagine precedenti e successive<br /></li></ul>
|
||
<p><b>Convenzioni sui nomi delle pagine</b><br />
|
||
Si prega di prendere atto che, a causa di limitazioni in Sourceforge al motore MediaWiki, è necessario che tutte le pagine tradotte mantengano il nome originale in inglese della pagina corrispondente, con l'aggiunta di uno slash e del codice della lingua.<br />
|
||
Per esempio, la pagina tradotta di <b>About FreeCAD</b> deve essere <b>About Freecad/it</b> in italiano, <b>About FreeCAD/pl</b> in polacco, etc. Il motivo è semplice: in questo modo se i traduttori interrompono il lavoro, gli amministratori del wiki, che non parlano tutte le lingue, sanno di quali pagine si tratta. Ciò facilita la manutenzione ed evita di perdere delle pagine.<br />
|
||
Se si desidera che il modello Docnav mostri pagine collegate nella propria lingua, è possibile utilizzare <b>redirect pages</b>. Esse sono sostanzialmente collegate alla pagina vera e propria. Ecco un esempio con la pagina in francese di <i>About FreeCAD</i>.<br />
|
||
</p>
|
||
<ul><li> La pagina <b>About FreeCAD/fr</b> è la pagina con il contenuto</li>
|
||
<li> La pagina <b>À propos de FreeCAD</b> contiene contiene questo codice:</li></ul>
|
||
<pre>#REDIRECT [[About FreeCAD/fr]]
|
||
</pre>
|
||
<ul><li> Nella pagina About FreeCAD/fr, il codice Docnav sarà simile a questo:</li></ul>
|
||
<pre>{{docnav/fr|Bienvenue sur l'aide en ligne|Fonctionnalités}}
|
||
</pre>
|
||
<p>La pagina "Bienvenue sur l'aide en ligne" reindirizza a Online Help Startpage/fr, e la pagina "Fonctionnalités" reindirizza a Feature list/fr.
|
||
</p>
|
||
</td></tr></table>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p>Questa pagina elenca alcuni moduli Python aggiuntivi o altre parti di software che possono essere scaricati gratuitamente da internet, e che aggiungono funzionalità alla vostra installazione FreeCAD.
|
||
</p>
|
||
<h2><span class="mw-headline" id="PySide_.28sostituisce_PyQt4.29">PySide (sostituisce PyQt4)</span></h2>
|
||
<ul><li> homepage (PySide): <a rel="nofollow" class="external free" href="http://qt-project.org/wiki/PySide">http://qt-project.org/wiki/PySide</a></li>
|
||
<li> licenza: LGPL </li>
|
||
<li> optional, ma è necessario per diversi moduli: Draft, Arch, Ship, Plot, OpenSCAD, Spreadsheet</li></ul>
|
||
<p>PySide (precedentemente PyQt) è richiesto da diversi moduli di FreeCAD per accedere all'interfaccia Qt di FreeCAD. È già incluso nella versione per windows di FreeCAD, e di solito su Linux è installato automaticamente da FreeCAD quando l'installazione viene fatta dai repository ufficiali. Se i moduli Draft, Arch, ecc. sono abilitati, dopo che FreeCAD è installato, significa che PySide (precedentemente PyQt) è presente e non è più necessario fare nulla.
|
||
</p><p><b>Note:</b>
|
||
</p><p>In FreeCAD, PyQt4 diventerà progressivamente obsoleto dopo la versione 0.13, a favore di <a rel="nofollow" class="external text" href="http://qt-project.org/wiki/PySide">PySide</a>, che fa esattamente lo stesso lavoro, ma ha una licenza (LGPL) più compatibile con FreeCAD.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_3">Installazione</span></h3>
|
||
<h5><span class="mw-headline" id="Linux">Linux</span></h5>
|
||
<p>Il modo più semplice per installare PySide è attraverso il gestore dei pacchetti della propria distribuzione. Su sistemi Debian/Ubuntu, il nome del pacchetto è generalmente <i>python-PySide</i>, mentre per i sistemi basati su RPM viene chiamato <i>pyside</i>. Le dipendenze necessarie (Qt e SIP) si installano automaticamente.
|
||
</p>
|
||
<h5><span class="mw-headline" id="Windows">Windows</span></h5>
|
||
<p>Il programma può essere scaricato da <a rel="nofollow" class="external free" href="http://qt-project.org/wiki/Category:LanguageBindings::PySide::Downloads">http://qt-project.org/wiki/Category:LanguageBindings::PySide::Downloads</a>. Prima di installare PyQt4 è necessario installare le librerie Qt e SIP (operazioni da documentare).
|
||
</p>
|
||
<h4><span class="mw-headline" id="MacOSX">MacOSX</span></h4>
|
||
<p>PyQt può essere installato su Mac tramite homebrew oppure port. Per maggiori informazioni, vedere <a href="/wiki/CompileOnMac/it#Install_Dependencies" title="CompileOnMac/it">CompileOnMac/it#Install_Dependencies</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzo_2">Utilizzo</span></h3>
|
||
<p>Dopo l'installazione, è possibile verificare che tutto funzioni digitando nella console Python di FreeCAD:
|
||
</p>
|
||
<pre>import PySide </pre>
|
||
<p>Per accedere all'interfaccia di FreeCAD, digitare:
|
||
</p>
|
||
<pre>from PySide import QtCore,QtGui
|
||
FreeCADWindow = FreeCADGui.getMainWindow() </pre>
|
||
<p>Quindi si può iniziare ad esplorare l'interfaccia con il comando dir(). È possibile aggiungere nuovi elementi, ad esempio un widget personalizzato, con comandi come:
|
||
</p>
|
||
<pre>FreeCADWindow.addDockWidget(QtCore.Qt.RghtDockWidgetArea,my_custom_widget) </pre>
|
||
<p>Lavorare con Unicode
|
||
</p>
|
||
<pre>text = text.encode('utf-8') </pre>
|
||
<p>Lavorare con QFileDialog e OpenFileName :
|
||
</p>
|
||
<pre>path = FreeCAD.ConfigGet("AppHomePath")
|
||
#path = FreeCAD.ConfigGet("UserAppData")
|
||
OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "Read a txt file", path, "*.txt") </pre>
|
||
<p>Lavorare con QFileDialog e SaveFileName :
|
||
</p>
|
||
<pre>path = FreeCAD.ConfigGet("AppHomePath")
|
||
#path = FreeCAD.ConfigGet("UserAppData")
|
||
SaveName, Filter = PySide.QtGui.QFileDialog.getSaveFileName(None, "Save a file txt", path, "*.txt") </pre>
|
||
<h3><span class="mw-headline" id="Esempio_di_passaggio_da_PyQt4_a_PySide">Esempio di passaggio da PyQt4 a PySide</span></h3>
|
||
<p>Nota: questi sono esempi di errori riscontrati nella transizione da PyQt4 verso PySide con le correzioni che sono state fatte. Con gli esempi precedenti sono certamente possibili altre soluzioni
|
||
</p>
|
||
<pre>try:
|
||
import PyQt4 # PyQt4
|
||
from PyQt4 import QtGui ,QtCore # PyQt4
|
||
from PyQt4.QtGui import QComboBox # PyQt4
|
||
from PyQt4.QtGui import QMessageBox # PyQt4
|
||
from PyQt4.QtGui import QTableWidget, QApplication # PyQt4
|
||
from PyQt4.QtGui import * # PyQt4
|
||
from PyQt4.QtCore import * # PyQt4
|
||
except Exception:
|
||
import PySide # PySide
|
||
from PySide import QtGui ,QtCore # PySide
|
||
from PySide.QtGui import QComboBox # PySide
|
||
from PySide.QtGui import QMessageBox # PySide
|
||
from PySide.QtGui import QTableWidget, QApplication # PySide
|
||
from PySide.QtGui import * # PySide
|
||
from PySide.QtCore import * # PySide </pre>
|
||
<p>Per accedere all'interfaccia di FreeCAD, digitare:
|
||
</p><p>è possibile aggiungere nuovi elementi, come un widget personalizzato, con comandi come:
|
||
</p>
|
||
<pre>myNewFreeCADWidget = QtGui.QDockWidget() # create a new dockwidget
|
||
myNewFreeCADWidget.ui = Ui_MainWindow() # myWidget_Ui() # load the Ui script
|
||
myNewFreeCADWidget.ui.setupUi(myNewFreeCADWidget) # setup the ui
|
||
try:
|
||
app = QtGui.qApp # PyQt4 # the active qt window, = the freecad window since we are inside it
|
||
FCmw = app.activeWindow() # PyQt4 # the active qt window, = the freecad window since we are inside it
|
||
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window
|
||
except Exception:
|
||
FCmw = FreeCADGui.getMainWindow() # PySide # the active qt window, = the freecad window since we are inside it
|
||
FCmw.addDockWidget(QtCore.Qt.RightDockWidgetArea,myNewFreeCADWidget) # add the widget to the main window </pre>
|
||
<p>Lavorare con Unicode
|
||
</p>
|
||
<pre>try:
|
||
text = unicode(text, 'ISO-8859-1').encode('UTF-8') # PyQt4
|
||
except Exception:
|
||
text = text.encode('utf-8') # PySide </pre>
|
||
<p>Lavorare con QFileDialog e OpenFileName :
|
||
</p>
|
||
<pre>OpenName = ""
|
||
try:
|
||
OpenName = QFileDialog.getOpenFileName(None,QString.fromLocal8Bit("Lire un fichier FCInfo ou txt"),path,"*.FCInfo *.txt") # PyQt4
|
||
except Exception:
|
||
OpenName, Filter = PySide.QtGui.QFileDialog.getOpenFileName(None, "Lire un fichier FCInfo ou txt", path, "*.FCInfo *.txt")#PySide </pre>
|
||
<p>Lavorare con QFileDialog e SaveFileName :
|
||
</p>
|
||
<pre>SaveName = ""
|
||
try:
|
||
SaveName = QFileDialog.getSaveFileName(None,QString.fromLocal8Bit("Sauver un fichier FCInfo"),path,"*.FCInfo") # PyQt4
|
||
except Exception:
|
||
SaveName, Filter = PySide.QtGui.QFileDialog.getSaveFileName(None, "Sauver un fichier FCInfo", path, "*.FCInfo")# PySide </pre>
|
||
<p>Il MessageBox:
|
||
</p>
|
||
<pre>def errorDialog(msg):
|
||
diag = QtGui.QMessageBox(QtGui.QMessageBox.Critical,u"Error Message",msg )
|
||
try:
|
||
diag.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) # PyQt4 # this function sets the window before
|
||
except Exception:
|
||
diag.setWindowFlags(PySide.QtCore.Qt.WindowStaysOnTopHint)# PySide # this function sets the window before
|
||
# diag.setWindowModality(QtCore.Qt.ApplicationModal) # function has been disabled to promote "WindowStaysOnTopHint"
|
||
diag.exec_() </pre>
|
||
<p>Lavorare con setProperty (PyQt4) e setValue (PySide)
|
||
</p>
|
||
<pre>self.doubleSpinBox.setProperty("value", 10.0) # PyQt4 </pre>
|
||
<p>sostituire con:
|
||
</p>
|
||
<pre>self.doubleSpinBox.setValue(10.0) # PySide </pre>
|
||
<p>Lavorare con setToolTip
|
||
</p>
|
||
<pre>self.doubleSpinBox.setToolTip(_translate("MainWindow", "Coordinate placement Axis Y", None)) # PyQt4 </pre>
|
||
<p>sostituire con:
|
||
</p>
|
||
<pre>self.doubleSpinBox.setToolTip(_fromUtf8("Coordinate placement Axis Y")) # PySide </pre>
|
||
<p>oppure:
|
||
</p>
|
||
<pre>self.doubleSpinBox.setToolTip(u"Coordinate placement Axis Y.")# PySide </pre>
|
||
<h4><span class="mw-headline" id="Documentazione_2">Documentazione</span></h4>
|
||
<p>Ecco alcuni tutorial di PyQt4 (che spiegano come costruire interfacce con Qt Designer da utilizzare con Python):
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external free" href="http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html">http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/classes.html</a> - il riferimento ufficiale delle API di PyQt4</li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.rkblog.rk.edu.pl/w/p/introduction-pyqt4/">http://www.rkblog.rk.edu.pl/w/p/introduction-pyqt4/</a> - una semplice introduzione</li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www.zetcode.com/tutorials/pyqt4/">http://www.zetcode.com/tutorials/pyqt4/</a> - un manuale molto approfondito e completo</li></ul>
|
||
<h3><span class="mw-headline" id="Pivy_2">Pivy</span></h3>
|
||
<ul><li> homepage: <a rel="nofollow" class="external free" href="https://bitbucket.org/Coin3D/coin/wiki/Home">https://bitbucket.org/Coin3D/coin/wiki/Home</a></li>
|
||
<li> licenza: BSD</li>
|
||
<li> optional, ma è necessario per alcuni moduli di FreeCAD: Draft, Arch</li></ul>
|
||
<p>Pivy serve a alcuni moduli per accedere alla visualizzazione 3D di FreeCAD. Su Windows, Pivy è già in impacchettato nel programma di installazione FreeCAD, e su Linux solitamente è installato automaticamente quando si installa FreeCAD da un repository ufficiale. Su MacOSX, purtroppo, è necessario compilare pivy da soli.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_4">Installazione</span></h3>
|
||
<h4><span class="mw-headline" id="Prerequisiti_4">Prerequisiti</span></h4>
|
||
<p>Credo che prima di compilare Pivy si desideri avere Coin e SoQt installati.
|
||
</p><p>Per compilarlo su Mac è sufficiente installare il <a rel="nofollow" class="external text" href="http://www.coin3d.org/lib/plonesoftwarecenter_view">pacchetto binario Coin3</a> . Il tentativo di installare Coin da MacPorts è stato problematico: ha cercato di aggiungere un sacco di pacchetti di X Windows e alla fine il tentativo è fallito con un errore di script.
|
||
</p><p>Per Fedora ho trovato un RPM con Coin3
|
||
</p><p>SoQt compilato da <a rel="nofollow" class="external text" href="http://www.coin3d.org/lib/soqt/releases/1.5.0">codice sorgente</a> funziona bene su Mac e Linux.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Debian_.26_Ubuntu">Debian & Ubuntu</span></h4>
|
||
<p>A partire da Debian Squeeze e Ubuntu Lucid, Pivy sarà disponibile direttamente dai repository ufficiali e questo eviterà un sacco di problemi.
|
||
</p><p>Nel frattempo, è possibile scaricare uno dei pacchetti che abbiamo creato (per Debian e Ubuntu Karmic) e disponibili nelle pagine <a href="Download.html" title="Download">Download</a>, o compilarlo da soli.
|
||
</p><p>Il modo migliore per compilare facilmente Pivy è quello di prendere il pacchetto sorgente di Debian per Pivy e creare un pacchetto con debuild.
|
||
</p><p>È lo stesso codice sorgente dal sito ufficiale di Pivy, ma la comunità di Debian vi ha fatto diverse aggiunte bug-fixing.
|
||
</p><p>Si compila bene anche su Ubuntu Karmic: <a rel="nofollow" class="external free" href="http://packages.debian.org/squeeze/python-pivy">http://packages.debian.org/squeeze/python-pivy</a> . Scaricare i file .orig.gz e .diff.gz, poi decomprimerli entrambi, quindi applicare .diff al codice sorgente: andare nella cartella del codice sorgente decompresso di Pivy, e applicare la patch .diff:
|
||
</p>
|
||
<pre>patch -p1 < ../pivy_0.5.0~svn765-2.diff </pre>
|
||
<p>poi
|
||
</p>
|
||
<pre>debuild </pre>
|
||
<p>per avere Pivy correttamente costruito in un pacchetto ufficiale installabile. Dopo è sufficiente installare il pacchetto con gdebi.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Altre_distribuzioni_Linux">Altre distribuzioni Linux</span></h4>
|
||
<p>Prima di tutto scaricare gli ultimi sorgenti dai <a rel="nofollow" class="external text" href="http://pivy.coin3d.org/mercurial/">repository del progetto</a>:
|
||
</p>
|
||
<pre>hg clone http://hg.sim.no/Pivy/default Pivy </pre>
|
||
<p>A partire dal marzo 2012, l'ultima versione è Pivy-0.5.
|
||
</p><p>In seguito serve uno strumento chiamato SWIG per generare il codice C++ per i binding di Python. Pivy-0.5 segnala che è stato testato solo con SWIG 1.3.31, 1.3.33, 1.3.35 e 1.3.40. Perciò si può scaricare un tarball del codice sorgente di una di queste vecchie versioni da <a rel="nofollow" class="external free" href="http://www.swig.org">http://www.swig.org</a>. Poi scompattarlo e da una riga di comando fare (come root):
|
||
</p>
|
||
<pre>./configure
|
||
make
|
||
make install (or checkinstall if you use it) </pre>
|
||
<p>Impiega appena pochi secondi per costruirsi.
|
||
</p><p>In alternativa, si può provare la costruzione con un SWIG più recente. A partire dal marzo 2012 la versione tipica del repository è la 2.0.4. Pivy presenta un piccolo problema di compilazione con SWIG 2.0.4 su Mac OS (vedere sotto), mentre pare si costruisca bene su Fedora Core 15.
|
||
</p><p>Dopo le operazioni precedenti andare nel sorgente di Pivy e eseguire:
|
||
</p>
|
||
<pre>python setup.py build </pre>
|
||
<p>per creare i file sorgente. Notare che la generazione può produrre migliaia di avvisi, ma fortunatamente non ci sono errori.
|
||
</p><p>Questo è probabilmente obsoleto, ma si può incorrere in un errore di compilazione in cui una 'const char*' non può essere convertita in una 'char*'. Per risolvere il problema basta scrivere una 'const' prima nelle righe appropriate. Si devono correggere sei righe.
|
||
</p><p>Dopo di che, installare digitando (come root):
|
||
</p>
|
||
<pre>python setup.py install (or checkinstall python setup.py install) </pre>
|
||
<p>Questo è tutto. Pivy è installato.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Mac_OS">Mac OS</span></h4>
|
||
<p>Queste istruzioni potrebbero non essere complete. Qualcosa di simile a questo ha funzionato per OS 10,7 dopo marzo 2012. Io uso MacPorts come repository, ma dovrebbero funzionare anche le altre opzioni.
|
||
</p><p>Per quanto riguarda Linux, scaricare l'ultimo codice sorgente:
|
||
</p>
|
||
<pre>hg clone http://hg.sim.no/Pivy/default Pivy </pre>
|
||
<p>Se non si dispone di hg, è possibile ottenerlo da MacPorts:
|
||
</p>
|
||
<pre>port install mercurial </pre>
|
||
<p>Poi, come prima, è necessario SWIG. Si tratta di fare:
|
||
</p>
|
||
<pre>port install swig </pre>
|
||
<p>Ho scoperto che avevo bisogno anche di:
|
||
</p>
|
||
<pre>port install swig-python </pre>
|
||
<p>Da marzo 2012, la versione di SWIG in MacPorts è la 2.0.4. Come detto in precedenza per Linux, potrebbe essere meglio scaricare una versione precedente. SWIG 2.0.4 sembra avere un bug che blocca la costruzione di Pivy. Vedere il primo messaggio in questa raccolta: <a rel="nofollow" class="external free" href="https://sourceforge.net/mailarchive/message.php?msg_id=28114815">https://sourceforge.net/mailarchive/message.php?msg_id=28114815</a>
|
||
</p><p>Questo problema può essere corretto modificando i 2 percorsi del codice sorgente per aggiungere dereferenziazioni: arg4 *, * arg5 al posto di arg4, arg5. Ora si può costruire Pivy:
|
||
</p>
|
||
<pre>python setup.py build
|
||
sudo python setup.py install </pre>
|
||
<h4><span class="mw-headline" id="Windows_2">Windows</span></h4>
|
||
<p>Supponendo di utilizzare Visual Studio 2005 o versioni successive è necessario aprire un prompt dei comandi con 'Visual Studio 2005 Command prompt' dal menu Strumenti. Se l'interprete Python non è ancora nel percorso di sistema fare:
|
||
</p>
|
||
<pre>set PATH=path_to_python_2.5;%PATH% </pre>
|
||
<p>Per avere pivy funzionante si devono scaricare gli ultimi sorgenti dal repository del progetto:
|
||
</p>
|
||
<pre>svn co https://svn.coin3d.org/repos/Pivy/trunk Pivy </pre>
|
||
<p>Dopo serve lo strumento chiamato SWIG per generare il codice C++ per i binding con Python. Si raccomanda di utilizzare la versione 1.3.25 di SWIG, non l'ultima versione, perché al momento pivy funziona correttamente solo con la 1.3.25. Scaricare i file binari per 1.3.25 da <a rel="nofollow" class="external free" href="http://www.swig.org">http://www.swig.org</a>. Poi scompattarli e dalla riga di comando aggiungerli al percorso di sistema
|
||
</p>
|
||
<pre>set PATH=path_to_swig_1.3.25;%PATH% </pre>
|
||
<p>e impostare il percorso appropriato per COINDIR
|
||
</p>
|
||
<pre>set COINDIR=path_to_coin </pre>
|
||
<p>Su Windows il file di configurazione di pivy si aspetta SoWin invece di SoQt come predefinito. Non ho trovato un modo valido per costruirlo con SoQt, così ho modificato direttamente il file setup.py. Nella riga 200 è sufficiente rimuovere la parte 'sowin': ('gui._sowin', 'sowin-config', 'Pivy.gui.') (non rimuovere le parentesi di chiusura).
|
||
</p><p>Successivamente andare nel sorgente di pivy e eseguire:
|
||
</p>
|
||
<pre>python setup.py build </pre>
|
||
<p>per creare i file sorgente. Si può incorrere nell'errore di compilazione 'header files couldn't be found' (file di intestazione non trovati). In questo caso, impostare la variabile INCLUDE
|
||
</p>
|
||
<pre>set INCLUDE=%INCLUDE%;path_to_coin_include_dir </pre>
|
||
<p>e, se le intestazioni di SoQt non sono nella stessa posizione delle intestazioni di Coin, impostare anche
|
||
</p>
|
||
<pre>set INCLUDE=%INCLUDE%;path_to_soqt_include_dir </pre>
|
||
<p>e infine impostare le intestazioni di Qt
|
||
</p>
|
||
<pre>set INCLUDE=%INCLUDE%;path_to_qt4\include\Qt </pre>
|
||
<p>Se si utilizza la versione Express Edition di Visual Studio è possibile ottenere un'eccezione di errore di chiave di Python (KeyError). In questo caso è necessario modificare alcune cose in msvccompiler.py situato nella propria installazione di Python.
|
||
</p><p>Andare alla riga 122 e sostituire la riga
|
||
</p>
|
||
<pre>vsbase = r"Software\Microsoft\VisualStudio\%0.1f" % version </pre>
|
||
<p>con
|
||
</p>
|
||
<pre>vsbase = r"Software\Microsoft\VCExpress\%0.1f" % version </pre>
|
||
<p>Riprovare di nuovo.
|
||
Se si ottiene un secondo errore del tipo
|
||
</p>
|
||
<pre>error: Python was built with Visual Studio 2003;... </pre>
|
||
<p>è necessario sostituire anche la riga 128
|
||
</p>
|
||
<pre>self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv1.1") </pre>
|
||
<p>con
|
||
</p>
|
||
<pre>self.set_macro("FrameworkSDKDir", net, "sdkinstallrootv2.0") </pre>
|
||
<p>Riprovare ancora una volta.
|
||
Se si ottiene di nuovo un errore quale
|
||
</p>
|
||
<pre>error: Python was built with Visual Studio version 8.0, and extensions need to be built with the same version of the compiler, but it isn't installed. </pre>
|
||
<p>allora si deve controllare le variabili d'ambiente DISTUTILS_USE_SDK e MSSDK con
|
||
</p>
|
||
<pre>echo %DISTUTILS_USE_SDK%
|
||
echo %MSSDK% </pre>
|
||
<p>Se non sono ancora impostate basta impostarle, ad esempio, a 1
|
||
</p>
|
||
<pre>set DISTUTILS_USE_SDK=1
|
||
set MSSDK=1 </pre>
|
||
<p>Ora, si può incorrere in un errore di compilazione in cui una 'const char *' non può essere convertita in una 'char *'. Per risolvere il problema basta scrivere una 'const' prima nelle righe appropriate. Ci sono sei righe da correggere.
|
||
</p><p>Infine, copiare la directory di pivy generata in un posto dove l'interprete di Python di FreeCAD possa trovarla.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Utilizzo_3">Utilizzo</span></h3>
|
||
<p>Per verificare se Pivy è installato correttamente:
|
||
</p>
|
||
<pre>import pivy </pre>
|
||
<p>Per consentire a Pivy di accedere al grafo di scena (Scenegraph) di FreeCAD effettuare le seguenti operazioni:
|
||
</p>
|
||
<pre>from pivy import coin
|
||
App.newDocument() # Open a document and a view
|
||
view = Gui.ActiveDocument.ActiveView
|
||
FCSceneGraph = view.getSceneGraph() # returns a pivy Python object that holds a SoSeparator, the main "container" of the Coin scenegraph
|
||
FCSceneGraph.addChild(coin.SoCube()) # add a box to scene </pre>
|
||
<p>Ora è possibile esplorare FCSceneGraph con il comando dir().
|
||
</p>
|
||
<h3><span class="mw-headline" id="Documentazione_aggiuntiva">Documentazione aggiuntiva</span></h3>
|
||
<p>Purtroppo in rete la documentazione su Pivy è ancora quasi inesistente. Ma può essere utile la documentazione di Coin, in quanto Pivy semplicemente traduce le funzioni di Coin, i nodi e i metodi in Python, tutto mantiene lo stesso nome e le stesse proprietà, tenendo presente la differenza di sintassi tra C e Python:
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external free" href="http://doc.coin3d.org/Coin/classes.html">http://doc.coin3d.org/Coin/classes.html</a> - Coin3D API Reference</li>
|
||
<li> <a rel="nofollow" class="external free" href="http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html">http://www-evasion.imag.fr/~Francois.Faure/doc/inventorMentor/sgi_html/index.html</a> - The Inventor Mentor - La "Bibbia" del linguaggio di descrizione della scena di Inventor.</li></ul>
|
||
<p>Potete anche esplorare il file Draft.py nella cartella Mod/Draft di FreeCAD, dato che che in esso si fa un grande uso di pivy.
|
||
</p>
|
||
<h2><span class="mw-headline" id="pyCollada">pyCollada</span></h2>
|
||
<ul><li> homepage: <a rel="nofollow" class="external free" href="http://pycollada.github.com">http://pycollada.github.com</a></li>
|
||
<li> license: BSD</li>
|
||
<li> optional, necessario per consentire di importare ed esportare i file di Collada (.DAE)</li></ul>
|
||
<p>pyCollada è una libreria di Python che permette ai programmi di leggere e di scrivere <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/COLLADA">i file di Collada (*.DAE)</a>. Quando pyCollada è installato sul sistema, FreeCAD lo rileva e aggiunge le opzioni di importazione e di esportazione per gestire l'apertura e il salvataggio di file nel formato Collada.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_5">Installazione</span></h3>
|
||
<p>Pycollada in genere non è ancora disponibile nei repository delle distribuzioni Linux, ma dato che è composto solo di file Python, non richiede la compilazione, ed è facile da installare. Si può installare in 2 modi, o direttamente dal repository git ufficiale di pycollada, o con lo strumento easy_install.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Linux_2">Linux</span></h4>
|
||
<p>In entrambi i casi, è necessario che nel sistema siano già installati i seguenti pacchetti:
|
||
</p>
|
||
<pre>python-lxml
|
||
python-numpy
|
||
python-dateutil </pre>
|
||
<h5><span class="mw-headline" id="Dal_repository_git">Dal repository git</span></h5>
|
||
<pre>git clone git://github.com/pycollada/pycollada.git pycollada
|
||
cd pycollada
|
||
sudo python setup.py install </pre>
|
||
<h5><span class="mw-headline" id="Con_easy_install">Con easy_install</span></h5>
|
||
<p>Supponendo di avere già una installazione completa di Python, l'utilità easy_install dovrebbe essere già presente:
|
||
</p>
|
||
<pre>easy_install pycollada </pre>
|
||
<p>Si può controllare se pycollada è stato installato correttamente digitando in una console python:
|
||
</p>
|
||
<pre>import collada </pre>
|
||
<p>Se non viene restituito nulla (nessun messaggio di errore), allora tutto è OK
|
||
</p>
|
||
<h4><span class="mw-headline" id="Windows_3">Windows</span></h4>
|
||
<p>Su Windows, dalla versione 0.15, pycollada è incluso in FreeCAD sia nella versione di rilascio che in quella di sviluppo quindi non sono più necessari ulteriori passaggi.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Mac_OS_2">Mac OS</span></h4>
|
||
<p>Se si utilizza la build Homebrew di FreeCAD è possibile installare pycollada nel proprio sistema Python utilizzando pip.
|
||
</p><p>Se è necessario installare pip:
|
||
</p>
|
||
<pre>$ sudo easy_install pip </pre>
|
||
<p>Installare pycollada:
|
||
</p>
|
||
<pre>$ sudo pip install pycollada </pre>
|
||
<p>Se si utilizza una versione binaria di FreeCAD, si può dire a pip di installare pycollada all'interno di FreeCAD.app:
|
||
</p>
|
||
<pre>$ pip install --target="/Applications/FreeCAD.app/Contents/lib/python2.7/site-packages" pycollada </pre>
|
||
<p>or after downloading the pycollada code
|
||
</p>
|
||
<pre>$ export PYTHONPATH=/Applications/FreeCAD\ 0.16.6706.app/Contents/lib/python2.7/site-packages:$PYTHONPATH
|
||
$ python setup.py install --prefix=/Applications/FreeCAD\ 0.16.6706.app/Contents </pre>
|
||
<h2><span class="mw-headline" id="IfcOpenShell">IfcOpenShell</span></h2>
|
||
<ul><li> homepage: <a rel="nofollow" class="external free" href="http://www.ifcopenshell.org">http://www.ifcopenshell.org</a></li>
|
||
<li> licenza: LGPL</li>
|
||
<li> optional, necessario per consentire di importare i file IFC</li></ul>
|
||
<p>IFCOpenShell è una libreria attualmente in fase di sviluppo, che permette di importare (e presto di esportare) file <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Industry_Foundation_Classes">Industry foundation Classes (*.IFC)</a>. IFC è una estensione per il formato STEP, e sta diventando lo standard nei processi di lavoro <a rel="nofollow" class="external text" href="http://en.wikipedia.org/wiki/Building_information_modeling">BIM</a>. Quando ifcopenshell è installato correttamente nel vostro sistema, il <a href="https://www.freecadweb.org/wiki/index.php?title=Arch_Module/it" title="Arch Module/it">modulo Arch</a> di FreeCAD è grado di rilevarlo e usarlo per importare i file IFC. Poiché ifcopenshell si basa su OpenCascade, come FreeCAD, la qualità della importazione è molto buona, producendo geometria solida di alta qualità.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_6">Installazione</span></h3>
|
||
<p>Dato che ifcopenshell è abbastanza recente, dovrete probabilmente compilarla da soli.
|
||
</p>
|
||
<h4><span class="mw-headline" id="Linux_3">Linux</span></h4>
|
||
<p>Per compilare ifcopenshell serve che sul sistema siano installati un paio di pacchetti di sviluppo:
|
||
</p>
|
||
<pre>liboce-*-dev
|
||
python-dev
|
||
swig </pre>
|
||
<p>ma dato che anche FreeCAD richiede tutti questi pacchetti, se è possibile compilare FreeCAD, non serve alcun dipendenza in più per compilare IfcOpenShell.
|
||
</p><p>Prelevare l'ultimo codice sorgente da:
|
||
</p>
|
||
<pre>git clone https://github.com/IfcOpenShell/IfcOpenShell.git </pre>
|
||
<p>Il processo di costruzione è molto semplice:
|
||
</p>
|
||
<pre>mkdir ifcopenshell-build
|
||
cd ifcopenshell-build
|
||
cmake ../IfcOpenShell/cmake </pre>
|
||
<p>o, se si utilizza Oce invece di OpenCascade:
|
||
</p>
|
||
<pre>cmake -DOCC_INCLUDE_DIR=/usr/include/oce ../ifcopenshell/cmake </pre>
|
||
<p>Siccome ifcopenshell è fatto principalmente per Blender, utilizza python3 di impostazione predefinita. Per usarlo dentro FreeCAD, è necessario compilarlo contro la stessa versione di Python che viene utilizzata da FreeCAD. Quindi potrebbe essere necessario forzare la versione di Python con parametri aggiuntivi cmake (adattare per la vostra versione di Python):
|
||
</p>
|
||
<pre>cmake -DOCC_INCLUDE_DIR=/usr/include/oce -DPYTHON_INCLUDE_DIR=/usr/include/python2.7 -DPYTHON_LIBRARY=/usr/lib/python2.7.so ../ifcopenshell/cmake </pre>
|
||
<p>Poi:
|
||
</p>
|
||
<pre>make
|
||
sudo make install </pre>
|
||
<p>Si può controllare se ifcopenshell è stato installato correttamente digitando in una console python:
|
||
</p>
|
||
<pre>import ifcopenshell </pre>
|
||
<p>Se non viene restituito nulla (nessun messaggio di errore), allora tutto è OK
|
||
</p>
|
||
<h4><span class="mw-headline" id="Windows_4">Windows</span></h4>
|
||
<p><i>Copiato dal file README di IfcOpenShell</i>
|
||
</p><p>Users are advised to use the Visual Studio .sln file in the win/ folder. For Windows users a prebuilt Open CASCADE version is available from the <a rel="nofollow" class="external free" href="http://opencascade.org">http://opencascade.org</a> website. Download and install this version and provide the paths to the Open CASCADE header and library files to MS Visual Studio C++.
|
||
</p><p>For building the IfcPython wrapper, SWIG needs to be installed. Please download the latest swigwin version from <a rel="nofollow" class="external free" href="http://www.swig.org/download.html">http://www.swig.org/download.html</a> . After extracting the .zip file, please add the extracted folder to the PATH environment variable. Python needs to be installed, please provide the include and library paths to Visual Studio.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Link_7">Link</span></h3>
|
||
<p>Tutorial <a href="https://www.freecadweb.org/wiki/index.php?title=Import/Export_IFC_-_compiling_IfcOpenShell/it" title="Import/Export IFC - compiling IfcOpenShell/it">Importare e Esportare IFC - compilare IfcOpenShell</a>
|
||
</p>
|
||
<h2><span class="mw-headline" id="Teigha_Converter">Teigha Converter</span></h2>
|
||
<ul><li> homepage: <a rel="nofollow" class="external free" href="http://www.opendesign.com/guestfiles/Teigha_File_Converter">http://www.opendesign.com/guestfiles/Teigha_File_Converter</a></li>
|
||
<li> licenza: freeware</li>
|
||
<li> optional, usato per abilitare l'importazione e l'esportazione dei file DWG</li></ul>
|
||
<p>Il convertitore Teigha è una piccola utility liberamente disponibile che consente di convertire tra diverse versioni i file DWG e DXF. FreeCAD può usarlo per offrire l'importazione e l'esportazione dei file DWG, convertendo prima i formati DWG in DXF al suo interno, e poi importando il contenuto dei file tramite il suo importatore DXF standard. Si applicano le restrizioni di <a href="https://www.freecadweb.org/wiki/index.php?title=Draft_DXF/it" title="Draft DXF/it">importazione di DXF</a>.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Installazione_7">Installazione</span></h3>
|
||
<p>Su tutte le piattaforme, basta installare il pacchetto appropriato da <a rel="nofollow" class="external free" href="https://www.opendesign.com/guestfiles/teigha_file_converter">https://www.opendesign.com/guestfiles/teigha_file_converter</a> . Se, dopo l'installazione, l'utility non viene trovata automaticamente da FreeCAD, può essere necessario impostare manualmente il percorso del file eseguibile del converter. Attivare l'ambiente Draft, poi nelle opzioni del menu Modifica -> Preferenze -> Draft -> Importa/Esporta ->DWG compilare il campo "Path to Teigha File Converter" con il corretto percorso.
|
||
</p>
|
||
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<h2 align="center"><span class="mw-headline" id="Crediti_2">Crediti</span></h2>
|
||
<p><translate>
|
||
FreeCAD would not be what it is without the generous contributions of many people. Here's an overview of the people and companies who contributed to FreeCAD over time. For credits for the third party libraries see the <a href="Third_Party_Libraries.html" title="Third Party Libraries">Third Party Libraries</a> page.
|
||
</p>
|
||
<h3><span class="mw-headline" id="Development">Development</span></h3>
|
||
<h4><span class="mw-headline" id="Project_managers">Project managers</span></h4>
|
||
<p>Lead developers of the FreeCAD project:
|
||
</translate>
|
||
</p>
|
||
<ul><li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Jriegel" title="User:Jriegel">Jürgen Riegel</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Wmayer" title="User:Wmayer">Werner Mayer</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Yorikvanhavre" class="mw-redirect" title="User:Yorikvanhavre">Yorik van Havre</a></li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h4><span class="mw-headline" id="Main_developers">Main developers</span></h4>
|
||
<p>People who work regularly on the FreeCAD code (retrieved from <a rel="nofollow" class="external free" href="https://github.com/FreeCAD/FreeCAD/graphs/contributors">https://github.com/FreeCAD/FreeCAD/graphs/contributors</a>):
|
||
</translate>
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3232">Abdullah Tahiriyo</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=4325">Alexander Golubev (Fat-Zer)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=2069">Bernd Hahnbach</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=708">Brad Collette (sliptonic)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=689">Daniel Falck</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1546">Eivind Kvedalen</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=6125">f3nix</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3449">Ian Rees</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=997">Jan Rheinlaender</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=681">Jonathan Wiedemann (rockn)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=574">Jose Luis Cercos Pita (sanguinariojoe)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=270">Logari81</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://freecadamusements.blogspot.co.uk/">Luke A. Parry</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=2928">mdinger</a></li>
|
||
<li> mghansen</li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3666">Przemo Firszt(PrzemoF)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=4252">sgrogan</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=765">shoogen</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=686">Stefan Tröger (ickby)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=208">tanderson69 (blobfish)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=7506">vejmarie</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3888">Victor Titov (DeepSOIC)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1375">wandererfan</a></li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h4><span class="mw-headline" id="Other_coders">Other coders</span></h4>
|
||
<p>Other people who contributed code to the FreeCAD project:
|
||
</translate>
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=611">jmaustpc</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=652">j-dowsett</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=930">keithsloan52</a></li>
|
||
<li> Joachim Zettler</li>
|
||
<li> Graeme van der Vlugt</li>
|
||
<li> Berthold Grupp</li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Xorx" title="User:Xorx">Georg Wiora</a></li>
|
||
<li> Martin Burbaum</li>
|
||
<li> Jacques-Antoine Gaudin</li>
|
||
<li> Ken Cline</li>
|
||
<li> Dmitry Chigrin</li>
|
||
<li> Remigiusz Fiedler (DXF-parser)</li>
|
||
<li> peterl94 </li>
|
||
<li> jobermayr</li>
|
||
<li> ovginkel</li>
|
||
<li> triplus</li>
|
||
<li> tomate44</li>
|
||
<li> maurerpe</li>
|
||
<li> Johan3DV</li>
|
||
<li> Mandeep Singh</li>
|
||
<li> fandaL</li>
|
||
<li> jonnor</li>
|
||
<li> usakhelo</li>
|
||
<li> plaes</li>
|
||
<li> SebKuzminsky</li>
|
||
<li> jcc242</li>
|
||
<li> ezzieyguywuf</li>
|
||
<li> marktaff</li>
|
||
<li> poutine70</li>
|
||
<li> qingfengxia</li>
|
||
<li> dbtayl</li>
|
||
<li> itain</li>
|
||
<li> Barleyman</li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Companies">Companies</span></h3>
|
||
<p>Companies which donated code or developer time:
|
||
</translate>
|
||
</p>
|
||
<ul><li> Imetric 3D</li>
|
||
<li> <a rel="nofollow" class="external text" href="https://www.alephobjects.com/">AlephObjects</a></li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Forum_moderators">Forum moderators</span></h3>
|
||
<p>People in charge of the <a rel="nofollow" class="external text" href="http://forum.freecadweb.org">FreeCAD forum</a> (retrieved from <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/memberlist.php?mode=team">http://forum.freecadweb.org/memberlist.php?mode=team</a>):
|
||
</translate>
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="https://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=11337">agryson</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=689">Daniel Falck</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3888">DeepSOIC</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1783">ediloren</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=611">jmaustpc</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=67">jriegel</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=270">Logari81</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=607">mrlukeparry</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=729">onesz</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3666">PrzemoF</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1529">r-frank</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=3315">Renato Rebelo</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=681">rockn</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=765">shoogen</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=69">wmayer</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=68">yorik</a></li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Community">Community</span></h3>
|
||
<p>People from the community who put a lot of efforts in helping the FreeCAD project either by being active on the forum, keeping a blog about FreeCAD, making video tutorials, packaging FreeCAD for Windows/Linux/MacOS X, writing a FreeCAD book... (listed by alphabetical order) (retrieved from <a rel="nofollow" class="external free" href="http://forum.freecadweb.org/memberlist.php?mode=&sk=d&sd=d#memberlist">http://forum.freecadweb.org/memberlist.php?mode=&sk=d&sd=d#memberlist</a>)
|
||
</translate>
|
||
</p>
|
||
<ul><li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1940">bejant</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://www.packtpub.com/freecad-solid-modeling-with-python/book">Brad Collette</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=251">cblt2l</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=4523">cox</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://opensourcedesigntools.blogspot.com/">Daniel Falck</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Emagdalena" title="User:Emagdalena">Eduardo Magdalena</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=725">hobbes1069</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://www.youtube.com/user/5needinput">jdurston (5needinput)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=861">John Morris (butchwax)</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://freecad-tutorial.blogspot.com/">Kwahooo</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=108">lhagan</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1047">marcxs</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Mario52" title="User:Mario52">Mario52</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Normandc" title="User:Normandc">Normandc</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1819">peterl94</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=356">pperisin</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Quick61" title="User:Quick61">Quick61</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Renatorivo" title="User:Renatorivo">Renatorivo</a></li>
|
||
<li> <a href="https://www.freecadweb.org/wiki/index.php?title=User:Rockn" title="User:Rockn">Rockn</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=782">triplus</a></li>
|
||
<li> <a rel="nofollow" class="external text" href="http://forum.freecadweb.org/memberlist.php?mode=viewprofile&u=1928">ulrich1a</a></li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Documentation_writers">Documentation writers</span></h3>
|
||
<p>People who wrote the documentation on this <a href="https://www.freecadweb.org/wiki/index.php?title=Main_Page" title="Main Page">wiki</a>:
|
||
</translate>
|
||
</p>
|
||
<ul><li> Renato Rivoira (renatorivo)</li>
|
||
<li> Honza32</li>
|
||
<li> Hervé Blorec</li>
|
||
<li> Eduardo Magdalena</li>
|
||
<li> piffpoof</li>
|
||
<li> Wurstwasser</li>
|
||
<li> Roland Frank (r-frank)</li>
|
||
<li> bejant</li>
|
||
<li> Ediloren</li>
|
||
<li> Isaac Ayala</li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Translators">Translators</span></h3>
|
||
<p>People who helped to translate the FreeCAD application (retrieved from <a rel="nofollow" class="external free" href="https://crowdin.com/project/freecad">https://crowdin.com/project/freecad</a>):
|
||
</translate>
|
||
</p>
|
||
<ul><li> Gerhard Scheepers</li>
|
||
<li> wbrwbr2011</li>
|
||
<li> hanhsuan</li>
|
||
<li> hicarl</li>
|
||
<li> fandaL</li>
|
||
<li> Peta T</li>
|
||
<li> Zdeněk Havlík</li>
|
||
<li> Jodbe</li>
|
||
<li> Peter Hageman</li>
|
||
<li> Vilfredo</li>
|
||
<li> Bruno Gonçalves Pirajá</li>
|
||
<li> Timo Seppola</li>
|
||
<li> rako</li>
|
||
<li> Pasi Kukkola</li>
|
||
<li> Ettore Atalan</li>
|
||
<li> nikoss</li>
|
||
<li> yang12</li>
|
||
<li> totyg</li>
|
||
<li> htsubota</li>
|
||
<li> asakura</li>
|
||
<li> Masaya Ootsuki</li>
|
||
<li> Jiyong Choi</li>
|
||
<li> Bartlomiej Niemiec</li>
|
||
<li> trzyha</li>
|
||
<li> bluecd</li>
|
||
<li> Miguel Morais</li>
|
||
<li> Nicu Tofan</li>
|
||
<li> Victor Radulescu</li>
|
||
<li> Angelescu Constantin</li>
|
||
<li> sema</li>
|
||
<li> Николай Матвеев</li>
|
||
<li> pinkpony</li>
|
||
<li> Alexandre Prokoudine</li>
|
||
<li> Марко Пејовић</li>
|
||
<li> Marosh</li>
|
||
<li> Peter Klofutar</li>
|
||
<li> Raulshc</li>
|
||
<li> javierMG</li>
|
||
<li> Lars</li>
|
||
<li> kunguz</li>
|
||
<li> Igor</li>
|
||
<li> Федір</li></ul>
|
||
<p><translate>
|
||
</p>
|
||
<h3><span class="mw-headline" id="Addons_developers">Addons developers</span></h3>
|
||
<p>Developers of FreeCAD addons (retrieved from <a rel="nofollow" class="external free" href="https://github.com/FreeCAD/FreeCAD-addons">https://github.com/FreeCAD/FreeCAD-addons</a>):
|
||
</translate>
|
||
</p>
|
||
<ul><li> microelly2</li>
|
||
<li> hamish2014</li>
|
||
<li> jreinhardt</li>
|
||
<li> jmwright</li>
|
||
<li> cblt2l</li>
|
||
<li> javierMG</li>
|
||
<li> looooo</li>
|
||
<li> shaise</li>
|
||
<li> marmni</li>
|
||
<li> Maaphoo</li>
|
||
<li> Rentlau</li></ul>
|
||
<p><translate>
|
||
</translate>
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
<p><br />
|
||
</p>
|
||
<div style="clear:both"></div>
|
||
|
||
|
||
|
||
</div>
|
||
|
||
</div><div class="printfooter">
|
||
Online version: "<a dir="ltr" href="https://www.freecadweb.org/wiki/index.php?title=Manual/it&oldid=145069">http://www.freecadweb.org/wiki/index.php?title=Manual/it&oldid=145069</a>"</div>
|
||
<div id="catlinks" class="catlinks" data-mw="interface"></div><div class="visualClear"></div>
|
||
</div>
|
||
</div>
|
||
<div id="mw-navigation">
|
||
<h2>Navigation menu</h2>
|
||
|
||
</body></html> |