| | |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| | |
 | Smart Engineering Session: CAD-Automation in SOLIDWORKS in Berlin, eine Veranstaltung am 12.03.2026
|
|
Autor
|
Thema: Eigenschaften von Volumenkörpern (587 mal gelesen)
|
grinsemann Mitglied
 Beiträge: 6 Registriert: 08.03.2006
|
erstellt am: 08. Mrz. 2006 13:22 <-- editieren / zitieren --> Unities abgeben:         
Hi, ich würde gerne mit einem Makro die Eigenschaften (z.B. Transparenz) von Volumenkörpern auslesen/vergleichen. Als Grundlage für meine bemühungen habe ich ein Makro von Stefan Berlitz verwendet zum zurücksetzten von Flächenfarben. (man will sich ja nicht mit fremden Federn schmücken *g*) Code: ' zunächst mal ein paar Deklarartionen die gebraucht werden Dim SwApp As Object Dim ModelDoc As Object Dim body As Object Dim faceCnt As Integer Dim retval As IntegerDim vbody As Variant Dim vSinglebody As Variant Const swSolidbody = 0 ' die Konstanten aus swconst.bas, damit nicht mit Zahlen gearbeitet werden muss Const swDocNONE = 0 ' Used to be TYPE_NONE Const swDocPART = 1 ' Used to be TYPE_PART Const swDocASSEMBLY = 2 ' Used to be TYPE_ASSEMBLY Const swDocDRAWING = 3 ' Used to be TYPE_DRAWING Const swDocSDM = 4 ' Solid data manager. Sub Main() ' an SolidWorks Session anklinken und ggf. sichtbar machen Set SwApp = CreateObject("SldWorks.Application") SwApp.Visible = True
' Zeiger auf aktives Dokument holen und überprüfen, ob überhaupt eins aktiv ist Set ModelDoc = SwApp.ActiveDoc If ModelDoc Is Nothing Then MsgBox ("Kein Modell geöffnet") End End If ' ausserdem funktioniert das so nur mit Parts, also sollte das aktive ' Dokument auch ein Part sein If ModelDoc.GetType() <> swDocPART Then MsgBox ("Das Makro funktioniert nur mit Parts") End End If ' die Volumenkörper des Modells holen vbody = ModelDoc.GetBodies2(swSolidbody, False) 'ModelDoc -> PartDoc If Not IsEmpty(vbody) Then vKoerperCnt = 0 For Each vSinglebody In vbody ' die Flächen werden über das body-Object angesprochen, also erstmal ' den Körper des aktiven Modells anwählen. Debug.Print vSinglebody.GetType Debug.Print vSinglebody.Name Debug.Print "-------" ' Zähler für durchlaufenen Koerper einen hochzählen vKoerperCnt = vKoerperCnt + 1 Next ' nur noch eine Erfolgsmeldung MsgBox (Str(vKoerperCnt) & " Körper durchlaufen") Else MsgBox "Keine Volumenkörper im Modell" End If End Sub
Da wo die debug.print Zeilen stehen müsste ich irgendwie auf die Eigenschaften des Volumenkörpers zugreifen, leider weiss ich nicht wie. Versucht hatte ich es mit MaterialPropertyValues2 was aber leider nicht funktionierte. Kann mir da evtl. jemand weiter helfen? Danke im voraus. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grinsemann Mitglied
 Beiträge: 6 Registriert: 08.03.2006
|
erstellt am: 09. Mrz. 2006 16:25 <-- editieren / zitieren --> Unities abgeben:         
|
Mausus Mitglied Projektleiter / Konstrukteur

 Beiträge: 30 Registriert: 19.01.2006 WIN XP Pro SP2 Pentium IV 3,20GHz 2GB RAM Grafik Quadro FX 540
|
erstellt am: 11. Mrz. 2006 00:08 <-- editieren / zitieren --> Unities abgeben:          Nur für grinsemann
|
Marc Bräuninger Mitglied Konstruktion mit SWX
 
 Beiträge: 111 Registriert: 27.03.2002
|
erstellt am: 11. Mrz. 2006 10:09 <-- editieren / zitieren --> Unities abgeben:          Nur für grinsemann
Hallo, ich habe mal kurz gesucht und folgendes gefunden: MaterialPropertyValues Damit kann man die RBG-Farbe von Flächen, Teilen und Baugruppenkomponenten ermitteln. Aber auch Transparenz, etc., alles was man als Farbeigenschaft eintragen kann. Das Ergebnis ist ein SafeArray mit folgenden Werten: [ R, G, B, Ambient, Diffuse, Specular, Shininess, Transparency, Emission ] Gruß Marc [Diese Nachricht wurde von Marc Bräuninger am 11. Mrz. 2006 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grinsemann Mitglied
 Beiträge: 6 Registriert: 08.03.2006
|
erstellt am: 13. Mrz. 2006 09:44 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Bemühungen. Wie oben erwähnt hatte ich es mit MaterialPropertyValues2 versucht, konnte aber weder Werte Zuweisen, noch die aktuellen Werte auslesen. Wie müsste denn ein Aufruf mit MaterialPropertyValues aussehen? Versucht hatte ich es so: Dim MatVal As Variant MatVal = Array(0.8, 0.7, 0.6, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9) vSinglebody.MaterialPropertyValues = (MatVal) MatVal = vSinglebody.MaterialPropertyValues Debug.Print MatVal Läuft einwandfrei durch, allerdings ohne das Werte zurück geliefert werden Was mach ich da falsch? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChrisB Mitglied

 Beiträge: 61 Registriert: 14.03.2005 SolidWorks 2006/2008 WinXP Pro MS VS 2005
|
erstellt am: 14. Mrz. 2006 09:51 <-- editieren / zitieren --> Unities abgeben:          Nur für grinsemann
Zitat: Original erstellt von grinsemann: Versucht hatte ich es mit MaterialPropertyValues2 was aber leider nicht funktionierte. Kann mir da evtl. jemand weiter helfen? Danke im voraus.
Kannst du ein bisschen genauer werden, was nicht funktioniert(Fehlermeldung)? Ich kann mich schwach daran erinnern Body2::MaterialPropertyValues2 ein paar mal benutzt zu haben. Hat bei mir eigentlich recht gut funktioniert. In der API Hilfe gibt's zu diesem Befehl auch ein Beispiel. Das macht im Endeffekt genau das was du möchtest. Grüße Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
grinsemann Mitglied
 Beiträge: 6 Registriert: 08.03.2006
|
erstellt am: 14. Mrz. 2006 11:45 <-- editieren / zitieren --> Unities abgeben:         
Danke für die Antwort. Durch den Hinweis mit dem Beispiel bin ich darauf aufmerksam geworden, das ich die ganze Zeit mit MaterialPropertyValues anstatt MaterialPropertyValues2 hantiert hatte, und dazu ist kein Beispiel aufgeführt... Mein Problem war es das ich mit MaterialPropertyValues immer einen Leeren Rückgabewert bekommen habe. Aber mit dem Beispiel hat sich die Sache nun geklärt. Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |