Hot News:

Unser Angebot:

  Foren auf CAD.de
  
  iLogic-Regel funktioniert als lokale, aber nicht als externe Regel

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
[an error occurred while processing this directive]
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  iLogic-Regel funktioniert als lokale, aber nicht als externe Regel (752 / mal gelesen)
iogurt
Mitglied
Konstrukteur


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

Beiträge: 295
Registriert: 30.09.2005

Inventor 2021 Professional

erstellt am: 23. Apr. 2025 07:45    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 bin gerade dabei, für unsere Firma neue .ipt Vorlagen zu erstellen. Dort möchte ich eine externe Regel laufen lassen. Wenn ich diese Regel als lokale Regel im .ipt ausführe, funktioniert sie wie gewünscht. Aber wenn ich sie als externe Regel ausführe, funktioniert sie nur teilweise. Meine Regel:


On Error Resume Next

Dim oPartDoc As PartDocument
oPartDoc = ThisApplication.ActiveDocument

iProperties.Value("Summary", "Manager") = iProperties.Value("Project", "Description")

If oPartDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then

BlechLänge = SheetMetal.FlatExtentsLength
BlechBreite = SheetMetal.FlatExtentsWidth
iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"

End If

Wenn ich ein neues Blechteil erstelle und die Regel ausführe, macht es mir zwar automatisch die Abwicklung und schreibt den korrekten Benutzerparameter für die Länge und Breite, aber aktualisiert den Benutzerparameter nicht nach einer Änderung des Blechs. Sieht jemand einen Fehler in der Regel? Das "on error resume next" habe ich drin, falls gespeichert wird, ohne dass etwas modelliert wurde und IV noch keine Abwicklung erstellen kann, sonst kommt immer ein Fehler. Danke!


[Diese Nachricht wurde von iogurt am 23. Apr. 2025 editiert.]

[Diese Nachricht wurde von iogurt am 23. Apr. 2025 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: 2822
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 23. Apr. 2025 10:01    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 iogurt 10 Unities + Antwort hilfreich

Moin

1. On Error Resume Next ist der schlechtestmögliche Weg. Damit wird einfach nur alles ignoriert. 
2. Prüfe ob oPartDoc.ComponentDefinition.HasFlatPattern=True ist, dann existiert eine Abwicklung. Wenn nein, oPartDoc.ComponentDefinition.Unfold und ggf. Fehler abfangen und sauber mit Meldung aussteigen.
3. Die Abwicklung hat eigene Benutzerparameter. Diese sind aber außerhalb, z.B. für iProps nicht erreichbar. Stelle daher sicher, dass du die Abwicklung verlassen hast, BEVOR die Parameter geschrieben werden.
4. Die Abkürzung mit dem Parameternamen funktioniert nur in internen Regeln. Dort sieht man, dass iLogic ein Parameterobjekt erstellt, wenn ein gleichnamigen Parameter existiert. Du musst den klassischen Weg über die API gehen. Dabei musst du selbst sicherstellen, dass der Parameter existiert oder ihn ggf. neu anlegen. Leider sind die Randbedingungen und Beschränkungen dieser iLogic Abkürzungen so gut wie gar nicht dokumentiert.

Mal aus Neugierde: Warum missbraucht ihr das Managerproperty statt ein benutzerdefiniertes anzulegen? Man weiß ja nie, ob das Feld nicht eines Tages doch gebraucht wird. 

Code:

If Not ThisDoc.Document.DocumentType = DocumentTypeEnum.kPartDocumentObject Then
MsgBox("Nur in Blechteilen verfügbar.", MsgBoxStyle.Information, "iLogic Create FlatPattern")
Exit Sub
End If

Dim oPartDoc As PartDocument=ThisDoc.Document

iProperties.Value("Summary", "Manager") = iProperties.Value("Project", "Description")

If oPartDoc.SubType = "{9C464203-9BAE-11D3-8BAD-0060B0CE6BB4}" Then

Dim oCompDef As SheetMetalComponentDefinition = oPartDoc.ComponentDefinition
If oCompDef.HasFlatPattern = False Then
ThisApplication.ScreenUpdating=False
Try
oCompDef.Unfold
Catch
ThisApplication.ScreenUpdating=True
MsgBox("Erstellen der Abwicklung fehlgeschlagen. Abbruch", MsgBoxStyle.Critical, "iLogic Create FlatPattern")
Exit Sub
End Try
ThisApplication.ScreenUpdating=True
End If

If TypeOf(oPartDoc.ActivatedObject) Is Inventor.FlatPattern Then
oCompDef.FlatPattern.ExitEdit
End If

Try
oPartDoc.ComponentDefinition.Parameters.UserParameters.Item("BlechLänge").Value = SheetMetal.FlatExtentsLength
Catch
oPartDoc.ComponentDefinition.Parameters.UserParameters.AddByValue("BlechLänge", SheetMetal.FlatExtentsLength,"mm")
End Try

Try
oPartDoc.ComponentDefinition.Parameters.UserParameters.Item("BlechBreite").Value = SheetMetal.FlatExtentsWidth
Catch
oPartDoc.ComponentDefinition.Parameters.UserParameters.AddByValue("BlechBreite", SheetMetal.FlatExtentsWidth,"mm")
End Try

'BlechLänge = SheetMetal.FlatExtentsLength
'BlechBreite = SheetMetal.FlatExtentsWidth

iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"

End If


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

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

iogurt
Mitglied
Konstrukteur


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

Beiträge: 295
Registriert: 30.09.2005

Inventor 2021 Professional

erstellt am: 23. Apr. 2025 12:15    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, vielen Dank für die Anpassungen!

"Warum missbraucht ihr das Managerproperty statt ein benutzerdefiniertes anzulegen?" - das kommt daher, dass ich dieses Property auf der Zeichnung referenzieren will und es ein "hard codiertes" Property ist, das bei jedem .ipt vorhanden ist. Kann ich im Zeichnungskopf auch auf ein benutzerdefiniertes zugreifen irgendwie? Falls ja, wäre ich auch wohler damit.

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



Anzeige:Infos zum Werbeplatz >>

SYSCAD DEMO Version CAD APP für Fassadenbau, Metallbau

SYSCAD - CAD für Fenster, Türen und Fassaden

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

Windows 10 x64, AIP 2020-2025

erstellt am: 23. Apr. 2025 13: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 Nur für iogurt 10 Unities + Antwort hilfreich

Moin

Über die Inventoroberfläche geht es nicht, außer die fügst in deiner Vorlage eine Ansicht ein, referenzierst das dort bereits angelegte benutzerdefinierte iProp "BlechAbmessungen" und löschst anschließend die Ansicht wieder. Wenn ich mich recht erinnere setzt Inventor dabei den Zähler für Ansichten eins hoch. Jede von der Vorlage erzeugte Zeichnung beginnt dann mit Ansicht 2 oder B.  Es gab mal eine Diskussion ob und wie man diesen Zähler zurücksetzen könnte, aber ich hab vergessen wie das damals ausgegangen ist.

Plan "B" wäre deine Schriftfelddefinition mit der vorhandenen TextBox für das "Manager" iProp über die API umzuschreiben auf das benutzerdefinierte iProp "BlechAbmessungen". Interessanterweise meckert Inventor nicht, wenn das iProp gar nicht existiert. Das Feld bleibt im Schriftfeld einfach leer, so wie man es erwarten würde. Sobald es im verknüpften Modell erscheint, wird der Inhalt auch übernommen. In der Zeichnung mal die folgende Regel ausführen. Textformatierungen wir Farbe, fett, kursiv usw. sollten erhalten bleiben.

Code:

Option Explicit on

Dim oDrawDoc As DrawingDocument=ThisDrawing.Document

Dim oTBdef As TitleBlockDefinition
For Each oTBdef In oDrawDoc.TitleBlockDefinitions
    If oTBdef.Name = "test" Then Exit For ' <----------------------- Schriftfeldname anpassen
Next
   
If oTBdef Is Nothing Then Exit Sub

Dim oSK As DrawingSketch

Call oTBdef.Edit(oSK)

Dim oTB As TextBox
For Each oTB In oSK.TextBoxes
    If InStr(oTB.FormattedText, "<Property Document='model' FormatID='{D5CDD502-2E9C-101B-9397-08002B2CF9AE}' PropertyID='14'>MANAGER</Property>") Then
        oTB.FormattedText = Replace(oTB.FormattedText, "<Property Document='model' FormatID='{D5CDD502-2E9C-101B-9397-08002B2CF9AE}' PropertyID='14'>MANAGER</Property>", _
"<Property Document='model' PropertySet='User Defined Properties' Property='BlechAbmessungen' FormatID='{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'>BlechAbmessungen</Property>")
        Exit For
    End If
Next

Call oTBdef.ExitEdit(True)


In deiner anderen Regel musst du die Erstellung des iProps "BlechAbmessungen" noch ergänzen. Die Zeile:

Code:
iProperties.Value("Summary", "Manager") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"

ändern in:

Code:
iProperties.Value("Custom", "BlechAbmessungen") = "=Bl <Stärke>x<BlechLänge>x<BlechBreite>"

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

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)2025 CAD.de | Impressum | Datenschutz