Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  iLogic: Wie erfolgt die Abfrage ob Modellzustand vorhanden ist um ihn auszuwählen

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:  iLogic: Wie erfolgt die Abfrage ob Modellzustand vorhanden ist um ihn auszuwählen (276 / mal gelesen)
FroSte
Mitglied
Bauingenieur


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

Beiträge: 23
Registriert: 09.06.2009

Inventor 2021

erstellt am: 20. Feb. 2024 18:38    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 mal wieder eine Herausforderung in iLogic, für die ich noch keine Lösung gefunden habe. Ich hoffe, hier kann mir jemand weiterhelfen.
Meine Inventor-Version ist 2023.

Ich habe einen Funktion geschrieben, mit der ich Bauteile oder Baugruppen in eine neuen Baugruppe platziere. Das/die zu platzierende Bauteil/Baugruppe wähle ich mit einem Dateiaswahldialog "Öffnen" aus und übergebe die Informationen an die Funktion zum platzieren.

Wenn ein Bauteil/eine Baugruppe platziert wurde, möchte ich den Modellzustand auf den bestimmten Modellzustand "Nur Steine" ändern. Da ich nicht sicher sein kann, dass dieser Modellzustand auch in der ausgewählten Baugruppe/Bauteil vorhanden ist, versuche ich einen Fehler mit "Try-Catch-End Try" abzufangen, falls es den bestimmten Modellzustand nicht gibt.
Leider bekomme ich aber immer einen Fehler und das Skript steigt aus, wenn der Modellzustand "Nur Steine" nicht vorhanden ist.

Kann mir jemand sagen, woran das liegt? Ich dachte, dass das Programm mit einem Hinweis beendet wird, wenn der Modellzustand nicht ausgewählt werden kann, da er nicht vorhanden ist.
Vermutlich muss ich vorher prüfen, ob er vorhanden ist und erst dann auf den Modellzustand wechseln.
Wie kann ich das vorhanden sein des Modellzustands prüfen?

Danke für eure Unterstützung.
Liebe Grüße
Stephan


Hier ist mein iLogic-Code.


Code:

Public Sub AddComponent(oPath As String, Ringnr As Integer, Typ As String ,Stellung As Integer, Stat As Double, XAchseX As Double, XAchseY As Double, XAchseZ As Double, YAchseX As Double, YAchseY As Double, YAchseZ As Double, ZAchseX As Double, ZAchseY As Double, ZAchseZ As Double, UrsprungX As Double, UrsprungY As Double, UrsprungZ As Double)


If System.IO.File.Exists(oPath) Then
Dim oAsmCompDef As AssemblyComponentDefinition = ThisApplication.ActiveDocument.ComponentDefinition
Dim oTG As TransientGeometry = ThisApplication.TransientGeometry

Dim oMatrix = oTG.CreateMatrix

oMatrix.Cell(1, 1) = XAchseX
oMatrix.Cell(2, 1) = XAchseY
oMatrix.Cell(3, 1) = XAchseZ
oMatrix.Cell(1, 2) = YAchseX
oMatrix.Cell(2, 2) = YAchseY
oMatrix.Cell(3, 2) = YAchseZ
oMatrix.Cell(1, 3) = ZAchseX
oMatrix.Cell(2, 3) = ZAchseY
oMatrix.Cell(3, 3) = ZAchseZ
oMatrix.Cell(1, 4) = UrsprungX
oMatrix.Cell(2, 4) = UrsprungY
oMatrix.Cell(3, 4) = UrsprungZ


Dim oOcc As ComponentOccurrence = oAsmCompDef.Occurrences.Add(oPath, oMatrix)
oOcc.Grounded = True ' "True" zum Fixieren des Bautels bzw. der Baugruppe, "False" für keine Fixierung
oOcc.Name = "Ring_" & Format(Ringnr, "000") & " - Stat. " & Format(Stat, "0.000") & " - Typ " & Typ & " - Ringstellung " & Format(Stellung, "00") ' Umbenennen der eingefügten Elemente im Browser

Try
oOcc.SetLevelOfDetailRepresentation("Nur Steine", True) ' Detailgenauigkeit "Nur Steine" muss vorhanden sein!!!
Catch
MsgBox("Es ist keine Detailgenauigkeit ""Nur Steine"" vorhanden!" & Chr(13) & "Es werden keine Ringe eingelesen und das Programm beendet.", "Dialog Detailgenauigkeit")
Exit Sub
End Try

End If
End Sub



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

Windows 10 x64, AIP 2023

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

Moin

Modellzustand und LevelOfDetail ist nicht das gleiche. Modellzustände erreicht man in der ComponentOccurrence unter ActiveModelState.

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

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

FroSte
Mitglied
Bauingenieur


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

Beiträge: 23
Registriert: 09.06.2009

Inventor 2021

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


ScreenshotFehlermeldung.png

 
Guten Morgen Ralf,

vielen Dank für Deine Antwort.
Leider bin ich (noch) nicht der große iLogic-Experte.
Was ist denn genau der Unterschied zwischen Modellzustand und Detailgenauigkeit. Ich weiß, die Modellzustände gibt es erst seit IV2022, vorher waren das Detailgenauigkeiten. ich weiß auch, dass mit den Modellzuständen viel mehr möglich ist, als mit den bisherigen Detailgenauigkeiten, aber in der Baugruppe sind sie ja doch vergleichbar.

Der Befehl LevelOfDetail (oOcc.SetLevelOfDetailRepresentation("Nur Steine", True) ) funktioniert ja. Wenn der benannte Modellzustand (hier "Nur Steine" in dem Modell (egal ob Baugruppe oder Bauteil) vorhanden ist, wird dieser auch ausgewählt.
Nur kann ich den Fehler nicht abfangen, falls der Modellzustand in der Baugruppe oder dem Bauteil nicht vorhanden ist.

Für mich stellt sich die Frage, wie ich den Fehler abfangen kann.
Wenn es besser oder sinnvoller ist anstelle von LevelOfDetail den Befehl ActiveModelState zu verwenden, kann ich das natürlich ändern.
Wie müsste denn die Zeile dann aussehen?
oOcc.ActiveModelState("Nur Steine", True) funktioniert leider nicht.

Ich leg mal noch einen Screenshot von der Fehlermeldung bei, die erscheint, wenn das/die ausgewählte Bauteil / Baugruppe den benannten Modellzustand nicht enthält.

Vielen Dank für die Unterstützung und Hilfe.
Gruß Stephan

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

Windows 10 x64, AIP 2023

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

Moin

Deatilgenauigkeiten gibt es nicht mehr. Mit Version 2022 wurden Detailgenauigkeiten durch Modellzustände ersetzt. Bei der Migration alter Daten sollen Detailgenauigkeiten in Modellzustände konvertiert werden. Detailgenauigkeiten sind in der API nur zwecks Kompatibilität zu Altdaten noch erreichbar. In irgendeinem zukünftigen Release wird das ausgeblendet und nochmal irgendwann später möglicherweise ganz entfernt. Es empfiehlt sich daher diese Objekte nicht mehr zu verwenden.
Das SetLevelOfDetailRepresentation funktioniert ist Teil der Rückwärtskompatibilität. Inventor sucht im Hintergrund sowohl Detailgenauigkeit als auch Modelzustand mit dem gegebenen Namen.
Es gibt mehrere Möglichkeiten vorab zu prüfen ob der Modellzustand existiert.
Variante 1 - Holzhammer
Mit einem TryCatch Statement probieren und den ausgelösten Fehler selbst behandeln

Code:

Try
    oOcc.ActiveModelState = "Nur Steine" 'alternativ kann hier auch der Parametername oder der Rückgabetext eines Dialoges eingesetzt werden
Catch
    'hier den Code einfügen der ausgeführt werden soll, wenn der Modellzustand nicht existiert, im einfachen Fall Exit Sub
End Try

Variante 2 dezent nachfragen
In einer Schleife durch alle vorhandenen Modellzustände gehen und bei jedem den Namen vergleichen

Code:

Dim oMS As ModelState
For Each oMS in oOcc.Definition.ModelStates
    If oMS.Name = "Nur Steine" Then
        oOcc.ActiveModelState = "Nur Steine"
        ' alternativ müsste auch gehen
        ' oMS.Activate
        Exit For
    End If
Next

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

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

FroSte
Mitglied
Bauingenieur


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

Beiträge: 23
Registriert: 09.06.2009

Inventor 2021

erstellt am: 01. Mrz. 2024 11:06    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 Unterstützung.
Jetzt klappt alles wie es soll. Ich habe die 2. Variante gewählt.
Gruß Stephan

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