| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Ebenen der Unterbauteile in Baugruppe ausblenden (4046 mal gelesen)
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 26. Mai. 2014 14:13 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, kann sein das es diese Frage schon einmal gegeben hat, hab sie jedoch nicht mit der Suche gefunden. Falls es so ist, dann wärs nett wenn mich wer dahin verlinken könnte. Mein Problem: Ein Macro welches alle Ebenen der Unterbauteile einer Baugruppe zuerst ausblendet und beim wiederbetätigen des Buttons einblendet. Mein Fortschritt: Ich als Greenhorn und "Trial and Error" Hobby-umprogrammierer habe mir in diesem Forum ein Macro rausgesucht welches Skizzen in den Unterbauteilen einer Baugruppe ein und wieder ausblenden kann. (http://ww3.cad.de/foren/ubb/Forum258/HTML/001104.shtml#000000) Dieses Macro hab ich dann soweit umschreiben können, dass es alle Ebenen der Unterbauteile einer Baugruppe ein und ausblenden kann, jedoch kann es keine Ebenen ausblenden welche "manuell" (Rechtsklick auf Ebene & Sichtbarkeit) eingeblendet sind. Weiter blendet mein Macro zuerst die Ebenen ein und nicht zuerst aus. Mein bisheriger Code: Code:
Option ExplicitPublic Sub Ebenen_switch() Dim oWorkplane As WorkPlane Dim v As Boolean If ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then
Dim oAss As AssemblyDocument Set oAss = ThisApplication.ActiveDocument Dim oRefedDoc As Document For Each oRefedDoc In oAss.AllReferencedDocuments If oRefedDoc.DocumentType = kPartDocumentObject Then If oRefedDoc.ComponentDefinition.WorkPlanes.item(1).Visible Then v = 0 Else v = 1 End If For Each oWorkplane In oRefedDoc.ComponentDefinition.WorkPlanes oWorkplane.Visible = v Next End If Next End If ThisApplication.ActiveView.Update End Sub
Ich hoffe, dass ich mein Problem verständlich rübergebracht habe und hoffe jemand kann mir helfen MfG, Kame ------------------ mfg Ronald [Diese Nachricht wurde von KAME am 28. Mai. 2014 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 26. Mai. 2014 15:51 <-- editieren / zitieren --> Unities abgeben:
Kurzes Update: hab es mit einem anderen Macro als Vorlage versucht (welches auch zum Skizzen ein-/ausblenden ist). Ein kleiner Fortschritt ist, dass es bei diesem Macro funktioniert die "manuell" eingeblendeten Ebenen wieder auszublenden (jedoch nur die Ursprungsebenen!) Weiters ist mir aufgefallen, dass es die Ebenen eines Trägers im Gestellgenerator nicht anspricht, was ebenfalls gelöst werden sollte. Hier der Code mit anderer "Herangehensweise": Code:
Option ExplicitPublic Sub Ebenen_switch() Dim oWorkplane As WorkPlane Dim v As Boolean If ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then
Dim oAss As AssemblyDocument Set oAss = ThisApplication.ActiveDocument Dim oRefedDoc As Document Dim aus As Integer For Each oRefedDoc In oAss.AllReferencedDocuments If oRefedDoc.DocumentType = kPartDocumentObject Then aus = 0 For Each oWorkplane In oRefedDoc.ComponentDefinition.WorkPlanes If oWorkplane.Visible = 0 Then aus = aus + 1 Next If oRefedDoc.ComponentDefinition.WorkPlanes.Count / 2 < aus Then v = 1 Else v = 0 End If For Each oWorkplane In oRefedDoc.ComponentDefinition.WorkPlanes oWorkplane.Visible = v Next End If Next For Each oWorkplane In oAss.ComponentDefinition.WorkPlanes oWorkplane.Visible = v Next End If ThisApplication.ActiveView.Update End Sub
MfG Kame ------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 26. Mai. 2014 18:59 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo Wozu benötigst du das An-/Abschalten der Arbeitselemente? Nur für einen schnellen Blick zwischendurch? Dann wäre es vielleicht einfacher und schneller die Objektsichtbarkeit zu nutzen. Damit bleibt der ursprüngliche Zustand der Sichtbarkeit erhalten, wird aber temporär überschrieben. Vorteil, die Objektsichtbarkeit wird nicht gespeichert. Code: Private Sub ObjectVisibility()Dim oAssDoc As AssemblyDocument Set oAssDoc = ThisApplication.ActiveDocument If oAssDoc.ObjectVisibility.AllWorkFeatures = True Then oAssDoc.ObjectVisibility.AllWorkFeatures = False Else oAssDoc.ObjectVisibility.AllWorkFeatures = True End If End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 28. Mai. 2014 08:57 <-- editieren / zitieren --> Unities abgeben:
Hallo rkauskh, erstmal Danke für deine Antwort. Das Macro ist nicht für einen kurzen Blick zwischendurch, sondern soll die Ebenen dauerhaft im Bauteil/Unterbaugruppe ausblenden (und natürlich auch so gespeichert werden, damit, wenn die Baugruppe erneut irgendwo eingebaut wird, die Ebenen nicht wieder sichtbar sind) Die Sache ist die, dass wir mit Baugruppen bis zu 120.000 Teilen arbeiten und wenn da in irgendeiner Unterbaugruppe versteckt eine oder mehrere Ebenen eingeblendet sind, dann fängt die Suche danach an. Angenommen ein Mitarbeiter vergisst mehrere Ebenen in einer Unterbaugruppe auszublenden und wenn dann diese Unterbaugruppe mit sichtbaren Ebenen noch mehrmals verbaut ist, dann überfordert das den Rechner schon fast. Deshalb wäre so ein Macro ziemlich fein MfG, Kame ------------------ mfg Ronald Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 28. Mai. 2014 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
Hallo, 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
? ------------------ Grüße Igor FX64 Software Solutions - Inventor Tools FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 28. Mai. 2014 12:14 <-- editieren / zitieren --> Unities abgeben:
Hallo daywa1k3r, leider funktioniert das Macro von Igor nur in Baugruppen bestehend aus Bauteilen und nicht in Baugruppen mit Unterbaugruppen. Hab mich jetzt nochmal gespielt und würde jetzt nur noch den Code zum aktualisieren der Ansichtsdarstellung aller Bauteile und Unterbaugruppen benötigen. Gibt es einen Befehl der nicht die Ansichtsdarstellung ändert sondern nur aktualisiert? MfG, Kame Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 28. Mai. 2014 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 28. Mai. 2014 12:48 <-- editieren / zitieren --> Unities abgeben:
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 28. Mai. 2014 12:52 <-- editieren / zitieren --> Unities abgeben:
|
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Alienware m17x, Win7, Inventor2012
|
erstellt am: 28. Mai. 2014 12:59 <-- editieren / zitieren --> Unities abgeben: Nur für KAME
|
KAME Mitglied techn. Angestellter
Beiträge: 152 Registriert: 21.06.2006
|
erstellt am: 04. Sep. 2014 10:22 <-- editieren / zitieren --> Unities abgeben:
Hallo Igor, danke nochmal für das super Macro. Es tut seinen Dienst ohne Probleme. Aber: Gibt es eine Möglichkeit, das Macro so umzuschreiben, dass es, wenn eine Unterbaugruppe bzw. ein Unterbauteil markiert ist nur die Ebenen von diesem ein-bzw. ausblendet. Hintergedanke ist, dass wenn man eine Baugruppe mit 1000 Teilen und aufwärts offen hat, lange Wartezeiten entstehen. MfG, Kame Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |