| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für NX | | |  | Solid Edge: Erste Schritte, ein Webinar am 26.09.2025
|
Autor
|
Thema: Attribute mit Ausdrücke verknüpfen (2141 / mal gelesen)
|
S-TE-FAN Mitglied Konstrukteur

 Beiträge: 28 Registriert: 23.04.2015 Inventor Pro SolidWorks Siemens NX 1973 ANSYS Workbench 19.0 System: Win 10, 64-Bit i5-9600KFU@3,7GHz 32 GB RAM
|
erstellt am: 27. Mai. 2021 16:26 <-- editieren / zitieren --> Unities abgeben:         
Hi zusammen, ich versuche / bastel seit geraumer Zeit daran via VBA-Journal Attribute und Ausdrücke zu erstellen. Die Werte der Attribute sollen dabei den Werten der Ausdrücke entsprechen. Ein Beispiel: Das Attribut "Bauteilnummer_Test" soll dem Wert des Ausdruckes "expression1" bekommen. Der Ausdruck selbst generiert sich aus dem Dateinamen. 'Ausdruck erstellen Dim expression1 As NXOpen.Expression = Nothing expression1 = workPart.Expressions.CreateExpression("String", "Testausdruck=subString(ug_askCurrentWorkPart(),1,18)") 'Attribut erstellen workPart.SetAttribute("Bauteilnummer_Test", expression1) Was mir fehlt ist die richtige Verknüpfung zwischen dem Attribut und dem Ausdruck bzw. wie kann ich dem Attribut sagen, dass er ein Ausdruck als Wert nehmen soll? Wäre für jeden Tipp sehr dankbar, aber bitte so das es eine Leihe versteht. Beste Grüße, Stefan ------------------ VG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kevin17 Mitglied
 Beiträge: 7 Registriert: 27.05.2021
|
erstellt am: 27. Mai. 2021 17:39 <-- editieren / zitieren --> Unities abgeben:          Nur für S-TE-FAN
Hallo, hierzu unterhalb ein Ausschnitt aus einem meiner Codes: 'Attribut erstellen mit Titel "Bauteilnummer_Test" und Wert des Ausdrucks "expression1" (assoziativ) Code: Dim objects_Attr(0) As NXObject objects_Attr(0) = workPart Dim attributePropertiesBuilder_PartDim As AttributePropertiesBuilder = theSession.AttributeManager.CreateAttributePropertiesBuilder(workPart, objects_Attr, AttributePropertiesBuilder.OperationType.None)attributePropertiesBuilder_PartDim.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String attributePropertiesBuilder_PartDim.Title = "Bauteilnummer_Test" attributePropertiesBuilder_PartDim.StringValue = "" attributePropertiesBuilder_PartDim.Expression = expression1 attributePropertiesBuilder_PartDim.CreateAttribute() Dim nXObjectAttr As NXObject nXObjectAttr = attributePropertiesBuilder_PartDim.Commit() attributePropertiesBuilder_PartDim.Destroy()
Beste Grüße, Kevin [Diese Nachricht wurde von Kevin17 am 27. Mai. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
S-TE-FAN Mitglied Konstrukteur

 Beiträge: 28 Registriert: 23.04.2015 Inventor Pro SolidWorks Siemens NX 1973 ANSYS Workbench 19.0 System: Win 10, 64-Bit i5-9600KFU@3,7GHz 32 GB RAM
|
erstellt am: 28. Mai. 2021 16:24 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Kevin17: Hallo,hierzu unterhalb ein Ausschnitt aus einem meiner Codes: 'Attribut erstellen mit Titel "Bauteilnummer_Test" und Wert des Ausdrucks "expression1" (assoziativ) Code: Dim objects_Attr(0) As NXObject objects_Attr(0) = workPart Dim attributePropertiesBuilder_PartDim As AttributePropertiesBuilder = theSession.AttributeManager.CreateAttributePropertiesBuilder(workPart, objects_Attr, AttributePropertiesBuilder.OperationType.None)attributePropertiesBuilder_PartDim.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String attributePropertiesBuilder_PartDim.Title = "Bauteilnummer_Test" attributePropertiesBuilder_PartDim.StringValue = "" attributePropertiesBuilder_PartDim.Expression = expression1 attributePropertiesBuilder_PartDim.CreateAttribute() Dim nXObjectAttr As NXObject nXObjectAttr = attributePropertiesBuilder_PartDim.Commit() attributePropertiesBuilder_PartDim.Destroy()
Beste Grüße, Kevin [Diese Nachricht wurde von Kevin17 am 27. Mai. 2021 editiert.]
Hey Kevin, besten Dank für deine Rückmeldung. Der erste Testversuch hat geklappt und nun hänge ich am nächsten Rätsel. Ein Wert für einen Ausdruck ist wie folgt: replaceString(subString(ug_askCurrentWorkPart(),20,50),".prt","") Hierfür bekomme ich leider einen Syntaxfehler, vermutlich wegen den zusätzlichen "". Daher dachte ich, dass ich es eventuell so lösen kann: Dim prt As String = (".prt") Dim kom As String = (",") Dim klam As String = (")") Dim exp1 As string = ("replaceString(subString(ug_askCurrentWorkPart(),20,50)," + prt + kom +klam) expBenSuf = workPart.Expressions.CreateExpression("String", "expBenSuf="+exp1) Aber leider auch Fehlanzeige. Hast du noch eine andere Idee? Beste Grüße, Stefan ------------------ VG Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kevin17 Mitglied
 Beiträge: 7 Registriert: 27.05.2021
|
erstellt am: 28. Mai. 2021 17:20 <-- editieren / zitieren --> Unities abgeben:          Nur für S-TE-FAN
|
geraldb Mitglied

 Beiträge: 40 Registriert: 13.09.2008
|
erstellt am: 28. Mai. 2021 20:19 <-- editieren / zitieren --> Unities abgeben:          Nur für S-TE-FAN
Sofern ich es richtig interpretiere geht es mit SubString und ReplaceString doch darum den Modelnamen ohne das ".prt" zu erhalten. Da würde ich stattdessen sowas schreiben: Code:
Dim exp1 As String = ug_askCurrentWorkPart().Replace(".prt", "") 'falls mehrere .prt im Namen vorkommen werden alle entfernt, Groß-/Kleinschreibung relevant
oder Code:
Dim exp1 As String = ug_askCurrentWorkPart().TrimEnd(".prt") 'nur am Ende wegschneiden
oder fehlertoleranter bezüglich Groß-/Kleinschreibung: Code:
Dim exp1 As string = ug_askCurrentWorkPart() If exp1.ToLower().EndsWith(".prt") Then exp1 = exp1.SubString(0, exp1.Length - 4) '4 = 4 Zeichen für .prt entfernen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
S-TE-FAN Mitglied Konstrukteur

 Beiträge: 28 Registriert: 23.04.2015 Inventor Pro SolidWorks Siemens NX 1973 ANSYS Workbench 19.0 System: Win 10, 64-Bit i5-9600KFU@3,7GHz 32 GB RAM
|
erstellt am: 31. Mai. 2021 08:08 <-- editieren / zitieren --> Unities abgeben:         
|

| |
S-TE-FAN Mitglied Konstrukteur

 Beiträge: 28 Registriert: 23.04.2015 Inventor Pro SolidWorks Siemens NX 1973 ANSYS Workbench 19.0 System: Win 10, 64-Bit i5-9600KFU@3,7GHz 32 GB RAM
|
erstellt am: 10. Jun. 2021 16:06 <-- editieren / zitieren --> Unities abgeben:         
Hallo zusammen! Ich hab wieder etwas Zeit gefunden mich dieser Thematik auseinander zu setzen. Dabei ist mit eurer Hilfe und dieser hier folgender Code heraus gekommen: Code: Imports System Imports NXOpen Imports NXOpen.UFModule NXJournal Sub Main (ByVal args() As String) Dim theSession As Session = Session.GetSession() Dim theUI As UI = UI.GetUI() Dim workPart As Part = theSession.Parts.Work Dim lw As ListingWindow = theSession.ListingWindow lw.Open() Dim expBauBen As NXOpen.Expression = Nothing Dim expBauNum As NXOpen.Expression = Nothing Dim expBauGew As NXOpen.Expression = Nothing Dim expSysMass As NXOpen.Expression = Nothing 'Bauteilnummer Dim expBauNumValue As String expBauNumValue = "subString(ug_askCurrentWorkPart(),1,18)"
'Benennung Dim prt As String = ".prt" Dim kom As String = "," Dim klam As String = ")" Dim expBauBenValue As String = "replaceString(subString(ug_askCurrentWorkPart(),20,50)," & """" & prt & """" & kom & """" & """" & klam ' Originale Schreibweise: replaceString(subString(ug_askCurrentWorkPart(),20,50),".prt","")
'Bauteilgewicht Dim expBauGewValue As String expBauGewValue = "format(" & """" & "%0.2f" & """" & kom & "NX_Mass" & klam Try 'Systemattribut expSysMass = workPart.Expressions.CreateSystemExpressionFromReferenceString("<W@NX_MASS>") 'create expression, type: String 'add double quotes around the string value expBauBen = workPart.Expressions.CreateExpression("String", "Bauteilname_Test = " & expBauBenValue) expBauNum = workPart.Expressions.CreateExpression("String", "Bauteilnummer_Test = " & expBauNumValue) expBauGew = workPart.Expressions.CreateExpression("String", "Bauteilgewicht_Test = " & expBauGewValue) 'another alternative: add the double quotes into the inital string value 'exp4Value = """Hello, NX programmers!""" 'exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = " & exp4Value) 'or, pass in a string literal 'exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = ""Hello, NX programmers!""") 'exp_4 = workPart.Expressions.CreateExpression("String", "NXJ_4 = " & Chr(34) & "Hello, NX programmers!" & Chr(34)) 'Dem Ausdruck einen Kommentar zuweisen 'exp_4.EditComment("greetings") 'Setze Attribute 'workPart.SetAttribute("Artikelnummer_Test")' Artikelnummer / Kein Wert --> Userinput 'workPart.SetAttribute("Benennung_Test") ' Benennung = Ausdruck für hintern substring = replaceString(subString(ug_askCurrentWorkPart(),20,50),".prt","") 'workPart.SetAttribute("Bauteilnummer_Test") ' Bauteilnummer = Ausdruck für vorderen substring = subString(ug_askCurrentWorkPart(),1,18) 'workPart.SetAttribute("Gewicht_Test") ' Gewicht = formatierte NX_Mass / Systemattribut 'Setze Attribute workPart.SetAttribute("Artikelnummer_Test", "TBD")' Artikelnummer / Kein Wert --> Userinput 'Setze Attribute und verknüpfe Werte der Ausdrücke mit Attributen Dim objects_Attr2(0) As NXObject objects_Attr2(0) = workPart Dim attributePropertiesBuilder_PartDim As AttributePropertiesBuilder = theSession.AttributeManager.CreateAttributePropertiesBuilder(workPart, objects_Attr2, AttributePropertiesBuilder.OperationType.None) attributePropertiesBuilder_PartDim.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String attributePropertiesBuilder_PartDim.Title = "Benennung_Test" attributePropertiesBuilder_PartDim.StringValue = "" attributePropertiesBuilder_PartDim.Expression = expBauBen attributePropertiesBuilder_PartDim.CreateAttribute() attributePropertiesBuilder_PartDim.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String attributePropertiesBuilder_PartDim.Title = "Bauteilnummer_Test" attributePropertiesBuilder_PartDim.StringValue = "" attributePropertiesBuilder_PartDim.Expression = expBauNum attributePropertiesBuilder_PartDim.CreateAttribute() attributePropertiesBuilder_PartDim.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String attributePropertiesBuilder_PartDim.Title = "Gewicht_Test" attributePropertiesBuilder_PartDim.StringValue = "" attributePropertiesBuilder_PartDim.Expression = expBauGew attributePropertiesBuilder_PartDim.CreateAttribute()
Dim nXObjectAttr As NXObject nXObjectAttr = attributePropertiesBuilder_PartDim.Commit() attributePropertiesBuilder_PartDim.Destroy() Catch ex As NXException If ex.ErrorCode = 1050017 Then 'expression already exists expBauNum = workPart.Expressions.FindObject("Bauteilnummer_Test") expBauBen = workPart.Expressions.FindObject("Benennung_Test") expBauGew = workPart.Expressions.FindObject("Bauteilgewicht_Test") Else 'other error lw.WriteLine("NX exception: " & ex.ErrorCode & ", " & ex.Message) End If End Try End Sub Public Function GetUnloadOption(ByVal dummy As String) As Integer GetUnloadOption = UFConstants.UF_UNLOAD_IMMEDIATELY End Function End Module
Bei mir hat es soweit alles funktioniert, wie es sein sollte. Bzgl. der Benennung und der Vorgeschichte hatte ich bereits hier einen Thread, falls es jemanden interessiert.  Besten Dank nochmal euch Beiden! 
------------------ VG Stefan
[Diese Nachricht wurde von S-TE-FAN am 10. Jun. 2021 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |