| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Versionen einer kreisförmigen Anordnung per iLogic-Code unterschiedlich einfärben (454 / mal gelesen)
|
Traxtormer Mitglied
Beiträge: 59 Registriert: 12.04.2016 Windows 10 64-bit / Inventor Professional 2023
|
erstellt am: 10. Feb. 2024 15:11 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich habe eine .ipt, die ich als kreisförmiges Muster in einer Assembly anordne, wodurch sich die Namen Seitenteil:1, Seitenteil:2 etc. ergeben.
Per iLogic-Parameter habe ich in der Assembly einen Code geschrieben, der mal eben alle Bauteile darin gleich einfärbt, was funktioniert. Wenn ich nun allerdings sage ich möchte Seitenteil:1 in Blau und Seitenteil:2 in Grün einfärbe geht das nicht (höchstwahrsch. weil Versionen von "Seitenteil" eben auf einen Grund-ipt aufbauen und der nur eine Farbe haben kann). Gibt's da vielleicht eine Möglichkeit eben die "Versionen" (wie ":2") vom gemusterten .ipt zu überschreiben per Parameter? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 10. Feb. 2024 16:20 <-- editieren / zitieren --> Unities abgeben: Nur für Traxtormer
Moin So in etwa. Ich habe mal unterstellt, dass die Anordnung im Teilebrowser "Seitenteil" heißt.
Code:
option explicit on If Not ThisDoc.Document.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Exit SubDim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oCompDef As AssemblyComponentDefinition = oAssDoc.ComponentDefinition Dim oCOP As CircularOccurrencePattern Dim oCOPElement As OccurrencePatternElement Dim oAssets As AssetsEnumerator = ThisApplication.ActiveAppearanceLibrary.AppearanceAssets Dim r As New System.Random() Dim oOP As OccurrencePattern For Each oOP In oCompDef.OccurrencePatterns If oOP.Name = "Seitenteil" Then For Each oCOPElement In oOP.OccurrencePatternElements Dim oAsset As Asset = oAssets.Item(r.Next(1, oAssets.Count )).CopyTo(oAssDoc,True) For Each oOcc As ComponentOccurrence In oCOPElement.Occurrences oOcc.Appearance = oAsset Next Next End If Next
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Traxtormer Mitglied
Beiträge: 59 Registriert: 12.04.2016 Windows 10 64-bit / Inventor Professional 2023
|
erstellt am: 11. Feb. 2024 11:48 <-- editieren / zitieren --> Unities abgeben:
Wow, ja das ist super! Und wenn ich nun möchte, dass die Farben eben nicht Random sein sollen in der Anordnung, sondern meine eigens kreierten Farben gezogen werden (unter Favorites abgespeichert), wie z.b. das erste Exemplar "Blue_1" und das zweite "Silver_2". Wie könnte man das definieren (sorry ich bin nicht der Programmierer )? Und gebe es auch die Möglichkeit in der Anordnung - falls gleich mehrere verschiedene ipt's damit angeordnet werden - zu selektivieren auf eben die enthaltenen "Seitenteile"? LG Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 12. Feb. 2024 00:22 <-- editieren / zitieren --> Unities abgeben: Nur für Traxtormer
Moin Hab das jetzt nicht testen können. Es sollte jedes Exemplar von "Seitenteil" mit einer Darstellung aus den Favoriten eingefärbt werden. Sind mehr Exemplare als Favoriten vorhanden, wiederholen sich Farben. Stecken die Seitenteile in einer Baugruppe oder sogar Unterbaugruppe sollten sie trotzdem gefunden und eingefärbt werden. Musteranordnungen von Musteranordnungen mit den Teilen drin sollte auch funktionieren. Aktuell werden die Favoriten der Reihe nach genommen, wie sie in der API aufgelistet werden. Vermutlich ist es die Reihenfolge in der die Darstellungen den Favoriten zugeordnet wurden. Wenn du eine fortlaufende Nummer am Ende hast, kann man die auch als Sortierreihenfolge verwenden. Es muss nur eine irgendwie eindeutige, definierte Reihenfolge sein. Code:
Option Explicit OnPrivate Sub Main If Not ThisDoc.Document.DocumentType = DocumentTypeEnum.kAssemblyDocumentObject Then Exit Sub Dim oAssDoc As AssemblyDocument = ThisDoc.Document Dim oCompDef As AssemblyComponentDefinition = oAssDoc.ComponentDefinition Dim oOP As OccurrencePattern Dim oOPElement As OccurrencePatternElement Dim i As Integer = 1 Dim oAssets As AssetsEnumerator = ThisApplication.FavoriteAssets Dim oAsset As Asset For Each oOP In oCompDef.OccurrencePatterns For Each oOPElement In oOP.OccurrencePatternElements For Each oOcc As ComponentOccurrence In oOPElement.Occurrences oAsset = oAssets.Item(i) Try oAsset = oAssDoc.AppearanceAssets.Item(oAsset.DisplayName) Catch oAsset = oAssets.Item(i).CopyTo(oAssDoc,True) End Try i = i + 1 If oAssets.Count < i Then i = 1 If oOcc.SubOccurrences.Count>0 Then ProcessSubOccs(i, oOcc.SubOccurrences, oAssDoc) End If If oOcc.Name.StartsWith("Seitenteil") Then oOcc.Appearance = oAsset End If Next Next Next End Sub Private Sub ProcessSubOccs(ByRef i As Integer, ByVal oOccs As ComponentOccurrences, ByVal oAssDoc As AssemblyDocument) Dim oAssets As AssetsEnumerator = ThisApplication.FavoriteAssets Dim oAsset As Asset For Each oOcc As ComponentOccurrence In oOccs oAsset = oAssets.Item(i) Try oAsset = oAssDoc.AppearanceAssets.Item(oAsset.DisplayName) Catch oAsset = oAssets.Item(i).CopyTo(oAssDoc,True) End Try i = i + 1 If oAssets.Count < i Then i = 1 If oOcc.SubOccurrences.Count>0 Then ProcessSubOccs(i, oOcc.SubOccurrences, oAssDoc) End If If oOcc.Name.StartsWith("Seitenteil") Then oOcc.Appearance = oAsset End If Next End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Traxtormer Mitglied
Beiträge: 59 Registriert: 12.04.2016 Windows 10 64-bit / Inventor Professional 2023
|
erstellt am: 12. Feb. 2024 07:24 <-- editieren / zitieren --> Unities abgeben:
Hmm...und wenn man nun ~40 Favorites-Farben hat und die sich noch ändern können (auch von der Reihenfolge)...irgendeine Möglichkeit hier direkt zu dem Farben-Namen zuzuordnen, da der ja ein klarer "Feldname" ist? Und gäbe es auch eine Möglichkeit diesen ganzen Code - sprich die überschriebenen Appearances - mit einem Befehl rückkgängig zu machen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2505 Registriert: 15.11.2006 Windows 10 x64, AIP 2023
|
erstellt am: 12. Feb. 2024 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für Traxtormer
Moin Du kannst die Namen der Darstellungen auch am Anfang der iLogicregel in der gewünschten Reihenfolge in eine Liste (Stichwort List(Of String)) schreiben und von dort aus zuweisen. Solche hart codierten Listen sind pflegeintensiver. Man kann den ganzen Code in eine Transaction stecken, dann ist er über einen Eintrag in der Undo-Liste rückgängig machbar. Man kann auch die oberste Musteranordnung auswählen und in der Schnellzugriffswerkzeugleiste den Darstellungsüberschreibungen löschen Knopf drücken. Und man kann den Code von mir recyclen und der Appearance das Asset "Vorgabe" zuweisen. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Traxtormer Mitglied
Beiträge: 59 Registriert: 12.04.2016 Windows 10 64-bit / Inventor Professional 2023
|
erstellt am: 18. Feb. 2024 22:08 <-- editieren / zitieren --> Unities abgeben:
OK, gibt es eigentlich auch per Code Snippet in der Haupt-.iam eine einfach Möglichkeit ein Feature namens "Decal1" im Teil "PL_Platte_o:1" zu unterdrücken, der in einer Sub-.iam ("RA_Rahmen:1") der Haupt-.iam enthalten ist? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 718 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 19. Feb. 2024 08:14 <-- editieren / zitieren --> Unities abgeben: Nur für Traxtormer
Ja, die Möglichkeit gibt es. Help - .IsActive Property (Object, String)Im Regeleditor ist oben auch ein Reiter "Modell", darin die Liste mit den Komponenten und Features der aktiven Baugruppe. Darin kannst Du einfach zum gewünschten Feature navigieren und im Kontextmenü den Befehl "aktuellen Status erfassen" auswählen. Das fügt an der Cursorposition Code ein... Ich habe noch IV2020, aber vermutlich hat sich das nicht geändert. ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |