Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Gesucht: Makro Körper einzeln einblenden

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Nahe an industriellen Realbedingungen, eine Pressemitteilung
Autor Thema:  Gesucht: Makro Körper einzeln einblenden (728 mal gelesen)
Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 28. Aug. 2023 13:08    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 Forum.

Ich bin leider ein VBA Noobie und kenne mich hier gar nicht aus, aber vielleicht kann mir ja wer weiterhelfen.

Ich hätte gerne ein Makro, am besten mit einer UF "verfeinert" welches mir erlaubt in einem SolidWorks Mehrkörperteil alle enthaltenen Körper der Reihe nach einzeln einblendet und den Rest entsprechend ausblendet.
Vorstellen tu ich mir das so:
Start von Makro öffnet die UF. Darauf befindet sich eine Schaltfläche. Beim betätigen wird mir der Erste Körper im Ordner Volumenkörper einblendet. Erneutes betätigen den nächsten. Das ganze kann so lange wiederholt werden bis der Ordner einmal "durchgeklickt" wurde und am Ende kommt eine Meldung, "alle Volumenkörper wurden einmal angezeigt" (oder so was ähnliches) und es werden wieder alle vollständig angezeigt.

Nun meine Frage:
Kann mir wer bei der Erstellung helfen oder hat wer zufällig schon etwas in der Art in der Schublade? Wie gesagt, kenne ich mich mit VBA so gar nicht aus.

Danke schon mal für Eure Antworten.
Gruß
Lubber

------------------
Dante

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

Lenzcad
Ehrenmitglied
Selbständiger Handwerker


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

Beiträge: 1539
Registriert: 21.10.2003

CPU i7-9700K
RAM 64GB
Quadro P2200
SW 2022
SW Simulation 2022

erstellt am: 28. Aug. 2023 14: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 Lubber2 10 Unities + Antwort hilfreich

Hallo Lubber,
mit VBA sind andere bestimmt geübter als ich, aber mein Vorschlag wäre:
Im FM im Ordner "Volumenkörper"  >  RK auf den ersten Volumenkörper  >  Isolieren  >  die weiteren Körper anklicken (dann wird der jeweilige transparent eingeblendet)  >  Isolieren beenden.
Bei Bedarf den gewünschten Körper markiert lassen und mit RK "Isolieren" einzeln anzeigen.

Gruß - Lenz

[Diese Nachricht wurde von Lenzcad am 28. Aug. 2023 editiert.]

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

Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 30. Aug. 2023 09:48    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

Moin Lenz.
Danke für die Antwort. Da ich aber Teilweise Mehrkörperteile mit 200+ Körper habe würde ich gerne bei meinem Ansatz mit dem Makro bzw. einer UserForm bleiben.
Ich dachte mir das ganze jetzt zu splitten und erstmal für die später einzelnen command buttons in der UF die jeweiligen codes zu erstellen.
später will ich dann einen button für "den ersten Volumenkörper anzeigen", und einen für den aktuell angezeigten VK ausblenden und den nächsten anzeigen".
Für den ersten anzeigen hätte ich diesen Code:

Code:
Sub HideAllShowFirstSolid()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swPart As SldWorks.PartDoc
    Dim vBodies As Variant
    Dim i As Integer
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   
    If Not swModel Is Nothing Then
        If swModel.GetType = swDocPART Then
            Set swPart = swModel
            Set vBodies = swPart.GetBodies2(swBodyType_e.swSolidBody)
           
            ' Hide all solids except the first one
            For i = LBound(vBodies) To UBound(vBodies)
                If i > LBound(vBodies) Then
                    vBodies(i).Hide
                End If
            Next i
           
            ' Show the first solid
            If UBound(vBodies) >= LBound(vBodies) Then
                vBodies(LBound(vBodies)).Hide = False
            End If
        Else
            MsgBox "The active document is not a part."
        End If
    Else
        MsgBox "No active document found."
    End If
   
    Set swPart = Nothing
    Set swModel = Nothing
    Set swApp = Nothing
End Sub

In der Zeile:
Set vBodies = swPart.GetBodies2(swBodyType_e.swSolidBody)
bekomme ich die Meldung "Fehler beim Kompilieren: Argument ist nicht optional"

Kann mir wer sagen woran das liegen könnte?

Ich benutze SW22.

Gruß
Lubber

------------------
Dante

[Diese Nachricht wurde von Lubber2 am 30. Aug. 2023 editiert.]

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

Swazi
Mitglied


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

Beiträge: 6
Registriert: 10.02.2013

SOLIDWORKS 2021/2022/2023 SP0.1
WIN10x64 21H2

erstellt am: 30. Aug. 2023 11: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 Lubber2 10 Unities + Antwort hilfreich

Moin,
kurz und knapp gerade nicht so viel Zeit.

Ändere die Zeile zu...

Code:
vBodies = swModel.GetBodies2(swSolidBody, False)

Viel Erfolg!

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

Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 30. Aug. 2023 11:28    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

Moin Swazi,

Danke. Der Code schaut nun so aus:

Code:
Sub HideAllShowFirstSolid()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swPart As SldWorks.PartDoc
    Dim vBodies As Variant
    Dim i As Integer
  
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
  
    If Not swModel Is Nothing Then
        If swModel.GetType = swDocPART Then
            Set swPart = swModel
            Set vBodies = swModel.GetBodies2(swSolidBody, False)
          
            ' Hide all solids except the first one
            For i = LBound(vBodies) To UBound(vBodies)
                If i > LBound(vBodies) Then
                    vBodies(i).Hide
                End If
            Next i
          
            ' Show the first solid
            If UBound(vBodies) >= LBound(vBodies) Then
                vBodies(LBound(vBodies)).Hide = False
            End If
        Else
            MsgBox "The active document is not a part."
        End If
    Else
        MsgBox "No active document found."
    End If
  
    Set swPart = Nothing
    Set swModel = Nothing
    Set swApp = Nothing
End Sub

Nun kommt der Laufzeitfehler 13 Typen unverträglich in dieser Zeile.

Gruß
Lubber

------------------
Dante

[Diese Nachricht wurde von Lubber2 am 30. Aug. 2023 editiert.]

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

Swazi
Mitglied


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

Beiträge: 6
Registriert: 10.02.2013

SOLIDWORKS 2021/2022/2023 SP0.1
WIN10x64 21H2

erstellt am: 30. Aug. 2023 11:33    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 Lubber2 10 Unities + Antwort hilfreich

Es handelt sich nicht um ein Objekt und somit keine"Set"-Anweisung. Lösche das "Set" aus der Zeile, die Zeile sollte so aussehen wie ich oben geschrieben habe.

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

Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 30. Aug. 2023 11:37    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

Ok, verstehe. Allerdings bekomme ich nun den Laufzeitfehler 449 Argument ist nicht optional in der Zeile vBodies(i).Hide im ersten For i Block.
Sorry, ich steh grad irgendwie auf dem Schlauch...
Danke schon mal.

------------------
Dante

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

Swazi
Mitglied


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

Beiträge: 6
Registriert: 10.02.2013

SOLIDWORKS 2021/2022/2023 SP0.1
WIN10x64 21H2

erstellt am: 30. Aug. 2023 11:57    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 Lubber2 10 Unities + Antwort hilfreich

Code:
            ' Hide all solids except the first one
            For i = LBound(vBodies) To UBound(vBodies)
                If i > LBound(vBodies) Then

                    vBodies(i).HideBody (True)

                End If
            Next i


https://help.solidworks.com/2022/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IBody2_members.html
https://help.solidworks.com/2022/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IBody2~HideBody.html

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

Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 30. Aug. 2023 12: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

Du bist der Beste! Danke Dir!

Musste aber noch im Block 'Show the first Solid aus .Hide = False ein .HideBody (False) machen.
Dann ging es.
Für alle die so ein Makro nutzen können, hier nochmal der Code der funktioniert:

Code:

Sub HideAllShowFirstSolid()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swPart As SldWorks.PartDoc
    Dim vBodies As Variant
    Dim i As Integer
 
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
 
    If Not swModel Is Nothing Then
        If swModel.GetType = swDocPART Then
            Set swPart = swModel
            vBodies = swModel.GetBodies2(swSolidBody, False)
         
           
            ' Hide all solids except the first one
            For i = LBound(vBodies) To UBound(vBodies)
                If i > LBound(vBodies) Then
                    vBodies(i).HideBody (True)

                End If
            Next i
         
            ' Show the first solid
            If UBound(vBodies) >= LBound(vBodies) Then
                vBodies(LBound(vBodies)).HideBody (False)
            End If
        Else
            MsgBox "The active document is not a part."
        End If
    Else
        MsgBox "No active document found."
    End If
 
    Set swPart = Nothing
    Set swModel = Nothing
    Set swApp = Nothing
End Sub


Als nächstes Makro, das nun daran anknüpft will ich versuchen alle Körper der reihe nach einzublenden. Sprich, aktuell eingeblendeten Körper ausblenden und den nächsten Körper im Ordner Volumenkörper einblenden. Das ganze soll dann jeweils so lange gemacht werden können bis der letzte VK in dem Ordner eingeblendet wurde. Mal schauen ob ich das hinbekomme. Möglicherweise werde ich mich dann nochmal melden.
Auf jeden Fall nochmal recht herzlichen Dank für die schnelle Hilfe trotz Deiner knapp bemessenen Zeit.

Schönen Gruß,
Lubber

------------------
Dante

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

Lubber2
Mitglied


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

Beiträge: 6
Registriert: 28.08.2023

erstellt am: 30. Aug. 2023 13:09    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

Leider früher als erwartet -.-:

Ich hatte den besagten Code der auf den ersten aufbauen soll die Tage schon mal angefangen und tüttl da gerade rum.
Wie gesagt möchte ich nun mit dem 2. Makro die einzelnen volumenkörper nach und nach "durchklicken" und anzeigen lassen.
Mein aktueller Code dazu sieht zur Zeit so aus:

Code:

Sub ShowNextSolid()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swPart As SldWorks.PartDoc
    Dim vBodies As Variant
    Dim currentBodyIndex As Integer
   
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   
    If Not swModel Is Nothing Then
        If swModel.GetType = swDocPART Then
            Set swPart = swModel
            vBodies = swPart.GetBodies2(swSolidBody, False)
           
            ' Determine the index of the currently shown body
            currentBodyIndex = -1
            For i = 0 To UBound(vBodies)
                If Not vBodies(i).IsHidden Then
                    currentBodyIndex = i
                    Exit For
                End If
            Next i
           
            ' Hide the currently shown body
            If currentBodyIndex >= 0 Then
                vBodies(currentBodyIndex).HideBody (True)
            End If
           
            ' Show the next body or display a message if all bodies are shown
            If currentBodyIndex < UBound(vBodies) Then
                currentBodyIndex = currentBodyIndex + 1
                vBodies(currentBodyIndex).HideBody (False)
            Else
                MsgBox "All solids have been shown once. Press OK to show all solids again.", vbInformation
                For i = 0 To UBound(vBodies)
                    vBodies(i).HideBody (False)
                Next i
            End If
        Else
            MsgBox "The active document is not a part."
        End If
    Else
        MsgBox "No active document found."
    End If
   
    Set swPart = Nothing
    Set swModel = Nothing
    Set swApp = Nothing
End Sub



In der Zeile
If Not vBodies(i).IsHidden Then

Bekomme ich nun den Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder methode nicht.
Ich finde den Fehler allerdings nicht bzw. habe keinen Plan wie ich das gelöst bekomme.

Weißt Du vieleicht auch hier die Lösung?

Danke und Gruß!

------------------
Dante

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3256
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 31. Aug. 2023 10:08    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 Lubber2 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Lubber2:

In der Zeile
If Not vBodies(i).IsHidden Then

Bekomme ich nun den Laufzeitfehler 438 Objekt unterstützt diese Eigenschaft oder methode nicht.


https://help.solidworks.com/2020/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IBody2_members.html

"visible" ...
die Methoden für Komponenten heißen für Körper ggf. anders.

Wie ich es verstehe, kann auch die Reihenfolge der Körper im Array noch überraschen, da sie nicht unbedingt mit der im Ordner übereinstimmt.
da gäbe es noch folder.getbodies oder so ähnlich.

wenn du den index nicht noch für was anderes brauchst, würde ich "for each vbody in vbodies ..." bevorzugen, aber das ist vielleicht auch geschmackssache ...

Gruß, Christian

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

Swazi
Mitglied


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

Beiträge: 6
Registriert: 10.02.2013

SOLIDWORKS 2021/2022/2023 SP0.1
WIN10x64 21H2

erstellt am: 31. Aug. 2023 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 Lubber2 10 Unities + Antwort hilfreich

Moin,
ich habs mal funktional quick and dirty runtergeschrieben.

Code:
Sub HideCurrentShowNextBody()

Dim swApp      As SldWorks.SldWorks
Dim swModel    As SldWorks.ModelDoc2
Dim vBodies    As Variant
Dim iBody      As Integer


    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
   
    vBodies = swModel.GetBodies2(swSolidBody, False)
   
    ' Hide all Bodies
    For iBody = 0 To UBound(vBodies)
        vBodies(iBody).HideBody (True)
    Next
   
    ' Hide Current and Show Next Body
    For iBody = 0 To UBound(vBodies)
        If iBody > 0 Then vBodies(iBody - 1).HideBody (True)
        vBodies(iBody).HideBody (False)
    Next
   
    ' Show all Bodies
    For iBody = 0 To UBound(vBodies)
        vBodies(iBody).HideBody (False)
    Next

End Sub


Bzgl. deinem Error hat Christian schon einen Hinweis gegeben. Ob die Reihenfolge im Array anders sein kann als im Ordner, sollte mal Überprüft werden.

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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3256
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 04. Sep. 2023 10:55    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 Lubber2 10 Unities + Antwort hilfreich

getbodies geht nur vom partdoc, nicht vom modeldoc ...

alternative - braucht aber einen Haltepunkt !!

Code:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swPart As SldWorks.PartDoc
Dim vBodies As Variant
Dim vBody As Variant

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
vBodies = swPart.GetBodies2(swSolidBody, False)

'alle ausblenden
showhide_all (True)

'erstes einblenden
vBodies(0).HideBody (False)

'naechstes einblenden
Do
Loop Until showNext 'EndeErreicht

'alle einblenden
showhide_all (False)

End Sub

Function showNext() As Boolean 'liefert true, wenn letzter sichtbar
    Dim myState As Boolean
    Dim nextState As Boolean
    For Each vBody In vBodies
        myState = vBody.Visible
        If nextState Then vBody.HideBody (False)
        If myState Then vBody.HideBody (True)
        nextState = myState
    Next
    showNext = nextState
End Function

Sub showhide_all(myState As Boolean)
    For Each vBody In vBodies
        vBody.HideBody (myState)
    Next
End Sub


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

Christian_W
Ehrenmitglied V.I.P. h.c.
Konstrukteur (Dipl-Ing)


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

Beiträge: 3256
Registriert: 04.04.2001

CSWP 12/2015<P>SWX2021sp5 Win10/11
(SWX2016, SWX2012)
proAlpha6.2e00/calinkV9
(Tactonworks)
(Medusa7, NesCAD2010,
solidEdge19)

erstellt am: 04. Sep. 2023 14:59    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 Lubber2 10 Unities + Antwort hilfreich

statt showNext mit for each komplett durchzulaufen, wäre es mit Index vermutlich schneller.
dann muss man halt selber dafür sorgen, dass die richtigen indexe übergeben werden.
Code:

sub changeShownBody (FromIndex as integer, ToIndex as integer)
  vbodies(FromIndex).HideBody (true)
  vbodies(ToIndex).HideBodey (false)
end sub

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)2024 CAD.de | Impressum | Datenschutz