Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro Gerichtetes Licht löschen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Makro Gerichtetes Licht löschen (1965 mal gelesen)
Pneumus
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Pneumus an!   Senden Sie eine Private Message an Pneumus  Schreiben Sie einen Gästebucheintrag für Pneumus

Beiträge: 2
Registriert: 04.08.2012

SolidWorks

erstellt am: 04. Aug. 2012 15:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo.
Ich möchte ein Makro schreiben welches mir die gerichteten Lichter aus meinem Teil löscht.
(Ansicht --> Beleuchtung und Kameras --> Löschen--> )
Gerichtet1
Gerichtet2
Gerichtet3

Zwar habe ich in der SolidWorks API Hilfe die Methode gefunden, komme jedoch nicht weiter damit.
Vielleicht hat das oder Ähnliches schon gemacht.

Bitte um Hilfe!!!!

freundliche Grüße

Pneumus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 06. Aug. 2012 11:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Hallo Pneumus,

und herzlich willkommen im SolidWork Brett auf CAD.de  

Die Aufgabe war ganz interessant, deswegen hab ich mal ein Beispielmakro dafür gemacht. Das Umpacken des Rückgabewertes in  die einzelnen Werte dürfte der größte Stolperstein sein, da es nicht so ganz einfach nachzuvollziehen ist und von selbst drauf kommen schon sehr schwierig.

Hier der Makrocode:

Code:
' **********************************************************************
' * Makro ermittelt für alle Lichtquellen im aktiven Modell den
' * Lichtquellentyp und löscht in diesem Beispiel alle gerichteten
' * Lichter.
' *
' * (siehe auch http://ww3.cad.de/foren/ubb/Forum2/HTML/024417.shtml)
' *
' * 06.08.2012 Stefan Berlitz (stefan.berlitz@solidworks.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' **********************************************************************

' benutzerdefinierte Datentypen definieren
Type DoubleRec
    dValue As Double
End Type
Type Int2Rec
    iLower As Long
    iUpper As Long
End Type


' Entpacken von 2 Interger Werten aus einem einzelnen Doublewert. Das wird
' erreicht durch Zuweisen an einen (benutzerdefinierten) Datentyp DoubleRec
' umkopieren dieses Typs an den benutzerdefinierten Type Int2Rec und von
' dort aus den unteren und oberen Integer auslesen.
' Die merkwürdige Konstellation zum "Entpacken" der Werte aus dem Doublearray
' siehe API Beispiel
' "Unpacking Double Arrays into Integer Pairs in Visual Basic .NET and Visual Basic"
Function ExtractFields(dValue As Double, iLower As Integer, iUpper As Integer)
    Dim dr As DoubleRec, i2r As Int2Rec
   
    ' Setzen des Double Wertes
    dr.dValue = dValue
   
    ' Kopieren auf den zweiten benutzerdefinierten Datentyp
    LSet i2r = dr
   
    ' Auslesen der Werte und implizites Umsetzen in Integer
    iLower = i2r.iLower
    iUpper = i2r.iUpper

End Function

Sub main()

    Dim swApp                   As Object
    Dim swModel                 As Object
   
    Dim nLightCount             As Long
    Dim vLightProp              As Variant
    Dim dLightProp              As Double
   
    Dim LightsourceTypeUpper    As Integer
    Dim LightsourceTypeLower    As Integer
   
    Dim i                       As Long

    ' an SolidWorks anklinken und Modell holen
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   
    ' die Anzahl der Lichtquellen abfragen
    nLightCount = swModel.GetLightSourceCount

    ' und über alle Lichtquellen iterieren, und das rückwärts, damit das
    ' mit dem Löschen klappt, da sonst die Zählung durcheinander kommt
    For i = (nLightCount - 1) To 0 Step -1
       
        ' die Eigenschaften der Lichtquellen holen
        ' der Rückgabewert ist ein Safearray bestehend aus 19 Doubles
        ' [ type, Intensity, Color[3], Position[3], Direction[3], coneAngle,
        '   falloff[3], Ambient, Specular, isDisabled, SpotExponent ]
        vLightProp = swModel.LightSourcePropertyValues(i)
       
        ' den Typ der Lichtquelle in ein Double umpacken
        dLightProp = vLightProp(0)
        ' und mit der Hilfsfunktion das "Umformatieren" in die gepackten Integers
        ExtractFields dLightProp, LightsourceTypeLower, LightsourceTypeUpper

        ' und dann nach dem Typ der Lichtquelle etwas damit anstellen
        Select Case LightsourceTypeLower
        Case 1
            ' Umgebungslicht
        Case 2
            ' Schweinwerfer
        Case 3
            ' Punktlicht
        Case 4
            ' gerichtetes Licht
            swModel.DeleteLightSource (i)
        Case Else
            ' unbekannter Lichttyp
        End Select
       
    Next i

End Sub



Ich hoffe, das hilft als Gerüst oder schon fertige Lösung, wenn es nur um das Löschen geht.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Pneumus
Mitglied
Konstrukteur

Sehen Sie sich das Profil von Pneumus an!   Senden Sie eine Private Message an Pneumus  Schreiben Sie einen Gästebucheintrag für Pneumus

Beiträge: 2
Registriert: 04.08.2012

SolidWorks

erstellt am: 07. Aug. 2012 10:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Sehr schön! 
Hat mir prima geholfen!
Vielen vielen herzlichen Dank. 

Aber Tatsache:  Auf das Umpacken des Rückgabewertes in  die einzelnen Werte wäre ich wohl so schnell nicht oder nie gekommen.

Klasse Forum!

LG

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wilpe
Mitglied


Sehen Sie sich das Profil von Wilpe an!   Senden Sie eine Private Message an Wilpe  Schreiben Sie einen Gästebucheintrag für Wilpe

Beiträge: 2
Registriert: 18.10.2017

erstellt am: 18. Okt. 2017 16:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Hallo,

ich weiss das dieses Thema schon etwas älter ist, ich habe aber dennoch eine Frage dazu.
Das Löschen der gerichteten Lichter funktioniert mit dem Makro wunderbar. Gibt es noch eine Möglichkeit zusätzlich das Umgebungslicht auf 1.0 zu setzen?

Viele Grüße
Wilpe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Maler
Mitglied
Konstrukteur / CAD-Admin / Mädchen für alles


Sehen Sie sich das Profil von CAD-Maler an!   Senden Sie eine Private Message an CAD-Maler  Schreiben Sie einen Gästebucheintrag für CAD-Maler

Beiträge: 604
Registriert: 17.01.2007

SWX 2017 SP5
AutoCAD 2016
Win 10 pro 64 bit
Intel Xeon 3,6GHz
64GB RAM
Nvidia Quadro M5000
SWx EPDM

erstellt am: 19. Okt. 2017 08:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Wilpe:
Gibt es noch eine Möglichkeit zusätzlich das Umgebungslicht auf 1.0 zu setzen?

Guckst du hier...

Müsste dann ungefähr so aussehen: (kann man auch mit dem Makrorekorder aufzeichnen)

Code:
boolstatus = Part.SetLightSourcePropertyValuesVB("Ambient", 1, 1, 16777215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, False)

Gruß, Jens

------------------
CSWA, CSWP, CSWPA-SM & -SU =)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Wilpe
Mitglied


Sehen Sie sich das Profil von Wilpe an!   Senden Sie eine Private Message an Wilpe  Schreiben Sie einen Gästebucheintrag für Wilpe

Beiträge: 2
Registriert: 18.10.2017

erstellt am: 19. Okt. 2017 09:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Danke für den Hinweis. Mit dem Makrorecorder hat es gestern nicht funktioniert. Heute Schon, komisch.

Hier nun mein gesamtes Makro um die gerichteten Lichter zu löschen und das Umgebungslicht auf 1 zu setzen.

Code:
' **********************************************************************
' * Makro ermittelt für alle Lichtquellen im aktiven Modell den
' * Lichtquellentyp und löscht in diesem Beispiel alle gerichteten
' * Lichter.
' *
' * (siehe auch http://ww3.cad.de/foren/ubb/Forum2/HTML/024417.shtml)
' *
' * 06.08.2012 Stefan Berlitz (stefan.berlitz@solidworks.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' **********************************************************************
' benutzerdefinierte Datentypen definieren
Type DoubleRec
    dValue As Double
End Type
Type Int2Rec
    iLower As Long
    iUpper As Long
End Type


' Entpacken von 2 Interger Werten aus einem einzelnen Doublewert. Das wird
' erreicht durch Zuweisen an einen (benutzerdefinierten) Datentyp DoubleRec
' umkopieren dieses Typs an den benutzerdefinierten Type Int2Rec und von
' dort aus den unteren und oberen Integer auslesen.
' Die merkwürdige Konstellation zum "Entpacken" der Werte aus dem Doublearray
' siehe API Beispiel
' "Unpacking Double Arrays into Integer Pairs in Visual Basic .NET and Visual Basic"
Function ExtractFields(dValue As Double, iLower As Integer, iUpper As Integer)
    Dim dr As DoubleRec, i2r As Int2Rec
   
    ' Setzen des Double Wertes
    dr.dValue = dValue
   
    ' Kopieren auf den zweiten benutzerdefinierten Datentyp
    LSet i2r = dr
   
    ' Auslesen der Werte und implizites Umsetzen in Integer
    iLower = i2r.iLower
    iUpper = i2r.iUpper

End Function

Sub main()

    Dim swApp                  As Object
    Dim swModel                As Object
   
    Dim nLightCount            As Long
    Dim vLightProp              As Variant
    Dim dLightProp              As Double
   
    Dim LightsourceTypeUpper    As Integer
    Dim LightsourceTypeLower    As Integer
   
    Dim i                      As Long
   

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

    ' an SolidWorks anklinken und Modell holen
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   
    ' die Anzahl der Lichtquellen abfragen
    nLightCount = swModel.GetLightSourceCount

    ' und über alle Lichtquellen iterieren, und das rückwärts, damit das
    ' mit dem Löschen klappt, da sonst die Zählung durcheinander kommt
    For i = (nLightCount - 1) To 0 Step -1
       
        ' die Eigenschaften der Lichtquellen holen
        ' der Rückgabewert ist ein Safearray bestehend aus 19 Doubles
        ' [ type, Intensity, Color[3], Position[3], Direction[3], coneAngle,
        '  falloff[3], Ambient, Specular, isDisabled, SpotExponent ]
        vLightProp = swModel.LightSourcePropertyValues(i)
       
        ' den Typ der Lichtquelle in ein Double umpacken
        dLightProp = vLightProp(0)
        ' und mit der Hilfsfunktion das "Umformatieren" in die gepackten Integers
        ExtractFields dLightProp, LightsourceTypeLower, LightsourceTypeUpper

        ' und dann nach dem Typ der Lichtquelle etwas damit anstellen
        Select Case LightsourceTypeLower
        Case 1
            ' Umgebungslicht
        Case 2
            ' Schweinwerfer
        Case 3
            ' Punktlicht
        Case 4
            ' gerichtetes Licht
            swModel.DeleteLightSource (i)
        Case Else
            ' unbekannter Lichttyp
        End Select
       
    Next i


boolstatus = swModel.SetLightSourcePropertyValuesVB("Ambient", 1, 1, 16777215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, False)
boolstatus = swModel.LockLightToModel(0, False)
swModel.GraphicsRedraw


End Sub


VG Wilpe

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CAD-Maler
Mitglied
Konstrukteur / CAD-Admin / Mädchen für alles


Sehen Sie sich das Profil von CAD-Maler an!   Senden Sie eine Private Message an CAD-Maler  Schreiben Sie einen Gästebucheintrag für CAD-Maler

Beiträge: 604
Registriert: 17.01.2007

SWX 2017 SP5
AutoCAD 2016
Win 10 pro 64 bit
Intel Xeon 3,6GHz
64GB RAM
Nvidia Quadro M5000
SWx EPDM

erstellt am: 19. Okt. 2017 12:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Der Vollständigkeit halber: Das Löschen der Lichter geht auch wesentlich einfacher:

Code:
   
    Sub main() 
        Dim swApp As SldWorks.SldWorks 
        Dim Part As SldWorks.ModelDoc2 
         
        Set swApp = Application.SldWorks 
        Set Part = swApp.ActiveDoc 
         
        Do While Part.GetLightSourceCount > 1 
            Part.DeleteLightSource 1 
        Loop 
    End Sub 

Das Umgebungslicht wird dabei nicht gelöscht. Hin und wieder läuft der Code in eine Endlosschleife, falls eines der Lichter nicht korrekt gelöscht wird.

Gruß, Jens

------------------
CSWA, CSWP, CSWPA-SM & -SU =)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

oko2010
Mitglied
Konstruktion, Admin


Sehen Sie sich das Profil von oko2010 an!   Senden Sie eine Private Message an oko2010  Schreiben Sie einen Gästebucheintrag für oko2010

Beiträge: 24
Registriert: 09.08.2013

ProEngineer Alle Versionen
Solidworks Alle Versionen
Rhino Alle Versionen

erstellt am: 16. Mai. 2019 12:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Eine Frage dazu:  Wenn ich nun beim Umgebungslicht auch noch den Farbwert weiss mit angeben will in der Zeile, wie bzw. wo muesste der dann hier auftauchen?
---------------
boolstatus = swModel.SetLightSourcePropertyValuesVB("Ambient", 1, 1, 16777215, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, False)
boolstatus = swModel.LockLightToModel(0, False)
swModel.GraphicsRedraw


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

ConZept
Mitglied
Maschinenbautechniker

Sehen Sie sich das Profil von ConZept an!   Senden Sie eine Private Message an ConZept  Schreiben Sie einen Gästebucheintrag für ConZept

Beiträge: 4
Registriert: 19.02.2019

SolidWorks 2018 / SP 4.0
Win7x64 /HP Z440

erstellt am: 16. Mai. 2019 20:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Pneumus 10 Unities + Antwort hilfreich

Schau mal hier nach. Weiter unten steht an welcher Stelle das Argument für die RGB-Werte angegeben werden muss.

------------------
Gruß ConZept

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2019 CAD.de | Impressum | Datenschutz