Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Arbeitselemente global ausblenden

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 Autodesk Produkte
Autor Thema:  Arbeitselemente global ausblenden (2737 mal gelesen)
TSch
Mitglied
CAD/PDM Administrator


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

Beiträge: 102
Registriert: 26.07.2002

Sei frohgemut bei allen Dienstobliegenheiten !

erstellt am: 10. Feb. 2005 17:47    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 Experten !

Bevor ich wieder tagelang rumwurschtele...
Ich möchte in meinem Code in einer Baugruppe
ALLE (auch die von Teilen/Unterbaugruppen etc.)
Arbeitselemente unsichtbar schalten.
Frage an Euch Experten :
Wie gehts ?

Gruß
Thomas

------------------
Thomas Sch

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

PaulSchuepbach
Moderator
Programmierer




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

Beiträge: 1005
Registriert: 01.10.2003

erstellt am: 10. Feb. 2005 18: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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von TSch:
... Frage an Euch Experten :
Wie gehts ?

Oh, danke der Nachfrage, Thomas, uns geht's gut !


Gruesse,

Paul

www.morecam.ch/cad.htm


... ach, Du hattest ja noch 'ne Frage, ausblenden aller Arbeitselemente.
Das ist eigentlich ganz einfach: Du gehts mit einer Schleife durch die Baugruppe. Findest Du ein Bauteil, musst Du es oeffnen, alle Arbeitselemente (wiederum mit 'ner Schleife durch die Collection-Objekte von Arbeitsebenen, Arbeitsachsen und Arbeitspunkten) auf .Visible = False schalten und speichern. Tipp: oeffne die Dateien unsichtbar und die Macht der Performance wird mit Dir sein.
Jetzt kommt der Trick:
Findest Du aber ein Sub-Assembly, musst Du die obige Funktion aufrufen, die wiederum durch die gesamte Struktur durchgeht und - wird ein Bauteil gefunden, dann... alles ausbelnden (wie oben) - wird aber ein Sub-Assembly gefunden, dann wiederum die Funktion aufrufen usw. bis Du durch alles durch bist. 
Das nennt sich ein 'rekursiver Aufruf'.

Hoffe, das Hilft.

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

TSch
Mitglied
CAD/PDM Administrator


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

Beiträge: 102
Registriert: 26.07.2002

Sei frohgemut bei allen Dienstobliegenheiten !

erstellt am: 10. Feb. 2005 18:40    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

Hi Paul !

Freut mich, das es Euch (hoffentlich allen) gut geht 
Die Antwort hatte ich gefürchtet....durch alles durcheiern..
Aber macht nix, hatte nur gehofft, daß Ihr Gurus einen Trick kennt 

Danke für die prompte Antwort, mache mich nun "ans Werk"

Charmanten Abend noch !
Thomas

------------------
Thomas Sch

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

daywa1k3r
Moderator
Softwareentwickler




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

Beiträge: 3497
Registriert: 01.08.2002

Alienware m17x, Win7, Inventor2012

erstellt am: 10. Feb. 2005 18:43    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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von PaulSchuepbach:
  ... Du gehts mit einer Schleife durch die Baugruppe. Findest Du ein Bauteil, musst Du es oeffnen, alle Arbeitselemente (wiederum mit 'ner Schleife durch die Collection-Objekte von Arbeitsebenen, Arbeitsachsen und Arbeitspunkten) auf .Visible = False schalten und speichern. Tipp: oeffne die Dateien unsichtbar und die Macht der Performance wird mit Dir sein...

Kommt er nicht über Occurrence.Definition an die Work -Planes, -Points, -Axes... ?

Zitat:
Bevor ich wieder tagelang rumwurschtele...

Wurschtle dich ruhig durch. Da lernst du wenigstens etwas dabei. Wie du eine Baugruppe rekrusiv durchsuchst findest du in Inventor SDK unter "AssemblyTree". Ist aber ApprenticeServer. Genau das Gleiche geht aber auch mit Inventor Object.

------------------
Grüße daywa1k3r

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 09:27    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 TSch 10 Unities + Antwort hilfreich

Hallo zusammen,

ich habe im Prinzip die gleiche Frage, jedoch habe ich bereits meinen rekursiven Aufruf integriert. Allerdings tritt ein für mich komisches Phänomen auf:
Ich blende eigentlich alle Arbeitselemente in den Unerbaugruppen und den Bauteilen einer Baugruppe aus. Wenn jedoch eine Unterbaugruppe eine sellbsterstellte Arbeitsebene beinhaltet, so wird diese nicht mitausgeblendet. Die Ursprungsbenen aber schon. Dabei gehe ich eigentlich über Definition.

Anbei der Codeteil im Hauptmakro:

    Dim Occurences As ComponentOccurrences
    Dim oOcc As ComponentOccurrence
   
    'Arbeitselemente auf niedrigeren Ebenen ausblenden, wenn
    'es mindestens eine Occurrence innerhalb der Definition des
    'Dokuments gibt.
    If Doc.ComponentDefinition.Occurrences.Count > 0 Then
      Call ElementeAusblenden(Doc.ComponentDefinition.Occurrences)
    End If
   
    'Alle Arbeitselemente auf oberster Ebene ausblenden
    ElementAusblenden Doc


Hier jetzt noch mein rekursiver Aufruf:

'Alle Elemente in Unterbaugruppen / -bauteilen rekursiv ausblenden
Private Sub ElementeAusblenden(Occurrences As ComponentOccurrences)
   
Dim oOcc As ComponentOccurrence

For Each oOcc In Occurrences
   
  'Falls diese Occurence eine Baugruppe ist, Unterbaugruppe /
    Unterbauteil aufrufen
    If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
        Call ElementeAusblenden(oOcc.SubOccurrences)
    End If
       
    'I als Zählvariable
    Dim i As Integer
   
    'Arbeitsebenen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkPlanes.Count
        oOcc.Definition.WorkPlanes.Item(i).Visible = False
    Next i
   
    'Arbeitsachsen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkAxes.Count
        oOcc.Definition.WorkAxes.Item(i).Visible = False
    Next i
   
    'Arbeitspunkte für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkPoints.Count
        oOcc.Definition.WorkPoints.Item(i).Visible = False
    Next i
   
    'Skizzen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.Sketches.Count
        oOcc.Definition.Sketches.Item(i).Visible = False
    Next i

Next

End Sub


Ich habe bereits .Rebuild() oder .Update() ausprobiert um die Ansicht des Modells zu aktualisieren, aber auch das ist in diesem Zusammenhang nutzlos. Die Arbeitsebenen bleiben sichtbar.

Ich wäre sehr dankbar, wenn mir jemand diesen Sachverhalt erklären könnte. Dann komme ich meiner Problemlösung vielleicht wieder einen Schritt näher.


Vielen Dank!

------------------
Grüße, Kristina

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 10:04    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 TSch 10 Unities + Antwort hilfreich

Hallo Thunja,

nur kurz überflogen.

Du musst den rekursiven Aufruf ans Ende deiner For Each Next Routine stellen, damit der Code zum Ausblenden der Arbeitselemente auch für die Unterbaugruppe ausgeführt wird.


Code:

For Each oOcc In Occurrences
     
    'I als Zählvariable
    Dim i As Integer
 
    'Arbeitsebenen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkPlanes.Count
        oOcc.Definition.WorkPlanes.Item(i).Visible = False
    Next i
 
    'Arbeitsachsen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkAxes.Count
        oOcc.Definition.WorkAxes.Item(i).Visible = False
    Next i
 
    'Arbeitspunkte für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.WorkPoints.Count
        oOcc.Definition.WorkPoints.Item(i).Visible = False
    Next i
 
    'Skizzen für aktuelle Occurrence ausblenden
    For i = 1 To oOcc.Definition.Sketches.Count
        oOcc.Definition.Sketches.Item(i).Visible = False
    Next i

'Falls diese Occurence eine Baugruppe ist, Unterbaugruppe /
    Unterbauteil aufrufen
    If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
        Call ElementeAusblenden(oOcc.SubOccurrences)
    End If

Next


Versuchs mal so.

Grüße

EIBe 3D

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 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 TSch 10 Unities + Antwort hilfreich

Hallo ElBe 3D,

leider hat das nicht funktioniert. Wäre auch zu schön, um wahr zu sein...
Denn nach dem rekursiven Aufruf springt er am Ende für jede Ebene weiter in For-Next-Schleifen. Hab das mal in Einzelschritten durchlaufen lassen.
Es ist also scheinbar egal, wo der Aufruf steht.

Danke trotzdem.

Möglicherweise brauche ich statt .Rebuild() oder .Update() eine andere Methode um nur die Ansicht zu aktualisieren.

Ich habe nun per Einzelschritt die besagten Ebenen ebenfalls untersucht und diese werden bei Visible auf false gesetzt.
Das würde ja bedeuten, dass mein Programm eigentlich schon das macht, was es soll, nur die Ansicht nichtaktualisiert wird.

Zusatzinfo:
Die Unterbauteile / -gruppen sind nicht ausgecheckt und dürfen auch nicht ausgecheckt werden.


------------------
Grüße, Kristina

[Diese Nachricht wurde von Thunja am 26. Feb. 2021 editiert.]

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 26. Feb. 2021 10:21    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 TSch 10 Unities + Antwort hilfreich

Hallo

Bei so alten Beiträgen eröffne vielleicht doch lieber einen neuen.
Ich habe mir eine Baugruppe erstellt. Darin eine Unterbaugruppe erstellt und in dieser ein Bauteil "Klotz". In der Unterbaugruppe habe ich eine Arbeitsebene als Versatz von einer Ursprungsebene der Unterbaugruppe erstellt. Stimmt der Aufbau soweit? Mit unten stehendem Codde konnte ich den Fehler nicht reproduzieren.

Bleibt nur eine einzelne Arbeitsebene sichtbar oder alle Arbeitsebenen in der Unterbaugruppe?
Betrifft es nur eine einzelne Baugruppe oder alle?
Bleiben die Arbeitsebenen in den Bauteilen auch sichtbar?
Wird/werden die Arbeitsebenen im Browser auch als sichtbar angezeigt?
Hast du mal den Code testweise extrahiert und nur so wie gepostet ausprobiert?
Unterdrückst du weiter vorn im Code Fehlermeldungen mit On Error Resume Next?


@EIBe 3D
Es sollte keinen Unterschied machen, da der Ablauf nach der Rekursion wieder eine Ebene höher zurückkehrt und fortgesetzt wird.


Code:

Option Explicit

Private Sub SetWorkObjectsUnvisible()
   
    Dim Doc As AssemblyDocument
    Set Doc = ThisApplication.ActiveDocument
   
    Dim Occurences As ComponentOccurrences
    Dim oOcc As ComponentOccurrence

    If Doc.ComponentDefinition.Occurrences.Count > 0 Then
        Call ElementeAusblenden(Doc.ComponentDefinition.Occurrences)
    End If
 
    Doc.Update
   
End Sub

Private Sub ElementeAusblenden(Occurrences As ComponentOccurrences)
 
    Dim oOcc As ComponentOccurrence
    Dim i As Integer
   
    For Each oOcc In Occurrences
        If oOcc.DefinitionDocumentType = kAssemblyDocumentObject Then
            Call ElementeAusblenden(oOcc.SubOccurrences)
        End If
       
        For i = 1 To oOcc.Definition.WorkPlanes.Count
            oOcc.Definition.WorkPlanes.Item(i).Visible = False
        Next i
     
        For i = 1 To oOcc.Definition.WorkAxes.Count
            oOcc.Definition.WorkAxes.Item(i).Visible = False
        Next i
       
        For i = 1 To oOcc.Definition.WorkPoints.Count
            oOcc.Definition.WorkPoints.Item(i).Visible = False
        Next i

        For i = 1 To oOcc.Definition.Sketches.Count
            oOcc.Definition.Sketches.Item(i).Visible = False
        Next i
   
    Next

End Sub


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 10:26    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 TSch 10 Unities + Antwort hilfreich

Schau mal ob das Makro von daywa1k3r macht was du magst. Es deckt aber nur die Arbeitsebenen ab

Code:

' Macro hides work planes
' recursive for all assembly components
' FX64, Igor Zupevc, 28.05.2014
Sub HideWorkPlanesRecursive()
    If ThisApplication.Documents.Count = 0 Then
        MsgBox "Die Baugruppe öffnen.", vbExclamation, "Keine Baugruppe"
        Exit Sub
    End If
 
    If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject Then
        MsgBox "Die Baugruppe öffnen.", vbExclamation, "Keine Baugruppe"
        Exit Sub
    End If
 
    Dim oAsm As AssemblyDocument
    Set oAsm = ThisApplication.ActiveDocument
 
    SwitchWorkPlanes oAsm.ComponentDefinition, False
    ForAllComponents oAsm.ComponentDefinition.Occurrences, False
 
    oAsm.Update
End Sub

' Macro displays work planes
' recursive for all assembly components
' FX64, Igor Zupevc, 28.05.2014
Sub ShowWorkPlanesRecursive()
    If ThisApplication.Documents.Count = 0 Then
        MsgBox "Die Baugruppe öffnen.", vbExclamation, "Keine Baugruppe"
        Exit Sub
    End If
 
    If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject Then
        MsgBox "Die Baugruppe öffnen.", vbExclamation, "Keine Baugruppe"
        Exit Sub
    End If
 
    Dim oAsm As AssemblyDocument
    Set oAsm = ThisApplication.ActiveDocument
 
    SwitchWorkPlanes oAsm.ComponentDefinition, True
    ForAllComponents oAsm.ComponentDefinition.Occurrences, True
 
    oAsm.Update
End Sub

Sub ForAllComponents(oOccs As ComponentOccurrences, bVisible As Boolean)
    Dim oOcc As ComponentOccurrence
    For Each oOcc In oOccs
        On Error Resume Next
        SwitchWorkPlanes oOcc.Definition, bVisible
     
        ForAllComponents oOcc.SubOccurrences, bVisible
    Next
End Sub

Sub SwitchWorkPlanes(oDoc As Inventor.ComponentDefinition, bVisible As Boolean)
        On Error Resume Next
        Dim oWorkPlane As WorkPlane
        For Each oWorkPlane In oDoc.WorkPlanes
            oWorkPlane.Visible = bVisible
        Next
        ThisApplication.StatusBarText = oDoc.Document.DisplayName
End Sub


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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 10:40    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 TSch 10 Unities + Antwort hilfreich

Hallo zusammen,

gut zu wissen, das der Code wieder zurück springt. Hatte ich so nicht auf dem Plan 

Davon abgesehen habe ich die Variante von Thunja und die von rkauskh getestet und beide tun bei mir erstmal was sie sollen. Habe allerdings auch keine Vault-Bauteile bei mir drinnen.


Grüße

EIBe 3D

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 10: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 Nur für TSch 10 Unities + Antwort hilfreich

Hallo Ralf,

also zu deinen Fragen:

1. Es betrifft alle Arbeitsebenen in jeglichen Unterbaugruppen, die Ursprungsbenen hingegen werden ausgeblendet.

2. + 3. Es betrifft alle BG und auch Bauteile, aber auch hier nur die manuell hinzugefügten Arbeitsebenen, nicht die Ursprungsebenen.

4. Ja, die Ebenen werden auch im Brwoser als sichtbar angezeigt.

5. Ich habe den Code bisher nicht einzeln laufen lassen, werde ich aber direkt ml umsetzen. Ergebnis lass ich dich dann wissen.  

6. Ich habe kein On Error Resume next in meinem Code verbaut.

Vielen Dank für deine Hilfe.

Sollte ich trotzdem noch einen neuen Beitrag eröffnen?

Nur so ein Gedanke:
Hat es möglicherweise damit zu tun, dass ich in meinem rekursiven Aufruf "nur" mit der Occurrence arbeite? Wenn ich die Elemente auf oberster Ebene ausblende, arbeite ich direkt mit der Definition des Documents.

Doc.ComponentDefinition.WorkPoints.Item(i).Visible = False

------------------
Grüße, Kristina

[Diese Nachricht wurde von Thunja am 26. Feb. 2021 editiert.]

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 10: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 TSch 10 Unities + Antwort hilfreich

Hast du mal den Code von Igor gegengetestet?

Hiermit:

Code:

Sub SwitchWorkPlanes(oDoc As Inventor.ComponentDefinition, bVisible As Boolean)
        On Error Resume Next
        Dim oWorkPlane As WorkPlane
        Dim oWorkAxis As WorkAxis
        Dim oWorkPoint As WorkPoint
        Dim oSketch As Sketch
       
        For Each oWorkPlane In oDoc.WorkPlanes
            oWorkPlane.Visible = bVisible
        Next
        For Each oWorkAxis In oDoc.WorkAxes
            oWorkAxis.Visible = bVisible
        Next

        For Each oWorkPoint In oDoc.WorkPoints
            oWorkPoint.Visible = bVisible
        Next

        For Each oSketch In oDoc.Sketches
            oSketch.Visible = bVisible
        Next
       
        ThisApplication.StatusBarText = oDoc.Document.DisplayName
End Sub


Kannst du ihn auf deine Bedürfnisse anpassen. Klappt zumindest hier bei allen angesprochenen Elementen

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 11:05    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 TSch 10 Unities + Antwort hilfreich

Getestet habe ich den noch nicht, aber der sieht schon sehr ähnlich zu dem aus, was ich habe.
Allerdings geht auch Igor hier "nur" durch die oberste Ebene seiner BG oder seines BT.
Das funktioniert bei mir ja.
Probleme bekomme ich ja bei den Unterbaugruppen /-bauteilen.

------------------
Grüße, Kristina

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 26. Feb. 2021 11:16    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 TSch 10 Unities + Antwort hilfreich

Hallo

Nee, nur für's nächste Mal. Den hier machen wir hier fertig würde ich vorschlagen.

Ich hab leider auch keinen Vault zur Verfügung, aber das riecht mir stark nach Abbruch des "Änderungsversuches" durch den Vault. Oder kannst du die Ebenen manuell unsichtbar schalten?

Reicht es dir, wenn du die Sichtbarkeit nur in der Hauptbaugruppe ausschaltest? Dann versuche es mal mit der Objektsichtbarkeit. Die hat zwar keine Auswirkung auf die Sichtbarkeit, wenn man die eingecheckte Unterbaugruppe separat öffnet, aber vielleicht reicht es so für deine Erfordernisse.

Code:

Dim Doc As AssemblyDocument
Set Doc = ThisApplication.ActiveDocument

Doc.ObjectVisibility.AllWorkFeatures = False
Doc.ObjectVisibility.Sketches = False


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 11:17    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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von EIBe 3D:
Schau mal ob das Makro von daywa1k3r macht was du magst. Es deckt aber nur die Arbeitsebenen ab

Code:

Sub SwitchWorkPlanes(oDoc As Inventor.ComponentDefinition, bVisible As Boolean)
        On Error Resume Next
        Dim oWorkPlane As WorkPlane
        For Each oWorkPlane In oDoc.WorkPlanes
            oWorkPlane.Visible = bVisible
        Next
        ThisApplication.StatusBarText = oDoc.Document.DisplayName
End Sub



Kann mir einer erklären, warum hier das oDoc so deklariert wird?

oDoc As Inventor.ComponentDefinition

Ich kenne bisher nur die Deklaration als ActiveDokument oder Ähnliches, aber nicht als ComponentDefinition.

------------------
Grüße, Kristina

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 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 Nur für TSch 10 Unities + Antwort hilfreich

zu vorherigen:
igor geht auch durch alle BG-Ebenen der Aufruf des Makros erfolgt durch
Sub HideWorkPlanesRecursive()
bzw.
Sub ShowWorkPlanesRecursive()

zu nun:
Er hätte auch "oCompDef" oder "oSonstWas" schreiben können.  Am Ende ist es ja nur irgendeine Bezeichnung einer Variablen vom Typ ComponentDefinition

Allgemein:
Igors Code scheint mir gefühlt etwas schneller zu laufen da er über Enumeratoren geht. Kann ich mir natürlich auch einbilden weil irgendwo steht das Enums performanter sind.

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 26. Feb. 2021 11:30    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 TSch 10 Unities + Antwort hilfreich

Hallo

oDoc is nur ein frei wählbarer Name für die Variable. Da könnte genau so gut GrünerFerrariMitRotenStreifenUndGelbenPunkten stehen. Ich selbst würde es so nicht machen, da es leicht in die Irre führt.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 11:41    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 TSch 10 Unities + Antwort hilfreich

Ich meine nicht den Variablennamen, sondern das Objekt, als das die Variable deklariert wurde.

------------------
Grüße, Kristina

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 11:45    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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rkauskh:
... Ich selbst würde es so nicht machen, da es leicht in die Irre führt.


 

Konnt ich mir nun nicht verkneifen  


Edit noch was sinnvolles:

Er greift halt direkt auf die ComponentDefinition zu welche er vorher mit oAsm.ComponentDefinition = ThisApplication.ActiveDocument.ComponentDefinition übergibt

[Diese Nachricht wurde von EIBe 3D am 26. Feb. 2021 editiert.]

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 26. Feb. 2021 11:58    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 TSch 10 Unities + Antwort hilfreich

Hallo

@EIBe 3D
Sie sind etwas schneller. Inventor "weiß" bei For Each das du über die gesamte Collection wanderst und kann intern dafür optimieren. Ruft man über das Item-Property auf, kann es nur das eine, einige oder alle sein. Dann wird nicht optimiert, da unklar ist für welches Szenario. Bei kleinen Collections ist der Vorteil fast vernachlässigbar.

Was stimmt an dem Satz nicht? Abgesehen von ein paar Konventionen ist die Namensvergabe von Variablen völlig frei und ohne Bezug zum Objekt möglich. Ich finde es nur unsinnig mit dem Namen ein Objekt vom Typ Document zu suggerieren und tasächlich einen  Typ ComponentDefinition zu haben oder nichtssagende Namen wie a, b, c zu verwenden. Wenn der Variablename einen beschreibenden Bezug zum Objekt hat, sollte der meiner Meinung auch korrekt sein.


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 26. Feb. 2021 12:12    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 TSch 10 Unities + Antwort hilfreich

Der Satz ist einwandfrei und wurde umgehend durch Thunjas drauffolgenden Post als wahr bestätigt. 

Grüße

EIBe 3D

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 26. Feb. 2021 12:24    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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von rkauskh:
Hallo

@EIBe 3D
Sie sind etwas schneller. Inventor "weiß" bei For Each das du über die gesamte Collection wanderst und kann intern dafür optimieren. Ruft man über das Item-Property auf, kann es nur das eine, einige oder alle sein. Dann wird nicht optimiert, da unklar ist für welches Szenario. Bei kleinen Collections ist der Vorteil fast vernachlässigbar.

Was stimmt an dem Satz nicht? Abgesehen von ein paar Konventionen ist die Namensvergabe von Variablen völlig frei und ohne Bezug zum Objekt möglich. Ich finde es nur unsinnig mit dem Namen ein Objekt vom Typ Document zu suggerieren und tasächlich einen  Typ ComponentDefinition zu haben oder nichtssagende Namen wie a, b, c zu verwenden. Wenn der Variablename einen beschreibenden Bezug zum Objekt hat, sollte der meiner Meinung auch korrekt sein.



In eine ähnliche Richtung ging auch meine Frage. Aber ja, ich war durch das Doc als Variablennamen zusätzlich verwirrt... Danke nochmals, ich bin nun auch dahintergekommen, dass eigentlich die Definition von einer Occurrence übergebn wird.

Leider muss ich für heute Schluss machen und kann erst am Montag weiterarbeiten, da ich sonst Stress mit meinem Arbeitgeber bekomme.

Ich wünsche euch ein schönes Wochenende und schaue Montag dann nochmals den Code von Daywalker an. Eventuell kann ich damit dann doch noch etwas anfangen.

------------------
Grüße, Kristina

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 26. Feb. 2021 12: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 TSch 10 Unities + Antwort hilfreich

Hallo

@Thunja
Vielleicht noch als Ergänzung. Es kann vorkommen, das Typen mehrfach existieren. Zur genauen Spezifikation reicht dann ComponentDefinition nicht aus. Daher wird die ComponentDefinition als eine ComponentDefinition von Inventor festgelegt. So ein richtig gutes Beispiel fällt mir spontan natürlich nicht ein. Aber es gibt ein Sheets Objekt als Sammlung der Blätter in einer Inventor Zeichnung und ein Sheets Objekt als Sammlung der Blätter in einer Exceldatei. Beides vom Typ Sheets, aber grundverschieden. VBA legt sich auf eines von beiden automatisch fest, aber leider meist doch falsch. Da VBA nicht hellsehen kann, muss man ihm sagen welches von beiden man meint.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 02. Mrz. 2021 15:32    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 TSch 10 Unities + Antwort hilfreich

Also für mein Problem gibt es keine programmierbare Lösung, da es ein Bug von Inventor selbst ist.
Deshalb lassen sich alle Ursprungsebenen (egal, auf welcher Hierarchie-Ebene in einer Baugruppe) ausblenden, jedoch die manuell hinzugefügten Ebenen nicht.
Es betrifft wohl nur die Version 2020 und das Update 3.4 soll dies dann auch beheben.

Ich editiere, wenn ich es getestet habe. 

------------------
Grüße, Kristina

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

metalgod
Mitglied
Technischer Zeichner, Mädchen für alles


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

Beiträge: 32
Registriert: 23.09.2015

Win10x64 Prof.
Intel Core i7-8700K
3,70GHz, 16GB Ram
Inventor Prof. 2018 64-Bit
Visual Studio 2015 Express

erstellt am: 15. Mrz. 2021 15:22    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 TSch 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Thunja:
Also für mein Problem gibt es keine programmierbare Lösung, da es ein Bug von Inventor selbst ist.
Deshalb lassen sich alle Ursprungsebenen (egal, auf welcher Hierarchie-Ebene in einer Baugruppe) ausblenden, jedoch die manuell hinzugefügten Ebenen nicht.

Hallo,

ich glaube nicht, dass das ein Bug ist. Mit der Zeile hier:

Code:
oOcc.Definition.WorkPlanes.Item(i).Visible = False

greift man auf das Objekt selbst zu. Wir befinden uns aber in einer Baugruppe, aus der wir darauf zugreifen müssen. D.h. wir müssen nicht mit dem Objekt arbeiten, sondern mit ObjectProxy, der von dem Objekt abgeleitet ist.

Der Code hier funktioniert bei mir einwandfrei:

Code:

Option Explicit

Public Sub ElementeAusblenden()
    If ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject Then
        Call MsgBox("ThisApplication.ActiveDocumentType <> kAssemblyDocumentObject")
        Exit Sub
    End If
    Call Rekurs(ThisApplication.ActiveDocument)
End Sub
Private Sub Rekurs(ByRef IAM As AssemblyDocument)
    Dim Occs As ComponentOccurrences: Set Occs = IAM.ComponentDefinition.Occurrences
    Dim wAx As WorkAxis
    Dim wPl As WorkPlane
    Dim wPt As WorkPoint
   
    Dim wAxPrx As WorkAxisProxy
    Dim wPlPrx As WorkPlaneProxy
    Dim wPtPrx As WorkPointProxy
   
    Dim objPrx As Object
   
    Dim Occ As ComponentOccurrence
   
    Dim D As Document
    For Each D In IAM.AllReferencedDocuments
        For Each Occ In Occs.AllReferencedOccurrences(D)
            For Each wAx In D.ComponentDefinition.WorkAxes
                If (Not wAx.IsCoordinateSystemElement) And (Not wAx.Construction) Then ' Filter bei Bedarf anpassen
                    Call Occ.CreateGeometryProxy(wAx, objPrx)
                    Set wAxPrx = objPrx
                    wAxPrx.Visible = False
                End If
            Next
            For Each wPl In D.ComponentDefinition.WorkPlanes
                If (Not wPl.IsCoordinateSystemElement) And (Not wPl.Construction) Then ' Filter bei Bedarf anpassen
                    Call Occ.CreateGeometryProxy(wPl, objPrx)
                    Set wPlPrx = objPrx
                    wPlPrx.Visible = False
                End If
            Next
            For Each wPt In D.ComponentDefinition.WorkPoints
                If (Not wPt.IsCoordinateSystemElement) And (Not wPt.Construction) Then ' Filter bei Bedarf anpassen
                    Call Occ.CreateGeometryProxy(wPt, objPrx)
                    Set wPtPrx = objPrx
                    wPt.Visible = False
                End If
            Next
        Next
       
        If D.DocumentType = kAssemblyDocumentObject Then Call Rekurs(D)
    Next
End Sub


Weil der Code so langsam ist, könnte man auf die Rekursion verzichten. Dann gilt das Makro nur für die oberste Baugruppe.

Ein Problem gibt es dennoch: die Unsichtbarkeit der Element gilt nicht für die Ansichtsdarstellung: "Hauptansicht". D.h. beim Öffnen der Baugruppe bzw. bei Aktivierung der Hauptansicht ist alles wieder sichtbar. Ich glaube nicht, dass man das in irgendeiner Weise umgehen kann.

------------------
Gruß, alex

[Diese Nachricht wurde von metalgod am 15. Mrz. 2021 editiert.]

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

Thunja
Mitglied
Projektleiterin / techn. Redakteurin


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

Beiträge: 41
Registriert: 22.08.2017

Inventor 2020 / VBA

erstellt am: 16. Mrz. 2021 10: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 TSch 10 Unities + Antwort hilfreich

Guten Morgen Alex,

genau das war das Problem. Meinm Vorgesetzter war der Meinung, dass man für jegliche Bauteile einer Baugruppe alle Arbeitselemente ausblenden könne, dies dann als Ansicht speichert und, wenn es jemand anders aus dem Vault öffnet, die gespeicherte Ansicht ebenfalls erhält... Da es mein Vorgesetzter war und er schon mehr Jahre Erfahrung mit dem Programm hat, habe ich ihm das so geglaubt. Vor allem, nachdem er mir das doch an seinem PC sogar gezeigt hatte. Hier lag der Fehler. In der lokalen Datei wird die Ansicht gespeichert, sodass auch auf diese Datei wider zugegriffen wird, wenn man sie lokal nicht gelöscht hat. Bis ich da hinter gekommen bin, hat es doch einige Zeit gedauert. Ich kann per Makro lediglich die Elemente auf oberster Ebene ausblenden, wenn ich nicht alle Unterdateien auschecken möchte.

Man sollte niemals den Kollegen trauen... 

An sich funktionierte mein Code nun aber einwandfrei.

Vielen Dank trotzdem für deine Hilfe.

------------------
Grüße, Kristina

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 16. Mrz. 2021 12: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 Nur für TSch 10 Unities + Antwort hilfreich

Hallo

Das dein Code langsam ist, wundert mich nicht. Du erzeugst für jedes Arbeitselement ein Proxy, egal ob sichtbar oder nicht. Dann schaltest du auch alle bereits unsichtbaren Arbeitselemente erneut unsichtbar. Würdest du vorab prüfen ob das Arbeitselement bereits unsichtbar ist, könntest du deinem Rechenknecht einiges an Arbeit ersparen. Prüfen ist in der Regel immer deutlich schneller als Werte neu setzen. Außerdem bin ich der Meinung, dass du den gleichen Effekt mit dem Deaktivieren der Objektsichtbarkeit erreichst. Da alle Sichtbarkeit deaktiviert werden soll, ist ein schrittweises Durchlaufen nicht erforderlich. Ich hatte es aber so verstanden, dass eben nicht nur die Sichtbarkeit in der obersten Baugruppe deaktiviert werden soll, sondern die Arbeitselemente sollen in den referenzierten Dokumenten deaktiviert werden. Von daher war es korrekt nicht die Proxyobjekte zu nehmen.
Das  da ein Vault im Spiel ist und keine Schreibrechte auf die referenzierten Dokumente existiert, kam alles erst im Nachgang.

@Thunja
Dein Chef hat meiner Meinung schon recht. Er deaktiviert  die Objektsichtbarkeit (Ribbon "Ansicht", erster Button) aller Arbeiteselemente in der obersten Baugruppe. Anschließend erzeugt er eine neue Ansichtsdarstellung und speichert die Baugruppe. Da es ein "Überschreiben" der Sichtbarkeit in der Baugruppe ist, hat es keine Auswirkungen auf die untergeordneten Baugruppen und Bauteile. Dort ändert sich nichts, wodurch auch kein Konflikt mit dem Vault auftritt. Es sind lediglich Schreibrechte auf die oberste Baugruppe erforderlich. Ich bin mir nicht sicher, aber man kann den Vault sehr wahrscheinlich so einstellen, dass er eine bestimmte Ansicht öffnet oder die zuletzt verwendete (die beim letzten Speichern aktive).
Grundsätzlich würde ich den Weg aber vermeiden und besser vor dem Einchecken die Arbeitselemente in jeder Datei unsichtbar schalten.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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