Draft to Sketch: errore nei segmenti

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
Mark81
Posts: 121
Joined: Tue Jul 12, 2022 2:21 pm

Draft to Sketch: errore nei segmenti

Post by Mark81 »

Ciao,
ho qualche dubbio sul corretto uso della funzione Draft to Sketch.
Allego file di esempio.

1. creo una cross section del mio oggetto:
Schermata del 2023-01-05 11-13-13.png
Schermata del 2023-01-05 11-13-13.png (51.81 KiB) Viewed 1822 times
2. la sezione è corretta:
Schermata del 2023-01-05 11-14-30.png
Schermata del 2023-01-05 11-14-30.png (3.59 KiB) Viewed 1822 times
3. Draft to Sketch, come vedete sono comparsi dei segmenti aggiuntivi errati:
Schermata del 2023-01-05 11-15-27.png
Schermata del 2023-01-05 11-15-27.png (4.08 KiB) Viewed 1822 times
C'è modo di evitarlo?

Code: Select all

OS: Ubuntu Core 20 (ubuntu:GNOME/ubuntu)
Word size of FreeCAD: 64-bit
Version: 0.21.0.31509 (Git) Snap 530
Build type: Release
Branch: master
Hash: d63ac0f7f6a1bcb316eebe15ecdf23ce7dd62d4d
Python 3.8.10, Qt 5.15.5, Coin 4.0.0, Vtk 7.1.1, OCC 7.6.3
Locale: Italian/Italy (it_IT)
Installed mods: 
  * kicadStepUpMod 10.16.8
  * fasteners 0.4.52
  * Curves 0.6.5
  * 3D_Printing_Tools
  * CurvedShapes 1.0.4
  * Manipulator 1.4.9
  * Assembly4 0.12.5
  * fcgear 1.0.0
  * A2plus 0.4.60g
  * Defeaturing 1.2.0
  * Part-o-magic 1.0.0
  * POV-Ray-Rendering (Disabled)
  * Render 2022.4.0
Attachments
example.FCStd
(396.4 KiB) Downloaded 81 times
domad
Veteran
Posts: 2051
Joined: Mon Jun 22, 2020 12:16 pm

Re: Draft to Sketch: errore nei segmenti

Post by domad »

Mark81 wrote: Thu Jan 05, 2023 10:16 am ...
Ciao Mark81, un saluto alla Comunità!
Poichè la funzione "CheckGeometry" di "Part" segnala diversi errori, sarebbe utile che fornissi il file che ha generato il solido, in particolare se realizzato con FC.
Avere la possibilità di potere analizzare il flusso di modellazione potrebbe risolvere il problema.
Mark81
Posts: 121
Joined: Tue Jul 12, 2022 2:21 pm

Re: Draft to Sketch: errore nei segmenti

Post by Mark81 »

Ciao,
non posso inviare qui il file originale, ma posso aggiungere queste informazioni: è stato generato da un'altra persona con un software diverso da FC (non so quale). E' in formato step e quello che vedi è semplicemente una sua parte (che ho ottenuto con un'operazione booleana per poter inviare qui l'esempio). Ma il comportamento è identico anche sullo step appena importato.

Quello che non mi è chiaro però è in che modo possa influire l'origine del file. Mi spiego: la shape della sezione generata da Part è corretta. Ciò che non funziona è la conversione di questa shape in sketch da parte di Draft, quindi tutto interno a FreeCAD. Mi sbaglio?
User avatar
onekk
Veteran
Posts: 6144
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Draft to Sketch: errore nei segmenti

Post by onekk »

Mark81 wrote: Fri Jan 06, 2023 7:31 am ...
Questo è un caso dove probabilmente l'approccio di Part Design mostra i suoi limiti.

Probabilmente devi ricorrere a qualcosa di meno "ad alto livello" di uno sketch con i vincoli:

Il problema è la gestione delle curve BSpline, che in Sketcher risulta un problema essendo progettato per creare a mano gli sketch. Qualcosa è stato fatto per migliorare l'editing delle curve BSpline, però quelle automaticamente generate hanno molte cose "non vincolate".

Il file che hai postato presenta punti derivati dalla spline non collegati tra loro, e ovviemente "ogni punto" non è vincolato, però per mettere i vincoli devi fissare alcune grandezze, ad esempio l'ampiezza dei tratti lineari, e poi far coincidere il punto finale ed iniziale dalla BSpline, però poi hai tutti gli altri punti che non sono vincolati, ed i 1000 e pass DOF sono un ottimo indicatore del livello di complessità che la conversione deve affrontare.

Io ho trovato la funzione DraftToSkecth abbastanza inutile nel mio lavoro, tanto è vero che ho creato un mio codice aiutato da un paio di altri utenti per i miei scopi, però siamo a livello si archi e linee e li funziona abbastanza bene.

Ora non so come le BSpline siano gestite da sketcher, ma il numero di DOF sembra rivelare che ongi punto sia non vincolato per cui dovresti per ogni punto mettere un vincolo di Block:

https://wiki.freecadweb.org/Sketcher_ConstrainBlock

e per i punti iniziale e finale dei vincoli di coincidenza, in più sembrerebbe che la parte superiore dello sketch abbia un arco per cui anche li devi mettere dei vincoli per evitare che i punti dell'arco si muovano e poi far coincidere i punti della BSpline con i punti iniziali e finali dell'arco. Una bella rogna.

Quseto deriva da come sono costruite le BSpline, se non lo sai questo video può risultare utile:

https://www.youtube.com/watch?v=jvPPXbo87ds

lo so che non è attinente all'argomento, ma "just in case" come dicono oltre manica in generale anche questio video sulla matematica vettoriale, (algebra lineare):

https://www.youtube.com/playlist?list=P ... itgF8hE_ab

Sul resto, dipende molto da cosa devi fare con l'ipotetico sketch.

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/
Mark81
Posts: 121
Joined: Tue Jul 12, 2022 2:21 pm

Re: Draft to Sketch: errore nei segmenti

Post by Mark81 »

Grazie mille della risposta.

Qui l'iter completo del mio lavoro attuale:
  1. ho questo oggetto esterno abbastanza complesso (immaginalo come un toro la cui forma cambia continuamente)
  2. tramite uno script che ho scritto, eseguo tante sezioni lungo il percorso di questo toro (l'esempio corrente è una di queste)
  3. converto in sketch e su questo, sempre tramite script, semplifico la geometria sostituendo le bspline in biarc e aggiungo i constraint più comuni (coincidenza, orizzontale/verticale). Così facendo riduco il numero di DoF dagli oltre 1000 che vedi a circa 80 pur mantenendo un'ottima precisione
  4. alla fine, tutti questi sketch verranno utilizzati dalla funzione Curves > Pipeshell come profili per ricreare il toro iniziale
E' evidente che avendo il mio sketch già semplificato, potrei manualmente andare a sistemare i pochi punti non convertiti correttamente. Ma poiché le sezioni saranno una cinquantina e visto che dovrò rifare il lavoro molte volte, cercavo di automatizzarlo... ci sono quasi riuscito del tutto, se non fosse per questa conversione da shape a sketch che modifica la geometria.
User avatar
onekk
Veteran
Posts: 6144
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Draft to Sketch: errore nei segmenti

Post by onekk »

Mark81 wrote: Sat Jan 07, 2023 7:15 am Grazie mille della risposta.
...
Se usi uno script puoi usare direttamente la funzione makePipeShell senza passare per gli sketch, basta che fornisci i wire alla funzione, c'è in giro un mio post dove la usavo per fare cose strane, tipo torcere un anello quadrato.

Appena ho il mio computer sotto mano (ora sono in mobile) posto il link al post (scusa il gioco di parole).

Sulla precisione non hai problemi puoi sempre convertire la BSPline con il metodo toBiarc(), però poi temo che sia inutile perché probabilmente poi makePipeShell dovrebbe creare BSPlineSurface.

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/
Mark81
Posts: 121
Joined: Tue Jul 12, 2022 2:21 pm

Re: Draft to Sketch: errore nei segmenti

Post by Mark81 »

Ahhh, tutti gli esempi che avevo visto utilizzavano uno sketch come base per i profili!
Ottimo allora, ho già adattato il mio script in modo che utilizzi direttamente le shape anziché convertire in sketch!

Ultima cosa a margine... non trovo la documentazione delle API per Curves > Pipeshell / Pipeshell Profile.
Mi piacerebbe creare via script i profili e la pipeshell, dove sono documentate queste funzioni?
User avatar
onekk
Veteran
Posts: 6144
Joined: Sat Jan 17, 2015 7:48 am
Contact:

Re: Draft to Sketch: errore nei segmenti

Post by onekk »

Mark81 wrote: Sat Jan 07, 2023 9:08 am ...
Ultima cosa a margine... non trovo la documentazione delle API per Curves > Pipeshell / Pipeshell Profile.
Mi piacerebbe creare via script i profili e la pipeshell, dove sono documentate queste funzioni?
Beh la documentazione semplicemente non c'è ancora, presumo, ma guarda questi:

poco rilevante per il tuo problema, ma mostra i problemi che potresti incontrare.

https://forum.freecadweb.org/viewtopic.php?f=22&t=65467

Questo si adentra un pochino di più nel dettaglio per cose complesse, ad esempio se la superficie non è periodica come ad esempio un cilindro, leggi tutte e due le pagine, sono ricche di esempi.

https://forum.freecadweb.org/viewtopic. ... 5&start=10

Questo è quello a cui mi riferivo nel precedente post.

https://forum.freecadweb.org/viewtopic.php?f=22&t=67417

la prima risposta di edwilliams16 mostra nel codice come posionare i profili:

Un estratto:

Code: Select all

c_s = Part.BRepOffsetAPI.MakePipeShell(Part.Wire(cr1.toShape()))
c_s.setTransitionMode(1)
c_s.setFrenetMode(True)


for rot_prof in profiles:
    c_s.add(rot_prof, False, False)

# check and build
if c_s.isReady():
    c_s.build()

c_s.makeSolid()

cut_sol = c_s.shape()
nota la parte:

Code: Select all

for rot_prof in profiles:
    c_s.add(rot_prof, False, False)
Per la documentazione nle primo post linkato nel mio intervento di apertura c'è un link alla documentazione di OCCT, e alcune considerazioni mie, il post di Chris_G cita qualcosa a proposito di come lui usa le pipeshell in Curves Wb, ma non entra molto nel dettaglio.

Comunque in genere i sorgenti di Chris_G potrebbero risultare utilli:

https://github.com/tomate44/CurvesWB/bl ... shellFP.py

Comunque con un paio di prove e la lettura (e traduzione in FreeCAD del post di OCCT) dovresti riuscire a fare la maggior parte delle cose, nel caso, eventualmente un post in "Python Scripting e Macro" del forum inglese in genere aiuta molto, come vedi i miei post in genere vengono seguiti e gli aiuti dati.

Una considerazione sugli aiuti, come potrai facilmente vedere, edwilliams16, Chris_G (che è un fabbricatore di chitarre, abbastanza quotato), chrisb, wmayer (una delle menti dietro a FreeCAD), TheMarkster, mario52 e pochi altri sono una fonte inesauribile di spiegazioni ed informazioni, disponibili ad aiutare e in genere ottime persone con cui ragionare e fare esperimenti.

Spero di essere stato utile.

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/
domad
Veteran
Posts: 2051
Joined: Mon Jun 22, 2020 12:16 pm

Re: Draft to Sketch: errore nei segmenti

Post by domad »

Mark81 wrote: Fri Jan 06, 2023 7:31 am ......
Quello che non mi è chiaro però è in che modo possa influire l'origine del file. Mi spiego: la shape della sezione generata da Part è corretta. Ciò che non funziona è la conversione di questa shape in sketch da parte di Draft, quindi tutto interno a FreeCAD. Mi sbaglio?
Ciao Mark81, un saluto alla Comunità!
Che il sorgente fosse stato generato da un sw diverso da FC, lo avevo immaginato.
Premesso che @onekk è stato abbastanza esaustivo, ulteriormente provo a dirimere, brevemente, senza alcun "tecnicismo" (non mi occupo programmazione), le tue perplessità.
L'esportazione in altri formati compresi gli, diciamo, "internazionalizzati" come *.step e/o in *.stp, deve scaturire da un rispetto "ingegneristico/architettonico" attinente a regole/standard ben precisi, se dei sw, in particolare alcuni (puoi intuire quali), curano poco questo aspetto (per motivi anche questi facilmente intuibili), non aderendo/rispettano al 100% tali standard, si incontrano i problemi di cui al presente topic, questo discorso è valido anche per l'importazione che, in questo caso di step/stp prevede, tralaltro, più standard che si sono più o meno evoluti nel tempo.
Quindi avremo l'eventualità che il file è correttamente importato dallo stesso sw che ne ha generato l'esportato, ma non correttamente importato da altri sw (non tutti, per motivi anche questi ipotizzabili).
Dunque un flusso di modellazione del modello-sorgente, corretto dal punto di vista del sw che lo sta generando, può essere “indigesto” nella fase di esportazione nei formati "internazionalizzati", proprio in questa fase di "traduzione", poiché non strettamente attinente agli standard, possono generarsi delle anomalie che si evidenzieranno durante le fasi di "riconversione/deduzione-calcolo-lettura" dei parametri.
Devi aggiungere, inoltre, che FC essendo un software libero è sviluppato da persone che prestano parte del loro tempo gratuitamente, pertanto, gli aggiornamenti/adeguamenti agli standard possono essere o troppo precoci oppure in ritardo, ulteriormente, anche nel caso dei driver non tutti i produttori rilasciano e/o codifichino le specifiche affinché i sistemi liberi possano inglobarli.
Tornando al tuo problema, potresti provare a risolverlo ma, come già sottolineato da @onekk non conoscendone il fine, possiamo solo suggerire alcune possibilità, una di queste è quella di utilizzare il banco di lavoro “Curves” che ha diverse funzioni che permettono di generare nuove curve basandosi su quella/e generata/e dalla tua sezione-Part, quindi con la funzione “Draft” di conversione in sketch il problema potrebbe essere superato.
Post Reply