Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  iLogic if then Regel einbauen

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 if then Regel einbauen (2001 / mal gelesen)
phiko
Mitglied



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

Beiträge: 43
Registriert: 20.04.2005

erstellt am: 01. Mrz. 2021 15:17    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 iLogic Profis

Vorab, iLogic ist für mich absolut Neuland.
Zu meinem Problem: In einem Zeichnungskopf (*.idw) kommt die Revisionsnummer zwei mal vor. Ich möchte aber die eine Revisionsnummer nur darstellen, wenn die Revisionsnummer > 0 ist. Dazu möchte ich keine zusätzlichen Variablen in den iProperties erstellen.
Für "REVISIONSNUMMER" gibt es ein iPropertie

Ich stelle mir das ungefähr so vor (dabei ist "xx" der Wert der durch die Revisonsnummer ersetzt werden soll wenn sie grösser Null ist):

If REVISIONSNUMMER > 0 Then
Replace("xx", REVISIONSNUMMER, True)
Else
Replace ("xx", "-", True)
End If

(Ich weiss da stimmt vieles nicht; aber nur so zum Verständnis was ich machen möchte)

Vielen Dank für Eure Hilfe
Gruss Philipp

PS: Ich weiss, dass es auch Revisionstabellen gibt; möchte es aber nicht so lösen.

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

Windows 10 x64, AIP 2023

erstellt am: 02. Mrz. 2021 11: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 Nur für phiko 10 Unities + Antwort hilfreich

Hallo

Für deine Vorgehensweise müsstest du die Schriftfelddefinition bearbeiten. Jedes Mal iProp löschen und durch normalen Text ersetzen und umgekehrt. Grundsätzlich möglich, aber da Textboxen selbst keinen eindeutigen Namen haben, ist schon das Finden der richtigen TextBox ein Problem. Es gibt zwar eine Möglichkeit eindeutige Namen über Attribute zu vergeben, aber das führt jetzt zu weit.
Im Ausgangszustand gibt es bei dir zwei Textboxen die das iProp Revisionsnummer enthalten. Welche von beiden ist die zweite, die geändert werden soll?

Mein Vorschlag:
Editiere dein Schriftfeld und ersetze dein zweites iProp Revisionsnummer durch eine angeforderte Eingabe "RevNr". Nimm die folgende iLogic Regel. Füge diese Regel in den Ereignisauslöser "iProperty-Änderung" und/oder "Vor dem Speichern" hinzu.

Code:

Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.ActiveDocument

Dim oSheet As Sheet
Dim oTitleBlock As TitleBlock
Dim oTextBoxes As TextBoxes
Dim oTextBox As TextBox

For Each oSheet In oDrawDoc.Sheets
    oTitleBlock = oSheet.TitleBlock
    oTextBoxes = oTitleBlock.Definition.Sketch.TextBoxes
    For Each oTextBox In oTitleBlock.Definition.Sketch.TextBoxes
        If oTextBox.Text = "RevNr" Then
            If iProperties.Value("Project", "Revision Number") > 0 Then
                Call oTitleBlock.SetPromptResultText(oTextBox, iProperties.Value("Project", "Revision Number"))
            Else
                Call oTitleBlock.SetPromptResultText(oTextBox, "xx")
            End If
        End If
    Next
Next

InventorVb.DocumentUpdate()



Alternativ könntest du in der zweiten Textbox einen eindeutigen Text voranstellen, der immer drin bleibt. z.B.: "RevNr.: " gefolgt von der Revisionsnummer (einfach als Text) oder xx. Dann würde folgender Code funktionieren.


Code:

Try
ThisApplication.ScreenUpdating = False

Dim oDrawDoc As DrawingDocument
oDrawDoc = ThisApplication.ActiveDocument

Dim oSheet As Sheet
oSheet = oDrawDoc.ActiveSheet

Dim oTitleBlock As TitleBlock
oTitleBlock = oSheet.TitleBlock

Dim oTextBoxes As TextBoxes
oTextBoxes = oTitleBlock.Definition.Sketch.TextBoxes

Dim oDefSketch As DrawingSketch
Call oTitleBlock.Definition.Edit(oDefSketch)

Dim oTextBox As TextBox
For Each oTextBox In oDefSketch.TextBoxes
    If Left(oTextBox.Text, 7) = "RevNr.:" Then
        If iProperties.Value("Project", "Revision Number") > 0 Then
            oTextBox.Text = "RevNr.: " & iProperties.Value("Project", "Revision Number")
        Else
            oTextBox.Text = "RevNr.: xx"
        End If
    End If
Next

Call oTitleBlock.Definition.ExitEdit(True)

Catch ex As Exception
Call ThisApplication.ActiveDocument.ActiveSheet.TitleBlock.Definition.ExitEdit(False)
MsgBox( ex.Message,vbCritical,"Fehler Update TitleBlock")
Finally
ThisApplication.ScreenUpdating = True
End Try


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

RKW Solutions GmbH
www.RKW-Solutions.com

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

phiko
Mitglied



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

Beiträge: 43
Registriert: 20.04.2005

erstellt am: 03. Mrz. 2021 08: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

Vielen Dank für Deine Mühe und Lösungsvarianten.

Leider haben beide nicht richtig funktioniert.
→ Fehlermeldung: Falscher Parameter. (Ausnahme von HRESULT: 0x80070057 (E_INVALIDARG))

Da ich das gleiche aber noch mit Datum und Visum machen möchte wird es zu kompliziert. Ich lasse es halt so wie es ist und stelle die Revisionsnummer zweimal dar.
Trotzdem herzlichen Dank.

Gruss
Philipp

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

Windows 10 x64, AIP 2023

erstellt am: 03. Mrz. 2021 10: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 phiko 10 Unities + Antwort hilfreich

Moin

Ich habe beide Varianten ausprobiert mit den Voraussetzungen die ich im letzten Post genannt habe. Das lief fehlerfrei. Welche Inventorversion nutzt du? Kannst du mal bei dem Fehler den Reiter "weitere Infos" aktivieren und den ausführlichen Fehlerinhalt posten?
Das Ganze um zwei weitere Einträge zu erweitern ist eher das kleinere Problem. Wobei ich dann schon anfange über eine zweite Schriftfelddefinition nachzudenken und das jeweils passende einzufügen.
Was an 20 Zeilen Copy'n Paste zu kompliziert ist verstehe ich nicht. Wenn dir das schon zu viel ist, kann ich dir auch nicht helfen.

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

RKW Solutions GmbH
www.RKW-Solutions.com

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

phiko
Mitglied



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

Beiträge: 43
Registriert: 20.04.2005

erstellt am: 09. Mrz. 2021 13:13    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


iLogicTest.pdf

 
Hallo Ralf

Wir nutzen Inventor 2020.
Mit "kompliziert" meinte ich das Erweitern auf Datum und Visum.

Ich habs nochmals probiert. Diesmal kam keine Fehlermeldung , hat aber nicht so funktioniert wie ich mir das vorstelle. Im Anhang aber nochmals das was ich mir eigentlich vorgestellt habe.
Die Fage ist noch was ich in die oberste Zeile einfügen muss. Nur "RevNr." als Text? Bei Ausgabe ist ja ein iProperty namens "Revisionsnummer" drin. Dies hatte ich anfangs auch in der obersten Zeile daum kam logischerweise auch die Ausgabe 0 wenn unten 0 steht.

Gruss
Philipp

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

Windows 10 x64, AIP 2023

erstellt am: 09. Mrz. 2021 22:55    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 phiko 10 Unities + Antwort hilfreich

Hallo

Kompliziert ist relativ. Ich gehe davon aus, das die benutzerdefinierten iProperties, die als Quelle genutzt werden, Revisionsnummer, Datum und Visum heißen. Gegebenenfalls müssen wir hier noch anpassen.
Um die Textboxen im Schriftfeld eindeutig und sicher zu identifizieren, nutzen wir doch am Besten Attribute. Die müssen einmal gesetzt werden. Erstelle in deinem Schriftfeld die drei Textfelder und schreib irgendwelchen Text als Platzhalter (Ich hab a,b und c genommen) rein. Der wird im Verlauf der Einrichtung wieder gelöscht, aber meines Wissens läßt Inventor keine komplett leeren Textfelder erstellen. Speicher das Schriftfeld. Erstelle eine iLogic Regel "SetAttributes", füge folgenden Code ein und führe sie aus. Klicke der Reihe nach die drei Textfelder an, das Script erzeugt die Attribute.

Code:

' iLogic Regel SetAttributes
' einer TextBox im Schriftfeld Attribute verpassen

Const sAttrSetName As String = "RKW" '<--- AttributeSets sollten einen eindeutigen Namen haben. Hier könnte z.B. euer Firmenname stehen. Muss im zweiten Script mitgepflegt werden.
Const sAttrName As String = "TextBoxName" '<--- Attribute sollten einen eindeutigen Namen haben.

Dim oApp As Inventor.Application
oApp = ThisApplication

Dim oDrawDoc As DrawingDocument
oDrawDoc = oApp.ActiveDocument

Dim oTitleBlock As TitleBlock
oTitleBlock = oDrawDoc.ActiveSheet.TitleBlock

Dim oDrawSketch As DrawingSketch

If Not oApp.ActiveEnvironment.InternalName = "DLxDrawingSketchEnvironment" Then Call oTitleBlock.Definition.Edit(oDrawSketch)

Dim oAttrSet As AttributeSet
Dim oAttr As Inventor.Attribute
Dim oTextBox As TextBox

'Attribut Revisionsnummer
oTextBox = oApp.CommandManager.Pick(kSketchTextBoxFilter, "Bitte TextBox für die Revisionsnummer auswählen.")

If oTextBox Is Nothing Then GoTo Ende 'User hat mit ESC Auswahl gecancelt

If oTextBox.AttributeSets.NameIsUsed(sAttrSetName) Then
    oAttrSet = oTextBox.AttributeSets.Item(sAttrSetName)
Else
    oAttrSet = oTextBox.AttributeSets.Add(sAttrSetName, True)
End If

If oAttrSet.NameIsUsed(sAttrName) Then
    oAttr = oAttrSet.Item(sAttrName)
Else
    oAttr = oAttrSet.Add(sAttrName, kStringType, "")
End If

oAttr.Value = "Revisionsnummer"

'Attribut Datum
oTextBox = oApp.CommandManager.Pick(kSketchTextBoxFilter, "Bitte TextBox für das Datum auswählen.")

If oTextBox Is Nothing Then GoTo Ende 'User hat mit ESC Auswahl gecancelt

If oTextBox.AttributeSets.NameIsUsed(sAttrSetName) Then
    oAttrSet = oTextBox.AttributeSets.Item(sAttrSetName)
Else
    oAttrSet = oTextBox.AttributeSets.Add(sAttrSetName, True)
End If

If oAttrSet.NameIsUsed(sAttrName) Then
    oAttr = oAttrSet.Item(sAttrName)
Else
    oAttr = oAttrSet.Add(sAttrName, kStringType, "")
End If

oAttr.Value = "Datum"

'Attribut Visum
oTextBox = oApp.CommandManager.Pick(kSketchTextBoxFilter, "Bitte TextBox für Visum auswählen.")

If oTextBox Is Nothing Then GoTo Ende 'User hat mit ESC Auswahl gecancelt

If oTextBox.AttributeSets.NameIsUsed(sAttrSetName) Then
    oAttrSet = oTextBox.AttributeSets.Item(sAttrSetName)
Else
    oAttrSet = oTextBox.AttributeSets.Add(sAttrSetName, True)
End If

If oAttrSet.NameIsUsed(sAttrName) Then
    oAttr = oAttrSet.Item(sAttrName)
Else
    oAttr = oAttrSet.Add(sAttrName, kStringType, "")
End If

oAttr.Value = "Visum"


Ende:
Call oTitleBlock.Definition.ExitEdit(True)


Die drei Attribute sind gesetzt, das Script wird theoretisch nicht mehr benötigt. Außer man will erstmal nur testen und später in die echte Vorlage übertragen. Jetzt erstelle eine zweite iLogic Regel "UpdateTitleBlock" und füg den unten stehenden Code ein.
Auf dem RibbonTab "Verwalten", im Panel "iLogic" den Button "Ereignisauslöser" klicken. Die Regel "UpdateTitleBlock" per Drag'n Drop auf das Ereignis "iProperty-Änderung" ziehen und speichern.
Ab jetzt sollte das funktionieren.


Code:

' iLogic Regel UpdateTitleBlock
' aktualisiert ein Textfeld
' Attribute zur Identifizierung genutzt

Const sAttrSetName As String = "RKW" '<--- AttributeSets sollten einen eindeutigen Namen haben
Const sAttrName As String = "TextBoxName" '<--- Attribute sollten einen eindeutigen Namen haben
Const iPropRevNr As String = "Revisionsnummer" '<--- Name des benutzerdefinierten iProps, aus dem die Revisionsnummer gelesen wird
Const iPropDatum As String= "Datum" '<--- Name des benutzerdefinierten iProps, aus dem das Datum gelesen wird
Const iPropVisum As String = "Visum" '<--- Name des benutzerdefinierten iProps, aus dem Visum gelesen wird


Dim oApp As Inventor.Application
oApp = ThisApplication

Dim oDrawDoc As DrawingDocument
oDrawDoc = oApp.ActiveDocument

Dim oSheet As Sheet
oSheet = oDrawDoc.ActiveSheet

Dim oTitleBlock As TitleBlock
oTitleBlock = oSheet.TitleBlock

Dim oTextBoxes As TextBoxes
oTextBoxes = oTitleBlock.Definition.Sketch.TextBoxes
   
Dim oDefSketch As DrawingSketch
Call oTitleBlock.Definition.Edit(oDefSketch)

Dim oTextBox As Inventor.TextBox
Dim oAttrSet As AttributeSet
Dim oAttr As Inventor.Attribute

For Each oTextBox In oDefSketch.TextBoxes
    If oTextBox.AttributeSets.NameIsUsed(sAttrSetName) Then
        oAttrSet = oTextBox.AttributeSets.Item(sAttrSetName)
        If oAttrSet.NameIsUsed(sAttrName) Then
            oAttr = oAttrSet.Item(sAttrName)
            Select Case oAttr.Value
            Case "Revisionsnummer":
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 Then
                                        oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value
                                    Else
                                        oTextBox.Text = " "
                                    End If
            Case "Visum":
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 _
And Not oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropVisum).Value = "" Then
                                        oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropVisum).Value
                                    Else
                                        oTextBox.Text = " "
                                    End If
            Case "Datum":
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 _
And Not oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropDatum).Value = #1/1/1601# Then
                                        oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropDatum).Value
                                    Else
                                        oTextBox.Text = " "
                                    End If
            End Select
        End If
    End If
Next

Call oTitleBlock.Definition.ExitEdit(True)



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

RKW Solutions GmbH
www.RKW-Solutions.com

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

phiko
Mitglied



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

Beiträge: 43
Registriert: 20.04.2005

erstellt am: 12. Mrz. 2021 09:51    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 erneut für deine Mühe.
Ich habe das mal so umgesetzt wie von dir vorgeschlagen beide iLogic-Regeln erstellt und ausgeführt. Das Vergeben der Attribute hat funktioniert. Sollen diese dann in den iProperties erscheinen? Wenn ja, hat das doch nicht funktioniert.
Die iProperties für Datum und Visum heissen "Freigegeben am" und "Freigegeben von". Ich habe dies so in deinem Code überall geändert.

Trotzdem erscheint bei der Ausführung der Regel folgende Fehlermeldung (während dem, dass das Bearbeiten des Schriftfeldes öffnet):

Fehler in Regel: UpdateTitleBlock in Dokument: E0000978.idw
Unbekannter Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL))

Weitere Infos:
System.Runtime.InteropServices.COMException (0x80004005): Unbekannter Fehler (Ausnahme von HRESULT: 0x80004005 (E_FAIL))
  bei System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
  bei Inventor.PropertySet.get_Item(Object Index)
  bei ThisRule.Main()
  bei Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem)
  bei iLogic.RuleEvalContainer.ExecRuleEval(String execRule)

Diese Meldung muss ich viermal bestätigen.
Was habe ich falsch gemacht?

Sichtbar ist im Schriftkopf a, b, und c. Vor und nach dem Ausführen der Regeln.

mfg
Philipp

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

Windows 10 x64, AIP 2023

erstellt am: 12. Mrz. 2021 13:13    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 phiko 10 Unities + Antwort hilfreich

Hallo

Nein, Attribute sind über die normale GUI von Inventor nicht sichtbar/bearbeitbar.
Existieren die drei benutzerdefinierten iProperties? Es wird nicht geprüft, ob die vorhanden sind, daher kann das schon der Auslöser sein. Revisionsnummer muss existieren und entweder 0 oder den jeweiligen Revisionsstand enthalten. Ansonsten muss der Code angepasst werden. Freigegeben am muss ein iPropertie vom Typ Datum sein, darf aber deaktiviert werden (Häkchen raus). Das wird intern durch den Wert 01.01.1601 dargestellt. Freigegeben von ist ein iPropertie vom Typ Text und kann leer sein.

EDIT: Script etwas überarbeitet, damit fehlende iProps mit Defaultwerten erstellt werden.

Code:

Sub Main()

' iLogic Regel UpdateTitleBlock
' aktualisiert ein Textfeld
' Attribute zur Identifizierung genutzt

Const sAttrSetName As String = "RKW" '<--- AttributeSets sollten einen eindeutigen Namen haben
Const sAttrName As String = "TextBoxName" '<--- Attribute sollten einen eindeutigen Namen haben
Const iPropRevNr As String = "Revisionsnummer" '<--- Name des benutzerdefinierten iProps, aus dem die Revisionsnummer gelesen wird
Const iPropDatum As String= "Freigegeben am" '<--- Name des benutzerdefinierten iProps, aus dem das Datum gelesen wird
Const iPropVisum As String = "Freigegeben von" '<--- Name des benutzerdefinierten iProps, aus dem Visum gelesen wird


Dim oApp As Inventor.Application
oApp = ThisApplication

Dim oDrawDoc As DrawingDocument
oDrawDoc = oApp.ActiveDocument

Call AddProp(oDrawDoc, iPropRevNr, "Number")
Call AddProp(oDrawDoc, iPropDatum, "Date")
Call AddProp(oDrawDoc, iPropVisum, "String")

Dim oSheet As Sheet
oSheet = oDrawDoc.ActiveSheet

Dim oTitleBlock As TitleBlock
oTitleBlock = oSheet.TitleBlock

Dim oTextBoxes As TextBoxes
oTextBoxes = oTitleBlock.Definition.Sketch.TextBoxes
 
Dim oDefSketch As DrawingSketch
Call oTitleBlock.Definition.Edit(oDefSketch)

Dim oTextBox As Inventor.TextBox
Dim oAttrSet As AttributeSet
Dim oAttr As Inventor.Attribute

For Each oTextBox In oDefSketch.TextBoxes
    If oTextBox.AttributeSets.NameIsUsed(sAttrSetName) Then
        oAttrSet = oTextBox.AttributeSets.Item(sAttrSetName)
        If oAttrSet.NameIsUsed(sAttrName) Then
            oAttr = oAttrSet.Item(sAttrName)
            Select Case oAttr.Value
            Case "Revisionsnummer" :
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 Then
                                        oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value
                                    Else
                                        oTextBox.Text = " "
                                    End If
            Case "Visum" :
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 And Not oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropVisum).Value = "" Then
                                        oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropVisum).Value
                                    Else
                                        oTextBox.Text = " "
                                    End If
            Case "Datum" :
                                    If oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropRevNr).Value > 0 And Not oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropDatum).Expression = "" Then
oTextBox.Text = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}").Item(iPropDatum).Expression
                                    Else
                                        oTextBox.Text = " "
                                    End If
            End Select
        End If
    End If
Next

Call oTitleBlock.Definition.ExitEdit(True)

End Sub

Private Sub AddProp(ByVal oDrawDoc As DrawingDocument, ByVal sPropName As String, ByVal sPropType As String)
Try
    Dim oPropSet As PropertySet
    oPropSet = oDrawDoc.PropertySets.Item("{D5CDD505-2E9C-101B-9397-08002B2CF9AE}")
   
    Select Case sPropType
        Case "String":
                        Call oPropSet.Add("", sPropName)
        Case "Number":
                        Call oPropSet.Add(0, sPropName)
        Case "Date":
                        Call oPropSet.Add(CDate(#1/1/1601#), sPropName)
        End Select
Catch

End Try
End Sub




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

RKW Solutions GmbH
www.RKW-Solutions.com

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

phiko
Mitglied



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

Beiträge: 43
Registriert: 20.04.2005

erstellt am: 15. Mrz. 2021 10:52    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

Wow, hat funktioniert bei Ausgabe 0. → Die Zeile ist leer. Kompliment!

Bei Ausgabe 2 bleibt aber Revision/ Datum/ Visum auch leer. Wir kommen der Sache näher 

Ein kleiner Schönheitsfehler ist noch dabei. Beim Speichern wechselt Inventor kurz in den Bearbeitungsmodus der Schriftfelder und wieder zurück. Muss wohl so sein, oder?

Gruss
Philipp

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

Windows 10 x64, AIP 2023

erstellt am: 15. Mrz. 2021 13:16    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 phiko 10 Unities + Antwort hilfreich

Hallo

Ja, man muss den Bearbeitungsmodus aktivieren, sonst kann man die Textfelder nicht bearbeiten. Jedenfalls habe ich zwischen einer Fehlermeldung und einem Inventorabsturz so ziemlich alles produziert beim Versuch es ohne zu probieren.  Wenn das mal stabil und fehlerfrei läuft kann man das ScreenUpdating ausschalten, dann sieht der User nichts von dem Wechsel. Wenn's stört kann man das aktivieren. Tritt dann unerwartet ein Fehler auf, kann es sein, dass dieser "Standbildmodus" aktiv bleibt. Dann kannst Inventor nur noch ohne Speichern über den Taskmanager abschießen. Daher bin ich in VBA etwas vorsichtig mit der Verwendung der Option.

Das Script unterscheidet anhand des benutzerdefinierten iProps "Revisionsnummer" ob nichts eingetragen wird oder die Werte. Heißt das iProp jetzt Ausgabe? 

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

RKW Solutions GmbH
www.RKW-Solutions.com

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