Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Ilogic Multivalue.SetValueOptions bewirkt keine Änderung des Modells

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
  
Auf dem Weg zur digitalen Auftragsmappe. , ein Anwenderbericht
Autor Thema:  Ilogic Multivalue.SetValueOptions bewirkt keine Änderung des Modells (2424 / mal gelesen)
EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 05. Feb. 2021 09:27    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,

vielleicht kann mir jemand den Trick verraten wie ich folgendes Problem löse.

Ich habe eine iLogic-Regel welche mehrere voneinander abhängige Parameter Auswahllisten steuert. Bei Änderung der Parameter mittels Mausklick wird das Modell entsprechend angepasst. Die Parameterwahl wird über ein iLogic-Formular mittels Optionsfeldgruppe vorgenommen. Soweit der Teil der funktioniert 


Ändern sich jetzt im folgenden kurzen Beispiel z.B. die Etagen von 10 auf 11 steht die Option Zusatzteil auf "ohne" , "mit" ist nicht mehr verfügbar. Über "MultiValue.SetValueOptions(True, DefaultIndex := 0)" wird ohne vorausgewählt.

Code:

Select Case Etagen
Case "06", "07", "08", "09", "10"
MultiValue.SetValueOptions(True, DefaultIndex := 1)
MultiValue.SetList("Zusatzteil", "mit", "ohne")
Case Else

MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "ohne")
'Zusatzteil = "ohne" 'So wird die Änderung direkt umgesetzt
End Select

Das Problem ist nun, dass die "automatische" Parameterwahl keine direkte Änderung im Modell bewirkt und erst umgesetzt wird wenn ich einen anderen Parameter "händisch" ändere.

Für den Endnutzer ist es natürlich nicht nachvollziehbar dass das was in den Optionen gewählt ist nicht auch am Bildschirm umgesetzt wird.

In obigen Beispiel lässt sich das Ganze noch recht einfach per harten setzen des Parameters umgehen. Das Modell wird dann korrekt umgehend aktualisiert.


Habe ich jedoch z.B. einen ähnlichen wie folgenden Fall

Code:

Select Case Etagen
Case "06", "07", "08", "09", "10"
MultiValue.SetValueOptions(True, DefaultIndex := 1)
MultiValue.SetList("Zusatzteil", "mit", "ohne", "doppelt")
Case Else

MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "mit" "ohne",)
'Zusatzteil = "ohne" 'hier klappt das manuelle Umschalten dann nicht mehr
End Select

Funktioniert der Workaround nicht mehr, da der Parameter nun fix vorgegeben ist.


Versucht habe ich schon per "MultiValue.UpdateAfterChange = True" zu lösen, was nicht zum Erfolg führte.


Ich hoffe mein Problem ist soweit klar beschrieben und dass jemand weiß wie es zu lösen ist.


Grüße

EIBe 3D

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

Windows 10 x64, AIP 2020-2025

erstellt am: 05. Feb. 2021 16: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 Nur für EIBe 3D 10 Unities + Antwort hilfreich

Hallo

Hast du mal ein

Code:
iLogicVb.UpdateWhenDone = True

probiert? Ich habe dich so verstanden, dass die Parameterwerte korrekt gesetzt werden, aber das Modell nicht aktualisiert wird. Vielleicht reicht es so schon.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 08. Feb. 2021 08:21    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 Ralf,

danke für deine Antwort. Leider funktioniert dein Vorschlag nicht.

Code:

iLogicVb.UpdateWhenDone = True

Habe ich an verschieden Stellen im Code getestet.

Ich zitiere mich mal selbst, um den "Knackpunkt" nochmal hervor zu heben.

Zitat:

Das Problem ist nun, dass die "automatische" Parameterwahl keine direkte Änderung im Modell bewirkt und erst umgesetzt wird wenn ich einen anderen Parameter "händisch" ändere.

Insofern richtig, dass keine Modellaktualisierung durchgeführt wird.

Ein "händisch" betätigtes Umschalten eines Parameters wird umgehend durch eine entsprechende Modelländerung dargestellt.

Ein automatisiertes Umschalten eines Parameters mittels:

Code:

MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Parameter", "Wert1" "Wert2",)

wählt Wert1 in der Optionsfeldgruppe aus, die Modeländerung wird aber erst umgesetzt wenn ich wieder irgendeinen Parameter "händisch" wähle.

Auch

Code:
ThisApplication.ActiveDocument.Update

bewirkt keine Modelländerung.


Grüße

EIBe 3D

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

Windows 10 x64, AIP 2020-2025

erstellt am: 08. Feb. 2021 13:43    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 EIBe 3D 10 Unities + Antwort hilfreich

Hallo

Hast du zwei Select-Anweisungen für die 2 Optionsfeldgruppen in einer Regel? Teil die mal bitte auf zwei Regeln auf. Ein Aufruf der zweiten Regel aus der ersten Regel ist nicht erforderlich.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 08. Feb. 2021 15:02    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 Ralf,

ja es sind mehrere abhängige Select-Anweisungen in einer Regel.

Teile ich auf, komme ich tatsächlich einen Schritt weiter. Vielen Dank für die Idee.

Regel 1:

Code:

Select Case Hoehe
Case "Hoch"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Anzahl", "06", "07")

Case "Mittel", "Niedrig"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Anzahl","08", "09")
End Select



Regel 2:

Code:

Select Case Anzahl
Case "06", "07"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "mit", "ohne")

Case  "08", "09"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "ohne")
End Select


Ausgangssituation
Anzahl auf 06 oder 07 und Zusatzteil "mit"

Ändern Anzahl auf 08 oder 09
Zusatzteil wird auf "ohne" gesetzt, Model wird nun korrekt aktualisiert

Änderung Anzahl zurück auf 06 oder 08
Default Zusatzteil sollte auf "mit" gesetzt werden -> Dies geschieht nun nicht (folglich auch keine Modelländerung)


Insgesamt ist die Regel recht umfangreich, da ich mehrere (auch regelinterne) Variablen darüber logikbedingt setze und verarbeite.

Mir scheint es nun generell eher sinnvoll die Regeln soweit wie möglich zu zergliedern (obwohl bis auf die beschriebene Problematik alles Sonstige wie vorgesehen funktioniert).


Grüße

EIBe 3D

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 09. Feb. 2021 08:26    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 zussamen.

Ergänzung zu meinem obigen Post:

Splitte ich obige Regel 2 weiter auf.

Regel 2:

Code:

Select Case Anzahl
Case "06", "07"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "mit", "ohne"
End Select


Regel 3:

Code:

Select Case Anzahl
Case  "08", "09"
MultiValue.SetValueOptions(True, DefaultIndex := 0)
MultiValue.SetList("Zusatzteil", "ohne")

Verhält es sich weiterhin so wie oben unterhalb der Regeln beschrieben. Eine weiter Zergliederung der Regeln bringt also auch keinen Erfolg.


Grüße

EIBe 3D

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

Windows 10 x64, AIP 2020-2025

erstellt am: 09. Feb. 2021 23: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 EIBe 3D 10 Unities + Antwort hilfreich

Hallo

Also ich hab jetzt bei deinen Abhängigkeiten der Parameterwerte den Faden verloren. Kannst du die Kombis mal in einer Übersicht zusammenschreiben oder sind das in Wirklichkeit 85 Dropdowns die da hintereinander hängen? Ich habe einen möglicherweise funktionierenden Weg gefunden, indem man die Wertzuweisungen der Parameter in Funktionen auslagert.
Zum Probieren ein Bauteil mit Textparametern
"Etagen" ("06","07","08","09","10","11")
"Zusatzteil" ("mit", "ohne", "doppelt")
"Hoehe" ("Hoch", "Mittel", "Niedrig"),
sowie einen numerischen Parameter "Abmass" anlegen. Der Parameter Abmass sollte irgendein Mass im Bauteil steuern. Den Code in eine Regel einfügen. Anschließend ein Formular anlegen, die Parameter "Hoehe", "Etagen" und "Zusatzteil" einfügen und als Optionsfeldgruppe formatieren.

Deine Logik ist sicher eine andere, aber es demonstriert die Funktionsweise denke ich.

Code:

'Sub Main ist eigentlich nur da, falls noch weiterer Code ausgeführt werden soll.
Sub main()

SetMVParams
InventorVb.DocumentUpdate

End Sub

Sub SetMVParams()

SetHoehe({"Hoch", "Mittel", "Niedrig" })

Select Case Hoehe
Case "Hoch"
SetEtagen({"10", "11" })
Case "Mittel"
SetEtagen({"08", "09"})
Case "Niedrig"
SetEtagen({"06", "07" })
End Select

Select Case Etagen
Case "06", "07"
SetZusatzteil({"mit", "ohne", "doppelt" })
Case "08", "09"
SetZusatzteil({"mit", "ohne" })
Case "10", "11"
SetZusatzteil({"ohne"})
End Select

Select Case Zusatzteil
Case "mit"
SetAbmass({2})
Case "ohne"
SetAbmass({0})
Case "doppelt"
SetAbmass({4})
End Select

End Sub

Function SetHoehe(ByRef aHoehe)
MultiValue.List("Hoehe") = aHoehe
index = Array.IndexOf(aHoehe, Parameter("Hoehe"))
If index = -1 Then
Parameter("Hoehe") = aHoehe(0)
Hoehe = Parameter("Hoehe")
End If
End Function

Function SetEtagen(ByRef aEtagen)
MultiValue.List("Etagen") = aEtagen
index = Array.IndexOf(aEtagen, Parameter("Etagen"))
If index = -1 Then
Parameter("Etagen") = aEtagen(0)
Etagen = Parameter("Etagen")
End If
End Function

Function SetZusatzteil(ByRef aZusatzteil)
MultiValue.List("Zusatzteil") = aZusatzteil
index = Array.IndexOf(aZusatzteil, Parameter("Zusatzteil"))
If index = -1 Then
Parameter("Zusatzteil") = aZusatzteil(0)
Zusatzteil = Parameter("Zusatzteil")
End If
End Function

Function SetAbmass(ByRef aAbmass)
'Abmass besteht aus einer frei erfundenen Berechnung
Parameter("Abmass") = CDblAny(Etagen) * CDblAny(20) + CDblAny(aAbmass(0))
End Function


------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 10. Feb. 2021 11:40    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 Ralf,

ganz großes Kino. Vielen Dank für deine Hilfe, ich weiß deinen Aufwand sehr zu schätzen.

Ja, mit den Abhängikeiten der Parameterwerte ist das insgesamt schon etwas verwirrend. Deswegen habe ich verucht eine vereinfachte Problemstellung zu generieren.

Die Kombinationen in den aufwändigeren Fällen darzustellen hätte den Rahmen gesprengt. Ich habe deine Lösung nun auf einen einfacheren Fall problemlos übertragen können.


Eine Frage hätte ich noch für den Moment

z.B. Hier:

Code:

Function SetHoehe(ByRef aHoehe)
MultiValue.List("Hoehe") = aHoehe
index = Array.IndexOf(aHoehe, Parameter("Hoehe"))
If index = -1 Then
Parameter("Hoehe") = aHoehe(0)
Hoehe = Parameter("Hoehe")

End If
End Function

Im markierten Bereich machst du eine doppelte Zuweisung. Ich dachte "Parameter("Hoehe")" sei nur eine andere Möglichkeit den Parameter "Hoehe" anzusprechen und somit redundant.

Ändere ich das in:

Code:

Function SetHoehe(ByRef aHoehe)
MultiValue.List("Hoehe") = aHoehe
index = Array.IndexOf(aHoehe, Parameter("Hoehe"))
If index = -1 Then
Parameter("Hoehe") = aHoehe(0)
End If
End Function

Wird der Parameter tatsächlich gesetzt, das Modell jedoch erst wieder bei der nächsten Parameterwahl korrekt geändert. (Siehe Verhalten oben)

Ändere ich zu:

Code:

Function SetHoehe(ByRef aHoehe)
MultiValue.List("Hoehe") = aHoehe
index = Array.IndexOf(aHoehe, Parameter("Hoehe"))
If index = -1 Then
Hoehe = aHoehe(0)
End If
End Function

und weise dem Parameter "Hoehe" direkt den Arraywert zu, ändert sich das Modell umgehend. (Entspricht auch dem erwarteten Verhalten wie oben beschrieben wo ich eine fixe Zuweisung zum Parameter machte).

Allerdings:
Dabei wird meine Formularmaske in den Hintergrund befördert und ist erst wieder sichtbar wähle ich Inventor über die Taskleiste neu an. (Dieses Verhalten habe ich auch schon bei anderen, ähnliche aufgebauten Formularen erlebt. Hier lässt es sich gezielt rekonstruieren)

Nun wüsste ich natürlich gerne warum du die doppelte Zuweisung gemacht hast und was der Unterschied zwischen Parameter("Hoehe") und einfach Hoehe ist.


Grüße

EIBe 3D

Edit1: Wie kriege ich den Button 10+ für Unities dazu das zu machen was er soll?

[Diese Nachricht wurde von EIBe 3D am 10. Feb. 2021 editiert.]

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

Windows 10 x64, AIP 2020-2025

erstellt am: 10. Feb. 2021 23:23    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 EIBe 3D 10 Unities + Antwort hilfreich

Hallo

Parameter("Etagen") ist eine Funktion bzw. Methode die sofort den fx-Parameter ändert. "Etagen" ist nur eine Variable mit dem Wert des fx-Parameters "Etagen" zum Zeitpunkt der Deklaration enthält. Der Wert der Variable aktualisiert sich nicht automatisch. Ändert der User die Option Höhe von Niedrig auf Mittel und die gewählten Optionen von Etagen und Zusatzteil sind auch in der der neuen Höhe Mittel verfügbar (index ist ungleich -1), bleiben die Werte unverändert. Nur wenn die gewählten Werte in Etagen und Zusatzteil in der Höhe Mittel nicht verfügbar sind, erfolgt das Ändern des Parameters auf den Standardwert der Option und das Aktualisieren der Variablen.

Ändere bitte mal die Funktion wie unten dargestellt. Beim Ändern der Höhe im Formular von (z.B.) Hoch auf Niedrig wird das Optionsfeld der Zusatzteile nicht korrekt aktualisiert, da der Wert von "Etagen" unverändert bleibt. Es ändert sich zwar das Optionsfeld "Etagen", aber der Wert der Variablen nicht. Der Wert von Variable "Etagen" ist aber offensichtlich der, der das Formular beeinflußt. Daher aktualisiere ich ihn, in dem ich erneut den aktuellen Wert von fx-Parameter "Etagen" auslese und zuweise. Das Aktualisieren des Variablenwertes erfolgt auch, wenn man nach dem oben genannten Hoch auf Niedrig umstellen einen Wert im Optionsfeld "Etagen" anklickt. Anschließend läuft die Regel ein zweites Mal durch, der aktuelle Wert von "Etagen" (jetzt der neue) wird ausgelesen und die Werte von Zusatzteil werden korrekt geändert.

Ich hoffe das war verständlich. Die Methode ändert den Parameter, was die Modelländerung auslösen sollte und die Aktualisierung der Variable die korrekte Aktualisierung der Optionsfeldgruppen. Den Effekt, dass das Formular hinter dem Inventorfenster verschwindet habe ich nicht. Das kann auch ein Graka Treiberproblem sein.
Ich denke die Funktion SetHoehe ist überflüssig (keine Ahnung wo ich da im Kopf war  ), da die drei Optionen unveränderlich in jeder Kombination der anderen Optionen vorhanden sind. Ein Zurücksetzen auf einen Standardwert ist da Unsinn. Es kommt schlicht nie vor.


Code:

Function SetEtagen(ByRef aEtagen)
MultiValue.List("Etagen") = aEtagen
index = Array.IndexOf(aEtagen, Parameter("Etagen"))
If index = -1 Then
MsgBox ("1 - " & Etagen)
Parameter("Etagen") = aEtagen(0)
MsgBox ("2 - " & Etagen)
'Etagen = Parameter("Etagen")
MsgBox ("3 - " & Etagen)
End If
End Function

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

EIBe 3D
Mitglied
Dipl. - Ing. (FH)


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

Beiträge: 267
Registriert: 24.01.2020

HP Z4 G4 Workstation
Xeon 3,6 32GB
Nvidia P2000
WIN10
SW2015 SP5.0
SW2017
*************
Inv2018 akt.SP

erstellt am: 11. Feb. 2021 09:54    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


MultiValueParameter.zip

 
Hallo Ralf,

danke für deine Erklärung ich denke ich habs soweit verstanden. Array.IndexOf() Methode war klar.

Ich habe das Ganze nochmal in verschieden Variationen durchgespielt. Den Code verändert und kommentiert

Mit Kommentaren und auskommentierten Ursprungscode:

Code:

'Sub Main ist eigentlich nur da, falls noch weiterer Code ausgeführt werden soll.
Sub Main()

SetMVParams
'InventorVb.DocumentUpdate 'Nicht notwendig Modell aktualisiert auch ohne

End Sub

Private Sub SetMVParams()

SetHoehe({"Hoch", "Mittel", "Niedrig" })

Select Case Hoehe
Case "Hoch"
SetEtagen({"10", "11" })
Case "Mittel"
SetEtagen({"08", "09"})
Case "Niedrig"
SetEtagen({"06", "07" })
End Select

Select Case Etagen
Case "06", "07"
SetZusatzteil({"mit", "ohne", "doppelt" })
Case "08", "09"
SetZusatzteil({"mit", "ohne" })
Case "10", "11"
SetZusatzteil({"ohne"})
End Select

Select Case Zusatzteil
Case "mit"
SetAbmass({2})
Case "ohne"
SetAbmass({0})
Case "doppelt"
SetAbmass({4})
End Select

End Sub

'Sub statt Function da kein Wert zurückgegeben wird
Private Sub SetHoehe(ByVal aHoehe) 'ByRef nicht notwendig da Array durch Sub nicht geändert wird
MultiValue.List("Hoehe") = aHoehe
' index = Array.IndexOf(aHoehe, Parameter("Hoehe")) 'hier existieren keine abhängigen Parameteroptionen
' If index = -1 Then
' 'Parameter("Hoehe") = aHoehe(0)
' 'Hoehe = Parameter("Hoehe")
' Hoehe = aHoehe(0)
' End If
End Sub

Private Sub SetEtagen(ByVal aEtagen)
MultiValue.List("Etagen") = aEtagen
index = Array.IndexOf(aEtagen, Parameter("Etagen"))
If index = -1 Then
'Parameter("Etagen") = aEtagen(0)
'Etagen = Parameter("Etagen")
Etagen = aEtagen(0)
End If
End Sub

Private Sub SetZusatzteil(ByVal aZusatzteil)
MultiValue.List("Zusatzteil") = aZusatzteil
index = Array.IndexOf(aZusatzteil, Parameter("Zusatzteil"))
If index = -1 Then
'Parameter("Zusatzteil") = aZusatzteil(0)
'Zusatzteil = Parameter("Zusatzteil")
Zusatzteil = aZusatzteil(0)
End If
End Sub

Private Sub SetAbmass(ByVal aAbmass)
'Abmass besteht aus einer frei erfundenen Berechnung
'Parameter("Abmass") = CDblAny(Etagen) * CDblAny(20) + CDblAny(aAbmass(0)) 'Ändert Modell seltsamerweise ad-hoc, Verhalten bei Textparametern anders
Abmass = CDblAny(Etagen) * CDblAny(20) + CDblAny(aAbmass(0)) 'Bei nummerischen Parametern gleichwertig
End Sub


Bereinigte Kurzfassung:

Code:

'Sub Main ist eigentlich nur da, falls noch weiterer Code ausgeführt werden soll.
Sub Main()

SetMVParams

End Sub

Private Sub SetMVParams()

SetHoehe({"Hoch", "Mittel", "Niedrig" })

Select Case Hoehe
Case "Hoch"
SetEtagen({"10", "11" })
Case "Mittel"
SetEtagen({"08", "09"})
Case "Niedrig"
SetEtagen({"06", "07" })
End Select

Select Case Etagen
Case "06", "07"
SetZusatzteil({"mit", "ohne", "doppelt" })
Case "08", "09"
SetZusatzteil({"mit", "ohne" })
Case "10", "11"
SetZusatzteil({"ohne"})
End Select

Select Case Zusatzteil
Case "mit"
SetAbmass({2})
Case "ohne"
SetAbmass({0})
Case "doppelt"
SetAbmass({4})
End Select

End Sub

Private Sub SetHoehe(ByVal aHoehe)
MultiValue.List("Hoehe") = aHoehe
End Sub

Private Sub SetEtagen(ByVal aEtagen)
MultiValue.List("Etagen") = aEtagen
index = Array.IndexOf(aEtagen, Parameter("Etagen"))
If index = -1 Then
Etagen = aEtagen(0)
End If
End Sub

Private Sub SetZusatzteil(ByVal aZusatzteil)
MultiValue.List("Zusatzteil") = aZusatzteil
index = Array.IndexOf(aZusatzteil, Parameter("Zusatzteil"))
If index = -1 Then
Zusatzteil = aZusatzteil(0)
End If
End Sub

Private Sub SetAbmass(ByVal aAbmass)
Abmass = CDblAny(Etagen) * CDblAny(20) + CDblAny(aAbmass(0))
End Sub



Änderungen:

Direkte Zuweisung Variable z.B. "Zusatzteil" mit ArrayValue (Bei Bauteil und Beisspielbaugruppe aus Anhang problemlos, innerhalb meiner "real-life" Baugruppenregel führt es zum "Verschwinden" des Formulars hinter dem Inventorfenster)

ByRef "Array" in ByVal (Array wird nicht verändert)

Functions -> Sub (Kein Parameter wird durch die Function übergeben)


Im Anhang findet sich eien Beispielbaugruppe Inv2018 in der die Zusatzteile ausgeschlossen werden (nur bis Inv2020 möglich wenn BG keine iAssembly ist), und die Parameter zur Steuerung in die Bauteile übergeben werden wo schließlich die Berechnung stattfindet. In einem deutlich größerem Umfang gehe ich, ähnlich wie in dem Beispiel, vor um mittels Produktkonfigurator ca. 10.000 Varianten zu generieren.

Grüße

EIBe 3D

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