Sketcher scripting/it

Creazione di uno SketchObject utilizzando Python

Creiamo uno SketchObject come questo:

import FreeCAD as App
import Part
import Sketcher

doc = App.newDocument()  

sketch = doc.addObject("Sketcher::SketchObject", "Sketch")
sketch.addGeometry(Part.LineSegment(App.Vector(1.2, 1.8, 0),
                                    App.Vector(5.2, 5.3, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(6.5, 1.5, 0),
                                    App.Vector(10.2, 5.0, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(12.2, 1.0, 0),
                                    App.Vector(15.4, 5.0, 0)), False)

doc.recompute()

Aggiunge inoltre tre linee nello Sketch appena creato.

Creare un vincolo usando Python

Un vincolo geometrico e può essere creato da una macro e dalla console Python utilizzando il seguente comando:

sketch.addConstraint(Sketcher.Constraint(ConstraintType, EdgeOrPartOfEdge))

Un vincolo dimensionale e lo speciale refraction constraint può essere creato da macro e dalla console Python utilizzando il seguente comando:

sketch.addConstraint(Sketcher.Constraint(DimensionalConstraintType, EdgeOrPartOfEdge, App.Units.Quantity("float_value unit")))

per esempio

sketch.addConstraint(Sketcher.Constraint(DimensionalConstraintType, EdgeOrPartOfEdge, App.Units.Quantity("123.0 mm")))

Il primo argomento ConstraintType è descritto di seguito in Tipi di vincoli.

Un vincolo può accettare fino a sei argomenti, che sono spigoli o indicano quale sottoparte di uno spigolo viene utilizzata dal vincolo. Consultare la documentazione dei singoli vincoli per i dettagli sulle combinazioni di spigoli e sottoparti di spigoli che possono essere passate come argomenti. Il problema principale di questa funzione è identificare correttamente il numero di linea e il numero di vertice delle linee che si desidera elaborare. Le sezioni seguenti descrivono come identificare la numerazione di una linea e come identificare la numerazione delle sottoparti di una linea.

Tipi di vincoli

Per i vincoli geometrici, il primo argomento è uno dei seguenti. Consultare la pagina delle funzionalità corrispondente per le possibili combinazioni di argomenti consentite per ciascun vincolo.

Codice Icona Funzione
"Coincident" Vincolo Coincidente
"PointOnObject" Vincolo Punto-Su-Oggetto
"Vertical" Vincolo Verticale
"Horizontal" Vincolo Orizzontale
"Parallel" Vincolo Parallelo
"Perpendicular" Vincolo Perpendicolare
"Tangent" Vincolo Tangente/Collineare
"Equal" Vincolo Uguale
"Symmetric" Vincolo Simmetrico
"Block" Vincolo Blocco

Per i vincoli dimensionali, il primo argomento è uno dei seguenti. Consultare la pagina delle funzionalità corrispondente per le possibili combinazioni di argomenti consentite per ciascun vincolo.

Codice Icona Funzione
"DistanceX" Distanza Orizzontale
"DistanceY" Distanza Verticale
"Distance" Distanza
"Radius" Raggio
"Diameter" Diametro
"Angle" Angolo
"AngleViaPoint" Angolo

I vincoli di rifrazione si comportano come vincoli dimensionali ai fini della creazione di script. Anche in questo caso, consultare la pagina delle funzionalità corrispondente per le possibili combinazioni di argomenti consentite per ciascun vincolo.

Codice Icona Funzione
"SnellsLaw" Vincolo rifrazione

Il vincolo di blocco posizione è un comando GUI che crea un vincolo distanza orizzontale e un vincolo distanza verticale, non è un vincolo a sé stante.

Identificare la numerazione di una linea

Sono state disegnate tre linee come mostrato nella figura seguente.

Spostando il cursore del mouse sopra la linea è possibile vedere il numero della linea in basso a sinistra della finestra di FreeCAD, vedere la figura successiva.

Sfortunatamente la numerazione visualizzata nelle finestre di FreeCAD inizia da 1, mentre la numerazione delle linee utilizzate per lo script inizia da 0: questo significa che bisogna sottrarre uno ogni volta che si vuole fare riferimento a una linea.

I numeri positivi indicano i bordi dello schizzo (linee rette, cerchi, coniche, B-spline e così via). I seguenti valori possono essere utilizzati per indicare elementi che non sono bordi dello schizzo:

Identificare la numerazione delle sottoparti di una linea

Per specificare quale parte di una linea è interessata da un vincolo, è possibile utilizzare i seguenti valori:

I vertici indicati con 1 e 2 sono numerati in base al loro ordine di creazione. Per scoprire l'ordine della loro creazione (se hai molte linee, non puoi ricordare quale vertice hai creato per primo), devi semplicemente spostare il cursore del mouse sopra i due vertici di una linea, vedi figura seguente.

Se si leggono ad esempio 4 e 5, significa che il vertice con il numero più basso (4 in questo esempio) verrà referenziato utilizzando il numero 1 (primo nel comando script) e il vertice con il numero più alto (5 in questo esempio) verrà referenziato utilizzando il numero 2 nel comando script.

Esempio

Prendiamo l'esempio precedente delle tre linee. La figura successiva indica la numerazione di ciascuna linea e dei relativi vertici secondo la convenzione di scripting.

testo blu: numerazione delle linee, testo nero: numerazione dei vertici

Il comando sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1)) produce il seguente risultato:

Il codice completo per disegnare le tre linee e aggiungere un vincolo Coincidente su due punti da due linee è il seguente:

import FreeCAD as App
import Part
import Sketcher

doc = App.newDocument()  

sketch = doc.addObject("Sketcher::SketchObject", "Sketch")
sketch.addGeometry(Part.LineSegment(App.Vector(1.2, 1.8, 0),
                                    App.Vector(5.2, 5.3, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(6.5, 1.5, 0),
                                    App.Vector(10.2, 5.0, 0)), False)
sketch.addGeometry(Part.LineSegment(App.Vector(12.2, 1.0, 0),
                                    App.Vector(15.4, 5.0, 0)), False)
sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1))

doc.recompute()