Macro per calcolare coordinate da schizzo 3D

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#21
No sto dicendo il contrario, sto dicendo che solo mediante una programmazione avanzata di una macro in Solidworks puoi ottenere il risultato che cerchi, seguendo i passi che ti avevo sopra descritto.
Al contrario Solidworks non ha nessun comando standard per fare quello che a te serve (quindi bisogna programmare una macro).
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#22
Per fare questo secondo te posso partire dalla macro che hai postato, oppure dovrei partire da zero scrivendo una nuova macro?
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#23
Io partirei dalla macro in allegato, fondendo parte del'altra.
Sono comvinto che quando la testi capisci immediatamente dove intervenire, o altrimenti chiedi.
sarebbe bello una volta che l'hai completata, poterla condividere con gli utenti del forum.
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#24
Ok nei prossimi giorni inizierò a testarla e cercherò di modificarla in modo da rispondere alle mie esigenze. A presto!! (penso che sarà molto presto, data la mia poca esperienza in questo campo!!:))

ciao
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#25
Mancava l'allegato! Perdonami!!!!
Se hai intoppi confrontiamoci pure.
Ciao
 

Allegati

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#26
Scusa ma ho provato a fare partire la macro in allegato ma non succede niente. Dal momento che io non conosco il VBA, ma solo il C#, ti chiedo se puoi spiegarmi brevemente cosa fa la macro che mi hai allegato. In questo modo magari riuscirò a metterci mano, anche se prima devo capire un po' la logica di questo linguaggio.

Grazie
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#27
Da schizzo chiuso seleziona un'entità.
Di quell'entità selezionata ti estrae i suoi punti, ma ti dice, a seconda se è un arco o una retta altre proprietà.
Fondendola con quella iniziale che ti avevo girato, ogni entità verrà riconosciuta a seconda che sia un arco o una retta o un punto, e per ognuno di queste entità gli passi una function che la suddivida in altri punti come da te richiesto.
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#28
Allora ho provato a fondere insieme le due macro. Ho però riscontrato i seguenti problemi:

- Ho dovuto eliminare l'opzione "Option Explicit" perchè mi dava problemi con la macro riguardante il trasferimento delle coordinate su file txt. E' corretto avere eliminato questa ruga di codice?

- La macro così com'è non funziona perchè mi fornisce un errore in fase di debug relativo alle righe " Set swSkSeg = swSelMgr.GetSelectedObject5(1), etc...". Sai per caso a cosa possa essere dovuto?


Ti allego la macro modificata, così se potessi farle qualche correzione te ne sarei grato.
In secondo luogo volevo chiedere: la Function di cui tu parlavi va scritta nella parte finale del Main, dopo tutto il codice già inserito? Sai se posso trovare sul web esempi di funzioni simili, così da poter provare a scriverla?

Grazie
 

Allegati

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#29
Ok ho modificato ancora la macro, e questa volta spero di aver fatto qualcosa di meglio. Ti spiego brevemente quello che ho fatto così potrai correggere i miei errori:
1- Ho preso la macro Punti.swp
2- Ho eliminato tutto il contenuto del main di questa macro e ho inserito il contenuto del main della macro export_points_xyz2file.swp
3- Ho eliminato la riga di codice "Option Explicit" perchè altrimenti mi dava errori di compilazione

Ho provato a far funzionare la macro e al momento fa esattamente quello che faceva prima la sola macro export_points_xyz2file.swp, ma da quello che ho capito adesso a priori è stata fatta una scansione di tutte le curve presenti all'interno dello schizzo. Quindi a questo punto in teoria manca solo da scrivere la function che mi divida i vari tratti in un certo numero di punti, giusto?
Mi potresti dare un paio di dritte su come scrivere questa function?

Ti allego la macro così puoi darle un occhio. Lasca perdere la macro del mio precedente post, perchè era fatta male.


Grazie mille


View attachment Nuova_macro_modificata.rar
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#30
per ognuno di queste entità gli passi una function che la suddivida in altri punti come da te richiesto
Quindi devo scrivere una function per ogni entità (retta, cerchio, spline, ecc) oppure una function unica per tutte le entità? Mi trovo un po' in difficoltà perchè non so bene come impostare il codice.


P.S. La macro che ho postato nell'ultimo messaggio è decente o ho commesso un sacco di errori?


Grazie mille
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#31
Come sai il tempo per creare una macro dinamica è molto lungo, e quando posso sto cercando di creare qualcosa di parallelo a quello che stai cercando di programmare, inmodo da venirti incontro il piu possibile.
Pultroppo o poco tempo durante il giono ma quando posso approfondisco, comunque sia per rispondere alla tua domanda
devi creare una function per ogni entità.
Per ogni entità quandi la function ne ricava i dati (punti di inicio fine, centro, ecc, ) e poi sempre al suo interno la suddividi in ulteriori punti mediante calcoli matematici (equazioni della retta, ecc.)
Ciao a presto e ...
Buon Natale a te e a tutti gli utenti del forum
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#32
Ok, innanzitutto grazie mille per l'aiuto che mi stai dando, perchè sei l'unico con cui sto riuscendo a confrontarmi!
Io pensavo di ricorrere all'istruzione:

vFeatArr = swFeatMgr.InsertReferencePoint(swRefPointAlongCurve, swRefPointAlongCurveEvenlyDistributed, 0#, 100)

che se non sbaglio serve per creare punti di riferimento (in questo caso 100) ugualmente distribuiti lungo una curva.
Secondo te è una soluzione che semplificherebbe un po' le cose?

Pensavo dunque di scrivere una function per ogni entità (retta, arco, spline, etc) e far eseguire quell'istruzione per ogni tratto di curva. Magari è una cosa un po' dozzinale, ma se semplificasse le cose sarebbe per me già un buon inizio.

Ti allego una macro che ho trovato in rete che fa questa cosa per una spline. Mi piacerebbe riuscire ad applicarla ai miei tratti di curva, e penso non sia difficile, ma data la mia poca esperienza mi trovo un po' in imbarazzo a fondere questa macro nella mia.

View attachment Dividi_spline _in_punti.rar
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#33
L'unica cosa è che la macro della spline che ho postato crea i punti al di fuori dello schizzo, quindi non è esattamente la cosa voluta, dal momento che servono dentro lo schizzo.

Grazie ancora e Buon Natale a tutti
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#34
Ciao, credo di aver fatto centro, ritengo che la macro che ti ho scritto ora sia quello che cerchi.
Prerequisiti:
- Parte aperta e schizzo esistente con un profilo o una singola entità.
Risultato:
- scansione di ogni entità del contorno e estrapolazione dei dati per ciascuna di esse

Ora all'interno della Function del segmento e dell'arco devi inserire dei calcoli matematici per il calcolo degli ulteriori punti che ti servono (es. punto medio del semento, punto medio della porzione di arco, ecc).

Ti allego come traccia un link dove trovi l'esempio di alcune equazioni della retta e del punto medio, angolo della retta cc.
http://www.ripmat.it/mate/d/dc/dcd.html

Questa parte, se fossi in tè, la gestirei con una Userform, dove setto i parametri di suddivisione dei punti aggintivi, così che il tuo codice sia dinamico.

Spero di averti fatto trovare un regalo sotto l'albero.

Auguri a tutti
Jenuary
 

Allegati

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#35
Guarda non so come ringraziarti!!E' stato davvero un regalo molto gradito!...Adesso cercherò di lavorarci un po' su da solo e appena sarò riuscito a combinare qualcosa la posterò su questa discussione così che anche gli altri utenti ne possano usufruire!...

Grazie ancora del tuo prezioso aiuto!

Auguri a tutti
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#36
Ho solo alcune domande da farti così posso capire meglio come muovermi:

1- I calcoli che io devo inserire per ricavarmi i vari punti, li devo inserire all'interno delle "Sub ProcessSketchEllipse, Sub ProcessSketchLine, etc..." giusto? O all'interno della Function iniziale "Function TransformSketchPointToModelSpace"?

2- Ho provato a compilare la macro ma mi rilascia qualche errore. Le righe incriminate sono:

- Debug.Print Sketch.Name : Error Variabile oggetto o variabile del blocco With non impostata
- ProcessTextFormat swApp, swModel, swSkText.GetTextFormat

3- Curiosità: Line = retta, Arch = cerchio, Ellipse = ellisse, Spline = spline, Text = ???


Grazie ancora e auguri
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#37
I calcoli vanno eseguiti dentro alla Function
Text è uno schizzo di testo, ma credo non faccia per te.
Credo che tu i profili che utilizzerai saranno archi e segmenti, il resto non credo ti serca.
Ciao
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#38
Ok a questo punto credo di aver capito dove andare ad agire.
A questo punto però ti rompo le scatole con un'ultima curiosità: se io volessi semplicemente suddividere i miei segmenti di curva in un certo numero di punti (ad esempio 100 punti) dovrei andare ad agire sulla function e utilizzare le equazioni della retta, circonferenza etc per generarli?
Ciò che mi hai proposto di scrivere tu sembra più rivolto a trovare dei punti specifici (ad esempio il punto medio di un segmento, il punto medio di un arco di cerchio, etc...), ma se io volessi semplicemente suddividere i segmenti in n punti ugualmente distanziati, fregandomene della loro posizione ma importandomi solo il numero di questi punti, dovrei agire sempre allo stesso modo?
Questa è una curiosità molto importante per me, dato che la macro che sto cercando di creare dovrebbe fare proprio questo.

Grazie ancora e scusa per il continuo disturbo
 

jenuary

Utente Standard
Professione: Progettista e Programmatore VB.Net
Software: Solidworks
Regione: Veneto
#39
Il link che ti avevo inserito era solo un esempio, in realtà dovresti trovare o studiare un'equazione che ti permetta di ricavare le coordinate dei punti di suddivisione.
Per il cerchio per esempio io la vedrei cosi:
Avendo centro, punto iniziale e punto finale, dovresti avere ance l'angolo della porzione di circonferenza, che a sua volta suddividendolo in 101 parti per esempio, trovi l'angolo della tua porzione.
Da questo poi ne ricavi il punto iniziale e finale del tuo pezzo.
Usando un
Dim angolo as Double
Dim MyAngolo as Double

Angolo=angolo totale del mio arco
MyAngolo=Angolo\101
For i=o to 101 (dove 101 ti serve per creare le 100 divisioni)
....
....
MyAngolo=MyAngolo+MyAngolo
next

C'è da lavorare per scrivere un codice flessibile, ma credo sia più semplice di quello che pensiamo, dobbiamo rispolverare i libri di matematica.
Ad ogni calcolo di un punto, si potrebbe pensare di crearlo fisicamente all'interno del tuo schizzo oppure popolare una lista nel tuo form e crearli se si vuole succesivamente secondo altre regole (solo meta di essi per esempio).
 

alxG88

Utente Junior
Professione: Ingegnere Meccanico
Software: SolidWorks, Solid Edge, Inventor, Autocad
Regione: Emilia Romagna
#40
Ok grazie mille per l'aiuto, ora proverò a lavorarci un po' su! Appena avrò tirato fuori qualcosa lo posterò qui!

Ciao