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 02 Masse aller Baugruppenkomponenten auslesen |
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.
Man kann ohne Schwierigkeiten die Masse einer gesamten Baugruppe von SolidWorks bekommen, aber wenn man eine Übersicht haben will, was jede einzelne Komponente oder Unterbaugruppe wiegt artet das schnell in viel handarbeit aus. Aber sowas kann man ja auch automatisieren.
In diesem Fall hab ich Excel benutzt, da die Ausgaben dort direkt weiterverarbeitet werden können und vor allem zum Auslesen der Masseneigenschaften mit SafeArrays gearbeitet werden muss, was ja bekanntermaßen Makros nicht können.
Wer das Excelsheet nicht runterladen will hier die zwei Funktionen dafür: macht euch einfach einen Befehlbutton in euer Excelblatt und nehmt den Code per Copy/Paste herüber:
' Globale Variable
Dim zeile As Integer ' Zeilenzähler für Ausgabe im Blatt
Private Sub CommandButton1_Click()
' aus aktivem SolidWorks Assembly für alle Komponenten
' Dichte und Masse auslesen. Keine Fehlerabragen etc.
' SolidWorks sollte oben und das zu untersuchende Assembly
' als aktives Dokument geladen sein. Auf Basis des Traverse-Assy
' aus dem API-HELP File von SolidWorks
' 12.09.2000 Stefan Berlitz http://solidworks.cad.de
Dim swApp As Object
Dim AssemblyDoc As Object
Dim Configuration As Object
Dim RootComponent As Object
' an SolidWorks anklinken und aktives Assembly holen
Set swApp = CreateObject("SldWorks.Application")
Set AssemblyDoc = swApp.ActiveDoc
' Root-Komponente des Assemblies als Ausgangspunkt festmachen
Set Configuration = AssemblyDoc.GetActiveConfiguration()
Set RootComponent = Configuration.GetRootComponent()
' erst Blatt leeren, dann Spaltenbeschriftung im Excel-Blatt
Cells.Select
Selection.ClearContents
Range("A1").Select
ActiveCell.FormulaR1C1 = "Level"
Range("B1").Select
ActiveCell.FormulaR1C1 = "Komponentenname"
Range("C1").Select
ActiveCell.FormulaR1C1 = "Masse in kg"
zeile = 2 ' Zeilenzähler zur Ausgabe in Tabellenblatt
' und jetzt rekursiv durch alle Ebenen
If Not RootComponent Is Nothing Then
TraverseComponent 1, RootComponent
End If
End Sub
Private Function TraverseComponent(Level As Integer, Component As Object)
' rekursive Routine, die alle Komponenten durchläuft
Dim i As Integer
Dim Children As Variant
Dim Child As Object
Dim ChildCount As Integer
Dim ModelDoc As Object
Dim ConfigName As String
Dim MassProp As Variant
Dim ret As Boolean
' in Excelblatt den aktuellen level, den Komponentennamen eintragen ...
Range("A" & zeile).Select
ActiveCell.FormulaR1C1 = Level
Range("B" & zeile).Select
ActiveCell.FormulaR1C1 = Component.Name
' und dann für diese Komponente die Masse auslesen
Range("C" & zeile).Select
If Component.IsSuppressed Then
ActiveCell.FormulaR1C1 = "*** Komponente unterdrückt ***"
Else
' dann das ModelDoc der Komponente herausholen
ConfigName = Component.ReferencedConfiguration
Set ModelDoc = Component.GetModelDoc()
If Not ModelDoc Is Nothing Then
' und die MassProperties auslesen
ModelDoc.ShowConfiguration (ConfigName)
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
ActiveCell.FormulaR1C1 = MassProp(5)
Else
ActiveCell.FormulaR1C1 = "*** Kein ModelDoc, Rootkomponente? ***"
End If
End If
' dann für die Ausgabe nächste Zeile vorbelegen
zeile = zeile + 1
' schauen, ob's ein Subassy ist und ggf. über die Kinder rüberschauen
Children = Component.GetChildren
ChildCount = UBound(Children) + 1
For i = 0 To (ChildCount - 1)
Set Child = Children(i)
TraverseComponent Level + 1, Child
Next i
End Function
Kritik und Anregungen bitte an Stefan Berlitz. Letzte Änderung dieser Seite am Donnerstag, 01. Februar 2007 17:40 |