Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Attribute mit Ausdrücke verknüpfen

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 NX
Autor Thema:  Attribute mit Ausdrücke verknüpfen (238 mal gelesen)
S-TE-FAN
Mitglied
Konstrukteur


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

Beiträge: 20
Registriert: 23.04.2015

Inventor Pro
SolidWorks
Siemens NX 1953
ANSYS Workbench 19.0
System:
Win 10, 64-Bit
i5-9600KFU@3,7GHz
32 GB RAM

erstellt am: 27. Mai. 2021 16: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

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


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

Beiträge: 2
Registriert: 27.05.2021

erstellt am: 27. Mai. 2021 17:39    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 S-TE-FAN 10 Unities + Antwort hilfreich

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


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

Beiträge: 20
Registriert: 23.04.2015

Inventor Pro
SolidWorks
Siemens NX 1953
ANSYS Workbench 19.0
System:
Win 10, 64-Bit
i5-9600KFU@3,7GHz
32 GB RAM

erstellt am: 28. Mai. 2021 16:24    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

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


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

Beiträge: 2
Registriert: 27.05.2021

erstellt am: 28. Mai. 2021 17:20    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 S-TE-FAN 10 Unities + Antwort hilfreich


test.png

 
Hallo Stefan,

wenn ich deinen Code eingebe, bekomm ich das ".prt" aber abgespalten --> siehe Anhang.

replacestring(substring(ug_askCurrentWorkPart(),1,50),".prt","")

Beste Grüße
Kevin

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

geraldb
Mitglied



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

Beiträge: 35
Registriert: 13.09.2008

erstellt am: 28. Mai. 2021 20:19    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 S-TE-FAN 10 Unities + Antwort hilfreich

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


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

Beiträge: 20
Registriert: 23.04.2015

Inventor Pro
SolidWorks
Siemens NX 1953
ANSYS Workbench 19.0
System:
Win 10, 64-Bit
i5-9600KFU@3,7GHz
32 GB RAM

erstellt am: 31. Mai. 2021 08: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

Besten Dank euch beiden schon mal für die Antworten! Ich schaue es mir an und melde mich schnellstmöglich wieder zurück. 

------------------
VG
Stefan

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

S-TE-FAN
Mitglied
Konstrukteur


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

Beiträge: 20
Registriert: 23.04.2015

Inventor Pro
SolidWorks
Siemens NX 1953
ANSYS Workbench 19.0
System:
Win 10, 64-Bit
i5-9600KFU@3,7GHz
32 GB RAM

erstellt am: 10. Jun. 2021 16: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 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.UF

Module 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 >>)

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