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

circonferenze a partire da nuvola di punti

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#1
Salve a tutti!
Per il mio lavoro di tesi devo realizzare un modello CAD di una piastra forata con fori disposti in maniera casuale.
Mediante un algoritmo implementato in MatLab ho determinato la nuvola di punti che ho passato a SolidWorks tramite una macro che ho trovato in una delle discussioni su questo forum.

Mi servirebbe un suggerimento per realizzare a partire dai punti importati una serie di circonferenze senza dover selezionare uno alla volta i vari punti.
(i punti sono più di 200)

Grazie per l'aiuto !!!
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#2
La versione che uso di SolidWorks è la 2012
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#3
Credo che il metodo più semplice sia di fare una macro che legga il file con i punti e li assegni alla creazione del centro delle coordinate del cerchio. piuttosto che fare i punti e poi andarli a selezionare.
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#4
Lo so che si tratta di un problema banale ma
siccome non ho esperienza nella scrittura delle macro mi
potresti consigliare dove reperire materiale a riguardo?
Grazie per l'aiuto!
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#5
questa macro è un abbozzo.
manca tutta la parte di apertura del file e della sua lettura.
mi ci vuole troppo tempo ora a scriverla. ma dovresti trovare qualcosa online. in ogni caso è semplice VB.

attenzione a sostituire con il corretto nome del piano sul quale vuoi fare gli schizzi, il mio si chiama:"Superiore_XY"



Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Dim X As Double
Dim Y As Double
Dim Radius As Double
Dim i As Integer


'eliminare questa riga è la lunghezza del file stesso che determina il ciclo di loop
i = 10

Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Superiore_XY", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
Dim skSegment As Object
'inserire apertura file con all'interno coordinate e raggio
'impostare il ciclo Do fino a EOF (end of file)
Do Until i = 1
'inserire qui lettura delle coordinate e del raggio
' sostituire le definizioni sottostanti con i valori prelevati dal file
X = 0.01
Y = 0.02
Radius = i / 10
'''''

Set skSegment = Part.SketchManager.CreateCircle(X, Y, 0#, (Radius + X), Y, 0#)
Part.SketchAddConstraints "sgFIXED"
Part.ClearSelection2 True
'eliminare la riga sottostante
i = i - 1
Loop
Part.SketchManager.InsertSketch True
End Sub
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#6
Grazie mille per l'aiuto!
Vedo se riesco a risolvere!!!
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#7
credo di dover provare qualche altra via
non avendo mai programmato macro in sw
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#8
Il visual basic è utilissimo per tante applicazioni.
ti conviene imparare un poco di visual basic piuttosto che inserire i comandi a mano.
Alla fine del lavoro forse hai perso più tempo, ma hai in mano uno strumento molto potente.

sei riuscito a far girare la macro?
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#9
No non ancora...
purtroppo non ho mai dovuto utilizzare il visual basic
prima d'ora.
Mi rendo conto che si tratta di uno strumento molto potente
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#10
per far girare la macro:
apri una nuova parte in SW.
vai su strumenti->macro->registra
poi strumenti->macro->ferma. Salva la macro appena creata con un nome qualsiasi
quindi :
strumenti->macro->modifica
copia incolla nella macro il testo che ti ho dato io
sostituisci il nome del piano corretto all'interno del testo della macro e salvala
ora vai in strumenti->macro-> esegui
e richiama la macro precedentemente salvata.
questo è l'inizio
prova
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#11
Provato!
Partendo dalla parte dove ho generato la nuvola di punti
ho fatto come indicato nel commento precedente.
(come nome del piano ho messo Frontale_XY)
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#12
e allora?
ti crea i 10 cerchi?
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#14
come si chiamano i piani di default del tuo modello?
devi sostituire il piano che si chiama Superiore_XY
con un piano presente nel tuo modello.
altrimenti non riconoscendo il piano non funziona.
oppure, invece di modificare la macro, modifichi il nome del piano
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#15
Il testo della macro è questo:

' ******************************************************************************
' C:\Users\Falco\AppData\Local\Temp\swx704\Macro1.swb - macro recorded on 08/21/12 by Falco
' ******************************************************************************
Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()
Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()
Set swApp = Application.SldWorks
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Dim X As Double
Dim Y As Double
Dim Radius As Double
Dim i As Integer


'eliminare questa riga è la lunghezza del file stesso che determina il ciclo di loop
i = 10

Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Piano1", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
Dim skSegment As Object
'inserire apertura file con all'interno coordinate e raggio
'impostare il ciclo Do fino a EOF (end of file)
Do Until i = 1
'inserire qui lettura delle coordinate e del raggio
' sostituire le definizioni sottostanti con i valori prelevati dal file
X = 1
Y = 2
Radius = i / 10
'''''

Set skSegment = Part.SketchManager.CreateCircle(X, Y, 0#, (Radius + X), Y, 0#)
Part.SketchAddConstraints "sgFIXED"
Part.ClearSelection2 True
'eliminare la riga sottostante
i = i - 1
Loop
Set swApp = _
Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
End Sub

Ho inserito un piano chiamato Piano1
per verificare il funzionamento ma le circonferenze non sono state generate
 

marcof

Utente Senior
Professione: appiccico francobolli con lo schiacciasassi
Software: solidworks 2013 SP 5.0
Regione: Modena
#16
Salve a tutti!
Per il mio lavoro di tesi devo realizzare un modello CAD di una piastra forata con fori disposti in maniera casuale.
Mediante un algoritmo implementato in MatLab ho determinato la nuvola di punti che ho passato a SolidWorks tramite una macro che ho trovato in una delle discussioni su questo forum.

Mi servirebbe un suggerimento per realizzare a partire dai punti importati una serie di circonferenze senza dover selezionare uno alla volta i vari punti.
(i punti sono più di 200)
se ho capito bene ti ritrovi con uno schizzo su un piano che contiene i tuoi 200 e passa punti disposti casualmente.
Non hai specificato se i fori avranno tutti la stessa dimensione... Nel caso siano tutti uguali puoi usare la ripetizione di funzione guidata dallo schizzo, ovvero un foro di base che verrà ripetuto concentrico a ciascun punto dello schizzo.
I fori ovviamente saranno derivati da quello padre quindi tutti uguali.
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#17
La macro è errata perchè dovevi cancellare tutto quello che era presente e incollare ESCLUSIVAMENTE quello che ti avevo scritto io.
tu ti trovi ora con 2 sub main. così non funziona.
elimina tutto e reincolla quanto ti ho copiato.
sostituisci il nome del mio piano con quello del tuo e riprova.
ciao
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#18
@Onda

Riprovato, funziona.
Chiedo scusa per il banale errore di prima.

@marcof
si si i fori in prima approssimazione li considero tutti dello stesso diametro
 

marcof

Utente Senior
Professione: appiccico francobolli con lo schiacciasassi
Software: solidworks 2013 SP 5.0
Regione: Modena
#19
@
@marcof
si si i fori in prima approssimazione li considero tutti dello stesso diametro
come ti ho scritto se resteranno dello stesso diametro quei fori li fai in due secondi con la ripetizione gudata dallo schizzo, se ti servono diversi e hai la tabella con le coordinate del centro e il diametro di ogni foro allora sicuramente la macro può risolverti il problema.