Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Versionen einer kreisförmigen Anordnung per iLogic-Code unterschiedlich einfärben

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:  Versionen einer kreisförmigen Anordnung per iLogic-Code unterschiedlich einfärben (222 mal gelesen)
Traxtormer
Mitglied



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

Beiträge: 59
Registriert: 12.04.2016

Windows 10 64-bit / Inventor Professional 2023

erstellt am: 10. Feb. 2024 15:11    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 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




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: 2409
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 10. Feb. 2024 16:20    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 Traxtormer 10 Unities + Antwort hilfreich

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 Sub

Dim 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



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

Beiträge: 59
Registriert: 12.04.2016

Windows 10 64-bit / Inventor Professional 2023

erstellt am: 11. Feb. 2024 11: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

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




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: 2409
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 12. Feb. 2024 00: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 Traxtormer 10 Unities + Antwort hilfreich

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 On

Private 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



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

Beiträge: 59
Registriert: 12.04.2016

Windows 10 64-bit / Inventor Professional 2023

erstellt am: 12. Feb. 2024 07: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

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




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: 2409
Registriert: 15.11.2006

Windows 10 x64, AIP 2023

erstellt am: 12. Feb. 2024 09: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 Traxtormer 10 Unities + Antwort hilfreich

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



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

Beiträge: 59
Registriert: 12.04.2016

Windows 10 64-bit / Inventor Professional 2023

erstellt am: 18. Feb. 2024 22: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

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


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

Beiträge: 699
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 19. Feb. 2024 08: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 Traxtormer 10 Unities + Antwort hilfreich

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

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