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.
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.
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.
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:
-1
indica l'asse orizzontale x-2
indica l'asse verticale y-n
indica il numero dell'elemento geometrico esterno n-3
(ad esempio, l'elemento geometrico esterno con indice 0 nell'elenco appiattito sketch.ExternalGeometry
sarebbe indicato da -3, l'elemento successivo nell'elenco svolto sarebbe -4 e così via).
Per specificare quale parte di una linea è interessata da un vincolo, è possibile utilizzare i seguenti valori:
0
per indicare che il vincolo interessa l'intero bordo.1
per indicare che il vincolo interessa il punto iniziale del bordo (un cerchio completo non ha un punto iniziale).2
per indicare che il vincolo interessa il punto finale del bordo.3
per indicare che il vincolo interessa il punto centrale del bordo. Può essere utilizzato solo per cerchi, archi circolari, ellissi e archi ellittici.n
per indicare che il vincolo interessa l'n-esimo polo di una B-spline.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.
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()