Surface Filling - Riempimento di superficie
Surface Filling |
Posizione nel menu |
---|
Surface → Riempimento... |
Ambiente |
Surface|Version=0.17 |
Avvio veloce |
Nessuno |
Introdotto nella versione |
- |
Vedere anche |
Nessuno |
Descrizione
Surface Filling crea una superficie da una serie di bordi collegati.
La superficie può essere modificata aggiungendo bordi e vertici di vincolo attraverso i quali deve passare la superficie.
Esempio di una superficie riempita, delimitata da quattro spigoli situati nel piano XY; (a sinistra) solo i quattro bordi e (a destra) una curva aggiunta nello spazio che definisce la curvatura della superficie
Utilizzo
- Assicurarsi di avere almeno tre bordi o curve nello spazio che formano un contorno chiuso. I bordi possono essere creati con gli strumenti di Draft o di Sketcher. L'uso di tre bordi crea una superficie triangolare; quattro bordi una superficie quadrilatera.
- Se è il caso, all'interno del contorno chiuso possono essere disegnate delle curve. Non è necessario che tocchino i bordi. Queste curve possono essere utilizzate per controllare la curvatura della superficie risultante.
- Allo stesso modo, è possibile utilizzare un numero di vertici con lo stesso scopo per indicare dove deve passare la superficie.
- Premere il pulsante Surface filling.
- Nella sezione Boundary, premere Add edge.
- Usare il puntatore per selezionare i bordi desiderati nella vista 3D; viene visualizzata un'anteprima della forma finale dopo aver selezionato i bordi validi che formano un contorno chiuso.
- Come opzione, andare alla sezione Curvature: non-boundary edges (bordi non di confine), premere Add edge, e selezionare i bordi desiderati nella vista 3D.
- Come opzione, andare alla sezione Curvature: non-boundary vertices (vertici non di confine), premere Add vertex, e scegliere i vertici desiderati nella vista 3D.
- Premere OK per completare l'operazione.
Gli spigoli di base che formano il contorno chiuso, così come i vertici e gli spigoli ausiliari, possono appartenere a curve 2D di Draft o di Sketcher, ma possono anche appartenere a oggetti solidi 3D come quelli creati con Part o PartDesign.
Opzioni
- Nella sezione Boundary:
- Add edge: premere una volta per iniziare a selezionare i bordi Boundary edges nella vista 3D. Possono essere selezionati i bordi dritti come le polilinee di Draft e le polilinee di Sketcher, o i bordi curvi come le BSpline di Draft e le BSpline di Sketcher , così come qualsiasi bordo di oggetti solidi, come quelli di un Corpo e le Primitive di Part.
- Remove edge: premere una volta per iniziare a selezionare i bordi nella vista 3D; questi bordi devono essere stati precedentemente selezionati con Add edge.
- Right mouse button: aprire il menu contestuale e selezionare Remove, o premere Del sulla tastiera, per rimuovere il bordo attualmente selezionato nell'elenco.
- Nella sezione Curvature: non-boundary edges; il pulsante Add edge è disponibile per selezionare bordi ausiliari (linee rette o B-Splines) per controllare la curvatura della superficie. La superficie sarà costretta a passare attraverso questi bordi ausiliari. Funziona meglio quando i bordi ausiliari si trovano all'interno della regione delimitata da Boundary edges.
- Nella sezione Curvature: non-boundary vertices; simile a non-boundary edges, l'utente può selezionare vertici ausiliari per controllare la curvatura. Questi vertici possono essere indipendenti punti di Draft o punti di Part, o possono appartenere a qualsiasi bordo (linee rette o B-Splines) o essere un vertice in un oggetto solido. In questo caso, la superficie sarà vincolata a passare attraverso questi punti ausiliari.
- Premere Cancel o Esc per interrompere l'operazione corrente.
Proprietà
Una Surface Filling (classe Surface::Filling
) è derivato dalla base Part Feature (classe Part::Feature
, attraverso la sottoclasse Part::Spline
), quindi condivide tutte le proprietà di quest'ultima.
Oltre alle proprietà descritte in Part Feature, Surface Filling ha le seguenti proprietà nell'editor delle proprietà.
Dati
Filling
- DatiBoundary Edges (
LinkSubList
): bordi di confine; C0 è richiesto per i bordi senza una faccia corrispondente. - DatiBoundary Faces (
StringList
): - DatiBoundary Order (
IntegerList
): ordine di vincolo sulle facce del contorno; sono possibili0
,1
, e2
. - DatiUnbound Edges (
LinkSubList
): bordi di vincoli non legati; C0 è richiesto per i bordi senza una faccia corrispondente. - DatiUnbound Faces (
StringList
): - DatiUnbound Order (
IntegerList
): ordine di vincolo sulle facce non legate; sono possibili0
,1
, e2
. - DatiFree Faces (
LinkSubList
): vincolo su una faccia libera. - DatiFree Order (
IntegerList
): ordine di vincolo sulle facce libere. - DatiPoints (
LinkSubList
): punti di vincolo sulla superficie. - DatiInitial Face (
LinkSub
): superficie iniziale da utilizzare. - DatiDegree (
Integer
): grado iniziale, il valore predefinito è3
. - DatiPoints On Curve (
Integer
): numero di punti su un bordo per vincolarlo. - DatiIterations (
Integer
): numero di iterazioni, il valore predefinito è2
. - DatiAnisotropy (
Bool
): il valore predefinito èfalse
. - DatiTolerance2d (
Float
): tolleranza 2D, il valore predefinito è0.0
. - DatiTolerance3d (
Float
): tolleranza 3D, il valore predefinito è0.0
. - DatiTol Angular (
Float
): tolleranza G1, il valore predefinito è0.01
. - DatiTol Curvature (
Float
): tolleranza G2, il valore predefinito è0.10
. - DatiMaximum Degree (
Integer
): grado massimo della curva, il valore predefinito è8
. - DatiMaximum Segments (
Integer
): numero massimo di segmenti, il valore predefinito è9
.
Vista
Base
- VistaControl Points (
Bool
): il valore predefinito èfalse
; se impostato sutrue
, mostrerà una sovrapposizione con i punti di controllo della superficie.
Limitazioni
Il codice di surface dal kernel di modellazione interno OpenCASCADE è fragile e non può gestire correttamente l'input sbagliato. Le seguenti situazioni possono causare problemi e causare il crash del programma, quindi dovrebbero essere evitate:
- Aggiungere dei DatiBoundary Edges che comporterebbe diverse facce chiuse. In questo caso, questi bordi dovrebbero essere aggiunti come DatiUnbound Edges per controllare solo la curvatura.
- Utilizzare DatiBoundary Edges parametrici (ad esempio, delle BSplines) che quando ricalcolate non riescono a produrre una regione chiusa. Cioè, i bordi da usare come DatiBoundary Edges devono sempre formare una forma chiusa, anche se le loro proprietà interne cambiano.
Script
Vedere anche: Script di base per FreeCAD
Lo strumento Surface Filling può essere utilizzato nelle macro e dalla console Python aggiungendo l'oggetto Surface::Filling
.
- I bordi da utilizzare per definire la superficie devono essere assegnati come LinkSubList alla proprietà
BoundaryEdges
dell'oggetto. - Gli spigoli ausiliari e i vertici devono essere assegnati come LinkSubLists alle proprietà
UnboundEdges
ePoints
dell'oggetto. - Tutti gli oggetti con bordi devono essere calcolati prima di poter essere utilizzati come input per le proprietà dell'oggetto Filling.
import FreeCAD as App
import Draft
doc = App.newDocument()
a = App.Vector(-20, -20, 0)
b = App.Vector(-18, 25, 0)
c = App.Vector(60, 26, 0)
d = App.Vector(33, -20, 0)
points1 = [a, App.Vector(-20, -8, 0), App.Vector(-17, 7, 0), b]
obj1 = Draft.make_bspline(points1)
points2 = [b, App.Vector(0, 25, 0), c]
obj2 = Draft.make_bspline(points2)
points3 = [c, App.Vector(37, 4, 0), d]
obj3 = Draft.make_bspline(points3)
points4 = [d, App.Vector(-2, -18, 0), a]
obj4 = Draft.make_bspline(points4)
doc.recompute()
surf = doc.addObject("Surface::Filling", "Surface")
surf.BoundaryEdges = [(obj1, "Edge1"),
(obj2, "Edge1"),
(obj3, "Edge1"),
(obj4, "Edge1")]
doc.recompute()
# ---------------------------------------------------------
points_spl = [App.Vector(-10, 0, 2),
App.Vector(4, 0, 7),
App.Vector(18, 0, -5),
App.Vector(25, 0, 0),
App.Vector(30, 0, 0)]
aux_edge = Draft.make_bspline(points_spl)
doc.recompute()
surf.UnboundEdges = [(aux_edge, "Edge1")]
doc.recompute()
# ---------------------------------------------------------
aux_v1 = Draft.make_line(App.Vector(-13, -12, 5),
App.Vector(-13, -12, -5))
aux_v2 = Draft.make_line(App.Vector(-3, 18, 5),
App.Vector(-3, 18, -5))
doc.recompute()
surf.Points = [(aux_v1, "Vertex2"),
(aux_v2, "Vertex1")]
doc.recompute()
- Getting started
- Installation: Download, Windows, Linux, Mac, Additional components, Docker, AppImage, Ubuntu Snap
- Basics: About FreeCAD, Interface, Mouse navigation, Selection methods, Object name, Preferences, Workbenches, Document structure, Properties, Help FreeCAD, Donate
- Help: Tutorials, Video tutorials
- Workbenches: Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework
- Hubs: User hub, Power users hub, Developer hub