Significato parametri

Forum per le domande e le discussioni in Italiano
Forum rules
regole del forum e le informazioni utili

Importante: PRIMA di chiedere aiuto leggete qui!
Post Reply
paolo.bertin
Posts: 12
Joined: Sun Feb 05, 2023 7:56 am
Location: Padua, Italy

Significato parametri

Post by paolo.bertin »

Buongiorno,
sto cercando di capire il significato dei valori interi che compaiono nell'istruzione:

Code: Select all

sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1))
tratta dallo script che segue (pagina: Sketcher scripting della documentazione)

Code: Select all

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()
Più in generale, dove posso trovare della documentazione col significato dei parametri da passare a Sketcher.Constraint ?
paolo.bertin
Posts: 12
Joined: Sun Feb 05, 2023 7:56 am
Location: Padua, Italy

Re: Significato parametri

Post by paolo.bertin »

Credo di aver capito. Il primo indice si riferisce alla linea, il secondo al fatto se è il primo nodo o il secondo; analogamente per il terzo ed il quarto.
domad
Veteran
Posts: 2053
Joined: Mon Jun 22, 2020 12:16 pm

Re: Significato parametri

Post by domad »

paolo.bertin wrote: Fri May 05, 2023 10:53 am Credo di aver capito. Il primo indice si riferisce alla linea, il secondo al fatto se è il primo nodo o il secondo; analogamente per il terzo ed il quarto.
Ciao paolo.bertin, un saluto alla Comunità!
Premesso che non sono ferrato in scripting/programmazione/Python, provo ad elencare/interpretare:

- doc = App.newDocument() --> crea un nuovo documento;
- sketch = doc.addObject("Sketcher::SketchObject", "Sketch") --> aggiungi un nuovo oggetto denominato "sketch" di tipo SketchObject dal wb Sketcher.

- sketch.addGeometry(Part.LineSegment(App.Vector(1.2, 1.8, 0), App.Vector(5.2, 5.3, 0)), False) --> in sketch, aggiungi una geometria di tipo linea/segmento i cui vertici hanno coordinate (1.2, 1.8, 0) e (5.2, 5.3, 0), opzione linea di costruzione "False";
n.b. la linea creata avrà denominazione "0"

- sketch.addGeometry(Part.LineSegment(App.Vector(6.5, 1.5, 0), App.Vector(10.2, 5.0, 0)), False) --> in sketch, aggingi una geometria di tipo linea/segmento i cui vertici hanno coordinate (6.5, 1.5, 0) e (10.2, 5.0, 0), opzione linea di costruzione "False";
n.b. la linea creata avrà denominazione "1"

- sketch.addGeometry(Part.LineSegment(App.Vector(12.2, 1.0, 0), App.Vector(15.4, 5.0, 0)), False) --> in sketch, aggingi una geometria di tipo linea/segmento i cui vertici hanno coordinate (12.2, 1.0, 0) e (15.4, 5.0, 0), opzione linea di costruzione "False";
n.b. la linea creata avrà denominazione "2"

- sketch.addConstraint(Sketcher.Constraint("Coincident", 1, 2, 2, 1)) --> in sketch, crea un vincolo di coincidenza tra il secondo vertice della linea 1 (che rimarrà fermo) e il primo vertice della linea 2 (che ruoterà, con centro di rotazione sul suo secondo vertice).

@onekk ho interpretato correttamente?
User avatar
onekk
Veteran
Posts: 6146
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Significato parametri

Post by onekk »

Ora non posso postare link, ma nel wiki c'è tutto, il problema lo puoi avere con gli archi.

Ma ho postato recentemente un paio di esempi e appena posso metto i link.

Con una scrittura leggermente più concisa.

Code: Select all


V3d = FreeCAD.Vector

sk1= doc.addObject("Sketcher::SketchObject")
sk1.Label = "Nome_non_astratto"
ln1 = sk1.addGeometry(Part.LineSegment(V3d(1.2, 1.8, 0),  V3d(5.2, 5.3, 0)), False)
ln2 = sk1.addGeometry(Part.LineSegment(V3d(6.5, 1.5, 0),  V3d(10.2, 5.0, 0)), False)
ln3 = sk1.addGeometry(Part.LineSegment(V3d(12.2, 1.0, 0),  V3d(15.4, 5.0, 0)), False)

cc1 = sk1.addConstraint(Sketcher.Constraint("Coincident", ln2, 2, ln3, 1))

print(f'Nome: {sk1.Name}')
print(f'Label: {sk1.Label}')

così dovrebbe funzionare in modo "agnostico" cioè anche se aggiungi o togli elementi non sei costretto a cambiare i riferimenti numerici che sono semplicemente l'ordine di inserimento della geometria.

Ti diro anche che puoi ad esempio astrarre ulteriormente le cose usando dei valori spannometrici come punti nella creazione della forma e poi usare i vincoli di distanceX e Y per assegnare correttamente le misure.

Se metti a True il flag nella geometria la geometria diventa "di costruzione", cioè non finisce nel wire prodotto (o nei wire se lo sketch contiene geometrie non connesse)

l'ordine dei punti lo trovi nel wiki, così come i riferimenti per gli assi (-1 e -2) da -3 in poi sono riferimenti per le geometrie esterne.

Ma l'ordine dei punti a volte è particolare ad esempio gli archi sono definiti in senso antiorario per cui a volte è complicato azzeccarli al primo colpo, e hanno anche il 3 come riferimento per il centro dell'arco (o del cerchio). Le ellissi sono leggermente più complesse, e vanno usate alcune manipolazioni per ottenere cose decenti.

Però con lo script al massimo cambi i riferimenti e rilanci.

Ci sono poi alcuni argomenti che andrebbero trattati in modo aporofondito, ma per quello sto preparando an testo in Inglese che probabilmente diventerà un libro.

Saluti

Carlo D.
GitHub page: https://github.com/onekk/freecad-doc.
- In deep articles on FreeCAD.
- Learning how to model with scripting.
- Various other stuffs.

Blog: https://okkmkblog.wordpress.com/
Post Reply