Inventor (iLogic): Anordnung / Elemente unterdrücken dauert sehr lange

Inventor (iLogic): Anordnung / Elemente unterdrücken dauert sehr lange

hmelmer
Enthusiast Enthusiast
4.374Aufrufe
14Antworten
Nachricht 1 von 15

Inventor (iLogic): Anordnung / Elemente unterdrücken dauert sehr lange

hmelmer
Enthusiast
Enthusiast

Hallo,

 

ich habe eine Baugruppe welche über iLogic gesteuert wird. Dort hab ich eine Regel welche eine Reihenanordnung entweder aktiv oder inaktiv setzen soll. 

Component.IsActive("Anordnung:1") = True/False

 Hier dauert es jedoch sehr lange bis Inventor das ganze berechnet hat und ausgeführt hat. Wenn ich das ganze jedoch manuell mit der rechter Maustaste - Element unterdrücken ausführe ist es in 1 Sekunde erledigt.

 

Kann mir hierzu vl jemand weiterhelfen wieso das so ist bzw was der unterschied ist zwischen der iLogic Regel und dem manuellen Ausführen.

 

Vielen Dank.

 

Schöne Grüße, Helmut Melmer

 


@hmelmer,

Die Themenüberschrift wurde zum besseren Auffindbarkeit editiert von Dennis.Ossadnik
Original: iLogic Element unterdrücken


0 „Gefällt mir“-Angaben
Akzeptierte Lösungen (2)
4.375Aufrufe
14Antworten
Antworten (14)
Nachricht 2 von 15

S_Verbeek
Advocate
Advocate

Eigentlich sollte das nichts anderes sein und auch genau so schnell gehen. Ist in der Regel noch etwas anderes drin oder nur das unterdrücken der Anordnung?

 

Gruß

Stefan

__________________________________________________________________________________

Stefan Verbeek
Mitarbeiter Support bei

Bild



0 „Gefällt mir“-Angaben
Nachricht 3 von 15

Dennis.Ossadnik
Autodesk Support
Autodesk Support

Hallo @hmelmer,

 

wie @S_Verbeek schon gesagt hat, sollte das eigentlich genau so schnell gehen.

 

Hast Du eventuell ein Beispiel-Datensatz, den Du hier mal hochladen kannst?

Dann könnten wir uns das mal genauer ansehen, wo da das Problem liegen könnte.



Dennis Ossadnik
Senior Technical Support Specialist
0 „Gefällt mir“-Angaben
Nachricht 4 von 15

hmelmer
Enthusiast
Enthusiast

Hallo, 

 

danke für die schnellen Antworten.

 

Nein in dieser Regel befindet sich definitiv nur eine Zeile in welcher die Unterdrückung geregelt werden soll.

 

Ich habe auch schon versucht alle anderen Regeln zu löschen und habe nur eine Regel erstellt welche einen Reihenanordnung unterdrücken soll. Beim unterdrücken wie auch beim wieder einblenden massive Zeitunterschiede.

 

Aber Inventor muss ja irgendwo einen Unterschied machen? Denn zumindest was die Stückliste betrifft gibt es Unterschiede zwischen manuellem und automatischen Unterdrücken mittels iLogic. Manuell unterdrückte Elemente sind immer noch Stücklisten relevant. Elemente welche über iLogic unterdrückt wurden sind auch nicht mehr in der Stückliste auffindbar. 

 

Vielen Dank, Helmut Melmer

0 „Gefällt mir“-Angaben
Nachricht 5 von 15

Dennis.Ossadnik
Autodesk Support
Autodesk Support

Hallo @hmelmer,

 

könntest Du ein kleines Beispiel hier hochladen?

Bei meinen Test habe ich keine Unterschiede feststellen können, aber wahrscheinlich kommt es hier auch auf die Verwendung der Teile innerhalb der Baugruppe an...



Dennis Ossadnik
Senior Technical Support Specialist
0 „Gefällt mir“-Angaben
Nachricht 6 von 15

hmelmer
Enthusiast
Enthusiast

anbei eine Baugruppe bei welcher die Schraubverbindungen angeordnet werden sollten.

 

 

0 „Gefällt mir“-Angaben
Nachricht 7 von 15

TFoerst
Advocate
Advocate

Als ich habe habe gestern einiges probiert, verschiedene Möglichkeiten mittels API (iLogic, VBA) die Anordnung zu unterdrücken. Aber alles dauert deutlich länger, trotz diverser Code Optimierungen.

Mittels Code bleibt mir nichts anderes übrig als jedes einzelnes Element einzeln zu unterdrücken. Das dauert einfach. Gefühl macht der Befehl in der Oberfläche etwas ganz anderes.

 

Ich kann mir nur vorstellen das der Befehl "unterdrücken" in der Oberfläche von Inventor anders arbeitet als die Möglichkeiten die wir in der API haben. Was denkst du @Dennis.Ossadnik?

 

PS: Ab Inventor 2019 würde es über iLogic noch die Möglichkeit geben die Anordnung zu löschen und neu erstellen zu lassen. Das wäre bei einem Konfigurator natürlich noch besser Smiley (zwinkernd) Aber ich habe gesehen das du Inventor 2017 hast oder?

Nachricht 8 von 15

Dennis.Ossadnik
Autodesk Support
Autodesk Support

Hallo zusammen.

 

Ich hatte mir das gestern auch angesehen und den gleichen Effekt festgestellt, wie @TFoerst auch.

Über die API (und somit auch über iLogic) werden die Elemente jeweils einzeln unterdrückt.

Einen kleinen Code zum testen hatte ich über VBA erstellt und dieser dauert dann exakt so lange, wie über die iLogic-Regel.

 

Gestern hatte ich noch unsere Entwickler danach gefragt und gerade auch eine Antwort bekommen.

 

Wenn man eine Anordnung über den Browser unterdrückt, wird ein optimierter Code ausgeführt, um solche Anordnungen schnell unterdrücken zu können. Allerdings ist dieser optimierte Code leider nicht über die API oder iLogic aufrufbar.

 



Dennis Ossadnik
Senior Technical Support Specialist
0 „Gefällt mir“-Angaben
Nachricht 9 von 15

TFoerst
Advocate
Advocate

Ich bin ein Inventor-Versteher Smiley (überglücklich) Smiley (überglücklich) Smiley (überglücklich) Smiley (überglücklich)

Nachricht 10 von 15

Dennis.Ossadnik
Autodesk Support
Autodesk Support
Akzeptierte Lösung

Hallo @hmelmer,

 

hier eine kleine iLogic Regel, mit der Du den Schalter aus dem Kontextmenü umlegen kannst und somit den optimierten Code für die Unterdrückung benutzen kannst.

 

Dim patternName = "Schraubverbindung Oben, Mitte, Unten:1"
Dim nameOfComponentInPattern = "Schraubenverbindung:295"
Dim isActiveNow = Component.IsActive(nameOfComponentInPattern)
' PatternWanted is the name of a Boolean parameter in the assembly
If isActiveNow <> PatternWanted Then
    ' Use the command to toggle the suppression state
    Dim assemDoc As AssemblyDocument = ThisDoc.Document
    assemDoc.SelectSet.Clear
    assemDoc.SelectSet.Select(assemDoc.ComponentDefinition.OccurrencePatterns(patternName))
    oCommandMgr = ThisApplication.CommandManager
    Dim controlDefs = ThisApplication.CommandManager.ControlDefinitions
    controlDefs("AssemblyCompSuppressionCtxCmd").Execute2(True)
End If

Der Code funktioniert nun genau so schnell, wie das manuelle Umschalten im Browser.

 

Hilft Dir das ein Stückchen weiter?


Bitte nutzt den "Als Lösung akzeptieren"-Button, wenn ein Beitrag euer Problem oder eure Frage löst. Für hilfreiche Posts könnt ihr auch gerne Kudos vergeben.



Dennis Ossadnik
Senior Technical Support Specialist
Nachricht 11 von 15

hmelmer
Enthusiast
Enthusiast

Hallo Dennis,

 

ich kann es leider erst morgen früh testen. Sobald ich es ausprobiert habe, melde ich mich.

 

vielen Dank

 

Gruß

 

Helmut

0 „Gefällt mir“-Angaben
Nachricht 12 von 15

hmelmer
Enthusiast
Enthusiast

Hallo Timon,

 

ich habe den Konfigurator mit 2018 erstellt, hatte aber leider noch keine Zeit es mit 2019 auszuprobieren. Trotzdem Danke für deine Hilfe.

 

Gruß

 

Helmut

0 „Gefällt mir“-Angaben
Nachricht 13 von 15

hmelmer
Enthusiast
Enthusiast

Hallo,

 

Regel funktioniert von der Geschwindigkeit einwandfrei. Jedoch bräuchte ich das ganze auch Stücklisten relevant. Könnte man das noch einbauen in diesen Code?

 

Danke, Gruß Helmut Melmer

0 „Gefällt mir“-Angaben
Nachricht 14 von 15

Dennis.Ossadnik
Autodesk Support
Autodesk Support
Akzeptierte Lösung

Hallo @hmelmer,

 

leider hat es einen Moment gedauert. Smiley Sad

 

Also natürlich ist dies der Teil, der etwas Zeit kostet. Aber ich habe mich mal drangesetzt und ein kleines System ausprobiert, wie man das Regeln könnte und mit Deiner Baugruppe etwas getestet.

 

Grundlage wären drei Regeln:

  1. iLogic-Regel: Reihenfolge der Ausführung regeln
  2. iLogic-Regel: Unterdrückung steuern
  3. iLogic-Regel: Baugruppen-Struktur setzen

 

Vorüberlegung war, dass man die Baugruppenstruktur immer nur dann anpassen kann, wenn die Teile selbst nicht unterdrückt sind.

 

Also habe ich eine kleine Regel geschrieben, die die Ausführungsreihenfolge der beiden anderen Regeln steuert.

 

Will man die Anordnung unterdrücken, müssen erst die Teile auf "Referenz" gesetzt werden und dann wird unterdrückt.

Will man die Unterdrückung aufheben, muss erst die Unterdrückung der Teile entfernt werden und dann kann man die Stücklistenstruktur wieder anfassen.

 

Bei mir dauert die Ausführung auf diese Art und Weise ca 6-7 Sekunden. Wenn man das mit "IsActive" regelt, dauert es bei mir 25-30 Sekunden. (siehe Screencast)

 

Wenn Du also dieses System so anwendest, könntest Du einiges an Zeit sparen Smiley Wink

 

Hier das Video dazu:

 

 

 

 

Bei mir wird übrigens keine der Regeln automatisch angestoßen! Der Parameter wird geändert und dann die Regel manuell angestoßen.

 

Hier die Regeln:

 

Regel 1: Diese wird angestoßen

[TriggerRule]

Dim bIsActive As Boolean = PatternWanted
If bIsActive Then
 iLogicVb.RunRule("ChangeSuppressState")
 iLogicVb.RunRule("ChangeBomStructure")
Else
 iLogicVb.RunRule("ChangeBomStructure")
 iLogicVb.RunRule("ChangeSuppressState")
End If
MessageBox.Show("Done.", "Test")

Regel 2: Unterdrückung steuern (Das ist im Prinzip die schon bekannte Regel von weiter oben)

[ChangeSuppressState]

Dim patternName = "Schraubverbindung Oben, Mitte, Unten:1"
Dim nameOfComponentInPattern = "Schraubenverbindung:295"
Dim isActiveNow = Component.IsActive(nameOfComponentInPattern)
' PatternWanted is the name of a Boolean parameter in the assembly
If isActiveNow <> PatternWanted Then
    ' Use the command to toggle the suppression state
    Dim assemDoc As AssemblyDocument = ThisDoc.Document
    assemDoc.SelectSet.Clear
    assemDoc.SelectSet.Select(assemDoc.ComponentDefinition.OccurrencePatterns(patternName))
    oCommandMgr = ThisApplication.CommandManager
    Dim controlDefs = ThisApplication.CommandManager.ControlDefinitions
    controlDefs("AssemblyCompSuppressionCtxCmd").Execute2(True)
End If

Regel 3: Baugruppen-Struktur setzen

[ChangeBomStructure]

Dim bIsActive As Boolean
bIsActive = PatternWanted
Dim sPatternName As String
sPatternName = "Schraubverbindung Oben, Mitte, Unten:1"

Dim odoc As AssemblyDocument = ThisApplication.ActiveDocument

Dim oPattern As OccurrencePattern

For Each oPattern In odoc.ComponentDefinition.OccurrencePatterns

    If oPattern.Name = sPatternName Then
    
        Dim oElement As OccurrencePatternElement
        For Each oElement In oPattern.OccurrencePatternElements
        
            Dim oOccurence As ComponentOccurrence
            For Each oOccurence In oElement.Occurrences
            
                If bIsActive Then
                    oOccurence.BOMStructure = BOMStructureEnum.kDefaultBOMStructure
                Else
                    oOccurence.BOMStructure = BOMStructureEnum.kReferenceBOMStructure
                End If
            Next
        Next
    End If
Next

An der ein oder anderen Stelle kann man das bestimmt besser oder anders handhaben, aber es soll ja zunächst auch nur das Prinzip zeigen.

 

Kannst du das mal testen?

 


Bitte nutzt den "Als Lösung akzeptieren"-Button, wenn ein Beitrag euer Problem oder eure Frage löst. Für hilfreiche Posts könnt ihr auch gerne Kudos vergeben.

 



Dennis Ossadnik
Senior Technical Support Specialist
Nachricht 15 von 15

Tarek_K
Autodesk
Autodesk

Hallo @hmelmer,

hat dir die Antwort von Dennis geholfen und konnte deine Frage beantworten? 🙂 Wenn ja, kannst du gerne auf den Button "Als Lösung akzeptieren" klicken, dann profitieren auch andere Anwender von der Information. Gib uns doch einfach ein Update, solltest du noch weitere Fragen zu deinem Thema haben oder nicht weiter kommen, dann weiß man was bei dir der Stand der Dinge ist und wie man helfen kann. 🙂

You found a post helpful? Then feel free to give likes to these posts!
Your question got successfully answered? Then just click on the 'Mark as solution' button. 


Tarek Khodr
Community Manager

0 „Gefällt mir“-Angaben