Ambiente Drawing

From FreeCAD Documentation
Revision as of 19:24, 28 May 2018 by Mario52 (talk | contribs) (Created page with "* Proietta le forme: proietta le forme su un piano, nella vista 3D.")

L'ambiente Disegno (Drawing) consente di trasferire su carta il lavoro realizzato in 3D.

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.

Lo sviluppo del modulo Drawing è stato interrotto con il proposito di sostituirlo con il nuovo Modulo TechDraw 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.

Strumenti dell'interfaccia grafica

Questi strumenti permettono di creare, configurare e esportare le proiezioni dei solidi come disegni 2D.


  • Apri SVG: apre un foglio di disegno preventivamente salvato in un file SVG.
  • Nuovo Disegno A3: crea un nuovo disegno su un foglio di default A3 orizzontale di FreeCAD.
  • Annotazione: aggiunge una annotazione al foglio di disegno corrente.
  • Clip: aggiunge un gruppo di clip al foglio di disegno corrente.
  • Simbolo: aggiunge il contenuto di un file in formato SVG come un simbolo nel foglio di disegno corrente
  • Vista Draft: Inserisce una speciale vista Draft dell'oggetto selezionato nel foglio del disegno corrente

Nota. Lo strumento Disegno è 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 dimensioni di Draft.


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 Pagina. La pagina viene creata tramite un modello, in questo caso il modello è A3_Landscape.

Il modello della pagina è un documento SVG che può contenere la consueta cornice e un logo oppure conformarsi a una presentazione standard personalizzata.

I modelli, di default, nei sistemi Windows si trovano in C:/Program Files/FreeCAD0.13/data/Mod/Drawing/Templates/A3_Landscape.svg, e nei sistemi Linux in /usr/share/freecad/Mod/Drawing/Templates/A3_Landscape.svg.

Nella pagina si possono inserire una o più viste.

Ogni vista ha una posizione nella pagina (Proprietà X, Y), un fattore di scala (proprietà di scala) e delle proprietà aggiuntive.

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.

Script

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.

Lo script Macro_CartoucheFC permette di compilare agevolmente la tabella del modello di tavola FreeCAD A3_Landscape.

Esempio semplice

Prima di tutto è necessario caricare i moduli Part e Disegno:

import FreeCAD, Part, Drawing

Creare una Parte campione

Part.show(Part.makeBox(100,100,100).cut(Part.makeCylinder(80,100)).cut(Part.makeBox(90,40,100)).cut(Part.makeBox(20,85,100)))

Proiezione diretta. G0 significa bordo rigido, G1 è una tangente continua.

Shape = App.ActiveDocument.Shape.Shape
[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape)
print "visible edges:", len(visibleG0.Edges)
print "hidden edges:", len(hiddenG0.Edges)

Tutto viene proiettato sul piano Z:

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

Proiezione con un vettore diverso

[visibleG0,visibleG1,hiddenG0,hiddenG1] = Drawing.project(Shape,App.Vector(1,1,1))

Proiezione in SVG

resultSVG = Drawing.projectToSVG(Shape,App.Vector(1,1,1))
print resultSVG

Il metodo parametrico

Creare il corpo

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

Inserire un oggetto Page e assegnargli un modello

App.ActiveDocument.addObject('Drawing::FeaturePage','Page')
App.ActiveDocument.Page.Template = App.getResourceDir()+'Mod/Drawing/Templates/A3_Landscape.svg'

Creare una vista dell'oggetto "Shape", definirne la posizione e la scala e assegnare la vista a una pagina

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)

Creare una seconda vista, ruotata di 90 gradi, dello stesso oggetto.

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)

Creare una terza vista, con direzione isometrica, dello stesso oggetto. Anche le linee nascoste sono attivate.

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)

Modificare qualche parametro e aggiornare. Il processo di aggiornamento modifica la visualizzazione e aggiorna la pagina.

App.ActiveDocument.View.X = 30.0
App.ActiveDocument.View.Y = 30.0
App.ActiveDocument.View.Scale = 1.5
App.ActiveDocument.recompute()

Ottenere porzioni e parti

Ottenere il frammento SVG di una singola vista

ViewSVG = App.ActiveDocument.View.ViewResult
print ViewSVG

Ottenere l'intera pagina risultante (contenuta in un file nella directory temporanea del documento, con il permesso di sola lettura)

print "Resulting SVG document: ",App.ActiveDocument.Page.PageResult
file = open(App.ActiveDocument.Page.PageResult,"r")
print "Result page is ",len(file.readlines())," lines long"

Importante: liberare il file!

del file

Inserire una vista con un contenuto personalizzato:

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

Si ottiene il seguente risultato:

Dimensionamento generale e tolleranze geometriche

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.

Prima di tutto bisogna scaricare il modulo gdtsvg python da

https://github.com/jcc242/FreeCAD (ATTENZIONE: Questo link potrebbe essere interrotto in qualsiasi momento)

Per ottenere un riquadro per l'indicazione delle caratteristiche (una griglia in cui inserire i parametri), provare quanto segue:

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"))

Ecco un esempio di buona ripartizione del contenuto di una griglia di controllo della geometria: [1]

I parametri da passare a ControlFrame sono:

  1. Coordinata X nel sistema di coordinate SVG (digitare stringa)
  2. Coordinata Y nel sistema di coordinate SVG (digitare stringa)
  3. 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)
  4. La tolleranza (digitare stringa)
  5. (opzionale) Il simbolo di diametro (tupla, la stringa svg per prima, la larghezza del simbolo per seconda e l'altezza del simbolo per terza)
  6. (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)
  7. (optional) Il primo dato (digitare stringa)
  8. (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)
  9. (optional) Il secondo dato (digitare stringa)
  10. (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)
  11. (optional) Il terzo dato (digitare stringa)
  12. (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)

La funzione ControlFrame restituisce un testo che contiene (stringa svg, larghezza totale del riquadro, altezza complessiva del riquadro)

Per ottenere una dimensione, provare quanto segue:

import gdtsvg
ourDimension = linearDimension(point1, point2, textpoint, dimensiontext, linestyle=getStyle("visible"), 
               arrowstyle=getStyle("filled"), textstyle=getStyle("text")

Gli input per ottenere una dimensione lineare sono:

  1. point1, una tupla con le coordinate svg (x,y), questo è uno dei punti tra i quali si desidera la quota
  2. point2, una tupla con le coordinate svg (x,y), questo è il secondo dei punti tra i quali si desidera la quota
  3. textpoint, una tupla con le coordinate svg (x,y), questo è il punto dove viene posizionato il testo della quota
  4. dimensiontext, una stringa contenente il testo che si desidera per la dimensione
  5. 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
  6. 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
  7. 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

Con la quotatura e l'indicazione delle tolleranze, si può procedere come sopra per visualizzarle nella pagina di disegno.

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.

Modelli di squadrature

FreeCAD viene fornito con una serie di modelli di pagina predefiniti, ma si possono trovare altri modelli in Modelli di squadrature.

Estendere il modulo Drawing

Alcune ulteriori note sulla programmazione del Modulo Disegno sono contenute nella pagina Drawing Documentation (en) Drawing Documentation (it). Dette note aiutano a capire rapidamente come lavora questo modulo e permettono ai programmatori di avviare rapidamente la programmazione per esso.

Tutorial


Link esterni