| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Zugreifen auf Teilesichtbarkeit innerhalb IDW (1415 / mal gelesen)
|
PhoeEniX Mitglied Technischer Produktdesigner
Beiträge: 6 Registriert: 29.04.2019 Autodesk Inventor Professional 2016 Autodesk Vault 2016
|
erstellt am: 18. Jun. 2019 11:53 <-- editieren / zitieren --> Unities abgeben:
Hallo Liebe Leidensgenossen, ich suche eine Lösung, um anhand der Sichtbarkeit bestimmter Bauteile in der Baugruppe, die Blattgröße einer Zeichnung zu ändern. D.h. in der IAM werden über ein Formular bestimmte Teile ausgewählt und der Rest unsichtbar gemacht (und zusätzlich auf Referenz gesetzt damit diese nicht in der Stückliste erscheinen). Nun soll beim Öffnen der Zeichnung geprüft werden, welche dieser Teile sichtbar sind und dann entsprechen die Blattgröße geändert werden (A3, A2, ...), da diese in der Größe variieren. Maßstab anpassen steht außer Frage. Momentan habe ich mir schon folgenden Code zusammengestellt (musste in iLogic programmieren weil von Vorgänger so übernommen, daher fehlt "Set"): Code: Sub Blattgröße() Dim oDoc As DrawingDocument oDoc = ThisDoc.Document Dim oDrawingView As DrawingViews oDrawingView = oDoc.ActiveSheet.DrawingViews(1) Dim oRefDoc As AssemblyDocument oRefDoc = oDrawingView.ReferencedDocumentDescriptor.ReferencedDocument Dim oAssDef As AssemblyComponentDefinition oAssDef = oRefDoc.ComponentDefinition Dim oOcc As ComponentOccurence For Each oOccIn oAssDef.Occurences If oOcc.Name = "Name1" Then If oOcc.Visible = True Then MessageBox.Show("5", "5") End If Else If oOcc.Name = "Name2" Then If oOcc.Visible = True Then MessageBox.Show("10", "10") End If Else If oOcc.Name = "Name3" Then If oOcc.Visible = True Then MessageBox.Show("15", "15") End If Else If oOcc.Name = "Name4" Then If oOcc.Visible = True Then MessageBox.Show("20", "20") End If End If Next End Sub
Die MessageBox habe ich vorerst mal nur rein um zu sehen ob ich überhaupt so weit komme, allerdings funktioniert nicht mal das. Die Fehler entstehen schon bei der Deklaration der Verweise und das ist mein Problem; ich komm einfach nicht drauf was ich falsch mache Ich hoffe ihr könnt mir bei der Fehleranalyse helfen ------------------ Mit freundlichen Grüßen Philip [Diese Nachricht wurde von PhoeEniX am 18. Jun. 2019 editiert.] [Diese Nachricht wurde von PhoeEniX am 18. Jun. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 18. Jun. 2019 13:08 <-- editieren / zitieren --> Unities abgeben: Nur für PhoeEniX
iLogic ist ohne IntelliSense einfach nur anstrengend! Die Lösung ist denkbar einfach, da die Ursache wohl nur Tippfehler sind. Dim oDrawingView As DrawingView 'war As DrawingViews For Each oOcc In oAssDef.Occurrences 'Leerz. vor IN ergänzt; Occ. fehlendes r ergänzt Das sollte es schon gewesen sein! Ergänzend erlaube ich mir noch meine Meinung zu äußern (bitte nur als Anregung verstehen): - keine Umlaute im Code! -> Sub Blattgroesse() statt Blattgröße - If oOcc.Visible = True Then finde ich unglücklich If oOcc.Visible Then reicht meist völlig If Not oOcc.Visible Then die Umkehrung If True = oOcc.Visible Then wenn man das TRUE zeigen möchte, so gibt es aber keine Verwechslung mit einer Zuweisung ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PhoeEniX Mitglied Technischer Produktdesigner
Beiträge: 6 Registriert: 29.04.2019 Autodesk Inventor Professional 2016 Autodesk Vault 2016
|
erstellt am: 18. Jun. 2019 13:29 <-- editieren / zitieren --> Unities abgeben:
Danke KraBBy für die Hilfe und die Tipps Leider kommt jetzt die Meldung 'Der Typ "ComponentOccurence" ist nicht definiert.' Das mit den Rechtschreibfehlern ist etwas peinlich, aber wenn man den ganzen Tag auf den Code schaut sieht man irgendwann den Wald vor lauter Bäumen nicht mehr ^^ Hat das mit den Umlauten einen besonderen Grund? Bei mir gab das bisher keine Probleme
------------------ Mit freundlichen Grüßen Philip Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
BernoAn Mitglied
Beiträge: 172 Registriert: 16.01.2014
|
erstellt am: 18. Jun. 2019 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für PhoeEniX
Hallo, Ich habe es dir in VBA soweit geschrieben wie du warst, ich hoffe dir geholfen zu haben. Code:
Sub Blattgröße()Dim oDoc As DrawingDocument Set oDoc = ThisApplication.ActiveDocument Dim oDrawingView As DrawingView Set oDrawingView = oDoc.ActiveSheet.DrawingViews(1) Dim oRefDoc As AssemblyDocument Set oRefDoc = oDrawingView.ReferencedDocumentDescriptor.ReferencedDocument Dim oAssDef As AssemblyComponentDefinition Set oAssDef = oRefDoc.ComponentDefinition Dim oOcc As ComponentOccurrence For Each oOocc In oAssDef.Occurrences If oOocc.Visible = True Then MsgBox (oOocc.name & " SICHTBAR") If oOocc.Visible = False Then MsgBox (oOocc.name & " unsichtbar") Next End Sub
Gruß Berno Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 18. Jun. 2019 18:05 <-- editieren / zitieren --> Unities abgeben: Nur für PhoeEniX
Zitat: Original erstellt von PhoeEniX: Leider kommt jetzt die Meldung 'Der Typ "ComponentOccurence" ist nicht definiert.'
damit gehts: Dim oOcc As ComponentOccurrence gleicher typo bei Occurrence (doppel R) - hätte ich oben schon schreiben sollen Das mit dem Umlauten, hat keinen 'echten' Grund, dass ich sagen könnte "in diesem Fall jene Probleme". Könnte im internationalen Umfeld vielleicht Themen geben (oder gegeben haben), jenachdem welcher Zeichensatz Verwendung findet ... Vielleicht werde ich nur schon alt... (ich mache auch keine Umlaute in Dateinamen und Verzeichnise, sogar Leerzeichen widerstreben mir) ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PhoeEniX Mitglied Technischer Produktdesigner
Beiträge: 6 Registriert: 29.04.2019 Autodesk Inventor Professional 2016 Autodesk Vault 2016
|
erstellt am: 19. Jun. 2019 07:54 <-- editieren / zitieren --> Unities abgeben:
Danke euch beiden für die Hilfe, hat mir echt weitergeholfen vllt sollte ich dann in Zukunft erst auf VBA programmieren und dann nach iLogic übertragen, um solche "Leichtsinnsfehler" zu vermeiden ------------------ Mit freundlichen Grüßen Philip Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 720 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 19. Jun. 2019 08:47 <-- editieren / zitieren --> Unities abgeben: Nur für PhoeEniX
ein ähnlicher Gedanke wäre, die Routinen in VBA zu programmieren und nur den Aufruf in iLogic zu machen. iLogic: InventorVb.RunMacro("projectName", "moduleName", "macroName") Dadurch könnte man ein par Vorteile verbinden (IntelliSense, Debugging, ObjectBrowser aus VBA und den Ereignisauslöser von iLogic). Nicht dass ich das schon groß gemacht oder auch nur ausprobiert hätte... ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PhoeEniX Mitglied Technischer Produktdesigner
Beiträge: 6 Registriert: 29.04.2019 Autodesk Inventor Professional 2016 Autodesk Vault 2016
|
erstellt am: 21. Jun. 2019 09:37 <-- editieren / zitieren --> Unities abgeben:
Danke nochmal für eure Hilfe hier der fertige Code (ohne Rechtschreibfehler) für alle zum kopieren: Code:
Sub BlattgroesseAnpassen() Dim oDoc As DrawingDocument oDoc = ThisApplication.ActiveDocument Dim oDrawingView As DrawingView oDrawingView = oDoc.ActiveSheet.DrawingViews(1) Dim oRefDoc As AssemblyDocument oRefDoc = oDrawingView.ReferencedDocumentDescriptor.ReferencedDocument Dim oAssDef As AssemblyComponentDefinition oAssDef = oRefDoc.ComponentDefinition ' setzt die Blattgroesse anhaengig von der Ösenaufhängung Dim oOcc As ComponentOccurrence For Each oOcc In oAssDef.Occurrences If oOcc.Name = "Name" Then If oOcc.Visible = True Then ActiveSheet.ChangeSize("A3", MoveBorderItems := True) End If End If Next End Sub
Das "oOcc.Visible = True" habe ich jetzt mal so drin gelassen, damit ich das besser erkennen kann. Aber ja "oOcc.Visible" würde vollkommen ausreichen ------------------ Mit freundlichen Grüßen Philip Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |