SolidWorks MakroMania ist eine Beispielsammlung einiger Makros, die Ihnen eine Vorstellung davon geben soll, was man auch schon mit Makros in SolidWorks alles anstellen kann. Der Code des Makros sollte so gut dokumentiert sein, dass Sie damit ohne weitere Anleitung verstehen, was gemacht wird. |
< voriges |
MakroMania Übersicht |
Nummer 22 Masse und Schwerpunkt aller Konfigurationen |
Ich übernehme keine Haftung für die korrekte Funktion der Routinen oder irgendwelcher Schäden bei der Anwendung dieser Beispiele. Das gesamte Risiko trägt der Benutzer selbst. - Sorry, muss sein.
Dieses Excelsheet mit eingebettetem Makro holt zu allen Konfigurationen des aktuellen Modells die Masseeigenschaften (Masse) und die Koordinaten des Schwerpunktes.
' Globale Variable
Dim zeile As Integer ' Zeilenzähler für Ausgabe im Blatt
Const swMM = 0
Const swCM = 1
Const swMETER = 2
Const swINCHES = 3
Const swFEET = 4
Const swFEETINCHES = 5
Const swANGSTROM = 6
Const swNANOMETER = 7
Const swMICRON = 8
Const swMIL = 9
Const swUIN = 10
Private Sub CommandButton1_Click()
' aus aktivem SolidWorks Dokument für alle Konfigurationen
' Masse und Mssenmittelpunkt auslesen. Keine Fehlerabragen etc.
' 23.02.2003 Stefan Berlitz
' http://solidworks.cad.de
Dim swApp As Object
Dim ModelDoc As Object
Dim Configuration As Object
Dim ConfigCount As Long
Dim ConfigNames As Variant
Dim MassProp As Variant
Dim i As Integer
Dim conv As Double
Dim convstring As String
Dim convmass As Double
Dim convmassstring As String
' an SolidWorks anklinken und aktives Assembly holen
Set swApp = CreateObject("SldWorks.Application")
Set ModelDoc = swApp.ActiveDoc
' convert unities, SWX uses kg and meters, so we have to convert
' if modeldoc uses dufferent units
Select Case ModelDoc.LengthUnit
Case swMM
conv = 1000
convstring = " [mm]"
convmass = 1 ' no need to convert kg
convmassstring = " [kg]"
Case swCM
conv = 100
convstring = " [cm]"
convmass = 1
convmassstring = " [kg]"
Case swMETER
conv = 1
convstring = " [m]"
convmass = 1
convmassstring = " [kg]"
Case swINCHES
conv = 1 / 0.0254
convstring = " [inch]"
convmass = 1 / 0.45359 ' converts kg to lbl
convmassstring = " [lbl]"
Case swFEET
conv = 1 / 0.3048
convstring = " [feet]"
convmass = 1 / 0.45359
convmassstring = " [lbl]"
'Case swFEETINCHES
'Case swANGSTROM
'Case swNANOMETER
'Case swMICRON
'Case swMIL
'Case swUIN
Case Else
conv = 1
convstring = " [m]"
convmass = 1
convmassstring = " [kg]"
End Select
' Root-Komponente des Assemblies als Ausgangspunkt festmachen
ConfigCount = ModelDoc.GetConfigurationCount
ConfigNames = ModelDoc.GetConfigurationNames
' erst Blatt leeren, dann Spaltenbeschriftung im Excel-Blatt
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveCell.FormulaR1C1 = "Configname"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Mass" & convmassstring
Range("C1").Select
ActiveCell.FormulaR1C1 = "X" & convstring
Range("D1").Select
ActiveCell.FormulaR1C1 = "Y" & convstring
Range("E1").Select
ActiveCell.FormulaR1C1 = "Z" & convstring
zeile = 2 ' Zeilenzähler zur Ausgabe in Tabellenblatt
For i = 0 To ConfigCount - 1
Range("A" & zeile).Select
ActiveCell.FormulaR1C1 = ConfigNames(i)
If ModelDoc.ShowConfiguration2(ConfigNames(i)) Then
'
MassProp = ModelDoc.GetMassProperties
' die Reihenfolge der MassProps im Variant ist:
' CenterOfMassX, CenterOfMassY, CenterOfMassZ, Volume, Area, Mass,
' MomXX, MomYY, MomZZ, MomXY, MomZX, MomYZ
' Masse ist die 6. Eigenschaft, also Index 5
Range("B" & zeile).Select
ActiveCell.FormulaR1C1 = MassProp(5) * convmass
Range("C" & zeile).Select
ActiveCell.FormulaR1C1 = MassProp(0) * conv
Range("D" & zeile).Select
ActiveCell.FormulaR1C1 = MassProp(1) * conv
Range("E" & zeile).Select
ActiveCell.FormulaR1C1 = MassProp(2) * conv
Else
Range("B" & zeile).Select
ActiveCell.FormulaR1C1 = "Error activating configuration"
End If
' nächste Zeile
zeile = zeile + 1
Next i
' make it pretty
Columns("A:E").Columns.AutoFit
End Sub
Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40 |