• This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Leggi altro.

Macro per calcolare coordinate da schizzo 3D

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#1
Buongiorno a tutti, mi trovo a dover svolgere una tesi magistrale e mi chiedevo se esistesse una macro che calcolasse le coordinate di punti da uno schizzo 3D e le riportasse su un file di testo (.txt). Mi servirebbe per iniziare il mio lavoro di tesi e al momento non riesco a impararmi il Visual Basic o il C# per potermela scrivere da solo. Potete aiutarmi?
 

re_solidworks

Moderatore Solidworks
Staff Forum
Professione: Progettista
Software: Swx2016-R2W2016-Power Surfacing 2.1-Creo 2.0- PDSU 2016 - Composer 2016
Regione: Veneto
#2
Buongiorno a tutti, mi trovo a dover svolgere una tesi magistrale e mi chiedevo se esistesse una macro che calcolasse le coordinate di punti da uno schizzo 3D e le riportasse su un file di testo (.txt). Mi servirebbe per iniziare il mio lavoro di tesi e al momento non riesco a impararmi il Visual Basic o il C# per potermela scrivere da solo. Potete aiutarmi?
Ne ho una che esporta in Excel, l'ho appena ripescata e con la 2013 da un errore. La posto, così se qualcuno esperto di vb vuol metterci le mani può sistemarla per la community.
 

Allegati

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#3
Grazie per la risposta! In effetti una macro che esporti in Excel la avevo trovata anche io, ma non sono in grado di metterci le mani per far si che anzichè in Excel esporti i dati in un file .txt sotto forma di matrice.
 

re_solidworks

Moderatore Solidworks
Staff Forum
Professione: Progettista
Software: Swx2016-R2W2016-Power Surfacing 2.1-Creo 2.0- PDSU 2016 - Composer 2016
Regione: Veneto
#4
Grazie per la risposta! In effetti una macro che esporti in Excel la avevo trovata anche io, ma non sono in grado di metterci le mani per far si che anzichè in Excel esporti i dati in un file .txt sotto forma di matrice.
ciao, un salva con nome in txt in excel non basta?
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#5
Se proprio non riuscirò a fare altro me lo farò bastare, ma mi sarebbe piaciuto molto di più che si potesse accedere direttamente al file .txt senza passare per Excel, che è uno step superfluo per ciò che devo fare.
 

pose63

Utente Junior
Professione: Tecnico
Software: SolidWorks 2016 OfficePro sp5.0 Win7 x64 Quadro FX580 2xSamsung SM226BW
Regione: Veneto
#6
Ne ho una che esporta in Excel, l'ho appena ripescata e con la 2013 da un errore. La posto, così se qualcuno esperto di vb vuol metterci le mani può sistemarla per la community.
Il problema che la macro va in errore con la 2013 è dovuto al fatto che in questa versione il VBA non riconosce i controlli aggiuntivi registrati nel computer (in questo specifico caso la girglia ListView). Attualmente per il mio lavoro utilizzo una decina di macro che fanno uso di controlli aggiuntivi esterni e questo è il motivo principale per cui attualmente rimango sulla 2012.
 

re_solidworks

Moderatore Solidworks
Staff Forum
Professione: Progettista
Software: Swx2016-R2W2016-Power Surfacing 2.1-Creo 2.0- PDSU 2016 - Composer 2016
Regione: Veneto
#7
Il problema che la macro va in errore con la 2013 è dovuto al fatto che in questa versione il VBA non riconosce i controlli aggiuntivi registrati nel computer (in questo specifico caso la girglia ListView). Attualmente per il mio lavoro utilizzo una decina di macro che fanno uso di controlli aggiuntivi esterni e questo è il motivo principale per cui attualmente rimango sulla 2012.
Ciao Giancarlo e grazie della spiegazione. Giusto per informazione: l'errore non è risolvibile? Se una persona (come hai fatto tu) ha investito molto tempo per creare delle macro cosa deve fare, buttare tutto?
Solo per capire se "ne hanno combinata una delle loro" o meno...
 

Gabryn

Utente Junior
Professione: Tiralinee
Software: Acad2012,Me10,Swx18
Regione: Bs
#8
Solo per informazione, avete già controllato che in [strumenti > riferimenti] non ci sia nessun riferimento mancante ?
se l'errore è nel listview, verificare che il file mscomctl.ocx sia selezionato correttamente (vedi immagine relativa win7 64bit)
Se bisogna far registrare il file a windows purtroppo è un pò più lunga (e non sempre funziona, come ho constatato recentemente :mad:)

Ciao
Gabriele
 

Allegati

pose63

Utente Junior
Professione: Tecnico
Software: SolidWorks 2016 OfficePro sp5.0 Win7 x64 Quadro FX580 2xSamsung SM226BW
Regione: Veneto
#9
I riferimenti li trova, ma quando si compila la macro o si edita il form il controllo non lo riconosce.
Faccio notare che sulla stessa macchina la stessa macro gira perfettamente con la versione 2012 di SolidWorks

Riferimenti_2013.jpg
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#10
Secondo voi è difficile modificare quella macro per fare in modo che anzichè in excel esporti in un file txt?Cosa dovrei cambiare?
 

pose63

Utente Junior
Professione: Tecnico
Software: SolidWorks 2016 OfficePro sp5.0 Win7 x64 Quadro FX580 2xSamsung SM226BW
Regione: Veneto
#11
Di quella macro dovrei avere già una versione che scrive direttamente su file .txt, provo a vedere se funziona correttamente , poi la posto
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#12
Ti ringrazio, mi faresti un favore enorme!!...Alla fine anche se non dovesse funzionare perfettamente non fa nulla, postala comunque, così almeno mi posso fare un'idea di come si possa scrivere un codice di quel tipo. Grazie ancora!...
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#13
Ciao alxG88,
credo che questa faccia al caso tuo.
Esporta in txt e lavora sia con schizzi 2D che 3D, lavora pero senza interfaccia, non so se sia un problema.
Se nel caso l'intefaccia fosse determinante, posso farti un'interfaccia come si deve, portando tutto in dot.net, ma a quel punto non so se riesci a modificartela nel caso ti servisse.
In alternativa, nella tua macro si potrebbe sostituire la listview in una listbox a 3 colonne, risolvendo il problema dell'errore.
Se ti serve qualcosa per la tua tesi, faccelo sapere.
Ciao
 

Allegati

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#14
Innanzitutto grazie a tutti voi per l'aiuto che mi state dando!! Essendo io un neofita della programmazione su SolidWorks faccio un po' fatica a entrare nell'ottica.
La macro funziona perfettamente, ma ho solo alcune cose da chiederti per chiarirmi le idee:
- innanzitutto di quali punti lui calcola le coordinate? Posso io in un qualche modo andare a modificare il numero di punti di cui lui calcola le coordinate?
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#15
Tutto funziona secondo una logica, l'ID del punto.
In genere tutti i cad anche bidimensionali vecchi anche vent'anni, alla generazione di qualsiasi entità, sia essa un punto , una linea, un arco ecc., gli associa un'identificativo univoco (un numero).
Nel nostro caso, stiamo analizzando delle entità all'interno di uno schizzo in SolidWorks, entità punti in particolare (???).
Premetto che questa macro estrae le coordinate dei punti di tutte le entità all'interno dello schizzo:

Es. All'interno dello schizzo abbiamo due entità punto e un segmento, la macro estrae le coordinate dei due punti e le coordinate dei due estremi del segmento; nel caso in cui ci fosse anche un cerchio avrebbe estratto anche la coordinata del centro.

Con quale ordine la macro ritorna i punti? secondo l'ID del punto, infatti se all'interno dello schizzo hai creato prima i due punti ti estrae prima i due punti e poi il segmento, quindi guarda l'ordine di creazione.
Infatti se selezioni all'interno dello schizzo entrambi i punti ti fa vedere nel menu a sinistra il nome del punto (es. punto2 e punto3)
Altro esempio per capire meglio, (anche se non è semplice):
- creo uno schizzo e creo 3 punti a suo interno
- cancello il secondo punto(punto2)
- se vado a creare un altro punto mi crea il punto 4 (punto4)
Quindi la logica e sempre una scansione delle entità secondo l'ID (crescente secondo l'ordine di creazione)

Nel caso tu abbia uno schizzo con varie entità ma vuoi estrarre solo le coordiante delle entità punto (e non gli estremi o i centri di altre entità), dobbiamo scrivere una macro che lavori in modo differente, ma l'ho fatto altre volte.
Nel caso in cui valuti volta per volta quali coordinate vuoi estrarre (solo centri di cerchi o archi, inizio e fine segmenti, ecc), bisogna scansionare le entità, e per ogni entità poi, si possono ricavare coordinate e altro ancora.

Se non ti è chiaro vediamo di spiegarlo in altro modo, ma dobbiamo capire anche di quali entità ti interessa estrarre le coordinate.

Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#16
Spiego brevemente in cosa consiste il mio lavoro di tesi: in sostanza devo creare una piccola fresatrice a controllo numerico. La fresatrice è già costruita e ha 3 gradi di libertà (a ognuno dei quali corrisponde un motorino elettrico). In sostanza io vorrei che, disegnando su SolidWorks uno schizzo 3D (corrispondente alla traiettoria che l'utensile poi eseguirà), il software mi calcoli le coordinate di una serie di punti (mi piacerebbe stabilirlo io il numero di questi punti) e li inserisse in un file txt.
Da qui poi con un piccolo software che sto scrivendo in linguaggio C++ comunicherò con i 3 motori e tradurrò le coordinate in un "linguaggio" comprensibile ai motori (ad es. in passi dell'encoder, etc...).

Credo di avere capito il tuo discorso: in pratica a seconda della curva che disegno esistono dei punti predefiniti da SolidWorks (ad es. per una retta sono i due estremi, per una circonferenza sarà il centro, etc...), giusto? C'è però un modo per calcolare le coordinate di altri punti appartenenti allo schizzo, che non siano solo quelli preimpostati da SolidWorks?
Spero di essermi fatto capire, in caso contrario chiedete pure spiegazioni!...Grazie ancora
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#17
Mi dovrai scusare, ma non ho ancora capito bene quali entità devi "fresare".
Il tuo schizzo 3D è costituito di soli punti 3D o è misto a punti ed entità?
Se devi eseguire un'interpolazione tra punti 3D, la macro dovrebbe essere sufficiente, ma se non ho capito male devi fresare anche entità, quindi interpolazioni circolari e lineari (la fresatura di spline non so quanto sia fattibile).
Nei cam bidimensionali si usano i G1 per il lineare e i G3 per il circolare, dove al suo interno la subrutine genera tutti i punti dell'arco o della retta.
Tu vorresti questo dalla macro? Altrimenti bisigna mettere in piedi una serie di routine di equazioni che calcolano i punti suddividendo per esempio un arco ad ognigrado, passandogli i punti iniziali, finali e centro raggio.
Se poi la tua sarà un fresatura 3D all'ora è tutta un'altra cosa e al limite dovresti guardare il sito Hobby Cnc, dove fanno esclusivamente queste cose.
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#18
Non capisco bene cosa tu intenda per "entità". Cerco di spiegarmi più chiaramente: io voglio disegnare semplicemente una traiettoria, che può essere costituita, ad esempio, da un primo pezzo rettilineo, seguito da un arco di cerchio e concluso da un altro tratto rettilineo. Io ho quindi disegnato una traiettoria e in teoria vorrei che quello fosse il percorso compiuto dall'utensile della mia fresatrice.
Analizziamo il primo tratto di traiettoria, che avevamo supposto rettilineo: la macro che tu hai scritto se non sbaglio dovrebbe calcolare solo le coordinate dei due estremi della retta. Io però vorrei avere anche le coordinate di altri punti della retta, ad esempio vorrei poter fare la seguente cosa: avere le coordinate di n punti della mia retta, magari spaziati in egual misura gli uni dagli altri. E lo stesso discorso vorrei poterlo fare anche con le coordinate dei punti dell'arco di cerchio, etc...
Scusa se mi sono spiegato male, ma è difficile esporre un problema così specifico in poche righe!...

Grazie
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#19
Per "entità" o "curve" si intendo rette, cerchi, archi, punti.
Per fare quello che richiedevi, secondo me dovresti seguire all'interno della macro questo ordine:
- Scansione delle curve del profilo dello schizzo
- Ogni curva (retta o arco) la passi ad una Function, passandogli anche quanti punti intermedi vuoi.
- La Function dovrà mediante operazioni matematiche (equazioni della retta, ecc), ricava i tuoi punti e se vuoi anche li crei dentro al tuo schizzo
- Mano a mano che li crei te li salvi o te li tieni in memoria per creare al termine il tuo programma CNC.

Non vedo altra soluzione, perchè solidWorks non ti ritorna di suo nulla di quello che a te serve.
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#20
Quindi dici che non sia possibile creare una macro che divida lo schizzo 3D in un predeterminato numero di punti e poi ne calcoli le coordinate?