Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  NX Programmierung
  NxOpen Renderzeit festlegen

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:  NxOpen Renderzeit festlegen (458 mal gelesen)
Eonwe
Mitglied



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

Beiträge: 55
Registriert: 10.11.2014

NX 12 mit ECTR

erstellt am: 09. Dez. 2021 15:28    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 möchte im RayTraced Studio Bilder von Baugruppen erstellen und habe dazu ein Programm geschrieben um möglichst viel der Aufbereitung zu automatisieren. Die dll öffnet einen selbst kreierten UIBlock der den Benutzer durch ein paar Eingaben führt und schließlich den Knopf zum "Bild rendern" drücken lässt.

Jetzt möchte ich gerne die Renderzeit über den Programmcode steuern. Die aktuelle Sub sieht wie folgt aus:

Code:
    Public Async Sub Render_Picture(st_folder As String, st_picturename As String)
        Dim NXStudio As Display.RayTracedStudioBuilder = workPart.Views.CreateRayTracedStudioBuilder()
        NXStudio.RayTracedEditor()

        Dim NXStudioEditor As Display.IRayPlusStudioEditorBuilder
        NXStudioEditor = workPart.Views.CreateIrayPlusStudioEditorBuilder()
        NXStudioEditor.IRayPlusStudioStaticImageUnits = Display.RayTracedStudioEditorBuilder.RayTracedStudioStaticImageUnitsType.Pixels
        NXStudioEditor.IRayPlusStudioStaticImageSize = Display.IRayPlusStudioEditorBuilder.IRayPlusStudioStaticImageSizeType.UserDefined
        NXStudioEditor.IRayPlusStudioStaticImagePixelHeight = 3000
        NXStudioEditor.IRayPlusStudioStaticImagePixelWidth = 4000
        NXStudioEditor.IRayPlusStudioStaticImageFileFormat = Display.IRayPlusStudioEditorBuilder.IRayPlusStudioStaticImageFileFormatType.Tif

        NXStudioEditor.Commit()


        NXStudio.Brightness = 1.0
        NXStudio.Commit()

        NXStudio.StartRayTracedDisplay()

        Dim t1 = Tasks.Task.Factory.StartNew(Sub() render_picture_start(NXStudio))
        Dim t2 = Tasks.Task.Factory.StartNew(Sub() Thread.Sleep(60000))

        Dim theTasks() As Tasks.Task = {t1, t2}
        Tasks.Task.WaitAll(theTasks)


        render_Picture_stop(NXStudio)


        NXStudio.RayTracedRenderingSave()
        Dim saveImageFileBrowserBuilder1 As Display.SaveImageFileBrowserBuilder = workPart.Views.CreateSaveImageFileBrowserBuilder()

        saveImageFileBrowserBuilder1.FileFormat = Display.SaveImageFileBrowserBuilder.FileFormats.Tif
        saveImageFileBrowserBuilder1.NativeImageFileBrowser = st_folder & st_picturename & "_unc.tif"
        saveImageFileBrowserBuilder1.UseTransparentBackground = True

        saveImageFileBrowserBuilder1.Commit()
        saveImageFileBrowserBuilder1.Destroy()
        NXStudio.Destroy()

    End Sub

    Public Sub render_Picture_stop(NXStudio As Display.RayTracedStudioBuilder)
        NXStudio.StopRayTracedDisplay()
    End Sub

    Public Async Sub render_picture_start(NXStudio As Display.RayTracedStudioBuilder)
        NXStudio.UpdateRayTracedDisplay()
        NXStudio.RayTracedRenderingStart()
    End Sub


Es gelingt mir nicht zwischen RayTracedRenderingStart() und RayTracedRenderingStop() NX zum rendern zu bewegen. Solange Code ausgeführt wird steht das Raytrace-Fenster still. Der dargestellte Versuch soll einen Timer in einem weiteren Thread öffnen und auf den Abschluss warten. Das Programm wartet auch, gerendert wird aber nix. Das kann aber auch an meinen Programmierkenntnissen liegen und muss nicht unbedingt mit NX zusammen hängen.

Die einzige Möglichkeit die ich bisher gefunden habe, ist es eine Messagebox anzuzeigen und bei Erreichen einer festgelegten Anzahl an Iterationen auf OK zu klicken. Das ist für die Automatisierung aber nix.

Was gibt es sonst noch für Möglichkeiten die Codeausführung so zu unterbrechen, dass NX nebenher zum rendern kommt?

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

mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 10. Dez. 2021 13:38    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 Eonwe 10 Unities + Antwort hilfreich

Hallo Eonwe,

wenn's darum geht, einen zeitlichen Ablauf zu steuern, können Threads und sog. ResetEvents helfen. NX hat da allerdings seine Eigenheiten, um nicht zu sagen, es sei stur. Nur der Versuch macht kluch. Ggfs. hilft auch eine Remote-Session, da läuft NX weiter, solange kein externes Kommando ausgeführt wird.

Aber: Was willst du damit bezwecken, warum das Ganze ? Um zu warten, bis das Bild fertig ist und es dann weiter zu bearbeiten ?

Gruß, Michael


------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit selt'ner als das "Bitte, Bitte".

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

Eonwe
Mitglied



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

Beiträge: 55
Registriert: 10.11.2014

NX 12 mit ECTR

erstellt am: 10. Dez. 2021 14:28    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 Michael,

vielen Dank erstmal für den Input. Ich bin gerade dabei mir das Thema Multithreading zu erarbeiten, bin da noch absoluter Laie. Und gefühlt verhält sich NX nicht immer so wie es sollte, oder einfach nicht so wie ich es erwartet hätte.

Genau richtig erkannt, ich will warten bis das Bild fertig gerendert ist, bzw. bis ausreichend Iterationen stattgefunden haben. Die exakte Dauer muss noch ermittelt werden, vermutlich irgendwo im Bereich von 20-60 Minuten, hängt auch von der Rechenleistung und den Anwendungen im Hintergrund etwas ab. Leider gibt es eine Methode die Iterationen bzw. die Bildqualität abzufragen erst ab NX1980.

Danach wird das Bild abgespeichert und weiter bearbeitet zum Beispiel mit Exiftools. Langfristig soll das ganze Remote gerendert werden und möglichst als Stapelverarbeitung stattfinden. Bis dahin ist es aber noch ein weiter Weg.

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

Eonwe
Mitglied



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

Beiträge: 55
Registriert: 10.11.2014

NX 12 mit ECTR

erstellt am: 10. Dez. 2021 17: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

ich hab's gelöst. Es ist nicht übermäßig schön, aber es funktioniert. Ich öffne im Mainthread eine Messagebox, die die weitere Codeausführung verhindert. In einem vorher gestarteten 2. Thread warte ich die gewünschte Zeit und hole dann die MsgBox in den Vordergrund um sie mit SendKeys.Sendwait zu schließen. Dann geht's im Mainthread weiter. Die nötigen Funktionen dazu stehen in der Windows API user32.dll.

Danke nochmal Michael für den Denkanstoß in die richtige Richtung.

Code:
    Public Sub Render_Picture(st_folder As String, st_picturename As String)
Dim NXStudio As Display.RayTracedStudioBuilder = workPart.Views.CreateRayTracedStudioBuilder()
        NXStudio.RayTracedEditor()

        Dim NXStudioEditor As Display.IRayPlusStudioEditorBuilder = workPart.Views.CreateIrayPlusStudioEditorBuilder()
        NXStudioEditor.IRayPlusStudioStaticImageUnits = Display.RayTracedStudioEditorBuilder.RayTracedStudioStaticImageUnitsType.Pixels
        NXStudioEditor.IRayPlusStudioStaticImageSize = Display.IRayPlusStudioEditorBuilder.IRayPlusStudioStaticImageSizeType.UserDefined
        NXStudioEditor.IRayPlusStudioStaticImagePixelHeight = 3000
        NXStudioEditor.IRayPlusStudioStaticImagePixelWidth = 4000
        NXStudioEditor.IRayPlusStudioStaticImageFileFormat = Display.IRayPlusStudioEditorBuilder.IRayPlusStudioStaticImageFileFormatType.Tif

        NXStudioEditor.Commit()

        NXStudio.Brightness = 1.0
        NXStudio.Commit()

        NXStudio.StartRayTracedDisplay()
        NXStudio.UpdateRayTracedDisplay()
        NXStudio.RayTracedRenderingStart()

        Dim theThread As New Thread(AddressOf threaded_timer)
        theThread.IsBackground = True
        theThread.Start()

        theUI.NXMessageBox.Show("Render in Progress", NXMessageBox.DialogType.Information, "Bild wird gerendert, dieses Fenster schließt automatisch")
        NXStudio.StopRayTracedDisplay()


        NXStudio.RayTracedRenderingSave()
        Dim saveImageFileBrowserBuilder1 As Display.SaveImageFileBrowserBuilder = workPart.Views.CreateSaveImageFileBrowserBuilder()

        saveImageFileBrowserBuilder1.FileFormat = Display.SaveImageFileBrowserBuilder.FileFormats.Tif
        saveImageFileBrowserBuilder1.NativeImageFileBrowser = st_folder & st_picturename & "_unc.tif"
        saveImageFileBrowserBuilder1.UseTransparentBackground = True

        saveImageFileBrowserBuilder1.Commit()
        saveImageFileBrowserBuilder1.Destroy()

        NXStudio.Destroy()

    End Sub

    Public Sub threaded_timer()
        Thread.Sleep(60000)
        Dim theMsgBox As IntPtr = FindWindow(vbNullString, "Render in Progress")
        SetForegroundWindow(theMsgBox)
        Windows.Forms.SendKeys.SendWait("{TAB}")
        Windows.Forms.SendKeys.SendWait("{enter}")
    End Sub

    <Runtime.InteropServices.DllImport("user32.dll", SetLastError:=True, CharSet:=Runtime.InteropServices.CharSet.Auto)>
    Private Shared Function FindWindow(
    ByVal lpClassName As String,
    ByVal lpWindowName As String) As IntPtr
    End Function

    <Runtime.InteropServices.DllImport("user32.dll")>
    Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As <Runtime.InteropServices.MarshalAs(Runtime.InteropServices.UnmanagedType.Bool)> Boolean
    End Function


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



Vermessungstechniker:in im Innendienst (m/w/d)
Bei STRABAG bauen rund 86.000 Menschen an 2.400 Standorten weltweit am Fortschritt. Einzigartigkeit und individuelle Stärken kennzeichnen dabei nicht nur unsere Projekte, sondern auch jede:n Einzelne:n von uns. Ob im Hoch- und Ingenieurbau, Straßen- und Tiefbau, Brücken- und Tunnelbau, in der Projektentwicklung, Baustoffproduktion oder im Gebäudemanagement ? wir denken Bauen weiter, um der innovativste und nachhaltigste Bautechnologiekonzern Europas zu werden....
Anzeige ansehenTechnischer Zeichner, Bauzeichner
mseufert
Moderator
Freiberuflicher CAD/CAM Ingenieur


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

Beiträge: 2624
Registriert: 18.10.2005

HP Z420
WIN7 64 Win 10
UG NX6-1980
3D Printer Prusa MK2 S

erstellt am: 11. Dez. 2021 14:44    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 Eonwe 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Eonwe:
Danke nochmal Michael für den Denkanstoß in die richtige Richtung.

Keine Ursache   

------------------
Ein Mensch wird laut, wenn er was will;
wenn er's erst hat, dann wird er still;
Das "Danke" ist, nach alter Sitte,
Weit selt'ner als das "Bitte, Bitte".

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