Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  Kombinieren von zwei NX-Journalen

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
Autor Thema:   Kombinieren von zwei NX-Journalen (587 mal gelesen)
CAD1323
Mitglied


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

Beiträge: 2
Registriert: 22.05.2018

erstellt am: 22. Mai. 2018 12: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

Hallo,

im Zuge einer Studienarbeit für die Uni muss ich mithilfe von NX-Journal einen Code schreiben, mit dem ich sowohl eine Operation durchführen als auch diese abspeichern und anschließend als STL-Datei exportieren kann. Nun habe ich sowohl den Code für die Operation als auch für das exportieren als STL, jedoch haben meine Versuche einen funktionierenden Code aus den beiden zu machen nicht funktioniert und eine gewisse Menge an Verzweiflung hinterlassen. Daher wollte ich fragen ob mir jemand helfen kann wie ich es schaffe die beiden zu kombinieren.

Die beiden Codes sind wie folgt:

Code 1:

Option Strict Off
Imports System
Imports System.Collections.Generic
Imports NXOpen
Imports NXOpen.UF

Module NXJournal
Sub Main (ByVal args() As String)

        Dim theSession As Session = Session.GetSession()
        Dim workPart As NXOpen.Part = theSession.Parts.Work
        Dim theUfSession As UFSession = UFSession.GetUFSession()
        Dim lw As ListingWindow = theSession.ListingWindow
Dim displayPart As NXOpen.Part = theSession.Parts.Display

Dim markId1 As NXOpen.Session.UndoMarkId
markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Unsuppress Feature")

Dim features1(0) As NXOpen.Features.Feature
Dim extrude1 As NXOpen.Features.Extrude = CType(workPart.Features.FindObject("EXTRUDE(43)"), NXOpen.Features.Extrude)

features1(0) = extrude1
Dim errorFeatures1() As NXOpen.Features.Feature
errorFeatures1 = workPart.Features.UnsuppressFeatures(features1)

' ----------------------------------------------
'  Menü: Datei->Speichern unter...
' ----------------------------------------------
Dim partSaveStatus1 As NXOpen.PartSaveStatus
partSaveStatus1 = workPart.SaveAs("U:\Studienarbeit\Beckers\Test\Keil\Oberteil_Keil")

partSaveStatus1.Dispose()
' ----------------------------------------------
'  Menü: Werkzeuge->Journal->Stopp
' ----------------------------------------------

End Sub
End Module

Code 2:

Option Strict Off
Imports System
Imports System.Collections.Generic
Imports NXOpen
Imports NXOpen.UF

Module Module1

    Dim theSession As Session = Session.GetSession()
    Dim theUfSession As UFSession = UFSession.GetUFSession()
    Dim lw As ListingWindow = theSession.ListingWindow

    Sub Main()

        If IsNothing(theSession.Parts.BaseWork) Then
            'active part required
            Return
        End If

        Dim workPart As Part = theSession.Parts.Work
        lw.Open()

        Const undoMarkName As String = "export solids to STL"
        Dim markId1 As Session.UndoMarkId
        markId1 = theSession.SetUndoMark(Session.MarkVisibility.Invisible, undoMarkName)

        Dim theSolids As New List(Of Body)

        'collect the solid bodies in the work part
        For Each temp As Body In workPart.Bodies
            If temp.IsSolidBody Then
                theSolids.Add(temp)
            End If
        Next

        Try
            ExportSTL(workPart.FullPath, theSolids, 0.003, 0.003)
        Catch ex As NXException
            lw.WriteLine("NX Error: " & ex.Message)
        Catch ex As Exception
            lw.WriteLine("Error: " & ex.Message)
        End Try

        lw.WriteLine("NX Export STl ready")

        lw.Close()

    End Sub

    Sub ExportSTL(ByVal FileName As String, ByVal theObjects As List(Of Body), ByVal triangleTolerance As Double, ByVal adjacencyTolerance As Double)

        Dim NumErrors As Integer
        Dim FileHandle As IntPtr
        Dim InfoError() As UFStd.StlError
        Dim Header, FileBaseName As String
        Dim numNegated As Integer
        'Dim Negated() As Tag

        'Negated = Nothing
        numNegated = 0
        InfoError = Nothing

        For Each temp As Body In theObjects

          If temp.IsSolidBody Then
         
            numNegated = numNegated + 1

            FileName = IO.Path.ChangeExtension(FileName, numNegated.ToString & ".stl")

            FileBaseName = IO.Path.GetFileName(FileName)
            Header = "Header: " & FileBaseName

            theUfSession.Std.OpenBinaryStlFile(FileName, False, Header, FileHandle)

            theUfSession.Ui.SetPrompt("Creating file ... " & FileBaseName & " ...")

            lw.WriteLine("Creating file ... " & FileBaseName & " ...")

         
            theUfSession.Std.PutSolidInStlFile(FileHandle, Tag.Null, temp.Tag, 0.0, 0.0, triangleTolerance, NumErrors, InfoError)
            lw.WriteLine("Creating file ... " & FileName & " ..." & numNegated.ToString)
            theUfSession.Std.CloseStlFile(FileHandle)

          End If

        Next

        'theUfSession.Std.CloseStlFile(FileHandle)

        theUfSession.Ui.SetStatus("File ... " & FileBaseName & " generated ...")

        lw.WriteLine("File ... " & FileBaseName & " generated ...")

    End Sub

    Sub ExportSTL1(ByVal FileName As String, ByVal theObjects As List(Of Body), ByVal triangleTolerance As Double, ByVal adjacencyTolerance As Double)

        Dim NumErrors As Integer
        Dim FileHandle As IntPtr
        Dim InfoError() As UFStd.StlError
        Dim Header, FileBaseName As String
        Dim numNegated As Integer
        'Dim Negated() As Tag

        'Negated = Nothing
        numNegated = 0
        InfoError = Nothing

        FileName = IO.Path.ChangeExtension(FileName, ".stl")

        FileBaseName = IO.Path.GetFileName(FileName)
        Header = "Header: " & FileBaseName

        theUfSession.Std.OpenBinaryStlFile(FileName, False, Header, FileHandle)

        theUfSession.Ui.SetPrompt("Creating file ... " & FileBaseName & " ...")

        lw.WriteLine("Creating file ... " & FileBaseName & " ...")

        For Each temp As Body In theObjects
            If temp.IsSolidBody Then
                numNegated = numNegated + 1
                theUfSession.Std.PutSolidInStlFile(FileHandle, Tag.Null, temp.Tag, 0.0, 0.0, triangleTolerance, NumErrors, InfoError)
                lw.WriteLine("Creating file ... " & FileName & " ..." & numNegated.ToString)
            End If
        Next

        theUfSession.Std.CloseStlFile(FileHandle)

        theUfSession.Ui.SetStatus("File ... " & FileBaseName & " generated ...")

      lw.WriteLine("File ... " & FileBaseName & " generated ...")

    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        'Unloads the image immediately after execution within NX
        GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately

    End Function

End Module

Würde mich freuen wenn mir jemand dabei helfen kann aus den beiden Codes einen zu machen. 

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

matthias-p
Moderator
Konstruktion / Anwenderbetreuung


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

Beiträge: 482
Registriert: 09.06.2006

Teamcenter 9.1 / NX 8
Windows 7 64-bit

erstellt am: 22. Mai. 2018 12: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 CAD1323 10 Unities + Antwort hilfreich

Mit bitte mach mal, wir das hier meistens nichts.

Was hast du den schon probiert?
Was sind deine Schwierigkeiten?
Wo kommst du nicht weiter?
Was für eine Fehlermeldung bekommst du?

Es wird hier keiner deine Studienarbeit machen, helfen bei Fehlern tun wir gerne...

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

CAD1323
Mitglied


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

Beiträge: 2
Registriert: 22.05.2018

erstellt am: 22. Mai. 2018 13:53    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

Sorry sollte nicht nach bitte mach mal klingen, möchte ich auch nicht...

Versucht habe ich schon den STL-Code nach dem Operations-Code einfach einzufügen, also mit zwei Modulen, da kam folgende Fehlermeldung:
NXOpen.NXException: Datei bereits vorhanden
  bei NXOpen.BasePart.SaveAs(String newFileName)
  bei NXJournal.Main(String[]args) in C:...\journal.vb:Zeile 33

Danach das ganze als weiteren SUB integrieren wobei die Fehlermeldung:
SCRIPT_INVOKE
System.Reflection.AmbiguousMatchException: Mehrdeutige *bereinstimmung gefunden.
  bei System.RuntimeType.GetMathodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, parameterModifier[] modifiers)
  bei System.Type.GetMethod(String name)
  bei NXOpen.Utilities.ScriptHost.Run(String[] args, Boolean withUI)

Dann war meine Überlegung, dass es an der mehrfachen Stehens von:
Dim theSession As Session = Session.GetSession()
Dim theUfSession As UFSession = UFSession.GetUFSession()
Dim lw As ListingWindow = theSession.ListingWindow
innerhalb des Codes liegt, was aber beim einmaligem Voranstellen den gleichen Effekt bewirkte wie der Versuch davor

Nächste Überlegung bestand darin, dass der ByVal in beiden Sub Main identisch sein muss, dabei kam die Fehlermeldung, dass Public Sub Main(args() As String) mehrere Definitionen mit identischen Signaturen hat

Da mir Gedanken kam, dass es nicht zweimal Sub Main vorhanden sein darf, habe ich das Sub Main von dem Export-Code unbenannt, dabei kam wieder die Fehlermeldung vom ersten Mal

Nach genauem draufschauen fiel mir auf dass zwei Dims mit der gleichen Aussage innerhalb der Codes vorhanden ist, weshalb ich die Dim des Operationscodes an den des STL-Codes angepasst habe. Hierbei kam als Fehlermeldung, dass workPart im STL-Code nicht deklariert ist und auf das Objekt aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden kann.

Um nochmals anders an die Sache heranzugehen, habe ich anschließend die einzelenen Journal allein laufen gelassen. Womit sich das Problem mit der Zeile 33 lösen konnte, da die Datei schon vorhanden war. Dieses Problem löste sich also.

Nachdem dies also gelöst war, veruschte ich meinen Schritt des Umbenennen des zweiten Sub Main() vom STL-Code. Nun funktionierte das ausführen der Operation und somit das Abspeichern als Teil. Jedoch entstand im Zielordner keine STL-Datei, weshalb ich innerhalb des Computer eine Suche laufen ließ. Dabei aber keine STL-Datei fand. Somit hat sich keine STL-Datei exportiert.

Danach hab ich nochmals mir den STL-Code angeschaut, wobei mir die Sub Main() nur als Initiator und Zusammenzähler, der Volumenkörper in der aktuellen Part-Datei vorkam, weshalb ich das ganze ohne diese habe Laufen lassen mit dem gleichen Ergebnis.

Aus diesem Grund bin ich nochmals in meinen STL-Code gegangen und habe mir diesen angeschaut in dem ich die Sub Main() im Code gelassen habe, aber den Text gelöscht habe. Hierbei lief der Code ebenfalls durch jedoch entstand keine STL-Datei. Womit meine Einschätzung falsch war.

Das heißt ich habe wieder das Problem, dass ich das Sub Main() benötige aber wieder die Meldung
SCRIPT_INVOKE
System.Reflection.AmbiguousMatchException: Mehrdeutige *bereinstimmung gefunden.
  bei System.RuntimeType.GetMathodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, parameterModifier[] modifiers)
  bei System.Type.GetMethod(String name)
  bei NXOpen.Utilities.ScriptHost.Run(String[] args, Boolean withUI)
und bei Umbennung keine STL-Datei. Auch meine Idee das Sub Main() des STL-Codes als Sub Main( As String) funktionierte nicht, da mir dann angezeigt wird, dass das Schlüsselwort kein gültiger Bezeichner ist.

Nachdem mir an dieser Stelle nichts mehr einfiel versuchte ich das andere Sub Main() zu ändern indem ich das "ByVal args() As String" rauslösche funktionierte wie ich mir gedacht hatte nicht und führte zu der Fehlermeldung, dass Sub Main() mehrfach deklariert mit unterschiedlicher Bezeichnung ist.

Deshalb ist mein Problem (neben den vorhanden sein von Dateien mit dem gleichen Namen...), dass das Journal durchläuft und im Operationsteil funktioniert aber keine STL-Datei exportiert.

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

Poseida
Mitglied
Maschinebautechniker, Konstrukteur


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

Beiträge: 94
Registriert: 15.12.2010

Moldex 3D R13
NX 10 TC 11

erstellt am: 23. Mai. 2018 06: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 CAD1323 10 Unities + Antwort hilfreich

Du hast ja doch schon viel probiert  . Hast du eine Entwicklungsumgebung wie z.B. Visual Studio? Damit wird die Sache dann doch etwas einfacher. Da werden dir Syntaxfehler und Mehrfachdeklarationen etc. angezeigt.

------------------
Benjamin

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