• 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

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#21
Di seguito la macro completa. tieni presente che potrebbe essere fatta meglio, sopratutto dove viene letta la riga di testo, ma non lavoro tutti i giorni in VB.


Il file di testo che deve essere chiamato deve terminare in *.txt e deve essere formattato in CSV con i valori in METRI! deve anche avere una virgola finale, cosa inusuale
esempio di alcune righe: le puoi copiare e incollare in un file di testo. evita di avere linee vuote prima o dopo, non ho fatto alcun sistema di controllo


0.1,0.2,0.3,
0.4,0.5,0.6,
1,2,3,
5,6,7,
0.11111,3.22,1.1,



QUESTA LA MACRO:

'_______________________________
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 Line_length As Integer
Dim i As Integer
Dim Flag As Integer
Dim Punt As Integer
Dim fileOptions As Long
Dim X As Double
Dim Y As Double
Dim Radius As Double
Dim FileToOpen As String
Dim MyLine As String
Dim Filter As String
Dim fileName As String
Dim fileConfig As String
Dim fileDispName As String
Dim Str As String
' Seguenti linee per aprire il file di testo
Filter = "TXT files (*.txt)|*.txt"
FileToOpen = swApp.GetOpenFileName("Immettere il file con le coordinate dei centri(*.txt)", "", Filter, fileOptions, fileConfig, fileDispName)
Open FileToOpen For Input As #11
' Seguenti linee per creare lo scketch
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
boolstatus = Part.Extension.SelectByID2("Frontale_YZ", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
Part.SketchManager.InsertSketch True
Part.ClearSelection2 True
Dim skSegment As Object

''Ciclo di DO per leggere tutte le righe del file di testo
Do Until EOF(11)
Line Input #11, MyLine
Line_length = Len(MyLine)
Flag = 0
Punt = 0
'Ciclo FOR per determinare i tre elementi di ogni riga
For i = 1 To Line_length
If Mid(MyLine, i, 1) = "," Then

Str = Mid(MyLine, Punt + 1, (i - Punt))
Select Case (Flag)
Case 0
X = Val(Str)
Case 1
Y = Val(Str)
Case 2
Radius = Val(Str)
End Select
Flag = Flag + 1
Punt = i
End If
Next i

'Debug.Print "X=", X, "Y = "; Y, "R="; Radius
' Creo lo sketch
Set skSegment = Part.SketchManager.CreateCircle(X, Y, 0#, (Radius + X), Y, 0#)
Part.SketchAddConstraints "sgFIXED"
Part.ClearSelection2 True

Loop
Part.SketchManager.InsertSketch True
Close #11
End Sub
'_______________________________
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#22
@Onda
Grazie Infinite !!!!!!
 

Onda

Moderatore
Staff Forum
Professione: Ingegnere Meccanico settore Navale
Software: SolidWorks 2015, Rhino v5, Autocad 2008, Patran 2014, Nastran 2014
Regione: Italia
#23
Mi sembra che la macro funzioni bene, ti consiglio in ogni caso di verificare quello che ottieni, non uso le macro in SW spesso, per cui potrebbe esserci qualche funzionamento oscuro.
in ogni caso ho scritto in excel una sfilza di numeri, copiati incollati su notepad, eliminati i tab inutili con trova->sostituisci e dato il file in pasto alla macro.
mi ha creato 50 cerchi nelle coordinate prescelte.
dovrebbe essere adatta al tuo scopo, sempre che tu abbia bisogno di variare il diametro dei cerchi, altrimenti quanto suggerito da marcof è senza dubbio la soluzione migliore
 

mihawk

Utente Junior
Professione: Ingegnere
Software: ansys13 solidworks2012 autocad2011 matlabr2012a mathematica8.0
Regione: campania
#24
Si ho verificato funziona correttamente!
Ho provato entrambi i modi per realizzare i fori.
Ho la necessità di fare delle analisi sia con i fori aventi tutti lo stesso
diametro che con i fori aventi diametri differenti.
Grazie mille per l'aiuto !!!